¿Desarrollador amateur, júnior o sénior?
Un artículo de Rafa G. Blanes
Hace un tiempo escribí un artículo de título De qué Hablo cuando Hablo de Programar, que, por cierto, es uno de los más visitados de mi web en los últimos meses, y, por otra parte, hace poco he leído esta entrada en Medium con un título diría que hasta inquietante: Software development is a loser's game, aunque apuesto a que el autor tan solo quiere atraer a lectores con un título así.
En cualquier caso, ese artículo me ha empujado a reflexionar, una vez más, sobre qué distingue a un buen profesional de otro que no lo es tanto, en mi opinión, claro.
De modo que, si te consideras amateur o júnior, te animo a que sigas leyendo.
En los últimos años estamos viendo una avalancha de nuevas posibilidades de formación que atrae a muchísimas personas a aprender temas relacionados con el desarrollo de software, posiblemente porque hay mucho trabajo y es un sector en claro crecimiento.
MOOCs, bootcamps, diferentes itinerarios formativos (como la "FP" en mi país o módulos de ciclo superior), al margen de la formación más reglada de la universidad. Yo hice una carrera universitaria de cinco años hace más tiempo del que recuerdo y con el rimbombante título de Ingeniero Superior en Ingeniería Informática, tan solo para llegar a la conclusión años más tarde de que me sobraron al menos dos y de que lo más importante en mi desarrollo laboral y profesional lo he aprendido por mi cuenta y trabajando para empresas, esa es una verdad algo triste de aceptar, aunque este es otro debate.
Pero estamos en 2021, la pandemia ha acelerado la digitalización (por fin) de compañías, procesos y todo lo digitalizable, de modo que miles de personas, de un año para otro, comienzan a realizar trabajos de programación, de front-end, de back-end, etc., quizá con las tecnologías más de moda del momento (o aquellas en las que existe más empleabilidad) y que apuesto que en unos años habrán sido olvidadas.
Y todo esto, en mi opinión, es muy bueno, porque evidencia que nuestro sector (todo lo relacionado con IT) crece mucho más que otros. ¿Pero qué voy a objetar yo que precisamente que tengo libros y audiolibros publicados algunos de los cuales pueden ser de mucha utilidad para los recién llegados?
Sin embargo, no todo es tan bueno.
Esta avalancha de nuevos profesionales es aprovechada por compañías para tener un coste laboral menor creyendo que el trabajo que pueden realizar (productos software) va a ser el mismo que el de otros profesionales que llevan diez o más años de actividad, dinámica seguramente favorecida por clientes que no comprenden el esfuerzo en horas que hay destrás de cualquier desarrollo.
No me gustan los términos "programador júnior" ni "programador sénior", porque, ¿quién acredita que sea un "sénior" de verdad? Lamentablemente, tan solo los años trabajando no te avalan como mejor profesional, puesto que puedes haber estado haciendo lo mismo repetidamente ganando muy poca experiencia. Es más, lo que suelo comprobar, es que las personas, con honrosas excepciones, se acostumbran a hacer las cosas de la misma forma y de ahí no salen nunca.
De este modo, no me parece descabellado pensar que en nuestro sector, tan solo se pueden encontrar un 20% de profesionales aproximadamente. Esto no es un dato que yo haya calculado, tan solo es una intución mía con todo lo que he visto en mis experiencias en los últimos años. O por decirlo de otro modo, el porcentaje de profesionales de verdad en el desarrollo de software es muy inferior en relación al de juniors y amateurs.
Pero, ¿qué significa ser profesional realmente?
Este post va dirigido a todos aquellos que han llegado al desarrollo de software de un modo u otro, tanto si les gusta esta actividad como si no, o si tan solo lo ven como algo con salida en lo que trabajar como sea para pagar las facturas a final de mes. Insisto, que a mí todo esto me parece fenomenal y que lo que me anima a escribir este artículo es precisamente aportar algo de luz y aclarar que programar no es solo programar... porque lo que sí quiero destacar es qué es lo que yo considero que diferencia a un profesional desarrollador de software de uno amateur. Y no pasa nada por ser amateur, al contrario, si de verdad todo lo relacionado con el software te gusta y apasiona, entonces debes saber cómo crear proyectos con la misma calidad que el profesional en el que te quieres convertir.
La carrera y experiencia como desarrollador profesional de software no la obtienes en un año; como mucho, en ese tiempo, adquieres conocimientos teóricos, alguna práctica y poco más, algo que difícilmente te va a dar tiempo aplicar en el entorno real de una empresa en productos y proyectos reales.
Tan solo poner el dedo en la llaga, eres un programador amateur si...
- No te gustan los estándares (esto es, en tu departamento vas a tu bola y haces las cosas como quieres sin seguir las guías o normas establecidas, si es que las hay...).
- Crees que escribir software es crear una nueva funcionalidad y pensar que lo que has hecho "a la primera" es intocable y que nunca tiene que ser modificado.
- Ignoras la naturaleza incremental (y de artesanía) del desarrollo de software.
- Te cuesta trabajo volver atrás para mejorar o simplificar algo que ya hiciste (algo implícito en el punto anterior).
- No te preocupas de que tu código sea legible para otros porque ignoras todo lo relacionado con las prácticas de código limpio, de refactorings y de patrones (antipatrones y code smells, ya que estamos...)
- Pasas de la metodología (si es que existe en tu empresa, claro está), de modo que no sabes desglosar el trabajo en tareas e iteraciones, porque tampoco te suena todo eso de scrum, kanban, etc. Esto es, no sabes trabajar ordenadamente y bajo una planificación (o nadie te ha mostrado cómo).
- Copias y pegas demasiado de Stack Overflow sin tratar de entender cómo funcionan esos snippets de código que te vienen bien.
- No haces testing, ni siquiera pruebas unitarias, que es lo mínimo, quizá porque te han dicho que eso retrasa el desarrollo, cuando es justo al revés. ¿El resultado? Aplicaciones más monolíticas. (¿Mono qué?)
- No comprendes que en ocasiones la falta de rendimiento de un sistema software se debe a un mal diseño.
- No distingues entre un diseño monolítico y otro extensible, testeable y mantenible, porque no comprendes las ventajas de esto último.
- Hablando de diseño, no has oído nunca el concepto de diseño emergente a medida que se incluye nueva funcionalidad.
- Eso de documentar no va contigo, pero sí llenar el código de comentarios innecesarios porque es difícil de entender.
- No usas bien la orientación a objetos, utilizando las clases como mero sumidero de funciones.
- Eso de programar teniendo en cuenta todo momento los principios S.O.L.I.D. y otros, te resulta demasiado abstracto.
- No te preocupas de limpiar la organización de los assets tu proyecto, piensas que eso es perder el tiempo.
- Ignoras también que para crear una tubería de integración continua, necesariamente esto afecta al diseño del código.
- No tienes cultura de equipo y suspendes en habilidades blandas (soft-skills).
- Te cuesta eso de aprender nuevas cosas, con las que sabes crees que ya es suficiente.
Y paro porque me estoy amargando un poco :-), tampoco digo que haya que ser experto en todas esas áreas, pero sí conocer gran parte de ellas en cierta medida.
Por resumirlo de algún modo: no eres un programador porque conozcas hacer algunas cosas con el lenguaje x, aunque cada uno se autoetiqueta como quiere.
Tan solo para algunos de los puntos anteriores existe una bibliografía tan extensa que hay que digerir y poner en práctica durante muchísimo tiempo.
Lo que quiero decir es que, programar, al menos escribir código profesional en un entorno también profesional, para mí, es conocer todos los puntos anteriores (y muchos otros), y aplicarlos, claro está, algo que difícilmente se puede aprender tan solo en un par de años de formación.
Por último, otra creencia muy amateur: el de creer que todo lo anterior requiere más esfuerzo, retrasa el trabajo y hace que producir software sea más costoso...
Ahí lo dejo.
Sin ánimo de desalentar a nadie, sino más bien todo lo contrario, te animo a que si te has quedado en blanco con algunos de los puntos anteriores, comiences a documentarte y a seguir aprendiendo. Es más, la carrera de desarrollador profesional es un aprendizaje continuo en todas las áreas anteriores.