5 cosas que deberías aprender para dedicarte al desarrollo de software

Publicado por Ewaldosoft en

Por: Juan María Hernández

En las últimas semanas he estado en contacto con bastantes personas que acaban de terminar sus estudios, la mayoría en la universidad, y tienen poca (o nula) experiencia profesional, y me he llevado una pequeña desilusión por el bajo nivel de conocimientos de muchos de ellos.

En este post lo he escrito pensando en una formación universitaria porque es lo que mejor conozco, pero creo que realmente es aplicable a cualquier tipo de formación que vaya orientada a preparar alguien para dedicarse a la programación y al desarrollo de software, incluyendo Ciclos Formativos Superiores e incluso visiones más alternativas del tipo hack your education.

No conozco la situación en profundidad como para saber si es un problema de los programas de estudio, de la calidad de los profesores o del interés de los alumnos, pero sí sé que es algo que deberías tener en cuenta si estás estudiando y quieres dedicarte a esto del desarrollo de software, porque independiente de quién tenga la responsabilidad, al final el mayor afectado eres tú.

Aunque voy a remarcar los conocimientos más “prácticos” que son necesarios, soy de los que piensan que la parte teórica también es muy importante y que asignaturas como cálculo, álgebra, lógica, teoría de números, estructuras de datos, teoría de la programación y todas esas cosas que “no valen para nada en el mundo real”, son muy importantes a la hora de formar un buen profesional por lo que aportan a la hora de mejorar la capacidad de análisis y resolución de problemas.

Quiero dejar claro que no (sólo) digo esto desde el punto de vista de las necesidades actuales de la empresa. Al contrario de lo que piensan otros, considero que la formación de una persona, y más en el caso de la universidad, debe estar orientada a proporcionarle las herramientas necesarias para poder desempeñar su trabajo no sólo ahora, sino servirle como base sobre la que seguir evolucionando y mejorando durante muchos años.

Un bueno ejemplo de esta filosofía son el tipo de libros que creo que pueden ayudarte a ser un mejor desarrollador: se trata de libros sobre conceptos básicos que puedes aplicar durante mucho tiempo, no sobre el lenguaje de moda.

¿Qué se supone que debes saber?

Ésta es una lista de cosas que considero básicas para cualquiera que quiera dedicarse al desarrollo y haya dedicado unos cuantos años a formarse para ello. No hace falta ser un experto en nada (eso requiere mucho más tiempo), pero sí tener una idea más o menos clara de los conceptos básicos y una base lo bastante sólida como para poder seguir profundizando en aquello que necesites.

1. Programación orientada a objetos

Algunos dicen que ya ha alcanzado su zenit y empieza a ser desplazada por otros paradigmas, pero la realidad es que a día de hoy sigue siendo la manera de desarrollar la mayoría de aplicaciones.

El lenguaje no es importante, puede ser Java, C#, C++ o incluso cosas más exóticas como Smalltalk. Lo que importa es tener claros los conceptos, lo que es una clase, un objeto, un interfaz, una clase abstracta, un método estático, un método de instancia, herencia, composición, etc.

Dentro de este punto, considero especialmente útil conocer patrones de diseño, no tanto por los patrones en sí, que muchas veces están sobrevalorados, sino porque ayudan a establecer un lenguaje común para comunicarte con otros desarrolladores y la forma de implementarlos es un buen ejemplo de cómo aplicar técnicas de diseño orientado a objetos.

No se trata de conocer el último framework de moda, que seguramente estará anticuado en poco tiempo, sino de manejar los conceptos necesarios para poder comprender y utilizar no sólo ese framework, sino todos los que puedan surgir en el futuro.

2. Programación funcional

Cada vez se usa más, e incluso los lenguajes tradicionalmente orientados a objetos que evolucionan más lento como Java o C++ empiezan a incluir características funcionales. Y eso por no hablar de lenguajes como Ruby, Python o Javascript o el empuje de lenguajes funcionales como Clojure, F# o Haskell.

No hace falta ser un experto en teoría de categorías, ni en el sistema de tipos de Hindley-Milner o en cálculo lambda, pero al menos es necesario tener claro lo que es una función de orden superior, el valor de la inmutabilidad o la utilidad de un cierre lambda.

Aparte de que sea un paradigma de programación que está ganando popularidad actualmente, aporta otra forma de razonar sobre los problemas y eso siempre es positivo.

3. Bases de datos

Casi cualquier aplicación necesita, de una u otra forma, almacenar información, y ésta suele terminar en una base de datos. Hasta hace no mucho, decir base de datos era prácticamente lo mismo que decir base de datos relacional, pero hoy en día hay bastantes alternativas, como bases de datos documentales, de grafos, orientadas a objetos.

Es imposible pretender dominarlas todas durante tu periodo de formación, pero sí es bueno que las conozcas y tengas una idea aproximada de para qué sirven.

Además, merece la pena dedicarle un esfuerzo adicional a aprender algo más sobre SQL para ser capaz de lanzar consultas básicas. Además de su utilidad directa, aprender a expresar cosas de forma declarativa usando lógica de conjuntos es importante.

4. Hardware y redes

