La inexperiencia de la industria del software.
A lo largo de la relativa corta vida del sector del desarrollo del software, que recordemos apenas tiene poco más de 60 años, lo cual es nada si lo comparamos con otras disciplinas como las ingenierías industriales, la demanda de desarrolladores no ha hecho más que crecer. En concreto, tal como indica Robert C. Martin en su charla The Scribe’s Oath, en la que discute aspectos de la responsabilidad civil de los ingenieros de software, la cantidad de desarrolladores en la industria del desarrollo software a través del tiempo sigue una progresión muy similar a la Ley de Moore: se duplica cada cinco años. Esto tiene una consecuencia lógica inmediata, que es que en cualquier momento dado, la mitad de los programadores del mundo tienen menos de cinco años de experiencia. Es decir, la industria del desarrollo de software vive en una constante y perpetua inexperiencia.
Este fenómeno es agravado por el gap entre la oferta de formación y la realidad empresarial. Los planes de estudio de nuestras universidades no están elaborados con el asesoramiento de profesionales de la industria, sino por académicos con pocas nociones de esta realidad. No sólo ello imprime un marcado carácter teórico a los planes de estudio, lo cual no es un problema per se, sino que muchas de las técnicas y metodologías ya consolidadas hoy en día en la industria, no se imparten: el control de versiones, la importancia de las pruebas automáticas, técnicas de refactorización de código y reingeniería de sistemas, arquitectura de software, infraestructura como código… son conceptos ajenos a los actuales planes de estudios universitarios.
En el otro lado del espectro se encuentran los bootcamps, una opción recientemente popularizada como alternativa rápida a la formación universitaria. Los bootcamps son cursos acelerados de pocos meses, o incluso semanas, que prometen al alumno una inserción inmediata en la industria. En estos cursos, el alumno adquiere, de forma intensiva, la experiencia y conocimientos exclusivamente necesarios para ser competentes en un stack tecnológico, por ejemplo, backends con Node.js o frontends con React. Y este es precisamente el problema: aunque el alumno es capaz de implementar unos requerimientos funcionales con una tecnología concreta, carece de conocimientos más amplios sobre buenas prácticas, trabajo en equipo, ingeniería de sistemas, por lo que será incapaz de entregar un trabajo de calidad, mantenible y extensible en el tiempo.
El problema
Todo ello obliga a que el recién graduado desarrollador o ingeniero de software, no esté totalmente capacitado para desempeñar su trabajo, por lo que se verá obligado a adquirir los conocimientos y experiencia que le falten en su puesto de trabajo. Imagínese por un momento que un cirujano aprendiese a suturar una herida mientras lo está operando a vida o muerte. Usted podría alegar: “pero Pedro, los programadores no ponen en riesgo las vidas de las personas”; sin embargo, ¿acaso no está presente el software en cada vez más aspectos de su vida cotidiana?
Sea o no una cuestión de vida o muerte, es indudable que la inexperiencia de los desarrolladores junior es un riesgo para los proyectos de software, y la cantidad de los mismos en la industria amplifica el riesgo aún más. Por ello, desde las empresas y la comunidad debemos aplicar medidas para mitigar este riesgo.
Soluciones
Cada vez más empresas incorporan budgets de formación para sus desarrolladores. Aparte de ser un excelente perk para retener talento, puesto que los desarrolladores tienden a ser un colectivo en constante expectativa de aprendizaje y crecimiento profesional, y valorarán mucho iniciativas de este tipo, es una excelente y relativamente barata manera de mitigar el factor inexperiencia de los desarrolladores más junior, explotando el potencial talento interno, y reduciendo la necesidad de recurrir a una complicada y cara búsqueda de talento senior en el mercado. Un buen programa de formación interna puede incluir desde financiación de una biblioteca de empresa, suscripción a plataformas de aprendizaje como Udemy o Coursera, o asistencia a conferencias, hasta iniciativas de formación colaborativa como Comunidades de práctica, formación específica in-house, o coaching personalizado. En los últimos años, algunas empresas incluso se aventuran a ofrecer programas de aprendizaje, en los que durante un periodo de tiempo desde semanas a meses, el empleado dedica el 100% de su tiempo a formarse y prepararse para los desafíos de la empresa.
La comunidad también juega un papel crucial en este escenario. Movimientos como el Software Craftsmanship promulgan la unión de profesionales del sector con el fin de aprender del resto de miembros de la comunidad, mediante la realización de meetups, conferencias, u otras actividades como Coding Dojos, Code Retreats, etc. Las empresas también pueden tener tener impacto en la comunidad, ya sea aportando medios para la participación de sus empleados en estos eventos, cediendo espacios a la comunidad, etc.
Conclusión
En mi opinión, el escenario actual es un buen comienzo, pero es insuficiente: el problema de la inexperiencia sólo crecerá con el tiempo, por lo que desde las empresas debemos asumir de forma seria el compromiso de resolverlo dotando de más medios para la formación, si queremos reducir tanto los crecientes costes de desarrollo de software como los riesgos de fracaso de los proyectos software.