6.1 Escalera de Carrera
Los propios programadores también tienen gradaciones según su calificación. En algún momento se usaban conceptos como "coder", "programmer" y "hacker", pero ahora todos han adoptado nombres del IT americano.
Para el desarrollador, hay 6 gradaciones principales:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- Tech Lead
- Principal Software Engineer
De país en país, algunos parámetros pueden variar, pero la esencia es más o menos esta:
Intern Software Engineer — son los aprendices. Están en el proceso de aprender a programar, no tienen experiencia comercial ni experiencia en proyectos grandes. Normalmente trabajan bajo la supervisión de colegas más experimentados. Su tarea principal en el trabajo es estudiar 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 experiencia comercial seria o con menos de un año de experiencia. Trabajan bajo la dirección de desarrolladores más experimentados, implementando partes de proyectos y participando en ciclos de code review. Esta etapa de la carrera se centra en profundizar en las habilidades técnicas y en la 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 el mentorazgo sobre colegas menos experimentados y participan más activamente en discusiones arquitectónicas. Generalmente tienen entre 2 y 5 años de experiencia práctica.
Senior Software Engineer: son responsables del diseño e implementación de sistemas complejos, proporcionan tutoría y liderazgo dentro del equipo, participan en la planificación estratégica de proyectos y a menudo representan al equipo en las comunicaciones con clientes y otras partes interesadas. Generalmente tienen entre 5 y 10 años de experiencia.
TechLead: como líder técnico, es responsable del resultado técnico final del proyecto, lidera el desarrollo, resuelve las tareas más complejas, asegura el cumplimiento de los estándares técnicos y coordina las actividades de los desarrolladores.
Principal Software Engineer: trabaja en el nivel técnico más alto, a menudo participando 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 principal mentor para los líderes técnicos y es un experto clave en cuestiones técnicas complejas.
Las grandes empresas pueden tener roles y subroles adicionales. Por ejemplo, en Google existen estos roles:
- 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 de gran escala y complejidad, determina la dirección estratégica del desarrollo tecnológico en la empresa.
6.2 Productos Lego
Hace mucho tiempo (en 1975), Niklaus Wirth, creador del lenguaje Pascal, escribió el libro "Algorithms + Data Structures = Programs". Desde entonces, mucho ha cambiado.
Un producto de software moderno no es lo que era hace 10 años y definitivamente no lo que era hace 20 años. Ni hablar del año 1975: han pasado 50 años desde entonces.
El programador moderno ya no escribe programas a mano. Más bien, lo ensambla a partir de piezas prefabricadas (bibliotecas) y escribe código que ayuda a estas piezas a interactuar.
Los productos de software modernos pueden consistir en docenas y cientos de programas, algunos de los cuales se ejecutan en el ordenador del usuario, sus dispositivos móviles, y la mayoría en los servidores de un centro de datos.
Muchos de estos programas, como el servidor web o la base de datos, ya están escritos. Solo necesitas configurarlos correctamente para que funcionen como deberían. Aunque con el tiempo, el proceso de configuración puede volverse tan complejo que en realidad se convierte en desarrollo. 🤦♂️
Los programadores constantemente luchan consigo mismos. En lugar de volver a escribir código similar en diferentes programas, escriben bibliotecas que pueden configurarse (ajustarse) para sus necesidades y simplemente las conectan donde sea necesario.
Durante los últimos 20 años, los programadores han escrito muchas bibliotecas, frameworks y repositorios abiertos. Realmente hay millones de ellos. Y ahora, escribir todo el código desde cero se considera de mal gusto. En su lugar, se debe ensamblar un programa a partir de soluciones de calidad y probadas: bibliotecas, frameworks, paquetes y módulos.
Pero incluso este enfoque ya está quedando obsoleto. La tendencia de los últimos 10 años es trasladarse a la nube — grandes centros de datos que proporcionan a tus programas todo lo que necesitan. ¿Quieres una base de datos? Tenemos cientos para elegir. ¿Quieres un servidor web raro y único? Lo tengo. Cualquier capricho por tu dinero.
6.3 «Soy ingeniero» (c) Elon Musk
Ya no es necesario escribir cosas complicadas y aburridas. Ahora, si necesitas alguna funcionalidad compleja y genial, para eso siempre hay una biblioteca. Solo necesitas: a) saber que existe, b) encontrar la adecuada (puede haber docenas de análogos de diferentes calidades), c) averiguar cómo integrarla en tu proyecto.
El trabajo con este enfoque se ha vuelto más interesante. Ahora puedes agregar nuevas funcionalidades al producto diez 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 entrar en el panel de administración de la "nube" y activarlo.
Esto, por cierto, es una de las razones de la popularidad del Frontend. Ahora el backend complicado se puede escribir en JavaScript usando Node.js, o simplemente "activar" varios servicios en centros de datos en la nube. El Frontend dejó de depender fuertemente de las limitaciones del backend y se ha expandido a toda su capacidad. Y por su popularidad, parece que está haciendo bien su trabajo.
Y también la profesión de desarrollador Frontend se ha transformado en Frontend Fullstack Software Engineer. Un desarrollador Frontend moderno debe entender cómo funciona una base de datos para trabajar competentemente con ella. Entender HTML & JavaScript, NginX para configurar la interacción del frontend con el backend. Y Docker es necesario, ya es simplemente un estándar de la industria.
El desarrollo moderno en general se parece poco a lo que era hace 20 años. Un programador moderno escribe código no más del 50% de su tiempo. El resto del tiempo estudia documentación, aprende nuevas tecnologías y asiste a reuniones (juntas). Los programadores solitarios quedaron en el pasado.
GO TO FULL VERSION