Visiones sobre el mundo de la
programación
José Manuel Ortega Candel
jmoc25@gmail.com
2
1.Introducción
En este artículo voy a tratar la profesión de programador para intentar responder a las
preguntas que tod...
3
2. Claves para ser un buen programador
 Rodearse de buenos programadores, tanto en la formación como en el trabajo
diar...
4
4. Perfiles de programador
Dentro del ámbito de la programación podemos encontrar diferentes perfiles
dependiendo del en...
5
 Un lenguaje de alto nivel que normalmente usarás para trabajar (C++, Java,
Objective-C, Javascript, PHP, Python). Uno ...
6
 6.5. Resolución de problemas
Hoy en día es prácticamente imposible saberse de memoria un lenguaje al
100%, de forma qu...
7
 7.6. Metodologías ágiles. Los desarrolladores que tengan experiencia en trabajar
en equipo y en ambientes ágiles son m...
8
8. J2EE: Java en la empresa
Las arquitecturas basadas en Java han tenido una gran evolución en el dominio
empresarial en...
9
 8.2.Metodologías ágiles en J2EE
El uso de metodologías ágiles como Scrum, XP se ha extendido en entornos
Java/J2EE en ...
10
La parte de front-end muchas veces resulta ser la parte fundamental de un portal,
pero en la empresa, en muchas ocasion...
11
Para sentar las bases para ser un buen programador es fundamental aprender sobre
patrones de diseño y buenas prácticas ...
Próxima SlideShare
Cargando en…5
×

Programmer visions

401 visualizaciones

Publicado el

Programmer visions

