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).
- ¿Las tecnologías QBurst son mejores que una compañía de reclutamiento masivo como TCS o Infosys para una nueva?
- ¿Qué es lo primero que debe hacer al comenzar un nuevo trabajo como desarrollador de software en una empresa de software?
- ¿Un B.tech en ingeniería de software me convierte en ingeniero con el título de Ing.?
- Tengo buenas habilidades de programación, pero nunca trabajé en una empresa de software. ¿Cómo me convierto en un candidato competitivo para trabajos geniales de software?
- ¿Los sitios como CodeChef, Hackerrank, Spoj y HackerEarth tienen en mente los conceptos de ingeniería de software al formular preguntas?
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.