Como ingeniero de software, ¿es posible aprender malas prácticas de una base de código desorganizada?

Solo si dejas que suceda.

Abogar por el cambio. Aprenda todo lo que pueda sobre desarrollo basado en pruebas (TDD), integración continua y prácticas ágiles. Si su empresa actualmente no practica estos, encuentre oportunidades para discutirlos con sus compañeros de trabajo y gerente.

Lee sin piedad. Desarrollar opiniones fuertes.

Construimos sobre los hombros de gigantes. Aprende de ellos.

  • Programador pragmático por Andy Hunt y Dave Thomas
  • Estructura e interpretación de programas de computadora por Harold Abelson y Gerald Jay Sussman
  • Código limpio de Robert Cecil Martin
  • Java efectivo por Joshua Bloch (o el equivalente de su idioma)

No te conformes. Incorporar calidad a los requisitos.

Esto puede no ser siempre factible, debido a limitaciones de tiempo / presupuesto, y puede que no sea la máxima prioridad de las fuerzas que dirigen los plazos, pero es su trabajo como ingeniero hacer que la importancia de la calidad sea primordial y convencer a estas otras partes de la misma.

Utilice herramientas de cobertura de prueba, correctores de estilo, buscadores de errores. Examina las reglas aplicadas. Aplíquelos contra código bien establecido y de alta calidad, como la guayaba de Google o cualquiera de los proyectos de Apache. Examine estas bases de código e intente entender por qué hacen las cosas como lo hacen.

Utiliza la integración continua. La retroalimentación rápida es una de las mejores herramientas en la caja de herramientas TDD.

No tienes que hacerlo solo.

Encuentre un mentor que pueda abogar por usted y ayudarlo a romper las barreras. Aprende todo lo que puedas de ellos. Construir su confianza. Serán tu aliado más valioso.

Sé el cambio que quieres ver en el mundo.

Comience estas prácticas en su máquina de desarrollo. Documenta tus experiencias. Desarrolle la capacidad de hablar coherentemente sobre lo que ha aprendido. Sé apasionado de querer enseñarlo a otros. Demuestre lo que ha aprendido a sus compañeros de trabajo, a su jefe, al jefe de su jefe, a otros equipos. Alguien lo notará.

¡Buena suerte!

Puede encontrar esto interesante: cómo las prácticas rotas se convierten en estándar (también creo que habla del último punto en la respuesta de Miles Fidelman).

Como alguien que ha pasado años haciendo programación de mantenimiento, supongo que esto podría ir en ambos sentidos. Estoy de acuerdo con Miles en que la exposición a las buenas prácticas es probablemente la clave. Si realmente ha trabajado en entornos de alto funcionamiento y bases de código de relativamente buena calidad, reaccionará con todo, desde la aversión y la molestia hasta la ira y las lágrimas cuando se enfrente con el tipo de bases de código en las que he estado trabajando. . Por lo general, está claro que la persona que escribe el código probablemente nunca haya visto mejores prácticas. Recuerde que una gran cantidad de problemas en el código y las prácticas heredadas ya tienen soluciones, ¡ pero debe conocerlas!

Ilustrar esto fue un proyecto en el que trabajé reemplazando durante más de un año. Cuando lo heredé, el desarrollador (en realidad era más una actividad secundaria de su trabajo como vicepresidente) ni siquiera estaba usando el control de versiones o un marco, y mucho menos un rastreador de problemas, y la mayor parte de la aplicación era solo copiar y pegar. Era una línea de aplicación comercial de la que dependían una empresa, inversores y sus clientes todos los días, pero era un castillo de naipes. Presumiblemente, si el desarrollador hubiera estado al tanto de los beneficios del control de versiones y el seguimiento de problemas, habría insistido en ellos. Ninguno de los códigos fue utilizable. Todo tuvo que ser reconstruido. Al carecer de especificaciones o pruebas, uno se ve obligado a intentar extraer el significado del código de baja calidad. Aunque he tenido que hacer esto muchas veces, es un trabajo miserable y solo un buen dinero después del mal para el cliente. En este caso, pude hablar con el desarrollador durante un largo período, lo que ayudó considerablemente, pero eso no siempre es posible.

El trabajo de baja calidad, una gran parte, si no la mayor parte del software de producción que existe, es un insulto para los clientes (sin mencionar un tipo de fraude) y para la industria misma. El efecto que esto tiene en es redoblar mi insistencia en no cortar esquinas.

El último proyecto en el que he estado trabajando subraya esto ya que me fue entregado sin ninguna documentación, historial de versiones, especificaciones o antecedentes, y probablemente ni siquiera era la última versión del código. Fue una relación de outsourcing que salió mal, por lo que no hubo acceso a los desarrolladores anteriores. Ese proyecto es un material horrible de nivel junior; Todos lo hemos visto. Aparentemente, el error más inevitable que cometen los programadores de bajo grado es olvidar que no se trata de arrojar el código y volver a casa. El software tiene que ser mantenido. Alguien lo posee. Alguien pagó muy caro por ello. O van a obtener valor por dinero, o el dinero (y su carrera) se va a evaporar lo suficientemente pronto. También es pura hipocresía. Cuando un programador acude al dentista, esperan que el dentista haga todo lo posible para hacer un relleno que dure, no se desmorone y se caiga. Es lo que les pagas por hacer. Sin embargo, veo mucho código escrito por personas que no ejercen la misma atención y responsabilidad profesional que esperan de todos los demás con quienes tratan. ¿De qué manera es eso sostenible?

En resumen: para crecer y desarrollarse, asegúrese de estar constantemente desafiado a mejorar su práctica de ingeniería de software, todos los días. No cortes esquinas. Trabaje con personas y mentores más experimentados que se dedican a la calidad y la facilidad de mantenimiento en su trabajo, de manera que pueda verlo usted mismo. Verificar los beneficios de mejores prácticas. Véndelos a sus gerentes y clientes con evidencia. Identifique y sea honesto acerca de los defectos en nuestras herramientas. Nunca te enamores de una herramienta; ¡Incluso tu idioma favorito tiene problemas! Identifique esos problemas * y busque soluciones. A su vez, enseña a tus colegas †. Asegúrese de que los desarrolladores que hereden su código estén encantados con él. Piensa constantemente en lo que estás dejando atrás. Como industria debemos levantar nuestro juego, evidentemente un desarrollador a la vez.

Aquí hay otro artículo que puede resultarle útil: algunas cosas que pueden ayudarlo a mejorar el software

* —La respuesta de Toby Thain a ¿Cómo funciona Python perfectamente para Quora si Python no es bueno para proyectos a gran escala y otras desventajas? – Para ampliar esto, aquí hay cosas que puede comenzar a hacer de inmediato: por cada defecto que encuentre o se le informe, ejercite los Cinco por qué para profundizar en su causa raíz. Luego pregunte, ¿cómo podría haberse evitado? ¿Qué podemos hacer para evitarlo la próxima vez? ¿Y qué lo haría más fácil de arreglar? Para características: pregunte qué haría que esta característica sea más fácil de construir. Cada vez que una tarea parece demasiado compleja, agrega riesgos o no funciona correctamente, pregunte ¿Por qué? como un niño curioso

† —Peter Seibel en Twitter

Sí, no solo es posible, es muy probable que aprendas cosas malas.

Para los nuevos ingenieros, su primer trabajo es el 80% de su aprendizaje real. Este es el momento en que estará expuesto al diseño, la arquitectura, la organización, el estilo y aprenderá muchas cosas.

Todavía no tiene un punto de referencia para lo bueno y lo malo, solo sabe cómo codificar. Entonces, lo que ves en el código puede convertirse fácilmente en un punto de referencia.

Si trabaja en bases de código desorganizadas, tomará malas prácticas (porque aún no ha visto nada bueno). Por el contrario, si trabaja en buenas bases de código, aprenderá buenas prácticas, no solo al mirar el código, sino también de las personas a su alrededor, lo cual es muy, muy importante.

