¿Los ingenieros de software disfrutan de su trabajo?

Los buenos ingenieros de software disfrutan de su trabajo en los entornos correctos, donde “correcto” se trata en gran medida de los problemas técnicos que resuelven personalmente, con excelentes compañeros de trabajo que disfrutan interactuando técnicamente y de otro modo, y no hay demasiados factores negativos que superen a esos positivos aspectos. La falta de éxito comercial generalmente no pesa demasiado, aunque un pivote asociado que cambia los problemas y los compañeros de equipo pueden ser muy importantes.

Haría todos los productos comerciales que he creado desde cero por diversión en las etapas correspondientes de mi carrera si no estuviera haciendo algo al menos tan interesante para mi trabajo diario y algunas de las mejoras a los productos preexistentes.

La construcción de un dispositivo de almacenamiento en bloque distribuido con replicación en un clúster nada compartido de PC de consumo y instantáneas de 10 milisegundos fue un desafío divertido. Muchas sub partes de eso, como la descendencia transaccional de un sistema de archivos estructurado de registro y el índice de base de datos de árbol B +, habrían sido grandes proyectos por sí solos (teníamos requisitos no negociables que impedían un bloque de volumen de cliente más simple para el esquema de mapeo de almacenamiento local y menor tiempo para obtener un MVP frente a los clientes).

Después de que esa compañía se volcó para administrar las SAN de otras compañías, me uní a un competidor en el otro lado de la ciudad que comenzó con SMB en lugar de ir directamente a Global 2000. Las máquinas cliente tendrían tiempos de espera (del orden de 30 segundos) cuando se estaban tomando las instantáneas eliminado y los bloques de volumen del cliente de mapeo de metadatos al almacenamiento local fue un único punto de falla en el que un sector defectuoso significaría que el estado de la caja era desconocido y las réplicas en él necesitarían una nueva sincronización, lo que es peor de lo que parece debido a fallas a menudo no son independientes, por lo que llegar a ese punto pone a los clientes en riesgo de pérdida de datos. La solución existente era un diario donde los cambios permanentes se escribían a través de acceso aleatorio a una matriz separada en disco. Lo reemplacé con un registro circular consistente que se entremezclaba entre las nuevas transacciones y las entradas de actualización de la tabla de virtualización con la invariante de que las entradas no se sobrescribirían hasta que fueran reemplazadas por una entrada más nueva o su actualización en el siguiente paso. El uso de E / S puramente secuenciales y con un cálculo de datos más eficiente se ejecutaría 10,000 veces más rápido que el código existente. Con el código de cálculo de referencias existente, ejecutó un poco más de 7000 transacciones por segundo con una sola copia, lo que redujo el impacto de las eliminaciones de instantáneas por debajo del nivel de ruido de medición (desde retrasos de 30 segundos). Se volvió inmune a la pudrición de la broca que plagaba la estructura anterior (que solo se leía al reiniciar, lo cual era raro). Replicarlo en otro lugar del disco u otro eje solo redujo el rendimiento a 6900 tps, así que lo hice por defecto y eliminé el único punto de falla. Lo puse en un entorno simulado, construí un modelo de disco que podría fallar (los bloqueos durante las escrituras pueden dejar datos antiguos, datos nuevos o errores duros con granularidad de sector) e hice una variación de temporización pseudoaleatoria + inyección de falla, así que podría decir con La confianza funcionó. Hice una parte ascendente y descendente de las operaciones de prueba pseudoaleatoria y descubrí que la estructura existente no era consistente debido a un error de protocolo. Finalmente, como parte de convertirlo en una característica amigable para el cliente, automaticé la actualización progresiva del alcance del clúster a la nueva característica. Si bien solo ~ 3000 líneas de código para almacenar, probar y actualizar, fue un proyecto divertido. La guinda de ese pastel fue que el código original provenía de un doctorado con ex alumnos del Centro de Investigación de Sistemas Digitales.

Hice un corte sustancial en mi paquete de compensación (cientos de miles de dólares en 3 años) para volver a mi oficio dejando atrás una situación en la que estaba manejando cualquier problema trivial que llegó al frente de la fila de prioridad junto a los nuevos graduados, aunque yo Tenía quince años de experiencia relevante con un título coincidente. Las reuniones obligatorias de scrum a las 10 a.m. también fueron un factor contribuyente, lo que habría sido un gran problema si me encontraba en un estado de flujo temprano en la noche y me vi obligado a detenerme para poder llegar a casa, descansar y dormir para hacer las reuniones.

Creo que los mejores ingenieros de software son los que aman el trabajo y lo harían como un pasatiempo, incluso si tuvieran que hacer algo más para ganarse la vida. De hecho, la mayoría de nosotros comenzamos haciendo exactamente eso. En la escuela secundaria, cuando tuve acceso por primera vez a una computadora, me obsesioné con tratar de resolver problemas en ella. Aunque estudié algo completamente diferente en la universidad, seguí escribiendo software, generalmente relacionado con el trabajo en mi especialidad, pero a veces no. Cuando me gradué, decidí tomarme un año libre antes de graduarme y tomé un trabajo como ingeniero de software y nunca he mirado atrás.

Estoy seguro de que hay desarrolladores que básicamente solo lo están llamando, haciendo el trabajo con poca o ninguna pasión. Dudo que tengan mucho éxito. Sé que, como Leonid mencionó, también hay desarrolladores que están atrapados trabajando en proyectos que no les apasionan. He estado en esa situación. Pero incluso entonces, los buenos desarrolladores pueden encontrar alegría resolviendo algún pequeño problema de una manera inteligente o reestructurando una parte del sistema para que sea más elegante, eficiente y fácil de mantener.

Los ingenieros de software disfrutan su trabajo, los monos codificadores no.

Me encanta mi trabajo como ingeniero de software. Me levanto cada mañana esperando los problemas técnicos que resolveré. Honestamente, a veces no puedo creer que me paguen por desarrollar software porque durante muchos meses fue solo un pasatiempo divertido para mí. Literalmente podría pasar un día entero codificando y sentir que solo han pasado 5 minutos. Dicho esto, trabajo con un gran equipo, y el ambiente donde trabajo es increíble. Entonces, para responder a su pregunta, sí, me encanta mi trabajo, así como el salario que proviene de hacer lo que disfruto.

Al igual que cualquier otro trabajo, muchos disfrutan de su trabajo, muchos no disfrutan de su trabajo.

Pero hay muchas razones por las cuales las personas no disfrutan su trabajo. Los viajes largos, el jefe imbécil, una oficina en el medio de la nada, son razones legítimas para odiar tu trabajo.

Al igual que muchos otros trabajos, muchos trabajan en problemas desafiantes, muchos trabajan en trabajos pesados.

Y tiene que calificar sobre lo que significa “desafiar”. Me gusta el desafío de algoritmos y matemáticas, pero odio el desafío del patrón de diseño. No sería feliz si tuviera que pensar mucho sobre el patrón de diseño. Si te desafían por cosas que odias, no te divertirás.

Algunos lo hacen por dinero, pero la mayoría de las personas con motivaciones monetarias abandonan mucho antes de acercarse a una carrera real en el desarrollo de software.

Debido a la velocidad a la que funciona la industria tecnológica, realmente no se presta a las personas que no disfrutan de la tecnología. A menos que lo disfrute, se retrasará bastante rápido.

Algunos aman su trabajo. Otros están atrapados trabajando en productos defectuosos sin salida.

More Interesting

¿Puedes hacer seis figuras siendo un ingeniero de software que hace aplicaciones de negocios? ¿Si es así, entonces cómo?

¿Qué universidades ofrecen programas de MBA sin GMAT en los EE. UU. Con 2 años de experiencia laboral en el campo de las pruebas de software?

¿Cómo debo cambiar mi carrera de TI (desarrollo de software web) a ingeniería civil?

¿Hay ingenieros de software de Google que hayan obtenido un doctorado en informática después de trabajar?

En cuanto a la carrera, ¿qué opción es mejor, dado el tiempo limitado y la necesidad de elegir: contribuciones de código abierto o programación competitiva?

¿Un doctorado ralentizará mi carrera como desarrollador / ingeniero de software?

¿Qué hace realmente un ingeniero de software?

¿Cuál es la jerarquía de Adobe y Amazon para ingenieros?

Tengo experiencia laboral en Siebel CRM. ¿Qué software básico debo hacer para mejorar mis habilidades de software?

Cómo reiniciar mi vida laboral y personal y convertirme en un buen ingeniero de software y un buen padre / esposo

Trabajo en la industria de petróleo y gas en controles de proyectos con 7 años de experiencia. ¿Cómo uso esta experiencia para ingresar a la industria del software?

¿Podemos tratar la experiencia en automatización de pruebas como experiencia en inteligencia artificial?

¿Cuál tiene un mejor alcance de colocación: ingeniería de software o ingeniería informática?

A los 27 años, ¿debería cambiar mi carrera de gerencia de construcción a programación de computadoras / ingeniería de software? ¿Por qué?

¿Es necesario conocer la codificación para convertirse en un probador de software?