Programmer visions

11

Click here to load reader

description

Programmer visions

Transcript of Programmer visions

Page 1: Programmer visions

Visiones sobre el mundo de la

programación

José Manuel Ortega Candel

[email protected]

Page 2: Programmer visions

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.

Page 3: Programmer visions

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.

Page 4: Programmer visions

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.

Page 5: Programmer visions

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.

Page 6: Programmer visions

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.

Page 7: Programmer visions

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.

Page 8: Programmer visions

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).

Page 9: Programmer visions

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.

Page 10: Programmer visions

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

Page 11: Programmer visions

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.