Me veo obligado a escribir un código incorrecto. ¿Cómo guardo mi cara? [cerrado]

69

Solo soy un desarrollador junior, pero mi trabajo me obliga a trabajar con un código PHP realmente terrible (piense en el peor código PHP que haya visto; luego piense en el código el doble de malo). Por lo general, trato de corregir errores y luchar con la base de código para agregar nuevas funciones. A veces se me ordena que las cosas funcionen lo antes posible, lo que a menudo implica piratas sucios.

El producto anteriormente era de código abierto y me preocupa que pueda ser de código abierto en el futuro. Me daría vergüenza si alguien (especialmente posibles empleadores) pudiera encontrar mi nombre después de algunos de los conjuntos de cambios. ¿Qué puedo hacer para proteger mi buen nombre?

No estoy seguro de si esto es relevante, pero agregaré que ni mi jefe ni mis colegas quieren admitir que el código es malo, pero no estoy seguro de poder culparlos por eso; para muchos de ellos, este es su primer trabajo.

Avergonzado
fuente
21
¿Cómo te ves obligado a escribir un código incorrecto? ¿Por qué no puede ponerse de pie, dejar de poner su nombre en código incorrecto y explicar el problema, la solución, el costo en términos de tiempo, esfuerzo y dinero, y los beneficios de solucionar los problemas ahora a sus superiores?
Thomas Owens
17
¿"alentando hacks rápidos y sucios"? ¿Alentador? Que es peor Su orgullo (y encontrar un nuevo trabajo) o quedarse con este trabajo. Puede que no sea malo defender lo que es correcto. ¿Qué te detiene? ¿Amenazas de violencia? ¿Chantaje? ¿Procedimientos criminales? Seriamente. ¿Qué te impide escribir un buen código? Por favor sea específico . Y honesto.
S.Lott
113
Si te sirve de consuelo, incluso un buen código que escribas hoy se verá mal en cinco años.
Kyralessa
77
Afrontarlo PHP alienta "rápido y sucio" al no desalentarlo y hacer que sea fácil de hecho, diría que PHP sobresale en "rápido y sucio" mejor que cualquier otro lenguaje, excepto tal vez Perl, una vez que se establece ese impulso es difícil de detener, especialmente si la administración también está alentando el comportamiento. Al final, el código que parece funcionar, independientemente de las prácticas, es más valioso para la empresa que ningún código.
77
Lo sentimos pero no son formas correctas e incorrectas de escribir código. La forma correcta utiliza prácticas estándar de la industria; la mala manera piratea la mierda y dice que "funciona".
Wayne Molina

Respuestas:

132

Roma no se construyó en un día, pero puedes ser un buen 'Boy Scout'. Cada vez que toques el código, déjalo mejor que antes. No lleva una cantidad de tiempo extraordinaria usar nombres de funciones sensibles, buenos estándares de codificación y poner comentarios decentes cuando trabajas.

Creo que el peligro es pensar que es todo o nada. El hecho de que no pueda pasar el tiempo que desea escribir código elegante, no significa que tenga que rendirse totalmente y escribir basura.

Amy Anuszewski
fuente
2
+1. No tiene que sacrificar todo en lo que cree solo para que sea una solución rápida.
tdammers
44
+1: para todo o nada, muy cierto.
Umber Ferrule
3
La regla de Boy Scout en las manos equivocadas puede ser exactamente la causa del problema, porque la definición del 'nombre de función sensible' de su superiora podría ser 'bolChkLst' (notación húngara para cumplir con la guía de estilo, ChkLst en lugar de CheckList porque 'más corto es mejor '). Aquí hay algunas implementaciones de la regla de Boy Scout que encontré en diferentes trabajos que intenté no seguir: 'Unir funciones, tener la menor cantidad posible', 'no llevar argumentos a través de 3 llamadas, usar globals en su lugar', 'usar SQL en línea en las vistas para hacerlo más rápido '
keppla
40
+1 paraEvery time you touch the code, leave it better than it was before.
Qwerky
3
+1. Si tiene muchas mejoras claras comprometidas, cualquiera que realmente vea su contribución no pensará que es un programador horrible. Los empleadores potenciales que asumen que eres malo porque el proyecto es malo no son personas para las que quieres trabajar.
Matthew leyó el
59

