A TEXT POST

Cosas que no aprendí en la universidad

Uno de los primeros descubrimientos al salir al mundo real, a la empresa de TI es que en el camino en la universidad hay demasiadas deficiencias, la falta de información, planes de estudio, profesores sin experiencia en el área, etc. Al finalizar tu estancia como estudiante te has dado cuenta que la universidad y la empresa están muy alejados, existe una brecha bastante ancha. La realidad es sumamente distinta, al punto que te llegas a preguntar ¿Cuantos de mis profesores realmente han trabajado en una profesión totalmente relacionada a su carrera profesional en una empresa de TI? ¿Cuantos de ellos han tenido la experiencia de resolver los grandes problemas demandantes en el mundo real?. El camino como recién egresado es bastante difícil en TI. A mi parecer los puntos mas críticos en un recién egresado recién ubicado en el mundo laboral y que la universidad o al menos cualquier estudiante se debería de enfocar en las siguientes realidades:


Entendiendo la estructura en una empresa de TI. Como en cualquier empresa, negocio existe una organización, que puede estar en el sector de ingeniería, sector de servicios o cualquier otro sector, los elementos siempre serán los básicos y por consecuente los mismos. Se podrá tener el área de ventas y marketing para atender las necesidades del cliente, el área de operaciones para ejecutarlas de manera eficiente, finanzas, recursos humanos y otras áreas para la administración de los recursos, en una empresa de TI cualquier proyecto/desarrollo que se lleve acabo en la organización jamas trabajara de manera aislada, una aplicación trabajara en coordinación con otros sistemas de la organización, con clientes, empleados, personal del negocio, etc. Las empresas formales de TI tendrán una estructura muy similar a las demás, aunque puede variar de empresa en empresa. Como recién egresado es necesario distinguir las distintas areas que existen que son: Desarrollo, QA/Testing, Base de Datos, Soporte, Producto, Operaciones, entre otras. Un proyecto puede pasar por las distintas areas dependiendo del ciclo de vida de la aplicación.


Metodologías. ¿Cuantas metodologías se llegan a ‘enseñar’ en nuestra estancia en la universidad? Bastantes, ¿Cuantas veces escuchamos ‘Cascada, Agile, Scrum’?. Realmente cuantas de ellas sabemos diferenciarlas, aplicarlas, entenderlas… Y la pregunta del millón ¿Cual metodología de las aprendidas es perfecta para nuestro proyecto?, quizá sea de las cuestiones mas difíciles al inicio de todo proyecto de software y en nuestra entrada al mundo laboral no solo trabajamos como en la universidad individualmente, ni tampoco solo nos preocupamos por desarrollar, una metodología tiene que ver con la administración de un proyecto, tiempos, el trabajo en equipo, riesgos, etc. La principal razón de que jamas tenemos el verdadero conocimiento de las metodologías es porque nuestros profesores NO LO SABEN, JAMAS LAS HAN PUESTO EN PRACTICA, puedo apostar que ni siquiera han escuchado por ejemplo de alguna metodología de ‘Desarrollo Ágil’.


Manejo de código fuente. ¿Cuantas veces nuestros proyectos de software únicamente se mandaban al correo del profesor?, Nunca se tiene una versión de nuestro proyecto de software, ni un repositorio central donde podamos dar seguimiento a los últimos cambios de nuestro código. Ahora en el mundo real imaginemos que un equipo de 20 personas se encuentren involucrados ya sea directamente o indirectamente en el proyecto y todos estén trabajando de manera conjunta, ¿Seria un caos, cierto? Es uno de los grandes problemas al trabajar con gran cantidad de código en cualquier empresa. Quizá en la universidad aprendamos que es una herramienta de control de código fuente, pero nos sabremos como funciona, como son los flujos de trabajo. Es un punto demasiado importante, en estos días debería de ser un castigo no saber lo que es un control de versiones, para las universidades no hay excusa para no considerar esto en el plan de estudios.


Debugging. En la universidad cada proyecto que realizábamos la única tarea que se realiza es escribir y escribir código. Jamas volvemos a una aplicación que desarrollamos hace tiempo y solucionamos o tratamos de arreglar errores pasados. Esta es una realidad que día a día se presenta en el mundo real y que es una practica totalmente ignorada por las universidades, Siempre habrá fallos/errores por mas duro que se trabaje, no siempre somos los responsables de la causa de esos errores, pero en la mayoría de los casos si somos los responsables en arreglarlos, y no sabemos realmente lo que puede estar pasando.


Pruebas, pruebas y pruebas. En la universidad el concepto de pruebas es muy “Compara tu trabajo realizado con lo que dice el documento de  especificaciones del proyecto”. La realidad es que nuestro proyecto esta expuesto a miles de fallos, el no realizar un exhaustivo plan de pruebas puede tener consecuencias realmente graves, el ciclo de vida de un proyecto terminara siempre en fases criticas (Producción) donde el incumplimiento de las funcionalidad del sistema es intolerable. Las universidades, profesores y alumnos al día de hoy deben adoptar una cultura de pruebas con las herramientas adecuadas en todo desarrollo de software que se realice.


Quisiera extender la lista de cosas que no aprendí en la universidad, personalmente agregaría:


Patrones de Diseño, Como Vender una Idea, Dispositivos de Comunicación (XML, XPath, XSL, XSD), Unit Testing, Ciclo de Vida del Software (Desarrollo, QA, Integración, Producción) Diseño Relacional de Base de Datos, Normalización, Stored Procedures/Triggers, Recursividad, Pensamiento y Diseño Orientado a Objetos, Documentación Técnica, Guias de Codificación, Negociación, Arquitectura de Software, Frameworks, Sentido Común, Habilidades de Comunicación, Manejo de tiempos, Leer Código, Conocimiento de tu IDE, Trabajar en Equipo y lo mas importante.. Escuchar.



Esta claro que en la universidad jamas aprenderemos todo, la calidad de las universidades no se basan en su plan de estudios, las buenas universidades enseñan teoría (estructura de datos, algoritmos, etc) como practica (Unit Testing, Control de Versiones, Metodologias). Una universidad basada en teoría jamas ofrecerá experiencia, realmente se necesita de una combinación balanceada, las buenas universidades saben como hacerlo.


Those who are enamored of practice without science are like a pilot who goes into a ship without rudder or compass and never has any certainty where he is going. Practice should always be based upon a sound knowledge of theory. - 

Leonardo da Vinci


Lo mas importante que uno puede aprender en la universidad es a aprender.