← Volver

¿Desarrollador amateur, júnior o sénior?

Diferenciar entre un desarrollador amateur, junior y senior no se trata solo de años o de lenguaje: implica calidad, hábitos, diseño, disciplina y capacidad de crecer profesionalmente.

Coaching

Hace un tiempo escribí un artículo con el 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 leí esta entrada en Medium con un título que diría que es 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 junior, te animo a seguir 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), además 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, precisamente yo 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 detrás de cualquier desarrollo.

No me gustan los términos “programador junior” ni “programador senior”, porque ¿quién acredita que sea un “senior” 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 aproximadamente un 20% de profesionales. Esto no es un dato que yo haya calculado; tan solo es una intuició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 con el 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: a mí todo esto me parece fenomenal, y 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 a 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, refactorings y patrones (anti-patrones y code smells, ya que estamos).
  • Pasas de la metodología (si es que existe en tu empresa, claro), 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 los principios S.O.L.I.D. y otros te resulta demasiado abstracto.
  • No te preocupas de limpiar la organización de los assets del 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 aprender nuevas cosas, con las que sabes 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 algunas cosas con el lenguaje X, aunque cada uno se autoetiquete como quiera.

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 solo en un par de años de formación.

Por último, otra creencia muy amateur: la 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.