Hay programadores que piensan que por dedicarse a programar no necesitan saber nada del hardware que ejecuta sus programas, pero la realidad es muy distinta. Es necesario conocer las características básicas del hardware que utilizamos todos los días para poder tomar decisiones correctas.

Nuevamente, no se trata de convertirte en ingeniero de Intel, sino de entender que no es lo mismo acceder a memoria cache que a RAM, ni a RAM que a disco, y por supuesto no es lo mismo acceder a datos en local que a información en un servidor que está en la otra punta del mundo.

Tener unas nociones básicas de cómo funciona una red, sobre todo a nivel de protocolos, es también importante cuando hacemos aplicaciones que deben funcionar en el mundo real. La diferencia entre UDP y TCP, lo que puede aportarnos usar un protocolo de más alto nivel como HTTP, las variaciones de latencia entre usar una red wifi, una red de datos móvil o una red cableada, etc., son factores muy importantes a la hora de desarrollar una aplicación, y aunque no sepas como funciona el handshake de una conexión TCP, por lo menos deberías saber que existen las conexiones TCP y que controlan la entrega de los paquetes.

5. Sistemas de Control de Versiones

Tengo que reconocer que tenía mis dudas sobre este punto, pero después de pensarlo creo que hoy en día no hay excusa para que no aprendas a manejar un sistema de control de versiones mientras completas tus estudios.

Existen muchas opciones online gratuitas como Github, Bitbucket (o incluso Team Fundation Service, si no te queda más remedio) y es una herramienta tan útil, aunque sólo sea para coordinarte con tus compañeros de prácticas, que deberías saber manejarla.

Igual que pasa con los lenguajes de programación, no es importante cuál aprendas, pero aprende alguno que te permita practicar las ideas básicas de subir y bajar código, obtener cambios de otras personas, crear ramas, resolver conflictos, etc.

Insisto, aunque sólo sea para coordinarte con tus compañeros de prácticas, aprende a manejarlo y evitarás estar enviando zips por email y tratando de averiguar cuál era la versión buena la hora de hacer la entrega.

¿Esto te garantizará un trabajo?

La verdad que ni siquiera sé si esto te hará más apetecible para el mercado laboral, teniendo en cuenta el panorama actual. Ya escribí sobre lo que parece ser que buscan las empresas y sobre el estado de la industria del software en España, pero hay que intentar ver las cosas con cierta perspectiva.

Hoy en día, entre la manera de trabajar de muchas empresas y la calidad de muchos de nuestros colegas de profesión, parece que todo esto da igual y que no compensa aprender las cosas de verdad. Que lo mejor que puedes hacer es tirar código de cualquier manera durante un par de años para intentar dar cuanto antes el salto a puestos que no requieran tanta programación. Si ese es tu deseo, es verdad, no merece la pena hacer el esfuerzo de aprender esto y seguramente deberías centrarte en otras habilidades.

Sin embargo, si te gusta programar y quieres dedicarte a ello, es fundamental que seas bueno en tu profesión. Sólo así conseguiremos cambiar la idea de que los programadores son algo que no aporta valor, porque realmente sí que podrás aportar valor.

Es verdad, esto requiere mucho esfuerzo, pero es lo que hay. Y además más te vale acostumbrarte porque si realmente te quieres dedicar al desarrollo de software, tendrás que hacerlo toda tu vida. Vas a estar aprendiendo cosas nuevas toda tu vida. Y eso es bueno. Es divertido. Si no te parece divertido, seguramente te hayas equivocado de profesión y deberías buscar una a la que no te importe dedicarle parte de tu tiempo para aprender y mejorar.

Conclusiones

Hay muchas más cosas que son útiles y merece la pena aprender. Como se suele decir, no están todas las que son pero sí son todas las que están. Las que cosas que aparecen en este post son de las más básicas y en las que he detectado más carencias al hablar con gente que acaba de terminar su formación.

En algunos casos, parece que pretendemos correr demasiado y he hablado con personas que han hecho cursos o incluso han trabajado con tecnologías recientes como ASP.NET MVC y Entity Framework, pero no tienen claros conceptos básicos como clases e interfaces. Eso no se puede sostener en el tiempo. No es que los frameworks hagan tontos a los desarrolladores, pero sin unas bases sólidas, al final las cosas se acaban cayendo y entramos en un modelo de desarrollo fundamentado en meter mano de obra, cobrar servicios y no valorar al programador, porque, realmente, no aporta mucho.

Ésta no es una responsabilidad exclusiva tuya como estudiante. Seguramente haya muchas cosas que estén fallando para llegar a esta situación, pero la realidad es que, hoy por hoy, el más interesado en tener una buena formación eres tú, y tienes en tu mano muchas herramientas para conseguirla.

Fuente: http://blog.koalite.com/


1 comentario

Covadonga Coloma · 24 marzo, 2017 a las 12:30 pm

Yo que empecé hace como 26 años como profesional de esto de la programación … quizás lo he tenido algo mas fácil, pues ibas aprendiendo todos esos conceptos y/o formas de relacionarte con tu ordenador y otros programadores según aparecían, pero aunque, como dejas muy claro, es bueno tener una buena base conceptual … por desgracia, tal y como apuntas … eso no te garantiza un puesto de trabajo … No obstante !Ánimo! que al final todo lo que aprendas … seguro que un día u otro … te sirve para algo …:)

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.