Antes de leer esta publicación, te pido que ignores tu ego, solo por unos momentos. Este texto no fue fácil de escribir, y creo que tampoco será fácil de leer. Tenga en cuenta que no quiero ofender a nadie. Sin embargo, creo que es hora de hablar en serio sobre nuestras carreras.
NOTA: Esta publicación fue motivada por una discusión entre amigos, en un grupo de WhatsApp, de una comunidad profesional en la que soy miembro.
A pedido explícito de los involucrados, no mencionaré nombres. Sin embargo, tuve el desafío de hablar en público con la misma franqueza que usé en ese grupo.
Mi pregunta no tiene nada que ver con cuánto sabe sobre ese framework lanzado la semana pasada. No estoy hablando de microservicios. No estoy hablando de DDD. No estoy hablando de ese lenguaje de programación popular. No estoy hablando de esa nueva base de datos. No estoy hablando de nada que generalmente te haga sentir como un impostor.
Cuando hablé de estar preparado, ¡estaba hablando de cuánto sabes sobre lo básico!
NOTA: En esa discusión privada, un amigo argumentó que las herramientas adecuadas podrían ayudar a evaluar la calidad de un algoritmo. Desafortunadamente, no pueden determinar si el algoritmo elegido es la opción correcta para resolver un problema o si escalará bien.
Ni Resharper ni Sonarqube le dirán si su código escala mal. En mi experiencia, ni siquiera las pruebas de control de calidad son suficientes; después de todo, no reflejan lo que está en producción. Al final, se necesita una combinación de experimentación y conocimiento.
Lo más triste es que [tweet]si no sabe si su código “escala” bien, probablemente no escala[/tweet].
¿Cuánto sabes sobre las estructuras de datos? ¿Implementarías una hashtable? Si no puede, ¿qué criterios tiene para elegir entre las diversas opciones disponibles en un framework moderno como .NET o Java?
NOTA: En la misma discusión, el mismo amigo sugirió que “en el mundo real” las personas no tienen la capacidad de implementar estructuras de datos por sí mismas. Todavia, aun así, estas personas están entregando código en producción que cumple con los deseos de los clientes.
¿Estamos incluso entregando el software que nos pagan por desarrollar?
¿Cuánto sabes sobre cómo funcionan las computadoras? Si sabe poco, ¿cómo explica ese “problema de redondeo” a sus clientes? ¿Qué criterios utiliza para optimizar su código para la máquina que ejecutará su código?
¿Cuánto sabes acerca de cómo se asigna y desasigna la memoria que usa su código? ¿Qué criterio utiliza para decidir si crear una clase o una estructura (específicamente hablando de C#)?
Conocer los fundamentos es el mínimo (el fundamental) para que podamos realizar cualquier función. Entonces, ¿por qué a menudo ignoramos los “fundamentos” en el desarrollo de software?
Estudiar los “conceptos básicos de la informática” puede no ser su enfoque, o lo que ha estado aprendiendo recientemente. Tal vez porque las personas que te influyen (tus referencias técnicas) no te han dicho que eso es importante. Tal vez, porque su jefe no tiene las condiciones (ni siquiera las técnicas) para evaluarlo por cuánto ha dominado (realmente) lo que está haciendo. Todavia, eso no cambia el hecho de que es difícil construir algo sustancial sin conocer los “fundamentos”.
NOTA: Ignorar lo básico puede incluso llevarlo a adoptar todos los patrones y frameworks del mundo para ofrecer un CRUD. Puede que estés haciendo esto solo porque alguien que conoces ha insinuado que este es el camino.
En una buena universidad, aprendes los “fundamentos”. Desafortunadamente, muchas personas repiten que el enfoque de los cursos de pregrado y posgrado debería ser más “práctico”. Al igual que con las matemáticas, quiero creer que el problema es el enfoque, no el tema.
No digo que la educación formal o las certificaciones sean la única forma de aprender lo básico. Seguramente, cualquiera (creo), con algo de disciplina, puede entender y aprender cualquier cosa. De todos modos, sin el requisito de un currículum, el desafío resulta ser mucho más significativo.
El Uncle Bob dijo que somos los nuevos escribas. El software está absorbiendo el mundo y nosotros, que trabajamos con software, tenemos posibilidades reales de desempeñar un papel de liderazgo. Podemos cambiar la sociedad para bien o para mal.
Las oportunidades son enormes, los desafíos también. Necesitamos ser profesionales y desarrollar profesionales. [tweet]Necesitamos desarrolladores auténticos con una base sólida. Los riesgos son demasiado altos para que seamos una clase egocéntrica de aficionados pagados.[/tweet]
NOTA: No soy dueño de la verdad. Estoy muy lejos de saberlo todo. Mira, incluso si quisieras, nunca lo sabrás todo. Todavia, todos los días, hace casi treinta años (comencé a escribir código en la escuela), primero trato de aprender lo más importante.
Si te ofendí, lo siento mucho.