Si no está recibiendo la tutoría de buenos ingenieros experimentados a su alrededor a través de revisiones de código y programación y entrenamiento entre pares en general, no está en un buen ambiente.

No creo que una persona realmente pueda APRENDER a ser mala. Tienes tu propia línea de base de calidad basada en proyectos que hiciste en la universidad, o al ver a tu superdotado colega escribiendo un código increíblemente increíble, etc. El punto aquí es: cuando comienzas a trabajar dentro de cierto nivel, en mi experiencia, es MUY DURO, si no imposible, que ese nivel baje. Quiero decir, puede subir, pero nunca bajar. Puede tocar la base de código X y volverse PEOR como desarrollador de lo que era cuando comenzó, al menos eso creo.
Hay una idea muy, muy grande de que las mejores universidades producen codificadores y diseñadores de alta calidad … Quiero decir, supondré que no soy el único en esta posición, pero ¿cuántas veces intentaste “navegar a través de un tema”? va a stackoverflow y simplemente intenta hacer que un proyecto funcione? ¿Te has preocupado por la calidad de tu código? ¿Tenía un colega del equipo de control de calidad que le diría cuán mal modularizado y encapsulado era su código? Al estudiar, la prioridad es, además de estar expuesto a varios paradigmas de programación y lenguajes, y algunas buenas prácticas de ingeniería de software (en el caso de mi título que era sinónimo de control de versiones y pruebas unitarias), pasar las materias para graduarse y obtener fuera de la universidad.
Una realidad dura que nunca se puede enseñar en, o al menos, una realidad a la que no se puede exponer en la universidad, es que el código de producción ES DIFERENTE. Es mucho más elástico, está mucho más sujeto a cambios con el tiempo y, sobre todo, los plazos son PLAZOS DUROS. Las personas firman contratos con sus jefes y pueden pagar miles o millones de euros para tener el código en sus manos el día X. Si las bases de código heredadas de la compañía se prueban relativamente bien, puede trabajar con ellas y aprender a codificar dentro de un entorno de producción. de manera más o menos guiada. Pero, confía en mí, cuando es hora de hackear tu camino a la fecha límite de producción, entonces es hora de hackear tu camino. Período. Te guste o no, es parte de ser ingeniero.

Mi consejo: si alguna vez te colocan en una posición en la que puedes portar un pequeño módulo de una aplicación por tu cuenta, hazlo lo mejor que puedas. Si puede corregir algunos errores, realice algunas refactorizaciones en el camino, hable sobre esto con sus colegas. Agregue algunas pruebas, registre algunos valores importantes, etc. Si bien es cierto que la mala calidad puede extenderse rápidamente, creo que la buena calidad puede extenderse mucho más rápido. Pero es importante no olvidar nunca que, mientras se preocupaban por las buenas prácticas, las personas pagaban dinero para tener ese código en sus manos el día X. Si un pequeño truco permite que los evaluadores o el equipo de control de calidad prueben el código más rápido, que así sea. El mundo real ya no es un proyecto universitario de juguetes.

Probablemente.

Las buenas prácticas de codificación se derivan de una combinación de buen liderazgo técnico y de gestión, y buenas prácticas promulgadas y respaldadas por una combinación de documentación (por ejemplo, estándares de codificación, estándares de documentación), herramientas, procedimientos y cultura.

Las prácticas de codificación MALAS pueden ser el resultado de una falta total de cualquiera de los anteriores , en cuyo caso puede tener la oportunidad de investigar y promulgar mejores estándares (leer mucho, estudiar código bien estructurado, adoptar una herramienta, aplicar mejores prácticas a su código) ), Lo que a su vez podría ayudarlo a usted, a su equipo y a su empresa. Pero … es posible que solo aparezcas y molestes a otros miembros del equipo y a tu gerencia; trata con cuidado.

PEOR … las malas prácticas de codificación pueden provenir del liderazgo incompetente y la práctica arraigada. Tenga mucho cuidado con frases como “hacemos las cosas a mi manera” o “así es como hacemos las cosas por aquí”. Esas son señales muy fuertes para salir.