¿Alguna vez ha comenzado un nuevo trabajo solo para entregar su renuncia lo antes posible debido a una base de código monstruosa e imposible de mantener con la que tendrá que lidiar?

Sí, esto me pasó a mí.

Fui reclutado para portar un programa de Windows a Mac (Mac es mi especialidad) alrededor del tiempo en que la Mac misma estaba en transición del Mac OS “clásico” a OSX. Me dijeron y me aseguraron que tenía una mano razonablemente libre para hacerlo como quisiera, siempre y cuando todavía fuera el mismo “producto” al final. Pero no vi el código que estaría portando por adelantado.

Cuando entré en él, el programa que estaba transfiriendo resultó ser un programa de DOS, no Windows, e implementó una gran cantidad de cosas para sí mismo que Windows le proporciona, por lo que tenía su propio sistema de ventanas (realmente pobre), su propio sistema de gráficos, incluso sus propios componentes de video y audio. Era mucho más grande de lo que había supuesto, pero estaba bien, sabía que no necesitaba portar todas esas cosas porque el sistema operativo proporcionaba esas cosas. Algunas partes de la base de código se remontan a principios de la década de 1980, por lo que representaba seguir trabajando durante 20 años.

La base de código fue escrita por un estadounidense (esta empresa tenía su sede en el Reino Unido), y la compañía lo voló para que pudiera informarme extensamente sobre cómo funcionaba su código, cómo estaba organizado, etc. Mientras me llevaba bien con él personalmente, una vez que comenzamos a entrar en el código, se convirtió en una pesadilla. Para empezar, era un codificador muy aficionado, y el código estaba extremadamente desorganizado, con cientos de partes no relacionadas que terminaban en un puñado de archivos. Sin embargo, todavía había cientos y cientos de archivos, todos con bits aleatorios de código que podrían haberse agrupado útilmente. Casi no hubo comentarios, ni documentación en línea que explicara para qué eran los diferentes módulos y funciones. Los nombres de variables y funciones no eran descriptivos en su mayoría, sin ningún esquema de nombres que pudiera discernir. Uno de los principales trabajos de esta base de código era proporcionar una forma para que un usuario final escribiera scripts que le permitieran crear presentaciones multimedia, al igual que Flash hizo más tarde. Excepto que el “lenguaje” de secuencias de comandos era solo una colección ad-hoc de material inventado sin ninguna consistencia, por ejemplo, algunos parámetros estaban separados por espacios, otros separados por comas, algunos pasados ​​en un orden, el mismo conjunto de parámetros que describe el El mismo tipo de cosas (un rectángulo, por ejemplo) en otro lugar tenía un orden diferente, y cosas así. El lenguaje de secuencias de comandos se interpretó, pero no tenía una gramática formal ni nada; cada nueva adición al lenguaje de secuencias de comandos se atornillaba al código de una manera muy extraña. Al preguntar sobre esto, estaba claro que el autor no tenía idea de qué era una gramática formal, y mucho menos cómo se podría aplicar en este caso.

Cuando traté de entablar un diálogo sobre las deficiencias de la base de código y el lenguaje de scripting en sí, el programador se puso muy a la defensiva. En lugar de abrirse a la oportunidad (como lo vi) de que alguien con mucha experiencia profesional en codificación (yo) lo arreglara realmente, se enojó y discutió. Él arrogantemente declaró que era un genio y que no sabía nada, y que no había nada en su código que necesitara mejoras. Insistió en que mi trabajo era lograr que esta base de código se ejecutara, sin cambios, ni siquiera reorganizada, en la Mac. Así que mi tarea, como él vio, no era portar su código, era crear un emulador de DOS que ejecutara su código.

Me pregunté brevemente si eso podría ser una opción, entonces no tendría que tocar el código de mierda, pero parecía un enfoque equivocado y una tarea desalentadora. Así que discutí el tema con mi nuevo jefe, recordándole que me había prometido una “mano libre”. Mi suposición era que se llegaría a un compromiso en el que el código podría arreglarse y hacerse más fácil de portar sin cambiarlo realmente (estaba bastante seguro de que el lado de la secuencia de comandos no se cambiaría a corto plazo, así que configuré eso a un lado como un objetivo a largo plazo). Sin embargo, dijo “bueno, si eso es lo que John quiere [que no se puede cambiar nada], entonces esa es la forma en que debe ser”. Eché otro vistazo a la base de código y renuncié esa tarde.

Un mes después, escuché que la compañía había retirado sus fondos (la burbuja de las puntocom acaba de estallar, por lo que de repente todos los VC estaban nerviosos), y se fue a la quiebra. Los derechos del producto fueron vendidos a otra compañía, pero se hundió sin dejar rastro. Unos años más tarde, el Director se convirtió en Flash y todos lo usaron, al menos tiene un lenguaje de script coherente. No estoy diciendo que podrían haber tenido Flash en 2000 si me hubieran escuchado, pero podría haber sido un contendiente. Como estaba era completamente inútil.

No nunca.

Si todos los demás términos estaban bien, entonces aceptaste el trabajo.

Existe un acuerdo implícito de que estará en ese trabajo por el término especificado, o si no se especificó ningún término, y usted es un empleado regular, al menos un año.

En mi opinión, cualquier otra cosa sería deshonrosa.

Por supuesto, no habría entrado en ese grupo en primer lugar, sin haber firmado un acuerdo de confidencialidad / NDA (generalmente, uno sin una cláusula de no competencia), y haber mirado los productos en primer lugar.

Antes de aceptar el empleo.

Y, en general, soy lo suficientemente caro como para que la gente no me malgaste en mantener el código antiguo, a menos que sea algo así como 13 millones de líneas de kernel del sistema operativo (¡gracias por contratarme en 2003, Apple!), O a menos que esté allí para arreglar algo que nadie más puede.


Tenga en cuenta: los empleadores hablan entre sí.

Hay muchas expectativas de que sientan que estás deshonrando tu acuerdo de trabajar para ellos.

Como consecuencia, habría una ansiedad considerable de que ya haya visto su código, y si deshonesta un acuerdo, ¿por qué no deshonraría también su acuerdo de confidencialidad?

Espere que vigilen su carrera de cerca, tal vez lo engañen al menos en su segmento de la industria. También tendrán a sus abogados bloqueados y cargados, en caso de que alguna vez haya trabajado para un competidor que se haya beneficiado de que vea su código.

En otras palabras: es probable que sea un CLM ( Movimiento de limitación de carrera ).

Algo así como. Me fui porque mis compañeros de trabajo eran inviables y el papel no era el anunciado.

Esperaba un código horrible (y lo obtuve), sin embargo, me prometieron la capacidad de moverlo en cualquier dirección que quisiera y construir un nuevo equipo en esa dirección.

En cambio, estaba trabajando directamente bajo la persona que proporcionó el horrible vómito de una base de código y me informó que estaría trabajando bajo sus pautas. Casi caminé después de un mes pero (en contra de mi mejor juicio) me quedé para ver si mejoraba.

7 meses después, había ganado unos 10 kg y estaba triste y finalmente escapé.

Sé que esto suena como una situación muy diferente, sin embargo, si está buscando renunciar de inmediato, parece que fue engañado en el proceso de la entrevista y ahora está en un trabajo que lo hará sentir miserable, le recomiendo que se vaya. Ahora.

Todo lo contrario. Las bases de código monstruosas e imposibles de mantener son ubicuas. Me he encontrado con muchos de ellos durante mis más de 40 años de programación. Aprendes a lidiar con ellos. Para corregir errores y agregar funciones. No es glamoroso pero es una habilidad importante.

No. Recibo códigos, compilaciones y pruebas antes de aceptar puestos con bases de códigos existentes y no pierdo el tiempo de las personas recibiendo una oferta formal cuando no podía vivir con lo que encontré.

Las compañías que no harán eso tienen algo que ocultar; son ingenuos acerca de los productos de construcción, incluida la novedosa salsa especial; y / o les importa más el código que escribieron que el producto y la compañía.

Cualquiera de esas razones sugiere buscar empleo en otro lugar.

¿Alguna vez ha comenzado un nuevo trabajo solo para entregar su renuncia lo antes posible debido a una base de código monstruosa e imposible de mantener con la que tendrá que lidiar?

