CodeGym /Cursos /C++ SELF /El camino del programador

El camino del programador

C++ SELF
Nivel 7, Lección 6
Disponible

El camino del programador

1. Escalera profesional

Los programadores también tienen gradaciones según su cualificación. Antes se usaban términos como «coder», «programmer» y «hacker», pero ahora la mayoría usa nombres en inglés provenientes del sector TI estadounidense.

Para un desarrollador hay 6 niveles 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 diferir, pero la idea es aproximadamente la siguiente:

🌱 Intern Software Engineer — son los pasantes. Están en proceso de aprendizaje de la programación, no tienen experiencia comercial ni participación en proyectos grandes. Normalmente 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 sencillas de codificación y participando en las pruebas.

🐣 Junior Software Engineer — ya son desarrolladores, pero sin experiencia comercial sólida o con menos de un año de experiencia. Trabajan bajo la guía 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 las habilidades técnicas y la comprensión de las tareas del proyecto.

🦾 Middle Software Engineer (o simplemente Software Engineer): tienen mayor autonomía para tomar decisiones técnicas, son responsables de secciones importantes del proyecto, empiezan a mentorizar a colegas menos experimentados y participan más activamente en la discusión de la arquitectura. Normalmente tienen 2–5 años de experiencia práctica.

🧑‍🔬 Senior Software Engineer: son responsables del diseño e implementación de sistemas complejos, ofrecen mentoría y liderazgo dentro del equipo, participan en la planificación estratégica de proyectos y a menudo representan al equipo en la comunicación con clientes y otras partes interesadas. Normalmente tienen 5–10 años de experiencia.

🧠 TechLead: tiene la responsabilidad del resultado técnico final del proyecto, dirige el desarrollo, resuelve las tareas más complejas, asegura el cumplimiento de los estándares técnicos y coordina la actividad de los desarrolladores.

🏆 Principal Software Engineer: trabaja al nivel técnico más alto, frecuentemente participa en la formación de la estrategia técnica de la empresa, en el desarrollo de soluciones innovadoras y en 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.

Esto 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 complejidad, definiendo la dirección estratégica del desarrollo tecnológico en la empresa.

2. Productos tipo Lego

Hace mucho tiempo (en 1975) Niklaus Wirth, creador del lenguaje Pascal, escribió el libro «Algorithms + Data Structures = Programs». Desde entonces mucho ha 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. Sobre 1975 ni hablar — han pasado 50 años ⏳

Hoy en día el programador ya no escribe programas enteramente a mano. Más bien los monta a partir de piezas ya hechas (bibliotecas) y escribe código que permite que esas piezas interactúen entre sí🧩. Los productos modernos pueden constar de decenas o cientos de programas. Algunos se ejecutan en el ordenador del usuario, en sus dispositivos móviles, y la mayor parte en servidores en centros de datos.

Muchos de esos programas, como el servidor web o la base de datos, ya están escritos. Solo hace falta configurarlos correctamente para que funcionen como se espera. Aunque con el tiempo el proceso de configuración puede volverse tan complejo que en la práctica se convierte en desarrollo. 🤦‍♂️

Los programadores luchan constantemente con este dilema. En lugar de volver a escribir código similar en distintos programas, crean bibliotecas que se pueden configurar según las necesidades y luego las incorporan donde hagan falta.

En los últimos 20 años se han escrito muchísimas bibliotecas, frameworks y repositorios de código abierto. Hay millones de ellos. Y hoy en día escribir todo el código desde cero se considera mala práctica. En lugar de eso hay que ensamblar el programa a partir de soluciones probadas y de calidad: bibliotecas, frameworks, paquetes y módulos 🧱

Pero incluso ese enfoque está envejeciendo. La tendencia de los últimos 10 años es la migración 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. ¿Necesitas un servidor web poco común? ¡También los hay! Cualquier capricho se consigue pagando.

3. «Yo — ingeniero» © Elon Musk

img

Ya no hace falta escribir manualmente cosas complejas y aburridas. Si necesitas alguna funcionalidad, ya existen bibliotecas y frameworks preparados. Tu tarea: a) conocer su existencia, b) encontrar la opción adecuada (a menudo hay varios análogos con distinta calidad y matices), c) entender cómo integrarla en tu proyecto 🎓

Esto hace el trabajo mucho más interesante. Ahora puedes añadir nueva funcionalidad al producto 10 veces más rápido. Hace 30 años, si necesitabas un servidor web, lo escribías desde cero. Hace 20 años — lo comprabas, instalabas y configurabas. Y ahora — simplemente entras al portal en la nube de Azure o AWS y activas el servicio que necesitas 🌐

Por cierto, esta es una de las razones de la popularidad del lenguaje C++. Es perfectamente adecuado para tareas donde el rendimiento es crítico: programación de sistemas, desarrollo de juegos, sistemas integrados y servicios de alta carga. Al mismo tiempo, C++ tiene un rico ecosistema de bibliotecas y herramientas: existen soluciones listas para usar en redes, bases de datos, gráficos, computación paralela y mucho más.

En consecuencia, la profesión de C++ Software Engineer con el tiempo ha llegado a abarcar un stack cada vez más amplio. Para un desarrollador moderno es importante entender cómo funciona una base de datos para construir correctamente la interacción con ella. Es necesario tener conocimientos sobre la arquitectura de sistemas distribuidos y la comunicación en red. Y, por supuesto, hoy en día no se va a ninguna parte sin Docker; la contenedorización hace tiempo que se convirtió en un estándar de la industria 🐳.

El desarrollo moderno en general es muy distinto de lo que era hace 20 años. El programador escribe código menos del 50% del tiempo — el resto se dedica a leer documentación, aprender nuevas tecnologías, diseñar y trabajar en equipo en reuniones. El desarrollador solitario es ahora más bien una excepción.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION