¿Qué diferencia a los programadores junior y senior, además de años de experiencia?

Niels Bohr dijo una vez: “ Un experto es un hombre que ha cometido todos los errores que se pueden cometer, en un campo estrecho.

El crecimiento profesional en ingeniería de software (y muchas otras áreas) está determinado por la profundidad del conocimiento y la amplitud de la experiencia. Un proyecto puede escalar tanto horizontal como verticalmente, lo que requiere un conjunto diferente de habilidades y experiencia en aplicaciones prácticas que siguen ambos patrones.

En la práctica, un desarrollador senior puede resolver casi cualquier tipo de problema con menos supervisión. Pueden evaluar los riesgos, hacer las preguntas de seguimiento correctas, determinar el flujo de trabajo correcto, analizar los posibles cuellos de botella y ofrecer una solución estable (generalmente bien documentada y probada).

Un desarrollador junior puede resolver un conjunto limitado de problemas con un subconjunto más pequeño de soluciones alternativas .

Por ejemplo, una organización puede necesitar un motor de blogs simple (solo por el argumento).

El junior probablemente esté familiarizado con un lenguaje de programación, marco o plataforma. Lo elegirán de inmediato e implementarán una solución semi-estable que resuelve la mayoría de los problemas en ciertos casos de uso.

Un desarrollador senior adoptará un enfoque más prolífico . Analizarán los objetivos comerciales y los desafíos técnicos (cantidad esperada de tráfico, roles y capacidades de los usuarios, diferentes casos de uso y diagramas de flujo proporcionados por el equipo de PM).

Elegirán un cierto marco que se adapte a las limitaciones comerciales y presupuestarias. Además, el ingeniero superior propondrá varias formas diferentes de implementar eso con sus ventajas y desventajas. El equipo de gestión puede revisar las opciones y elegir la que corresponda mejor a las necesidades del cliente.

Esto puede incluir un esquema MySQL estándar, una base de datos NoSQL para almacenar ciertas actividades, una aplicación SPA que interactúa con el motor a través de una API REST o lo que el ingeniero considere que es la mejor opción posible.

Este es un ejemplo limitado, por supuesto, pero muestra el enfoque diferente dada la comprensión y experiencia más amplia y profunda del desarrollador senior. Además, el ingeniero superior normalmente ha experimentado con todos los enfoques y sabe lo que realmente sale mal en la mayoría de los casos.

Los problemas teóricos en un libro son diferentes de lo que sucede en la acción. Y si el desarrollador senior ya ha pasado varios años dentro de la organización, ya puede evaluar el conjunto de habilidades de los otros miembros del equipo, sus fortalezas y debilidades, el flujo de trabajo estándar que lleva a cabo la administración y lo que resultaría en la mejor solución dentro de los límites requisitos

La antigüedad en ingeniería es un continuo que proviene del alcance del proyecto y el impacto comercial que va más allá del código escrito. Como dice la respuesta de Alan Mellor, aprender de la entrega de productos produce enormes beneficios. Más proyectos significa aprender de más compañeros de trabajo que han destilado la experiencia práctica de todos sus antiguos colegas, lo mejor de sus antiguos compañeros de trabajo, etc.

Los nuevos graduados de CS comienzan con conocimientos básicos de informática y programación, luego trabajan en pequeñas tareas autónomas con una estrecha supervisión, aprendiendo a hacer frente a grandes bases de código antiguas y al proceso inherente al desarrollo comercial.

Los agentes de manejo manejan de manera autosuficiente las características de los productos existentes (semanas o meses), aplicando prácticas comerciales (pero generalmente no las eligen). En las grandes empresas esto a menudo viene con una promoción. 1–2 años de experiencia deberían conducir aquí.

Manejo de todos los aspectos de proyectos moderadamente complejos (6 meses o más) en piezas de software más grandes que incluyen diseño, prueba, implementación y soporte. Poseer programas o sistemas. Mentoría de ingenieros junior. Quizás liderando equipos pequeños (3–6 personas). Este es generalmente el nivel que las personas usan cuando hablan de “ingenieros de software senior”, que corresponden a Amazon SDE3, Facebook nivel E5, Google Senior Engineer L5, Microsoft Senior SDE nivel 63/64. Esta es la promoción final para la mayoría de los ingenieros, y un nivel que todos deben alcanzar en un período de tiempo razonable o ser administrados por muchas compañías. 5 años de la experiencia adecuada lo llevan aquí, señalando que encontrar proyectos lo suficientemente grandes es un problema en algunas organizaciones. 10 años es lento pero no necesariamente inaceptable. Las personas aún trabajan como ingenieros de software sin alcanzar este nivel, pero deben apresurarse mucho más para encontrar trabajo.

Liderar proyectos que requieren múltiples equipos, señalando que eso significa tener seguidores entusiastas, no decirle a la gente qué hacer, lo que significa que ha fallado como líder. Establecer dirección técnica dentro de los equipos. Poseer productos de software complejos con una comprensión experta de extremo a extremo. En este punto, el código que escribes personalmente hace menos para las empresas que lo que haces multiplicando y enfocando la producción de las personas que te rodean. Se trata de apalancamiento. Personal o nivel principal con títulos que varían. 10-15 años de la experiencia correcta es un marco de tiempo razonable.

Trabajando con la gerencia y otras unidades de negocios, observando las necesidades del negocio, identificando oportunidades y haciendo lo que es técnicamente necesario para optimizar los resultados. Esencialmente el nivel anterior con un enfoque más estratégico y mejores habilidades blandas.

En el camino, los ingenieros también obtienen experiencia en el envío y la evolución de productos. Los buenos aprenden lo que se debe hacer y evitar enviar en horarios rápidos y predecibles. Probablemente se necesitan tres proyectos grandes cada año, los proyectos más pequeños que llevan allí y más de 15 años en total para obtener un buen manejo en la entrega de productos.