De acuerdo con S.Lott de los comentarios * (por una vez :) Nadie te está obligando a escribir código incorrecto. La cosa es, junior dev. a menudo (este sitio también tiene la culpa de eso) se pierden en las mejores prácticas, "código hermoso", ... como quieran llamarlo ... y no hacen mucho; o lo hacen pero pierden mucho tiempo. Al decirles que escriban un código incorrecto (que es el código que también funciona) se obtiene que "a través de eso", simplemente les hace entregar algo. A medida que pasa el tiempo, eso da como resultado que un desarrollador junior (ahora ya no :) encuentre una solución rápida y sucia, pero pasa el resto del tiempo mejorando. Y a medida que pasa el tiempo, aprende más y, en algún momento, comienza a ofrecer soluciones rápidas y sucias, que en realidad son un buen código.

Pero, si siguió su camino y trató de escribir el código perfecto desde el principio, lo más probable es que haya pasado mucho tiempo y no hubiera hecho casi nada.

Entonces ... escriba código malo, ... mucho ... código que apenas funciona, y luego ITERATE. ¡Cada iteración es un poquito mejor!

Nadie escribió la solución perfecta la primera vez.

* esto, si fuera más corto hubiera sido un comentario.

Torre
fuente
1
+1 Estoy totalmente de acuerdo con esta respuesta. Te votaré dos veces.
Vitor Py
3
Estoy de acuerdo. Esta es una excelente manera de atravesar la "parálisis de análisis", que puede afianzarse a medida que intenta alcanzar la solución "perfecta" a un problema. Escribí algo similar en StackOverflow .
Kyralessa
44
+1. Ya leí esto en los programadores (pero no conozco la fuente): dos grupos se encargaron de crear cerámica en un período de tiempo determinado. Uno para crear un artículo de la mejor calidad posible y otro para crear tantos artículos como sea posible. Al final, el último grupo proporcionó elementos de mejor calidad, porque la repetición es el camino hacia el dominio. La contemplación sola no te llevará a ninguna parte. Al final, todos aprendemos haciendo y nuestro miedo a hacer algo mal es lo que nos impide intentarlo, posiblemente fracasar, pero definitivamente aprender de nuestros errores.
back2dos
1
Como corolario, ¡usa un repositorio! Incluso si es solo uno personal que haya configurado en su propia máquina. Después de comenzar a usarlos, te das cuenta de lo liberador que es hacer un montón de cambios, descubrir que no funcionó y retroceder. Mi favorito personal es fósil
Spencer Rathbun
1
"Entonces ... escriba un código incorrecto, ... mucho ... código que apenas funciona, y luego ITERATE. ¡Cada iteración es un poquito mejor!" ¿Qué pasa si nunca puedes iterar porque los nuevos proyectos siguen acumulándose ... y comienzas a darte cuenta de que lo que empujas como alfa tiende a quedarse hasta que el proyecto muere? Lo que, por supuesto, se aceleró como resultado del código inicial de mierda y la falta de actualización. Creo que es este tipo de situaciones lo que hace que muchos desarrolladores junior piensen que necesitan escribir un "código hermoso" desde el primer momento ...
Serhiy
40

Los comentarios de código son tu amigo aquí.

Siempre que sienta que tiene que escribir algún truco barato debido a la presión, simplemente diga algo como "Este código hace X debido a limitaciones de tiempo. Idealmente, haría Y en su lugar. - Avergonzado, 5 de julio de 2011"

Luego, si los empleadores potenciales lo ven, se darán cuenta de que prefiere escribir un buen código, pero también está dispuesto a ajustar su estilo de codificación a las necesidades comerciales. La mayoría de los empleadores verán a ambos como cosas buenas.

