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

26 de mayo de 2005

To blog or not to blog?

To blog or not to blog se ha convertido en una pregunta interesante. Prueba de esto es el número de resultados que puede ofrecer un motor de búsquedas a esta pregunta. Para comprobarlo introduzca la frase “to blog or not to blog” (con todo y comillas) en algún buscador de Internet. Al 12 de Mayo de 2005, Google regresó 35 200 resultados relacionados con esta frase. Pero qué quiere decir blogear (o blogging en inglés). O mejor dicho, qué es un blog.

El uso de espacios personales para expresar ideas en Internet, se incrementa y mejora constantemente. Anteriormente este tipo de espacios lo constituían las páginas o sitios Web personales. Sin embargo, en los últimos años se han creado nuevas formas de permitirnos contribuir al mundo y hacerle saber al resto de los mortales que existimos.

Un medio cuya aceptación ha crecido en los últimos años son las bitácoras personales, conocidas como weblogs, o blogs. La enciclopedia wiki, o Wikipedia, define un weblog como una aplicación Web que contienen artículos, o información que es agregada en forma periódica en una página Web determinada (http://en.wikipedia.org/wiki/Blog). Estos sitios pueden ser usados por individuos para manejar sus tareas diarias, expresar ideas y compartirlas con amigos, familiares, clientes, etc. Así también, se puede permitir la colaboración de otras personas creando blogs para compartir información entre un grupo de individuos con intereses comunes; por ejemplo, un blog organizacional donde se permita la colaboración de los clientes, proveedores y/o empleados.

El termino weblog fue creado en 1999 por John Barger, un escritor estadounidense, editor de uno de los primeros weblogs. A partir de entonces, cada vez más personas se fueron interesando y varios weblogs fueron desarrollados. Actualmente, los sistemas de blogs ofrecen diferentes características además de poder agregar información. Por ejemplo, permiten compartir imágenes, crear ligas a otros sitios, definir permisos de acceso para poder tener control de a quién se le permite leer, agregar o modificar la información, etc. Además de que la manera de presentar la información puede ser personalizada por los usuarios de forma relativamente sencilla, por lo que no se requiere conocer sobre programación para poder tener nuestro blog propio.

Entre las bondades de los blogs está el que permiten establecer contactos con personas que tengan aspectos en común; por ejemplo, intereses o pasatiempos, que hayan estudiado en la misma escuela, que vivan en la misma ciudad, etc. De esta manera una persona puede acceder a los blogs de aquellos a quienes les haya gustado la misma película, o que gusten de su mismo tipo de música.

Uno de los primeros servidores de blogs fue blogger, el cual fue adquirido por Google en 2004. Recientemente Microsoft ha desarrollado su propio sistema de blogs denominado Mi espacio o My space. Por su parte, Yahoo ha lanzado la versión Beta de Yahoo! 360 , que es un sistema que combina los blogs con otra serie de servicios. Otros proveedores de almacenamiento de blogs pueden ser encontrados en Yahoo, o en Google.

El interés por los blogs se encuentra en crecimiento, y cada vez más personas deciden crear el suyo propio. Para ver algunos ejemplos, es posible acceder a los blogs de los sitios mencionados, o si lo prefiere, a la sección de informática de la versión online del periódico el Imparcial donde constantemente se listan una serie de blogs al azar.

Así que sí alguna vez ha tenido la inquietud de tener su propio espacio a través del cual compartir sus intereses o experiencias con sus seres queridos, o si sólo desea que sus palabras no se las lleve el viento, sino que más bien queden para la posteridad navegando a través del ancho mar que es Internet, es hora de que se pregunte: to blog or not to bolg?

Por lo pronto, como usted lo está viendo en este momento, yo ya he iniciado el mio.

12 de mayo de 2005

Calafia Research Lab

Calafia Research Lab

Este es el blog del laboratorio Calafia, enfocado a la investigación en redes y sistemas. En este laboratorio se desarrolla investigación en áreas relacionadas con redes y protocolos de internet, sistemas colaborativos, cómputo movil y ubicuo, ingeniería de software y de procesos, e informática médica. Este blog contiene información sobre algunos de los trabajos realizados por los participantes de este laboratorio.