Hay una serie de características que los desarrolladores demuestran a medida que aumenta su antigüedad. Creo que una manera simple de pensar en la diferencia entre los desarrolladores junior y más senior es:

los desarrolladores junior hacen lo que se les dice

los desarrolladores senior deciden qué hacer

En lo anterior, no quiero decir que los desarrolladores senior le digan a los desarrolladores junior qué hacer, aunque ese puede ser el caso. El punto es que los desarrolladores senior identifican su trabajo y determinan cómo resolver los problemas.

Algunas otras características de los desarrolladores senior:

  • son confiables y se sabe que son capaces de resolver problemas grandes / difíciles
  • centrarse en su impacto comercial primero y otros factores en segundo lugar
  • mentor y desarrollar otros desarrolladores
  • asumir el trabajo que involucra a otros equipos
  • tomar decisiones difíciles de compensación para la base de código y la organización de ingeniería

También vale la pena mencionar que a menudo hay muchos niveles “superiores” en roles técnicos. En Shopify hay senior, lead, senior lead, director y vicepresidente. En Mozilla hay altos funcionarios, personal, personal superior, principios, distinguidos y compañeros.

Años de entrega.

Cuando era un joven, ya sabía básicamente cómo codificar y tenía un par de juegos de 8 bits a mi nombre.

30 años después, y he diseñado y enviado muchos más sistemas.

He aprendido qué sale mal y dónde hacer compromisos. He experimentado muchos obstáculos y los he superado.

Esa es la diferencia.

Mis habilidades como junior funcionaron cuando todo funcionó.

Mis habilidades como senior hacen que las cosas funcionen cuando esas cosas no quieren. E incluyen habilidades en ventas, experiencia del usuario, limitaciones de fabricación, capacidad de prueba, trabajo en equipo, etc.

Cuando desempaqueta la palabra “experiencia”, ve lo que realmente significa. No es solo escribir el mismo programa cincuenta veces.

Buena pregunta sin embargo.

Los buenos juniors con los que trabajo pueden codificar bien, son otras cosas con las que puedo ayudar.

No soy un desarrollador senior, pero trabajé estrechamente con ellos y luego observé algunas cosas realmente geniales que poseen.

Ellos saben usar herramientas

Al ser un desarrollador, todos usamos muchas herramientas, pero hay una ligera diferencia entre usar una herramienta y usarla en su nivel máximo . Saben cómo y dónde usar una herramienta en particular y lo más importante de la manera más efectiva.
Siendo un desarrollador junior la mayoría de las veces estamos usando herramientas pero no estamos familiarizados con todos los aspectos de esa herramienta en particular.

Podían ver una imagen grande

Esto es lo que solo podría venir a través de la experiencia.
Al ser un desarrollador junior, siempre es difícil ver el resultado final antes de comenzar un proyecto, siempre y cuando no tenga suficiente experiencia.

Siempre buscan la mejor solución disponible

No intentan resolver un problema, sino que siempre buscan la mejor solución disponible.
Donde sea, la mayoría de las veces los desarrolladores junior solo quieren obtener el resultado deseado, independientemente de que la solución sea la más adecuada o no.

Primero resuelven el problema, luego escriben el código

Tienden a pasar más tiempo resolviendo problemas en lugar de escribir código, una vez que resuelven el problema en su cabeza o papel, comienzan a codificar.

Y sí, buscan mucho en Google .

Los desarrolladores junior cometen errores arquitectónicos, a veces errores muy costosos.

Hay más formas incorrectas de hacer las cosas que formas correctas, y algunas de las formas incorrectas se ven superficialmente bien, hasta que sea demasiado tarde.

Desarrolladores senior, después de un tiempo comienzas a ver algunos de los mismos patrones repitiéndose. Tienes una idea de cuáles serán los problemas con un enfoque particular, porque ya has cometido ese error y no deseas volver a estar en esa situación.

Uno de mis errores arquitectónicos favoritos de desarrollador junior es poner parámetros de configuración en la base de datos.

Tiene sentido ¿verdad? La base de datos es para almacenar datos, y la configuración son datos.

INCORRECTO. Poner la configuración en la base de datos junto con los datos es una pesadilla, cuando intentas desplegar código desde una máquina de desarrollo a una máquina de producción. Hace que la migración de la base de datos sea increíblemente riesgosa: debe asegurarse de no migrar accidentalmente los datos de configuración de desarrollo a Producción, dañar el sistema de Producción.

Mantener los datos de configuración completamente separados del sistema, en archivos que no se actualizan como parte del lanzamiento, es el curso seguro.

He visto este horrible error más veces de las que puedo contar.

En lugar de ver esta pregunta como programadores junior vs senior, lo consideraría como programador junior vs ingenieros senior. Y la diferenciación es:

No hay muchas cicatrices de batalla por tener código ejecutándose en producción 🙂

¡Eso a su vez se traduce en un mejor ingeniero de software!

El título, algunos nombres brillantes en su CV y ​​el propietario (s) del negocio cree que hacen que la empresa se vea bien.

Una cosa que encontré constante es que tienen una opinión, y de alguna manera se esfuerzan por mejorar las prácticas, o al menos parece serlo.

Creo que los desarrolladores senior en general deberían tener la capacidad de alcanzar un ideal y prever problemas y tomar medidas correctivas desde el principio.

El programador senior ha cometido muchos errores en su carrera en comparación con junior.

Es por eso que senior es senior y junior es junior.

Experiencia y, en ocasiones, acreditación.
A menudo, sin embargo, a veces es suerte y unidad personal.