¿Cuál es la diferencia entre un ingeniero de software y un ingeniero de software sénior?

Alcance y autonomía. Los ingenieros superiores generalmente no son líderes, y rara vez lideran grupos más grandes que unas pocas personas con la baja sobrecarga que eso implica.

La ingeniería de software es un oficio con la progresión de aprendiz, a oficial, luego a maestro artesano con tal vez el 10% de los ingenieros avanzando más allá de ese punto. Las promociones están en trámite, y los ingenieros reciben el título y el aumento una vez que actúan en el siguiente nivel.

Los aprendices aprenden las cuerdas del desarrollo de software comercial: trabajar en equipo, desarrollar el código existente y el proceso formal del software. Con orientación directa y supervisión cercana, manejan problemas de alcance limitado: correcciones de errores, funciones pequeñas, tareas de 1 a 5 días según la respuesta de Nicolas Spiegelberg a ¿Cuáles son los diferentes niveles de ingenieros de software en Facebook? Amazon SDE1, Microsoft SDE1 nivel 59/60, Google Software Engineer II nivel T3, Facebook nivel interno E3. La mayoría de las pequeñas empresas los llaman “ingenieros de software”.

Los nuevos graduados comienzan como aprendices.

Muchas pequeñas empresas evitan contratar aprendices porque hay demasiadas cosas que no pueden hacer y su experiencia limitada hace que las predicciones de rendimiento sean menos precisas que las que tienen para los nuevos empleados con más experiencia. En 20 años, mis únicas sorpresas vinieron de un par de aprendices que eran inteligentes y sabían lo que debían de obtener sus títulos de CS, pero no podían hacer la transición a trabajar como ingenieros. Hice que mi último ingeniero junior agregara soporte de partición usando libgparted a libntfs3g después de darle el caso de prueba, describiendo cómo debían cambiar sus estructuras de datos y señalando las funciones específicas.

Los ingenieros competentes son promovidos a oficiales en dos años. Si no se hace esa transición, es necesario que se gestione, tal vez en otros roles, como ingeniero de ventas o el soporte técnico final, antes de enviar los problemas a los ingenieros de software del producto.

Los jornaleros han aprendido a trabajar en el software existente en un entorno comercial y completar tareas intermedias con supervisión limitada: características medianas, pequeños programas, proyectos de 1 a 4 semanas por Nicolas. Mientras investigan sus problemas asignados y diseñan soluciones, alguien más es responsable de las API entre componentes y cierra la sesión antes de implementarlas. Siguen el proceso dictado por otras personas. Amazon SDE2, Microsoft SDE2 nivel 61/62, Google Software Engineer III nivel T4, Facebook E4. Algunas pequeñas empresas los denominan “Ingeniero de Software” como aprendices, algunos son generosos y otorgan un título de Ingeniero de Software Senior, aunque todavía no lo son.

Me gusta contratar jornaleros para su segundo trabajo porque hay muchas tareas que son un poco exageradas para ellos, lo que es atractivo y conduce a un buen rendimiento, con el entrenamiento puede hacer cosas más grandes convirtiéndolos en ingenieros superiores en un par de años, son abundantes, y probablemente sean menos costosos que los aprendices porque su salario ligeramente más alto se ve compensado por menores gastos generales de administración y menores probabilidades de mishire. Si no tuviera poco personal en mi último inicio, habría asignado una restauración de copia de seguridad de subárbol de los sistemas de archivos NTFS de Windows en imágenes de disco servidas por Apache httpd, lo que implicaría cambios en el código de recorrido del directorio WebDAV y descubrir cómo la copia de Apache -límite “brigada de cubos” funcionó.

Quedarse atrapado en el oficial debido a las necesidades o habilidades del negocio es un gran problema. Las grandes empresas manejan a los jornaleros que permanecen en ese nivel demasiado tiempo. Las decisiones de no contratar debido a la “falta de trayectoria” son comunes, porque los empleadores quieren personas que progresarán a ingenieros superiores.

El ascenso a ingeniero senior es posible de 2 a 3 años después de hacer un oficial (4 a 5 en total), pero depende de la disponibilidad del proyecto. Eso no es muy importante, ya que la ingeniería de software requiere aproximadamente 10 años de la experiencia adecuada para dominarse más otros 5–10 años para manejar proyectos complejos.

Los ingenieros superiores de software son maestros artesanos. Pueden manejar independientemente todos los aspectos de problemas moderadamente complejos con Nicolas sugiriendo una duración del proyecto de 3 a 6 meses. Eso significa proceso, arquitectura, diseño, implementación, prueba e ingeniería de mantenimiento. Pueden ser mentores de ingenieros junior y pueden liderar pequeños proyectos que involucran a aproximadamente 4 personas. Pueden o no tener latitud en el proceso de software. Por lo general, no trabajan directamente con otras unidades de negocios como el marketing. Su trabajo suele ser táctico, con dirección estratégica determinada en los rangos más altos. Amazon SDE3, Microsoft Senior SDE nivel 63/64, Google Senior Engineer nivel T5, Facebook E5. Los títulos de pequeñas empresas varían de ingeniero senior a ingeniero de personal.