Bob Murphy
fuente
44
Exactamente. Comentarios y mensajes de compromiso también. Nunca lo he hecho, pero sería interesante evaluar a un desarrollador basado en nada más que en los conjuntos de cambios anotados que se les atribuyen en algunas vcs.
timdev
bueno, puedes decir algo sobre alguien cuyos comentarios de compromiso son "arreglados", "hechos", "blahblahblah" :)
gbjbaanb
+1 Lo he hecho varias veces y en el caso de desarrolladores pares simplemente funciona.
Jacek Prucia
77
Generalmente borro comentarios como ese cada vez que los encuentro. Un comentario marcado como TODO o MEJORAMIENTO FUTURO podría merecer quedarse, pero las disculpas son solo basura.
Kristopher Johnson
1
Estoy de acuerdo con incluir una explicación de por qué se implementó una solución menos que óptima (y cuál podría ser esa solución). Lo hago de vez en cuando. Sin embargo, no creo que sea algo de lo que avergonzarse o disculparse. Simplemente significa que había cosas más importantes que hacer en el momento en que trabajaba en ese fragmento de código y que la implementación dada era suficiente.
Justin Ohms
10

Depende de cómo te fuercen.

En mi experiencia, hay dos posibilidades:

Te sientes forzado por un horario apretado, código heredado, etc.

En este caso, como la mayoría de las otras respuestas ya dicen, depende de usted 'optimizar la frescura'. Es posible que no tenga tiempo para volver a escribir la base de código en MVC, pero como primer paso, por ejemplo, puede dejar de pegar su SQL a mano y, en su lugar, escribir un bonito execute_sql($query, $params), que sienta las bases para abstracciones como fetch_customer($filter_params), etc. Recuerde, todo lo mejor En última instancia, existen prácticas en las que su jefe obtiene un producto antes, por lo que solo hay un conflicto sobre cuánto tiempo invertir en el futuro frente al presente.

Cuando establece el contexto correcto ('dentro de 6 meses, sin obtener tiempo adicional, refactoré el código monolítico a MVC'), debe dejar su nombre en el código y tratar de sentirse orgulloso como un terapeuta, que le enseña a una víctima de un accidente cerebrovascular a di palabras sueltas de nuevo.

Se le ordena explícitamente implementarlo de una manera que considere no apta

El intento de separar la vista del modelo no sobrevive a la revisión, porque "es demasiado complicado, ¿por qué no haces simplemente consultas SQL?". Tu execute_sqleres enlatado porque 'un codificador con disciplina no necesita eso'.

Este caso apesta. En mi experiencia, generalmente viene con microgestión y líderes de equipo que fueron promovidos allí por razones políticas, no por sus éxitos. El verdadero problema es que te ponen a cargo de algo (el código) que no puedes controlar (tienes que hacerlo a su manera). La mejor solución sería resolver la causa raíz (es decir, que te tratan como un gruñido). La segunda mejor solución (y en mi experiencia, la habitual) es dejar de fumar.

La ventaja es que, en este escenario, es probable que su nombre no se publique de todos modos, porque el líder del equipo se atribuye todo el éxito.

keppla
fuente
8

Estoy bastante seguro de que su jefe le exige que entregue algo rápido, pero no que haga un esfuerzo adicional para que sea deliberadamente malo. Lo que significa que cada vez que tiene que elegir entre un código realmente malo y un código ligeramente menos malo, y ambas opciones le tomarían el mismo tiempo de implementación, opta por la opción ligeramente menos mala. Esa es la solución a corto plazo, y no requiere ningún esfuerzo en absoluto.