No lo he hecho, y no lo haría.

Si el código es realmente imposible de mantener, ya deben ser conscientes de que tienen problemas. El desarrollo de nuevas funciones se habría detenido, y cada cambio conllevaría un alto riesgo de romper algo en otro lugar.

Si eso es cierto, es posible que nunca tenga una mejor oportunidad de arreglar las cosas. ¿Qué tan bien se prueba todo? ¿Puedes elegir un área y profundizar, agregando pruebas para asegurarte de no romper cosas y refactorizarlas en una mejor forma? Tendría que sopesar esto contra el progreso en otras áreas, es decir, no puede progresar razonablemente en el trabajo de características mientras reescribe una gran sección de la base de código.

Es posible que la empresa no vea las cosas de la misma manera que usted: tal vez no crean que su código es un desastre, no creen que realmente tengan problemas y no vean que pueden permitirse el gasto mucho tiempo trabajando en alguna característica en particular. Y luego, sí, es completamente apropiado decirles que eso es parte de la condición de su empleo. Si no están de acuerdo, deséenles bien y se separen.

He rescindido mi contrato por decir que la base de código es monstruosa e insostenible (y por qué y qué hay que hacer), pero nunca he caminado sin ofrecer ayuda. Me he alejado de situaciones que son monstruosas e insostenibles.

No. Pero renuncié porque me di cuenta, muy pronto, de que la persona que iba a ser mi supervisor, no tenía ni idea de lo que implicaba el software de escritura. (Por otra parte, usé ese hecho para tener un trabajo fácil de 10 años, porque solo necesitaba un pequeño hilo de lana para cubrir sus ojos).

Un día, uno de mis amigos me pidió apresuradamente que le enviara un correo electrónico con mi CV para una oferta de trabajo en una empresa de TI, al día siguiente me llamaron para una entrevista y obtuve el trabajo. Como mi amigo trabajaba en una empresa de TI decente, pensé que este también era un lugar en el que podría utilizar plenamente mis habilidades de desarrollo de Java que había aprendido y adquirido a lo largo de los años. Resulta que era un trabajo de venta de PC y mi trabajo consistía en acercarme a los clientes y explicarles la mejor máquina adecuada para sus requisitos. Para abreviar la historia, no me presenté al trabajo al día siguiente.

Recibí un correo electrónico después del departamento legal indicando que había incumplido el contrato de trabajo. No respondí y todavía estoy esperando que su abogado llame a mi puerta.

More Interesting

Cómo destacarse del resto de desarrolladores de software

¿Cuáles son algunos ejemplos de un trabajo de ingeniería CS sin codificación?

¿Cuál es el alcance futuro como desarrollador de Python?

¿Dónde puedo obtener ayuda sobre algunos problemas informáticos?

Me estoy graduando con una licenciatura en Ciencias de la Computación, pero no siento que sepa cómo programar. ¿Qué tengo que hacer?

¿Debería eliminar un sitio web que construí y no recibir pago?

¿Qué título debo obtener, informática o desarrollo de juegos?

¿Tiene alguna información sobre personas mayores (50 años) con experiencia tecnológica que se coloquen exitosamente después de hacer un campamento de entrenamiento?

¿Es importante tener un título en informática? ¿Qué sucede si soy realmente bueno programando pero no tengo uno (estudié en la programación de bootcamps)?

¿Qué importancia tiene el procesamiento paralelo para pronosticar series de tiempo financieras?

¿La informática es para mí? Estoy en mi último año y todavía no puedo codificar desde cero.

¿Debo conseguir a mis asociados en informática?

¿Qué compañías en el Área de la Bahía son buenas para una carrera en la resolución de problemas más desafiantes / disruptivos en el área del aprendizaje automático?

Soy un segundo año de B.Tech en informática. Quiero ingresar al servicio civil en mi primer intento, y estoy listo para dedicar mi sincero esfuerzo. ¿Cómo puedo construir una sólida formación en CSE en mis dos años restantes?

¿Cómo convertirse en un desarrollador de software profesional si un título en informática es una pérdida de dinero?