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.
fuente
Respuestas:
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.
fuente
Every time you touch the code, leave it better than it was before.
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.
fuente
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.
fuente
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 comofetch_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_sql
eres 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.
fuente
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.
fuente
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
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.
fuente
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
fuente
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.
fuente
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.
fuente