A largo plazo, habla con tu jefe. Explique cómo invertir 15 minutos aquí puede ahorrarle horas allí. Asegúrese de tener ejemplos convincentes, no del tipo "si hice esto y eso aquí, mi esperanza es que podría hacer esta otra cosa el próximo año", sino más bien, "mira, aquí hice esto, y porque de eso, me llevó tres horas encontrar el problema allí; si lo hubiera hecho de esta manera, el error habría sido evidente de inmediato ". Una advertencia aquí: si bien el código elegante y fácil de mantener se siente mucho mejor y más eficiente, a veces no lo es. Hay situaciones en las que una solución rápida descuidada está perfectamente justificada: a veces estás escribiendo código de un solo uso, a veces estás manteniendo vivo un pedazo de basura obsoleto, esperando lo real; a veces, el beneficio de una solución adecuada no

Si todo lo demás falla, ve a buscar otro trabajo.

tdammers
fuente
3

Nadie te obliga a escribir código incorrecto. Puede cambiar esta situación y hacerla positiva. Cambio pionero de políticas y procedimientos. Y tampoco siempre puedes ser el "sí" hombre / mujer. Si dicen que necesitan la funcionalidad x antes del final del día, dígales que no es factible, pero justifique por qué en realidad no lo es. Donde haya un problema, ofrezca soluciones. No solo una vista ciega, o peor ... añadiéndole.

Su tienda de desarrollo no es la primera en tener plazos estrictos, mientras sigue teniendo el deseo de mantener un código bien diseñado.


fuente
44
-1: En los EE. UU., Si su jefe dice "Escriba un código rápido y malo" y se niega a hacerlo, pueden despedirlo. Desobedecer una instrucción directa para hacer algo legal es motivo de terminación involuntaria. Entonces, si bien eso puede no estar "forzándolo", las alternativas a hacer lo que dice su jefe pueden ser mucho peores.
Bob Murphy
Todo depende de tu enfoque. Idealmente, tendría una figura superior que valoraría su experiencia y su juicio debería ser muy respetado. Muchas veces las personas que dictan los plazos no son desarrolladores, y deben tener en cuenta lo que es posible y lo que no. Por supuesto, podría escribir código "malo" debajo de las cubiertas, pero el retroceso podría ser suficiente para que todos estén contentos: buenos resultados de un buen código.
1
Las figuras superiores ideales para las que realmente no trabajas son geniales, pero la persona que firma tu cheque de pago es la que debes complacer. Hacer que los cobradores de facturas llamen a todas horas cuando estás sin trabajo realmente apesta.
Bob Murphy
1
Hay más que puro interés propio. He sido gerente y emprendedor, y puedo asegurarle que si todo lo que el cliente está pagando es rápido y sucio, hacer un buen trabajo que pierda dinero provocará el despido de personas. Tuve que despedir a una compañía entera una vez, y nunca quiero volver a hacerlo. Entonces, aunque definitivamente estoy a favor de adoptar posiciones morales ... escribir un código malo generalmente no es un problema moral, y en algún momento uno debe elegir entre la preferencia personal y los problemas prácticos de las personas que tienen o no tienen trabajo.
Bob Murphy
1
Casi nunca recomendaría una reescritura a gran escala de un gran sistema, pero eso no significa que el código que escriba en el futuro tenga que ser horrible.
PeterAllenWebb
3

Cualquier empresa necesita encontrar un equilibrio entre escribir un código brillante, con una extensa documentación y pruebas unitarias y llevar los productos al mercado en un presupuesto y espacio de tiempo razonables.

El mejor código del mundo no importa si es obsoleto antes de su lanzamiento.

Ser pragmático se trata de tratar de encontrar ese equilibrio. Obtener características reparadas rápidamente puede ser comercialmente esencial en este momento, no significa que siempre lo será.

Se necesita mucha experiencia (más que la mayoría de los codificadores) para lograr este equilibrio correcto. Es muy fácil ir para cualquier extremo. Encontrar un camino intermedio es más difícil.

No digo que tu jefe tenga razón. Como programador, existe la tentación de intentar crear constantemente un código hermoso que no sea comercialmente viable. Ser consciente de esta tentación puede ayudarlo a darse cuenta de que algunos de estos hacks no son tan malos.

