6.1 Escalera profesional
Los programadores también tienen distintas categorías según su nivel de cualificación. Antes se usaban conceptos como "coder", "programador" y "hacker", pero ahora todos han adoptado términos en inglés del mundo de TI de Estados Unidos.
Para un desarrollador hay 6 grados principales:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
De un país a otro e incluso de una empresa a otra, algunos parámetros pueden variar, pero en esencia son:
Intern Software Engineer — son becarios. Están en el proceso de aprender programación, no tienen experiencia comercial ni experiencia en grandes proyectos. Generalmente trabajan bajo la supervisión de colegas más experimentados. Su tarea principal en el trabajo es aprender la base de código y los fundamentos del desarrollo de software, realizando tareas simples de codificación y participando en pruebas.
Junior Software Engineer — ya son programadores, pero sin una experiencia comercial seria o con menos de un año de experiencia. Trabajan bajo la dirección de desarrolladores más experimentados, realizando partes de proyectos y participando en ciclos de code review. Esta etapa de la carrera se centra en profundizar habilidades técnicas y comprensión de las tareas del proyecto.
Middle Software Engineer (o simplemente Software Engineer): tienen más autonomía en la toma de decisiones técnicas, son responsables de partes significativas del proyecto, comienzan a tutelar a colegas menos experimentados y participan más activamente en la discusión de la arquitectura. Generalmente tienen 2–5 años de experiencia práctica.
Senior Software Engineer: son responsables del diseño e implementación de sistemas complejos, brindan mentoría y liderazgo dentro del equipo, participan en la planificación estratégica de proyectos y a menudo representan al equipo al comunicarse con clientes y otras partes interesadas. Generalmente tienen 5–10 años de experiencia.
TechLead: es responsable del resultado técnico final del proyecto, dirige el desarrollo, resuelve las tareas más complejas, asegura la adherencia a los estándares técnicos y coordina las actividades de los desarrolladores.
Principal Software Engineer: trabaja al más alto nivel técnico, a menudo participa en la formación de la estrategia técnica de la empresa, el desarrollo de soluciones innovadoras y el establecimiento de estándares técnicos, sirve como mentor principal para los líderes técnicos y es un experto clave en cuestiones técnicas complejas.
Es interesante. Las grandes empresas pueden tener roles y subroles adicionales. Por ejemplo, en Google existen roles como:
- Staff Software Engineer (L6): tiene una influencia significativa en la política técnica de su departamento.
- Senior Staff Software Engineer (L7): trabaja en proyectos a gran escala y complejos, define la dirección estratégica del desarrollo tecnológico en la empresa.
6.2 Productos Lego
Hace tiempo (en 1975) Niklaus Wirth, el creador del lenguaje Pascal, escribió un libro llamado "Algoritmos + Estructuras de Datos = Programas". Desde entonces muchas cosas han cambiado.
El producto de software moderno no es lo que era hace 10 años, y mucho menos lo que era hace 20 años. Ni hablar de 1975, han pasado 50 años desde entonces.
El programador moderno ya no escribe programas manualmente. Más bien los ensambla a partir de piezas listas (bibliotecas) y escribe código que ayuda a que esas partes interactúen.
Los productos de software modernos pueden consistir en docenas y cientos de programas. Algunos de ellos se ejecutan en la computadora del usuario, en sus dispositivos móviles, pero la mayoría en servidores en un centro de datos.
Muchas de estas aplicaciones, como un servidor web o una base de datos, ya están escritas. Solo necesitan ser configuradas correctamente para que funcionen como es debido. Aunque con el tiempo, el proceso de configuración puede volverse tan complicado que prácticamente se convierte en desarrollo. (*facepalm*)
Los programadores están en una constante lucha consigo mismos. En lugar de escribir nuevamente un código similar en diferentes programas, escriben bibliotecas que pueden configurarse para sus necesidades y luego simplemente las integran en todos los lugares requeridos.
En los últimos 20 años, los programadores han escrito muchísimas bibliotecas, frameworks y repositorios abiertos. Realmente son millones. Y ahora se considera de mal gusto escribir todo el código desde cero. En lugar de eso, debes armar el software usando soluciones de calidad y comprobadas: bibliotecas, frameworks, paquetes y módulos.
Pero incluso ese enfoque ya está quedando obsoleto. La tendencia de los últimos 10 años es moverse a la nube, grandes centros de datos que proporcionan todo lo que necesitan tus programas. ¿Quieres una base de datos? Tenemos cientos para elegir. ¿Quieres un servidor web único y raro? ¡También los hay! Cualquier capricho por tu dinero.
6.3 «Soy un ingeniero» © Elon Musk
Ya no es necesario escribir cosas complejas y aburridas. Si necesitas alguna funcionalidad sofisticada y genial, ya hay una biblioteca para ello. Solo necesitas: a) saber que existe, b) encontrar la adecuada (pueden haber decenas de análogos de distinta calidad), c) entender cómo integrarla en tu proyecto.
El trabajo desde este enfoque se ha vuelto solo más interesante. Ahora puedes añadir nueva funcionalidad a un producto 10 veces más rápido. Hace 30 años, si necesitabas un servidor web, tenías que escribirlo. Hace 20 años, comprarlo, instalarlo y configurarlo. Y ahora, simplemente entras al panel de administración de "la nube" y lo activas.
Esta es, por cierto, una de las razones de la popularidad del lenguaje Python. Es muy adecuado no para escribir soluciones grandes y complejas, sino para "pegar" diversas partes entre sí. Y, por lo que parece, maneja eso excelentemente.
Y la misma profesión de desarrollador de Python se ha transformado a Python Fullstack Software Engineer. Un desarrollador de Python moderno debe entender cómo funciona una base de datos para trabajar eficientemente con ella. Entender HTML & JavaScript para configurar el funcionamiento del frontend con un backend en Python. Y Docker también es necesario — es un estándar en la industria ahora.
El desarrollo moderno ya no se parece mucho a lo que era hace 20 años. El programador moderno escribe código no más del 50% de su tiempo. Todo el tiempo restante está leyendo documentación, explorando nuevas tecnologías y asistiendo a reuniones. Los programadores solitarios son cosa del pasado.
GO TO FULL VERSION