Publicado en: Tecnología
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
401
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
2
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Programmer visions

  1. 1. Visiones sobre el mundo de la programación José Manuel Ortega Candel jmoc25@gmail.com
  2. 2. 2 1.Introducción En este artículo voy a tratar la profesión de programador para intentar responder a las preguntas que toda persona que se quiera introducir en este mundo debería hacerse en algún momento. También comentaré los diferentes perfiles que podemos encontrar, así como las cualidades que debe tener todo aquel que quiera desarrollar una carrera en un campo tan amplio como es la programación. Comentaré aquellas metodologías que han surgido en los últimos años para el trabajo en equipo y explicaré el concepto de framework, en particular en aquellos aplicables en entornos Java/J2EE. Por último, mencionaré los libros técnicos que todo programador debería tener como referencia en su trabajo diario. En ocasiones, se ha comentado que ser programador es una profesión vocacional para la cual es necesario tener un talento especial y, como los lectores saben, es una profesión donde la intuición, la imaginación, el pensamiento lógico y el orden juegan un papel fundamental. También es cierto que hoy en día cada vez existen más herramientas para facilitar el trabajo a los empiezan, y, gracias a la evolución en ingeniería del software, algunas funciones de programación han sido automatizadas. De esta forma, los programadores han ido asumiendo algunas de las responsabilidades llevadas a cabo normalmente por los ingenieros de software. Otra de las características a destacar, es que en esta profesión hay que realizar un esfuerzo extra para mantenerse actualizado, y la formación es casi continua en la búsqueda constante de la mejora, además, es tan importante formarse y conocer varios de lenguajes de programación (alto y medio-bajo nivel), como conocer las metodologías para trabajar en equipo. En primer lugar, me gustaría comentar las claves y el conjunto de buenas de prácticas que todo programador debe tener presente en su trabajo diario.
  3. 3. 3 2. Claves para ser un buen programador  Rodearse de buenos programadores, tanto en la formación como en el trabajo diario.  Interesarte por la programación y estar constantemente actualizado.  Hablar con otros programadores y obtener feedback sobre cómo optimizar el código que estás desarrollando.  Trata de programar con frecuencia, diariamente si es posible.  Trabajar en proyectos con otros programadores.  Al escribir código, intentar cumplir con los estándares de cada lenguaje.  Adquirir buenas prácticas y conocimientos sobre metodologías y patrones de diseño.  Dedicar muchas horas y tener una gran disciplina y compromiso con tu trabajo.  Leer libros técnicos sobre programación que te ayuden a reciclarte y a conocer nuevos lenguajes y metodologías de desarrollo.  Reutilizar todo el código que sea posible. Esto es lo que se conoce como “No reinventar la rueda”.  A la hora de escribir código hacerlo de forma modular y escalable. 3. Buenas prácticas de programación  Conocer los fundamentos de la Ingeniería del Software.  Saber manejarse con estructuras y tipos abstractos de datos (listas, pilas, colas, árboles, hashes).  Conocer los principios básicos de la Algoritmia.  Conocer patrones de diseño y aplicarlos a la resolución de problemas.
  4. 4. 4 4. Perfiles de programador Dentro del ámbito de la programación podemos encontrar diferentes perfiles dependiendo del entorno para el cual vaya destinada la aplicación (dispositivos móviles, sitios web, procesos de una base de datos, aplicaciones de escritorio, aplicaciones dentro de servidores, mainframes). Debido a que las tendencias actuales del mercado son muy cambiantes, esto exige que los programadores tengan la capacidad de aprender nuevos lenguajes de programación. Es por eso hay que tener en cuenta todos los posibles perfiles junto con los lenguajes más representativos con los que se relaciona:  Programador Entorno Web: Aquí hay que diferenciar la parte relacionada con los aspectos visuales de la parte que ejecuta la lógica de negocio. Front End - HTML,XML, JavaScript Back End - Ruby on Rails/Python/Java/C#/PHP/Asp .Net  Programador Entorno Host/ MainFrames: Cobol, Perl, C/C++,Shell Scripts  Programador Entorno móvil: Android (Java), iOS (Objective-C)  Aplicaciones de escritorio: Visual Basic .Net, Delphi, Java  Base de datos: PL/SQL, Transact SQL 5. Lenguajes No importa la cantidad de lenguajes que domine un programador, lo importante es conocer los distintos tipos, así como los paradigmas y metodologías que los envuelve. Cada uno de estos lenguajes tienen sus particularidades, pero todos pueden clasificarse en pocas familias de lenguajes de programación (procedimentales, orientados a objetos, funcionales, scripting, orientados a etiquetas).De entre todos los paradigmas, el más importante es el de orientación a objetos, el cual es fundamental conocer hoy en día para el desarrollo tanto de aplicaciones web como de escritorio. En mi opinión, hay que conocer como mínimo uno de cada tipo de paradigma, ya que en cada uno se ofrecen perspectivas diferentes para la resolución de problemas.  Un lenguaje de “scripting” (Ruby, Perl, Bash ShellScript) que te permita automatizar tareas y desarrollar prototipos rápidos.  Un lenguaje de “medio/bajo nivel” (C) que te permita conocer cómo se maneja la memoria, acceder a hardware directamente y que te permite entender cómo funcionan las optimizaciones que luego se aplican en lenguajes de alto nivel.
  5. 5. 5  Un lenguaje de alto nivel que normalmente usarás para trabajar (C++, Java, Objective-C, Javascript, PHP, Python). Uno de los lenguajes que más está destacando hoy en día es Python, que es un lenguaje de script y bastante rápido si lo comparamos con otros más pesados como Java, con el cual se puede programar empleando programación lineal, estructurada y orientada a objetos tanto aplicaciones de escritorio como aplicaciones web. 6. Las cualidades de un buen programador Más allá de controlar más o menos lenguajes, lo que hace un programador se diferencie del resto es su capacidad para trabajar en equipo e investigar en nuevas metodologías que pueda aplicar en su trabajo diario. Entre estas cualidades destacan:  6.1. Capacidad para trabajar en equipo Todo programador debe ser capaz de trabajar de forma conjunta con otras personas para el desarrollo de un proyecto en los términos de calidad, eficiencia y plazos establecidos por el cliente. La programación, en particular, es un campo en el que la comunicación con otras personas ha de ser fluída, abierta y efectiva si se quiere obtener un buen resultado. El aspecto más importante es la división de las tareas de forma equitativa y acorde a las capacidades y competencias de cada miembro del equipo.  6.2. Gestión de proyectos Sea cual sea la dificultad del proyecto, el líder deberá hacerse cargo del proyecto y asignar el trabajo. El gestor de proyectos supervisará la planificación y el análisis y se hará cargo del diseño del sistema, su programación y su implementación. Un buen programador es el que es capaz de ir aprendiendo de la gente que le rodea (analista, jefe de equipo) y a medida que va adquiriendo experiencia tener responsabilidades cada vez mayores en los proyectos en los que trabaje.  6.3. Idiomas inglés La mayoría de documentación y libros están en inglés, por lo que es fundamental conocerlo bien y saber manejarse con los aspectos técnicos básicos de un lenguaje tales como la creación de variables, clases, objetos, funciones.  6.4. Competencia profesional Todo programador ha de ser competente en una gran variedad de lenguajes de programación, o al menos tener interés por aprender otros lenguajes además de los que ya sabe. Formar un equipo de programadores competentes en diversas áreas asegurará el éxito de cualquier proyecto.
  6. 6. 6  6.5. Resolución de problemas Hoy en día es prácticamente imposible saberse de memoria un lenguaje al 100%, de forma que la tendencia es conocer la sintaxis que se emplea. Lo más importante no es saber programar en un lenguaje y saberse el API de memoria, sino estar preparado para resolver un problema en el lenguaje que en ese momento se nos pida profesionalmente. 7. Habilidades más importantes para los programadores del futuro Además de tener habilidades analíticas y de resolución de problemas, los programadores se verán obligados a adquirir una serie de conocimientos y destrezas en función del campo en el cual desarrolla su carrera profesional.  7.1. Conocer al menos uno de los "3 Grandes" (Java, .NET, PHP). Hoy en día es imprescindible conocer al menos uno de los 3 grandes sistemas de desarrollo: Java, .NET o PHP. A medida que los proyectos crecen y se van añadiendo funcionalidades, vamos a necesitar conocer los frameworks y librerías asociadas a cada sistema con profundidad.  7.2. Aplicaciones RIA - Rich Internet Applications. La tendencia en RIA es conocer el uso de herramientas que faciliten la creación de aplicaciones web como si fuesen de escritorio gracias al uso de tecnologías como HTML5, JavaFX, SilverLight, así como las mejoras que se están desarrollando en los motores JavaScript de los navegadores.  7.3. Servicios web. REST, SOAP, JSON son términos con los cuáles un programador tendrá que manejarse cuando se introduzca en el desarrollo de servicios web.  7.4. Habilidades de comunicación. Cada vez más, los programadores están participando en las reuniones que no son de desarrollo , pero sí fundamentales para obtener el feedback necesario para que nuestro trabajo cumpla las necesidades del cliente. Para ello, es necesario mejorar las habilidades de comunicación con nuestros analistas y jefes de proyectos.  7.5. Conocer nuevos lenguajes. Lenguajes como Ruby, Python o Groovy todavía no están entre los grandes, pero cada vez son más populares gracias al uso de frameworks como SilverLight y Grails.
  7. 7. 7  7.6. Metodologías ágiles. Los desarrolladores que tengan experiencia en trabajar en equipo y en ambientes ágiles son muy demandados y van a serlo más en los próximos años. El uso de metodologías ágiles como Scrum, Kanban, Extreme Programming(XP),Test Driven Development (TDD),Lean-Agile, se están utilizando cada vez más en los proyectos.  7.7. Desarrollo móvil. Existen varios enfoques en el desarrollo móvil: aplicaciones web diseñadas para funcionar en dispositivos móviles, y aplicaciones que se ejecutan directamente en los dispositivos y que han sido programadas de forma nativa.  7.8. Conocimientos de Cloud Computing. Términos como SaaS (Software as a Service) y aplicaciones en la nube son cada vez más populares y será necesario conocer el funcionamiento de estos sistemas.  7.9. Proyectos Open Source. Otros de los aspectos que más ha crecido en los últimos años es la posibilidad de colaborar en proyectos Open Source. Algunas de las tareas a destacar son: 1. Traducir/Documentar, donde con pocos conocimientos técnicos puedes ayudar a traducir las interfaces de usuario, pantallas, botones, menús o comentarios en el código fuente. Otra posibilidad es la realización o traducción de la documentación, los manuales de ayuda o el sitio web del proyecto. 2. Reporte de errores, donde se requiere un mayor conocimiento funcional de la aplicación ya que hay que determinar las condiciones bajo las cuáles se produce el error. 3. Beta-tester, donde los programadores determinan cómo se va a comportar el programa bajo distintas condiciones y casuísticas. Su trabajo es probar los programas exhaustivamente e informar todo lo que van encontrando en el camino. 4. Mejorar un sitio web, si controlas alguno de los gestores de contenidos más usados del mercado como Joomla, WordPress o Drupal es una excelente alternativa para terminar alguna sección de una página que esté incompleta, corregir errores o simplemente colaborar con la publicación de actualizaciones. En este apartado también cabría incluir la posibilidad de mejorar el posicionamiento del sitio haciendo tareas de SEO.
  8. 8. 8 8. J2EE: Java en la empresa Las arquitecturas basadas en Java han tenido una gran evolución en el dominio empresarial en los últimos años. Las razones principales de su éxito en la empresa han sido:  Programación independiente del Sistema Operativo  Gran variedad de librerías existentes  Rapidez de desarrollo y en el aprendizaje  Fiabilidad y escalabilidad Una de las mayores ventajas que aportan las arquitecturas basadas en Java es la flexibilidad con respecto al desarrollo de las aplicaciones, en el sentido de que permite comenzar el desarrollo de una aplicación en un entorno windows, y luego realizar la subida a entornos productivos en servidores Unix/Linux, con las garantías de que la aplicación se va a comportar de forma muy similar en todos ellos.  8.1. Herramientas y frameworks J2EE El número de librerías que se han desarrollado para Java no lo tiene ningún otro lenguaje a día de hoy. Existen multitud de librerías que nos permiten simplificar muchas de las tareas que necesitamos realizar. Por ejemplo, la librería log4java nos simplifica las tareas de generación de ficheros de logs. Entre las herramientas que se emplean en proyectos Java/J2EE podemos destacar:  Entornos de desarrollo: Eclipse, NetBeans, IBM WebSphere  Servidores J2EE:Tomcat,GlassFish,JBoss,WebLogic  Control de versiones/repositorios de código: CVS, SVN, Git  Gestión de proyectos :Jira, Quark, Confluence, Jenkins, Maven, Junit  Frameworks: Apache Struts, Spring, Java Server Faces, Enterprise Java Beans, Java Persistence API, Hibernate Los frameworks como herramientas de trabajo ofrecen un desarrollo ágil en el sentido que te permiten abstraerte de funcionamientos a bajo nivel y poder centrarte en el nivel funcional de la aplicación. Uno de los frameworks más extendidos en el desarrollo de aplicaciones J2EE es el de Spring, que cubre gran cantidad de posibilidades como configuración en ficheros XML, facilidades para la creación de workflows (flujos de trabajo) y programación orientada a aspectos (AOP).
  9. 9. 9  8.2.Metodologías ágiles en J2EE El uso de metodologías ágiles como Scrum, XP se ha extendido en entornos Java/J2EE en los últimos años, por ser las más adecuadas en entornos donde los requerimientos de negocio son desconocidos o cambiantes. Otra de las metodologías destacadas que también se utiliza mucho en entornos donde hay cambios de forma contínua de requisitos es TDD (Test Driven Development), donde el objetivo es desarrollar las pruebas a partir de los requisitos y posteriormente se realiza el refactoring que permita pasar las pruebas. Para aplicar algunas de estas metodologías en el trabajo diario, una de las mejores herramientas es trello, que permite organizar las tareas y realizar un seguimiento de las mismas, así como visualizar los actores involucrados en cada una de ellas.  8.3. Estructura proyectos J2EE En cuanto a la estructura que tienen los proyectos que emplean arquitecturas J2EE podemos destacar: Departamento I+D: Se dedican a la investigación, innovación y desarrollo de las nuevas tecnologías que formarían la parte de arquitectura. Dentro del mismo habría un departamento de arquitectura que se encarga del desarrollo de una arquitectura J2EE, utilizando algunos de los frameworks comentados anteriormente. Jefes de proyecto, analistas y programadores se encargarían de los análisis, diseños, desarrollos, pruebas y mantenimiento del conjunto de aplicativos de la empresa. Todos ellos emplearían como base la arquitectura ya desarrollada por el departamento de I+D. Es muy importante que toda aplicación empresarial separe la parte de Presentación (Front-end) de la parte de lógica de negocio (Back-end).Es lo que típicamente se conoce como MVC (Modelo Vista Controlador). Este modelo de separación en 3 capas toma especial importancia en aplicaciones donde evolucionan de forma independiente cada una de las capas, porque muchas veces se solicita modificar la lógica interna de una aplicación sin que se vea modificada la forma de presentar estos elementos y viceversa.
  10. 10. 10 La parte de front-end muchas veces resulta ser la parte fundamental de un portal, pero en la empresa, en muchas ocasiones, nos encontramos que es al contrario y que la gran complejidad de una aplicación se encuentra en los procesos de negocio que se realizan en parte de back-end. 9. Libros técnicos Título Autor Editorial Clean Code: A Handbook of Agile Software Craftsmanship(1) Robert C. Martin Prentice Hall Head First Design Patterns Elisabeth Freeman, Eric Freeman, Bert Bates O'Reilly Pragmatic programmer: from journeyman to master Andy Hunt, David Thomas Addison-Wesley Code Simplicity: The Science of Software Design: The Fundamentals of Software Max Kanat-Alexander O'Reilly Design Patterns: Elements of Reusable Object-Oriented Software(2) Erich Gamma, Richard Helm, Ralph Johnson, John Vissides Addison-Wesley (1)Disponible también en español con el título: Código Limpio: Manual de estilo para el desarrollo ágil de software (2)Disponible también en español con el título: Patrones de diseño
  11. 11. 11 Para sentar las bases para ser un buen programador es fundamental aprender sobre patrones de diseño y buenas prácticas de programación. Para ello, es interesante contar con libros de referencia como “Clean Code” o “Patrones de diseño”. Estos libros tratan de explicar que más allá de que el código compile, e incluso que funcione, está la buena organización del código y su óptima implementación. 10. Conclusiones La experiencia como programador te permitirá descubrir que al final todos los lenguajes funcionan igual y que el objetivo final de todo programador es abstraerse del lenguaje para la resolución de problemas y plantear soluciones a los mismos sin conocer a fondo un lenguaje en concreto. Esta capacidad de abstraerte del lenguaje te permitirá pasar de ser un programador, a otro cargo con mayores responsabilidades y hacer evolucionar tu carrera un paso más allá. Los mejores programadores no son sólo aquellos que saben más lenguajes ni escriben más código sino aquellos que además lo hacen pensando en patrones de diseño, con unos algoritmos y aplicando técnicas de programación avanzada.

×