5 cosas que quisiera haber aprendido en la universidad acerca del desarrollo de software

Imagen compartida bajo licencia Creative Commons 2.0

Después de algunos años trabajando como desarrollador de software para distintas empresas, me he visto en la necesidad de aprender conceptos y tecnologías para mí nuevas, pero que al parecer son “el pan de cada día” en la industria del software.

Quiero en este post listar lo que me gustaría haber aprendido durante mis estudios universitarios, compartir algunas propuestas creativas e ideas concretas al respecto e invitar a los ahora responsables de la educación universitaria en México a considerar la inclusión de los temas aquí listados en los currículos de las carreras relacionadas con el desarrollo de software:

1. Uso intensivo de software de control de versiones

No conozco ningún proyecto de software en el que el desarrollador termine de codificar un programa, lo queme en un disco compacto y lo entregue a su jefe o al departamento de operaciones para que lo instalen en producción.

En cualquier empresa seria se utilizan sistemas modernos de control de versiones (p.ej. Git) para mantener el código, integrarlo entre varios equipos y para desplegar las aplicaciones en producción de manera continua.

No puede ser que en la universidad los maestros sigan encargando proyectos cuyos entregables sean programas grabados en discos compactos o enviados por correo electrónico. Hay que introducir al alumno desde el primer semestre al concepto de control de versiones y una buena manera de hacerlo es requiriendo que todos los proyectos deban ser entregados como repositorios públicos en GitHub.

Invito a los maestros a familiarizarse con la herramienta Git y el servicio GitHub (15 minutos son suficientes) – Recomiendo este tutorial interactivo

2. Open source

Y ¿por qué no! que los proyectos publicados por los alumnos en GitHub se compartan con el mundo con una licencia open source, haciendo posible que cualquier persona tome esos proyectos, los mejore e integre los cambios en los repositorios originales.

No puede ser que cada año los estudiantes universitarios creen los mismos proyectos de ABC (altas, bajas y cambios) con pequeñas variaciones introducidas para evitar el plagio. Se debe de incentivar a los alumnos para que clonen versiones de los proyectos presentados por los alumnos en semestres anteriores y agreguen nuevas capacidades, cambien el programa para cumplir nuevos requerimientos, etc.

No hay nada malo en tomar código existente (open-source), estudiarlo, mejorarlo y utilizarlo para otro proyecto. Al final de cuentas, es ese esquema en el que se basa hoy el día el progreso tecnológico.

3. Lenguajes de scripting

Ruby Perl y Python

No hay mucho que decir al respecto. Aprender un lenguaje de scripting: perl, phyton, ruby, etc. es indispensable para automatizar tareas administrativas y es una navaja suiza para desarrolladores de software.

4. Linux, linux y más linux

Conocimiento intermedio de Linux es indispensable para cualquier desarrollador de software. La mayoría de los sistemas de gran escala y de las tecnologías emergentes están basadas en Linux.

No puede ser que los alumnos (futuros programadores profesionales) dediquen un semestre entero o más aprendiendo técnicas avanzadas de Power Point y Excel y al final de sus estudios sean incapaces de ejecutar las tareas más básicas sobre plataformas basadas en Linux.

Hoy en día echar a andar una máquina virtual que corra una versión ligera de linux es cuestión de minutos.

Invito a los maestros a familiarizarse con la herramienta VirtualBox en conjunto con Vagrant con las cuales se pueden crear máquinas virtuales corriendo versiones muy ligeras de linux, con paquetes pre-instalados, listas para ser utilizadas por los alumnos en cuestión de minutos.

Esta manera de crear un entorno virtualizado, con software pre-instalado y pre-configurado por el maestro, permite al alumno concentrarse en una tarea o ejercicio concreto, abstrayéndolo de detalles y complejidad irrelevantes para el tema que se esté trabajando.

5. La importancia de las pruebas de software

No basta con sólo conocer el concepto de las pruebas de software (unitarias, integrativas, etc.) Los alumnos deben de “entender” por qué las pruebas de software son tan importantes como el software en sí.

Los proyectos creados por los alumnos en la universidad deben de tener 100% de cobertura de código por pruebas unitarias. Una manera sencilla de probar esto es abrir el código fuente de un programa, cambiar una línea de código de manera arbitraria (negando una condición, cambiando una constante numérica, etc.)  y correr las pruebas unitarias. Si las pruebas no señalan un fallo quiere decir que esa línea de código no esta cubierta por las pruebas creadas por el alumno.

Respecto a este tema recomiendo un ejercicio para enseñar la importancia de las pruebas de software en la universidad.

