12 de julio de 2005

¿Qué tipo de desarrolladores queremos formar?

Pensando un poco en mi post titulado "¿Qué tipo de desarrollador quieres ser?", me vinieron a la mente algunos recuerdos. La pasada semana del 20 al 24 de Junio, asistí a la semana MoProsoft organizada en la Ciudad de Mexicali, B.C., dónde se presentaron diversas pláticas y mesas de discusión relacionadas con el desarrollo de software en méxico, donde participaron personas de la industria, academia y gobierno. Así también, durante esta semana, tuvimos la fortuna de asistir al taller de MoProsoft impartido por su principal creadora: la Dra. Hanna Oktaba.

Dentro de las mesas de discusión, surgió un tema que ha sido de interés para la comunidad de ingeniería de software en México durante los últimos años, el cual se relaciona con la formación de recursos humanos en el área de ingeniería de software. Esto surgió de una inquietud expresada por los estudiantes que participaron en el evento, quienes se encuentran preocupados porque en las escuelas se les enseñan cosas que las empresas no requieren, y lo que las empresas requieren, no se les enseña. Creo que este es el clásico tema de la falta de entendimiento entre lo que es importante para la industria, y lo que es importante para la academia.

Un punto interesante que salió a discusión, se relacionaba directamente con el desarrollo de software, y en particular, con la programación. Los estudiantes se quejaron de que se les "enseñaban" muchos lenguajes de programación, pero no los que la industria requería; los empresarios se quejaban de qué los egresados no sabían programar; mientras que los académicos argumentaban que se trataba de formar a los alumnos, no capacitarlos en un lenguaje específico, o como programadores para cierto sector (esto puede dar para una amplia discusión sobre qué vamos a considerar como formación, y qué sobre capacitación; y más aun, qué parte le corresponde aportar a la academia, qué a la industria, y qué a los mismos estudiantes).

En mi experiencia personal, creo que todos tienen algo de razón en sus argumentos. Una licenciatura o ingeniería no es un curso de capacitación, sino de formación. Además, desde el punto de vista de la programación, un académico no se puede casar con un lenguaje de programación o tecnología específica, ya que esta cambia constantemente, y diferentes empresas pueden requerir diferentes tecnologías. Por lo tanto, el objetivo no es enseñar un lenguaje, sino enseñar a programar. Por ejemplo, durante mi carrera de Ingeniero en Sistemas Computacionales, me "enseñaron" a programar en Cobol, Pascal, y finalmente C (aunque aprendí a programar en C antes de que me dieran el curso, y con mayor profundidad que lo que pude haber aprendido en clase). Sin embargo, durante ese tiempo Cobol era un lenguaje prácticamente extinto, y con una lógica que difícilmente nos pudiera servir posteriormente para aprender otro. En fin, aun cuando llevé estos tres cursos de programación, creo que donde realmente aprendí a porgramar (diseñar e implementar estructuras de datos y algoritmos un poco complejos) fue en el curso de programación de sistemas donde debimos desarrollar un compilador, pasando por todas las faces (análisis de léxico, semántica, manejo de variables locales y globales, reutilización de variables temporales, generación de código intermedio, ensamblador, y finalmente executable). Cabe hacer mención que este aprendizaje fue principalmente autónomo, y con un lenguaje diferente a los que vi en clases (Delphi para ser exacto). Creo que la dificultad que implicaba el desarrollo completo de un compilador, fue lo que realmente me ayudó a aprender a programar, buscando la manera de implementar algoritmos y estructuras de datos para poder llevar a cabo las distintas etapas del compilador.

Lo anterior fue lo que me ayudó a empezar a trabajar como desarrollador al salir de la carrera, aún cuando debí utilizar un lenguaje que nunca había usado antes (FoxPro). Esto fue lo que me hizo ver que no importa mucho qué lenguaje se utilice en un aula mientras que realmente se enseñe a programar. Sin embargo, creo que la academia constantemente falla en este punto, dado que por el afán de que los estudiantes tengan un espectro más amplio, se pierde mucho tiempo enseñando diferentes lenguajes sin profundizar en ellos, es decir, sólo se desarrollan programas sencillos para ejemplificar el funcionamiento de la sintaxis y semántica del lenguaje, más no para resolver problemas por medio del diseño y desarrollo de algoritmos y estructuras de datos. Más aun, cada profesor trata de ver las cosas según su punto de vista particular, y no se conjugan los esfuerzos en pro del bien de los egresados.

Considero que por el bien de los futuros ingenieros de software, es necesario que los académicos empecemos a ponernos de acuerdo para encaminar los esfuerzos hacia un mismo destino, y no que cada quién trate de llevar agua a su molino. En el caso del desarrollo de software, tenemos que empezar a pensar en qué tipo de desarrolladores queremos formar.

7 de julio de 2005

Los roles del desarrollo de software

En una serie de artículos en la revista electrónica developer.com, Robert Bogue trata sobre los diferentes roles involucrados en el desarrollo de software, ininciando con su artículo: "Cracking the Code: Breaking Down the Software Development Roles". Creo que es una serie de artículos interesantes sobre todo para los que se hayan involucrados con el desarrollo de software.

¿Qué tipo de desarrollador quieres ser?

¿Cuál puede ser la clave para el éxito de un desarrollador de software?, ¿ser un todólogo, o un especialista?. Por lo general, cuando uno se dedica al desarrollo de software, su interés se centra en poder ser capaz de desarrollar cualquier tipo de aplicación. Sin embargo, como Robert Bogue lo trata en su artículo "The Many Faces of a Developer", quizá la clave para el éxito sea convertirse en un desarrollador especialista. Si consideramos el crecimiento acelerado dentro de la industria del software, tener claro este punto puede ser más que importante. Constantemente nacen nuevos métodos, técnicas y herramientas para desarrollar software, así como nuevos tipos de aplicaciones. Por lo tanto, pensar que podemos llegar a ser expertos en todo puede ser sólo un sueño guajiro. Esto nos lleva a pensar: ¿es conveniente seguir tratando de conocer todo por encima, o ser especialista en ciertos tipos de aplicaciones, herramientas de desarrollo, lenguajes, etc.?