La mayoría del código después de un tiempo suficiente contendrá hacks para situaciones específicas que eran demasiado costosas para refactorizarlas en un marco general.

Jeremy French
fuente
2

Me gustaría agregar que no deberías continuar como lo estás haciendo ahora, sin decir nada y solo pirateando y pirateando.

Debe pararse y señalar el código concreto y decirles qué apesta. Sea específico y use métricas de código para respaldar sus reclamos. Nada es más vergonzoso que afirmar que un código es malo cuando en realidad no lo es, simplemente no entendiste lo que se estaba haciendo.

Estoy seguro de que hay muchas herramientas disponibles de uso gratuito para el análisis de código php http://en.wikipedia.org/wiki/Code_analysis

Además, por supuesto, este http://en.wikipedia.org/wiki/Code_smell

Léalo, resuma lo que puede encontrar en su aplicación y, por supuesto, enumere las alternativas . Es una mala práctica simplemente ponerse de pie y gritar "No me gusta cómo se hace esto" sin presentar una alternativa (preferiblemente) mejor forma de hacerlo.

Los trucos rápidos cuestan dinero. Y no lo vea como algo completamente negativo: puede aprender mucho de este trabajo ahora y puede beneficiarse de las experiencias que ahora tenga en su próximo trabajo.

hth

UrbanEsc
fuente
0

Antes que nada, UTILIZAS algún tipo de control de fuente, ¿verdad? Si no, comienza desde allí. Lo ayudará primero y será adoptado rápidamente por el resto del equipo.

Si tiene control de fuente, no debe poner su nombre en el código, solo debe poner el nombre de su empresa. Es común en el código incorrecto poner un historial de revisión en los comentarios en la parte superior de los archivos, esto se delega mejor al control de origen.

Ahora, con respecto a la calidad del código, no podrá cambiarlo como un enfoque de big bang. Lentamente, uno por uno, agregue nuevos enfoques a diferentes problemas. Si lo hace bien, le AHORRARÁ algo de tiempo y lo usará para mejorar la calidad general.

Para darle un ejemplo mío, una vez llegué a la mitad de un proyecto con una aplicación Perl / CGI donde todo el HTML estaba en el código. Toda la aplicación estaba en un solo archivo sin estructura clara. Nada fue versionado. Comencé configurando un repositorio CVS (no había SVN disponible en ese momento), puse una interfaz web para el cliente. Al principio, yo mismo manejaba los compromisos de mis colegas. Luego, dividí todos los métodos en diferentes módulos (archivos). En ese momento, los colegas comenzaron a adoptar CVS. Luego, saqué el HTML del código. Luego, cada vez que tenía que hacer un cambio en alguna parte del código, me tomaba un tiempo refactorizarlo. Al final, la velocidad de desarrollo había aumentado tanto que el cliente estaba extremadamente feliz. Solicitarían un cambio cosmético y en lugar de decirles "tomará 2 días",

Sin embargo, este enfoque solo funcionará si domina el código general lo suficientemente bien. Si no comprende el panorama general, si algunas partes de la aplicación permanecen ininteligibles, su trabajo será realmente difícil.

Una última cosa, una reescritura completa es a veces la única solución, pero generalmente es muy difícil justificar su costo para la administración.

Eric Darchis
fuente
0

Como eres un desarrollador junior, esto es realmente algo bueno. Ser arrojado a la mitad de un gran lío de código le enseñará mucho más sobre lo que no debe hacer que solo trabajar en un código perfectamente "limpio". Aproveche la situación y aprenda cómo refactorizar el código incorrecto y convertirlo lentamente en algo más manejable. Y no te quejes de que tenga que ser lo antes posible. Ese es el punto: aprenda a refactorizar y limpiar el código mientras hace las cosas dentro de un plazo ajustado. Después de todo, cualquiera puede escribir un código perfecto si tiene un tiempo infinito disponible.

Gran maestro B
fuente