18 pensamientos en “5 cosas que quisiera haber aprendido en la universidad acerca del desarrollo de software

  1. Daniel dice:

    Lamentablemente, pareciera que los maestros le tienen miedo a este tipo de tecnologías, son muy pocos los que tienen el interés de conocer linux o de profundizar en el uso de scripts para luego enseñar a sus alumnos lo que es una verdadera aplicación de software completa y funcional. Ellos se quedan con su paga y listo.

  2. No todos los programadores egresados de las universidades, van a ser programadores de estos lenguajes de scripting como mencionas, ni .Net, ni C#, algunos ni siquiera llegan a tocar una sentencia SQL. los programas universitarios son para Formar al estudiante en el pensamiento matematico o pensamiento cientifico, los lenguajes son solamente herramientas, que cada uno debe aprender a dominar segun se va requiriendo. si las Universidades se enfocan en herramientas, no van a tener tiempo para enseñar lo realmente escencial, como la capacidad de analizar, dicerinir y resolver un problema con una o varias herramientas disponibles. Igual que tu tengo varios años programando profesionalmente, y tambien he tenido que aprender herramientas nuevas, pero con conocimientos firmes en analisis y diseño, no me ha resutado una tarea dificil. Si, en las escuelas deben enseñar a trabajar, pero sin importar que herramientas tengas que utilizar!.

    • josketres dice:

      Hola Héctor, estoy de acuerdo contigo en que las herramientas hay que tratarlas como un medio y no como un fin en sí.Enfocarse solamente en las herramientas sería un gran error.
      En cambio, considero que utilizar herramientas modernas para introducir al estudiante a conceptos como control de versiones, scripting, integración continua, virtualización, linux, opensource, programación funcional, etc. es un enfoque válido y podría tener un efecto positivo en la educación universitaria.

      • carlos avila dice:

        Y créeme si te digo que muchos de mis compañeros no saben nada acerca de lo que mencionas, mucho menos usarlas.
        El problema es y digan lo que digan, que los profesares mismos están en el siglo pasado, no todos, pero si muchos.
        Si yo no hubiera probado un Linux supongo estaría igual.

    • carlos avila dice:

      Si tienes un buen punto, solo una cosa, ¿Y los que si queremos desarrollar?.

      Tristemente no encuentra uno apoyo ni orientación acerca de eso, y bueno tiene uno que ira ciegas por ahí, todo por que nuestros profesores están igual o peor que uno.
      Para fortuna de aquellas inquietas mentes que van siempre mas aya, existe la web, llena con abundante conocimiento.
      Esto no es escusa para que esos profes flojos solo les importa su sueldo y que el alumno no aprenda lo nuevo en el campo del desarrollo de software, no representa nada para ellos.

    • No lo creo, si tu hablas con una mujer de 80 años dirá que llegar virgen al matrimonio era una virtud, una mujer de 40 dirá que eso es una estupidez. El cambio es que una tecnología (pastilla anticonceptiva) hizo un cambio en la forma en que se analizan las problemáticas en si. Este ejemplo tan simple se puede aplicar a cualquier área científica.

      Si en un caso tan aislado una herramienta hace cambios tan radicales ¡imagínate en un área cuyo objetivo es crear nuevas herramientas como lo es la informática!. Si estás en un área que su objetivo principal es crear nuevas herramientas no puedes desconocer la existencia de las nuevas herramientas.

      Si, el análisis es importante, yo personalmente tuve 8 matemáticas, 8 físicas, 4 matemáticas discretas, 2 estadísticas, pero si no fuera por conocer herramientas adecuadas todos esos conocimientos se habrían quedado en la pizarra o en un cuaderno.

  3. Silvia elena de la torre dice:

    Me parece que como dice Hector en el comentario anterior, que lo que te dan es lo necesario (lo mínimo) para que el estudiante pueda desarrollar e implementar las herramientas necesarias a cada situación, más creo que no solo las carreras en esta área adolescen de material actualizado para que el estudiante comprometido con él mismo encuentre al momento de injciar su vida profesional el sitio que él elija en el mundo productivo que es muy diverso y no lo que pasa hoy en día que terminan iniciando su vida profesional de relleno en algún lado, creo que en base a lo que estamos viviendo un desarrollo impresionante en la tecnología es necesario un compromiso total de la universidad en la revisión de los programas universitarios de todas las carreras para darles a los estudiantes precisamente eso herramientas actualizadas y que vayan ah doc con la época que estamos viviendo.

  4. iaco79 dice:

    Coincido en el uso de github, sourceforge o similares si te quieres enfocar como programador ya que ahora si quieres aplicar a un buen trabajo, los reclutadores te van a pedir que tengas al menos un sitio web donde puedan ver tu manera de programar,

    Patrones de diseño a fondo es algo que deberian impartir, por que aahhhj la vdd los recien egresados salen programando con las patas o batallan para entender un codigo que hace uso extensivo de patrones de diseño para hacer software escalable y robusto (digase cualquire proyecto opensource , que lo tomes y lo adaptes a tus necesidades)

  5. iaco79 dice:

    Coincido en el uso de github, sourceforge o similares si te quieres enfocar como programador ya que ahora si quieres aplicar a un buen trabajo, los reclutadores te van a pedir que tengas al menos un sitio web donde puedan ver tu manera de programar,

    Patrones de diseño a fondo es algo que deberian impartir, por que aahhhj la vdd los recien egresados salen programando con las patas o batallan para entender un codigo que hace uso extensivo de patrones de diseño para hacer software escalable y robusto (digase cualquire proyecto opensource , que lo tomes y lo adaptes a tus necesidades)

  6. Omar Ochoa dice:

    Me pareció muy interesante tu publicación, sin embargo seria bueno que pusieras al menos quien lo escribió, me imagino que fue usted, ya que en el articulo no hay referencias de quien lo publico, ni que ocupación tiene, ni si quiera en el About aparece, al menos que entremos a la cuenta de twitter. Saludos!

  7. souhbaig dice:

    Lástima que en sus universidades pase esto por que en la mía no pasa.

  8. Hace mucho que conozco de Linux, y me has hecho recordar el día que lo conocí, estaba muy sorprendido por lo ignorante que era, y lo pequeño del mundo en el que estaba. Os he nominado al Versatile Blogger Award. http://elbesoenelespejo.wordpress.com/2014/09/28/versatile-blogger-award/

  9. Reblogueó esto en THINK "Out of the Box"y comentado:
    !El continuo aprendizaje es una de las claves del éxito! #ProfessorJRuiz

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: