¿La empresa asume que soy competente en un sistema escrito en el lenguaje de programación X porque soy competente en el lenguaje de programación X?

Trabajo en la corporación ABC y este es mi primer trabajo. En los últimos dos años, he rediseñado por completo el sistema DevOps de la corporación ABC utilizando el lenguaje de programación X en el que soy experto. El sistema anterior era "espagueti", lo que le costó a la empresa horas en esfuerzos de depuración, etc. El nuevo sistema sigue los estándares ISO/IEC 9126 y ha acelerado los esfuerzos de desarrollo de la empresa.

Debido a esto, la compañía me ha considerado el "mejor desarrollador de X" (lo que encuentro gracioso... porque todo lo que hago es literalmente escribir el código más simple posible mientras mantengo la consistencia. También tengo un poco de debilidad por la unidad. pruebas y documentación) y me han pedido que me haga cargo de un proyecto de alto riesgo.

El proyecto de alto riesgo (llamémoslo System X ) está escrito en el lenguaje de programación X y es... malo. El proyecto consta de una sola clase de Dios que consta de más de 60 funciones miembro. Para colmo, cada función miembro realiza llamadas a otras funciones miembro y algunas funciones tienen más de 100 líneas de largo.

Se pone peor. System X sincroniza eventos entre sistemas escritos en el lenguaje de programación Y, en el que no soy experto. Llamemos a este Sistema Y. El Sistema Y es mucho más complejo que el Sistema X , completamente indocumentado, y nadie tiene tiempo para "enseñarme" cómo funciona.

Un error en el par System X/Y podría costarle significativamente a la corporación ABC en forma de litigio.

El problema

La corporación ABC está molesta porque tardo mucho en solucionar los problemas de los clientes. La corporación ABC asume que "mágicamente" sé todo sobre el Sistema X/Y porque soy competente en el lenguaje de programación X, mientras descuido el hecho de que el Sistema X está mal escrito y el hecho de que nunca he recibido capacitación con respecto a cómo funciona el Sistema Y. obras.

Entré esperando lidiar con el código heredado... Creo que esta es una expectativa justa... lo que no esperaba es esperar que se solucionen los problemas con el sistema X heredado, que controla el sistema Y no documentado, lo que puede costar el compañía severamente si tuviera que cometer un error, todo con un entrenamiento extremadamente mínimo.

Estoy empezando a quemarme mucho por esto...

Ya le comuniqué esto a mi gerente y él más o menos tiene una actitud de "no tengo tiempo... lo siento". ¿Cómo puedo comunicarle a mi gerente que esto es realmente muy serio?

También estoy seriamente preocupado por las perspectivas de mi carrera a largo plazo si cometiera un error grave tan temprano en mi carrera.

la compañía me ha considerado el "mejor desarrollador de X" (lo que encuentro gracioso... porque todo lo que hago es literalmente escribir el código más simple posible mientras mantengo la consistencia. También tengo un poco de debilidad por las pruebas unitarias y la documentación) ¡Eso lo coloca por delante de muchos de los desarrolladores con los que habrán trabajado! :-)
Sus nombres de variables están mal elegidos...
Muchos equipos con los que he trabajado habrían sido mucho más productivos si todos en ellos "escribieran el código más simple posible manteniendo la coherencia" y "tenieran un poco de debilidad por las pruebas unitarias y la documentación".
Si lidera un proyecto, es su trabajo proporcionar, explicar y defender estimaciones razonables de cuánto tiempo llevará. Si no conoce el idioma X, entonces el tiempo total será simplemente time to learn X + time to actually do project + error margin because estimating is harder when you don't even know the language. Puede que les guste o no escuchar esto, pero te están pagando para que lo digas .

Respuestas (5)

Desafortunadamente, es un caso de "¡Bienvenido a la industria del software!"

Como me dijo un profesor en la universidad: "Si los ingenieros construyeran edificios como los programadores construyen software, la civilización se derrumbaría el martes..."

Hay 100 de tales preguntas en este sitio, a lo largo de las líneas...

"Soy un nuevo programador con mi primer trabajo. Estoy conmocionado y asombrado por la mala calidad de la ingeniería/gestión/bases de código de software. ¿Qué hacer?"

Qué hacer:

  1. Nunca, nunca, nunca te quejes, preguntes, te quejes, te quejes, preguntes, preguntes o agites. No diga nada más que "SÍ, SEÑORA" (o señor) y luego ->

  2. Arreglar todo. ¡Repárelo según los estándares ISO/IEC 9126!

  3. Hacer grandes cantidades de dinero.

  4. Gane drásticamente más dinero cada año.

  5. Gracias a Dios que hay tan pocos programadores competentes, y de ahí los puntos 3 y 4.

--

Notas al pie:

  1. Usted menciona extensamente "lo importante" que es el software. (En su situación particular, se vincula o lo que sea y hay dinero involucrado). Bostezo. Todo el software es increíblemente crítico. Espere hasta que esté escribiendo software para volar aviones . ¡Agárralo y acéptalo como la norma! Esta es tu vida. Cada día tendrá exactamente esa cantidad de presión. Cada día. ¡Disfrutar!

  2. Mencionas "agotamiento". ¿Podría ser que esté trabajando más de 40.00 horas a la semana? Si es así, DETENGA ESO. ¡DETENLO AHORA!

  3. Usted menciona "expectativas de tiempo poco realistas". (A) cada cosa, alguna vez, en el universo, que cualquier programador haya hecho, ha tomado más tiempo de lo esperado . (B) cada vez que un programador ha hecho algo, todos los involucrados se han quejado de que ha tomado demasiado tiempo. Es como decir "wow, hoy salió el sol". Ignórelo por completo, haga su trabajo y, cuando se le solicite un tiempo estimado, simplemente dé su mejor estimación.

Algún lenguaje específico para esta situación:

SystemX es una sola clase de Dios de más de 60 funciones miembro. Cada función miembro realiza llamadas a otras funciones miembro. Algunos tienen más de 100 líneas

Extremadamente simple, solo envíe esto en un correo electrónico

"Hola Steve. Revisé System-X. Es una clase de Dios con 63 funciones de miembro [SER ESPECÍFICO], 138.2 loc promedio. Me tomará 2 días reescribir cada uno correctamente".

Es fácil.

Nota: no te quejes de que "no sabes" el idioma Y. Tienes que saber todos los idiomas. O aprenderlos en el acto. Son solo algoritmos y estructuras de datos: los idiomas son menos que nada. ¡Vea los puntos 3 y 4!

1. De acuerdo 100%. El problema es que soy la única persona que trabaja en ello. 2. 60-70 es la norma para mí. Tal vez sea hora de reducir... 3. Está bien. Me gusta.
"El problema es que solo soy una persona que trabaja en eso". Realmente lo dirijo a la nota al pie-3. La lógica es imbatible. El software REAL: el software moderno y sólido que ahorra millones debido a la reducción de los costos de mantenimiento solo se puede realizar en el tiempo que lleva. La lógica es irrefutable. Solo hazlo a tu propio ritmo. ¿Qué puede pasar? ¿Te despiden? Un chico como tú conseguirá un trabajo mucho mejor con mucho más dinero esa tarde. ¡Disfrutar!
A su edición. Me gusta. No se anda con rodeos.
También me gusta esto: "El software REAL: el software moderno y sólido que ahorra millones debido a la reducción de los costos de mantenimiento solo se puede hacer en el tiempo que lleva. La lógica es irrefutable". Creo que esta es una buena justificación en caso de que haya más quejas sobre cuánto tiempo lleva hacer las cosas.
"el problema es que soy la única persona que trabaja en eso" oh cielos. Eres nuevo en esta industria, ¿verdad? Ser el único que edita un código base determinado es una bendición. Nadie estropea lo que estás haciendo, nadie comete miles de códigos sin comentar y se queja cuando te niegas a fusionarlo, luego se queda atrás y te deja atrás porque tenías que hacer su parte por ellos y al mismo tiempo deshacer todos sus errores... etc. etc. Estar en situaciones en las que puedes ser el único que edita un código base determinado es un regalo... disfrútalo. El 99,9% de los programadores están más heridos que ayudados. Mejor sola.
Y continuando: este tipo de cosas es una iniciación estándar para un programador nuevo que en realidad tiene el potencial de ser ese 0,1% que no es el 99,9% que perjudica más que ayuda. Pueden quejarse... pero saben que eres lo mejor que tienen, no se van a deshacer de ti. En el peor de los casos, contratan "ayuda" para usted... lo cual, según su descripción, parece no ser una posibilidad. Así que solo tengo que superar las deficiencias gerenciales y hacerlo. Eventualmente, la influencia de ser capaz de hacer ese tipo de cosas te convertirá en la gallina de los huevos de oro. Los gerentes te dejan en paz entonces, y $$$
Jaja, oh, confía en mí... Soy muy consciente de que esto podría ser una bendición disfrazada, especialmente con el tiempo. Mi preocupación era más que estaba reteniendo este proyecto, lo que estaba reteniendo a otros desarrolladores del trabajo que dependía de este proyecto. Pero las respuestas hasta ahora han cambiado de alguna manera mi línea de pensamiento. Tal vez estoy siendo un poco pesimista
Las notas al pie 1, 2, 3a y 3b son acertadas. Me llevó probablemente una década darme cuenta de todos ellos. No te tomes una década @James. Cuando se le asigne una tarea, sea sincero sobre lo que se necesitará para hacerla con una cantidad de esfuerzo realista y sostenible, y luego hágala. Cuando otros se quejen de que no lo hiciste de una manera poco realista, entonces reconoce ese gemido por lo que es: gemido.
Fui programador durante 10 años, y me pasó exactamente una vez que terminé una tarea antes de lo esperado. 2 días en lugar de 11. Parecía tan horrible como la descripción del OP, y de hecho era muy fácil. Como resultado, me regañaron. Le costé a la empresa 9 días de oportunidad de trabajo y mi gerente también fue regañado.
@PlayerOne y otros gracias por sus amables comentarios
Afortunadamente, los ingenieros no construyen edificios.
¿Se trata sólo de mí? 60 funciones y 100 líneas/f no suena terrible. (Como mi entrada, no como mi salida, para evitar malos entendidos. ;-) )
Siempre escuché "Si los constructores construyeran edificios de la manera en que los programadores escribieron programas, el primer pájaro carpintero que apareciera destruiría la civilización". Pero, sí, excelente respuesta.
¡Debemos haber tenido el mismo profesor de ciencias de la computación! :)
ISO/IEC 9126 ahora se retira y se reemplaza por un estándar más nuevo.
jeje si lo vi :)

Debido a esto, la compañía me ha considerado el "mejor desarrollador de X" (lo que encuentro gracioso... porque todo lo que hago es literalmente escribir el código más simple posible mientras mantengo la consistencia. También tengo un poco de debilidad por la unidad. pruebas y documentación) y me han pedido que me haga cargo de un proyecto de alto riesgo.

Mantener las cosas tan simples como pueden ser, consistentes y en buen estado de funcionamiento: ¿por qué cree que eso es evidencia en contra de que sea bueno en esto?

El proyecto de alto riesgo (llamémoslo System X) está escrito en el lenguaje de programación X y es... malo. El proyecto consta de una sola clase de Dios que consta de más de 60 funciones miembro. Para colmo, cada función miembro realiza llamadas a otras funciones miembro y algunas funciones tienen más de 100 líneas de largo.

Está bien, pero tu jefe probablemente no entienda nada de eso. ¿Qué significa para un gerente tratar de dirigir una empresa?

Su trabajo no es solo explicar la tecnología. Dado que usted es el único en este proyecto, su trabajo también es traducirlo a cosas con las que la gerencia pueda trabajar.

Se pone peor. System X sincroniza eventos entre sistemas escritos en el lenguaje de programación Y, en el que no soy experto. Llamemos a este Sistema Y. El Sistema Y es mucho más complejo que el Sistema X, completamente indocumentado, y nadie tiene tiempo para "enseñarme" cómo funciona.

Como esto. No sabes cómo funciona el Sistema Y. Tu jefe quiere que lo arregles. Entonces, necesita instrucción en el Sistema Y. Ahora, nadie en su empresa tiene tiempo o entiende Y. Pero su jefe quiere que funcione.

Así que aquí es donde hablas con los gerentes sobre las cosas que los gerentes entienden. "Jefe, si quiere que esto funcione, necesito la capacitación Z, y debe autorizar a la empresa para que pague por ella. Aquí hay un enlace al sitio web de una empresa que realiza estas capacitaciones".