Me gusta tener ingenieros superiores a los que pueda delegar subsistemas, como la interfaz SCSI o la pertenencia a grupos y el almacenamiento de metadatos en un dispositivo de almacenamiento de bloques escalable. Hice que un ingeniero superior creara un sistema de archivos estructurado de registro con un registro separado para el desplazamiento del archivo de árbol B + para bloquear la asignación de modo que pudiera leerse en el inicio con E / S secuencial.

Maestro artesano / ingeniero sénior es la promoción final para la mayoría de los ingenieros. Esto está bien: muchos ingenieros no quieren trabajar más allá de ese nivel y / o disfrutar de sus funciones como ingenieros superiores hasta que se jubilen. La posición puede pagar $ 200- $ 400K en grandes empresas públicas, que se encuentra en el 5% superior para el ingreso familiar de los EE. UU., Donde eso generalmente implica dos asalariados. Trabajar como ingeniero senior para pequeñas empresas fuera de los mercados caros aún puede pagar más de los $ 130K necesarios para llegar al 10% de los hogares.

Yendo más allá del ingeniero sénior, la mayor parte de su valor proviene del impacto comercial y su capacidad para multiplicar la producción de otros ingenieros. A menudo decides qué construir y cómo hacerlo. En mi primer papel principal de ingeniería, dirigí un equipo de 12 personas y solo pasé 1/3 de mi tiempo escribiendo software. Más recientemente, creé el diferenciador clave del mercado, que hizo que mi inicio fuera de $ 0 a un flujo de caja positivo de más de $ 10 millones en ingresos anuales, puse el proceso de ingeniería en camino para enviar el primer o segundo candidato de lanzamiento después de que el vicepresidente de ingeniería abandonó los horarios debido a la necesidad intentos de dos dígitos y proyectos proactivamente iniciados, por lo que tuvimos soluciones antes de que las cosas impidieran el negocio.

Los títulos más allá del ingeniero superior varían, y al igual que los rangos ejecutivos a menudo son relativos a la empresa en su conjunto. Un ingeniero distinguido en Google que tenga un impacto significativo en casi $ 100B por año en ingresos es muy diferente a uno en una startup que recauda $ 10M anualmente. Un ingeniero principal en Google generalmente lidera un equipo de 50 como un director, mientras que uno en una pequeña empresa puede manejar solo 10 como el director o vicepresidente de ingeniería de software.

Pueden incluir o no tareas de gestión, y algunas empresas mantienen la gestión de personas y el liderazgo técnico completamente separados. Una vez que es responsable de interactuar con otras unidades de negocios, programar y tener mucha influencia en la contratación y el despido, la gestión oficial no agrega mucho a sus deberes: negociar una compensación con nuevos empleados, revisiones de desempeño, despido personal y tal vez presupuesto.

Los títulos y los límites salariales van con puestos, no con personas. Un ex ingeniero principal puede ser contratado como ingeniero senior cuando los espacios de liderazgo están llenos y eso es lo que permite el presupuesto.

Algunas compañías grandes y pequeñas sufren de inflación de títulos, donde los Ingenieros Senior obtienen títulos más altos (como Ingeniero Principal), y personas más allá de esos títulos que no tienen sentido fuera de esa compañía (como Miembro Consultor Senior de Personal Técnico).

Por el contrario, algunas compañías como Facebook evitan los títulos públicos para ingenieros donde el objetivo es tener ideas consideradas por mérito y no por el rango de la persona que las propone. Eso no funciona cuando algunos ingenieros son promovidos a Director, aunque siguen siendo líderes técnicos prácticos, mientras que los compañeros con un impacto similar siguen siendo “Ingenieros”. Internamente todavía tienen bandas de compensación.

Supongo que la principal diferencia es la experiencia. Puedes obtener todo el conocimiento teórico de la universidad, pero cuando vienes a la industria y aplicas tu conocimiento teórico, hay mucho más que tienes que aprender.

A veces tiene que aprender sobre ciertas prácticas, metodologías, utilizadas en la industria y, sobre todo, debe centrarse en la calidad de su trabajo en lugar de la cantidad. Si observa la solución desarrollada por un ingeniero de software recién graduado y un ingeniero de software experimentado, existe una enorme brecha entre la calidad de su trabajo. Esto es algo que ganaría con el tiempo y la experiencia.

Sobre todo, cuando está subiendo en la escala profesional, debe ser bueno para trabajar, manejar y comunicarse con sus compañeros de trabajo. La mayoría de los ingenieros de software senior que conozco son bastante buenos para explicar cosas nuevas a otros.

Sin embargo, no puede generalizar que los ingenieros de software senior escriban menos código. A veces lo hacen y a veces no.