Ese es el problema. El sistema Y fue construido en la empresa. Sin documentación. Y nadie tiene tiempo para enseñarme cómo funciona. Me enseñaría a mí mismo teniendo en cuenta que está escrito en el lenguaje Y, pero el código base tiene 100,000 líneas y solo tengo una comprensión básica del lenguaje Y.
Desafortunadamente, no puedo simplemente capacitarme sobre el Sistema Y siguiendo algún recurso externo. Tengo que depender de personas internas de la empresa para que me enseñen.
Si nadie en la empresa "tiene tiempo" para explicar un componente crítico Y que se requiere para arreglar X, entonces arreglar X no es tan importante para la empresa. Por lo tanto, se ve obligado a tomarse más tiempo para aprenderlo usted mismo y la empresa debe aceptar los riesgos y costos adicionales. Simplemente explíquele a la gerencia que es su elección y que tratará de hacer lo mejor que pueda, decidan lo que decidan.
Sí, la idea es explicarlo en términos de algo en lo que la gerencia realmente pueda actuar. "Si quiere que maneje el sistema Y, necesita autorizar fondos para capacitarme en el idioma Y. También necesitaré los siguientes otros recursos..." Puede ser difícil explicarle a la gerencia "esta es una tarea difícil". Puede ser más fácil hacerles entender que "esta tarea costará al menos $ XXX, ¿realmente la queremos?"

Debe comunicar la gravedad de esto a su gerente.

Reserve una reunión con su gerente, que sea de una hora de duración. Asegúrate de que entienda que lo que quieres decir es importante.

Antes de la reunión, revise el código que está manteniendo y haga una lista de todos los problemas estructurales y de codificación. Se específico. Cree un documento que contenga esta lista y, para cada uno, escriba por qué este problema está ralentizando la corrección de errores.

Por ejemplo:

"La clase HumungousController es una 'clase de Dios', lo que significa que toca todas las partes del sistema. Es probable que cualquier cambio en él rompa algo más. Esto significa que cualquier cambio que haga debe probarse exhaustivamente y, por lo general, muchos otros problemas se solucionan antes". se puede enviar a los clientes.

Además de esto, presente una propuesta de refactorización/rediseño que le gustaría hacer para mitigar el problema. Conviértalo en algo que pueda hacer en pasos.

En su reunión, guíe a su gerente a través del documento. Asegúrate de que salga con este mensaje:

La estructura existente del código es un impedimento para corregir mi error. Si lo dejamos así, corregiré los errores a la velocidad que lo hago ahora, que es muy lenta. Alternativamente, la empresa puede hacer los cambios que recomiendo, lo que significa que eventualmente podremos solucionar los problemas mucho más rápido y responder mejor a los clientes. Como tercera opción, podemos reescribir el sistema desde cero, haciéndolo más mantenible y, finalmente, reemplazar el sistema antiguo por el nuevo.

Es elección de su gerente cuál de ellos elige. Pero usted le habrá dado la información que necesita para hacer su elección, y el hecho de que haya dado información detallada y precisa sobre las opciones le sentará bien a usted, sea cual sea su elección.

La corporación ABC está molesta porque tardo mucho en solucionar los problemas de los clientes.

Simplemente van a tener que vivir con eso. Toma tanto tiempo como sea necesario, especialmente si necesita probar todo a fondo antes de llamarlo "hecho".

¿Cómo puedo comunicarle a mi gerente que esto es realmente muy serio?

Su gerente no lo considera lo suficientemente serio como para hacer algo al respecto. Trabaja con eso.

También estoy seriamente preocupado por las perspectivas de mi carrera a largo plazo si cometiera un error grave tan temprano en mi carrera.

No serás tú quien sea demandado si todo sale mal. Es problema de la empresa. Ocúpese de sus asuntos lo mejor que pueda. El peor de los casos es que tenga que pasar a otro empleador.

Conocer el idioma le da una ventaja para comprender el próximo producto con el que trabaja que está escrito en ese idioma.

Con esto en mente, no te convierte en un experto en el próximo producto. Aún tendrá que leer el producto (y comprenderlo) para convertirse en un experto en él.

Si sus gerentes tienen dificultades para entender esto, dígales que saber (su idioma) no les da ninguna idea de los libros que aún no han leído. Pero, después de leer los libros, pueden comenzar a imaginar cómo se podrían reescribir mejor los libros.