La diferencia, por lo general, es la experiencia. Pero, ¿qué significa eso específicamente? Bueno, solo puedo hablar con los idiomas con los que estoy familiarizado (PHP, Javascript, etc.). Para las tecnologías web, aquí hay una lista de habilidades que debería considerar un ingeniero de software (también conocido como desarrollador de nivel medio):

  1. Familiarícese con al menos un marco de estilo MVC y pueda trabajar dentro de él para crear código que sea consistente con el resto de la base de código.
  2. Entiende cómo usar un sistema de control de versiones (GIT, SVN, etc.)
  3. Puede trabajar en un entorno Linux. es decir. saben cómo navegar por la línea de comandos y abrir / editar archivos usando vim o algún otro editor.
  4. No requiere una mano constante para hacer el trabajo
  5. Puede escribir HTML / CSS / Javascript.
  6. Puede escribir consultas en MySQL (o en una base de datos No-SQL) directamente o mediante un ORM
  7. Probablemente sea mejor en el desarrollo front-end o back-end (pero no en ambos)

En contraste, estas son las habilidades que asumiría de un ingeniero de software sénior:

  1. Está familiarizado con varios marcos (tanto frontales como backend) y probablemente tiene algunas opiniones sobre cuáles son mejores / peores
  2. Comprende el control de versiones hasta el punto de poder ayudar a los desarrolladores de nivel junior cuando arruinan algo en su repositorio
  3. No solo puede funcionar en un entorno Linux, sino que también es capaz de configurar el entorno por sí mismo. es decir, saben cómo configurar apache o nginx, varias bases de datos, etc.
  4. No es necesario que se les expliquen todos los detalles de una tarea. Un desarrollador sénior debería poder encontrar una solución al problema por su cuenta. El único momento en que un desarrollador sénior realmente debería consultar con alguien es cuando se necesitan cambios arquitectónicos para completar una tarea, o cuando el código en el que está trabajando afectará directamente a otro código de desarrollador.
  5. Puede escribir HTML / CSS / Javascript (pero probablemente no haga mucho porque ese trabajo generalmente lo realizan más desarrolladores junior)
  6. Puede escribir consultas directas bastante complicadas para bases de datos SQL y No-SQL. También tiene una comprensión decente de cómo se debe modelar una base de datos.
  7. Esta persona debe ser buena tanto en el desarrollo de fuentes como en el back-end (y todo lo demás)
  8. Tiene una buena comprensión de los principios orientados a objetos y sabe cómo usar varios patrones de diseño.

Además, digo “Usualmente”, la diferencia es la experiencia, sin embargo, me he encontrado con algunas personas que no siguen esto. Un desarrollador de nivel medio generalmente tiene entre 2 y 4 años de experiencia y un senior tiene 4 o más, pero este no es siempre el caso. Hay ciertas personas que (por ejemplo) aprendieron a trabajar con algo como Magento y nunca se molestaron en hacer nada más durante 5 años, no los considero de nivel superior solo por su tiempo en el trabajo. Para llegar a este nivel, debes continuar aprendiendo después de salir de la universidad o ingresar a la fuerza laboral. no puedes simplemente sentarte y esperar ser ascendido a senior.

No. Un ingeniero de software senior realiza la misma codificación, en términos de tiempo, pero tiene la experiencia y el criterio para construir sistemas más complejos, tomar decisiones arquitectónicas y construir una gama más amplia de sistemas. Es un rol de contribuyente individual, no un líder, aunque se supone que los ingenieros superiores pueden ser mentores y, de lo contrario, ayudar a más ingenieros junior.

More Interesting

¿Es difícil conseguir un trabajo de ingeniería de software remoto sin tener una relación con la empresa?

¿Qué oportunidades laborales tiene un graduado de comunicación de moda?

¿Considerarías la ciencia de datos como una carrera en la que pasas innumerables horas investigando?

¿Cuál es la mejor manera de rechazar un trabajo pero al mismo tiempo dejar una ventana abierta para otro puesto más adelante?

¿Es un 501 (c) (3) con sede en EE. UU. Que recluta para un empleador extranjero pero discrimina por motivos de raza que viola las leyes de igualdad de oportunidades? ¿Puedo denunciar esto anónimamente?

¿Ser un espía es un trabajo genial?

¿Qué consejo tiene para irrumpir en startups de Nueva York con un nivel de entrada no técnico? ¿Cuáles son algunas sugerencias sobre cómo promocionarme mejor cuando me comunico con empleadores potenciales?

¿Cuáles son algunos trabajos que ganarán lo suficiente para tener seguridad financiera cuando se jubile?

Cómo entrar en una carrera en ciencias de la computación con experiencia en economía y negocios

¿Cuándo tuvo más auge la economía independiente y por qué?

Para los fundadores e instructores de bootcamp, ¿cómo identifica los trabajos a demanda y las habilidades asociadas? ¿Cómo se mantiene por delante de la demanda en el desarrollo de sus cursos y plan de estudios?

¿Qué estilo de compositor diría que ha cambiado más durante su carrera profesional?

¿Qué es un analista de sistemas informáticos?

¿Qué opciones interesantes tiene un ingeniero mecánico?

¿Por qué la gente quiere convertirse en abogados?