¿Por qué importa un buen código?

Entonces aquí está la experiencia real. Un par de días en el trabajo y el gerente de servicio al cliente se va y la compañía contrata uno nuevo. Todo el código de servicio al cliente fue escrito en casa. Así que actualizo la base de datos para darle al nuevo individuo todos los derechos en el sistema que tenía el administrador anterior; Se llamaba Wendy. Por alguna razón, no tiene los mismos derechos que tenía Wendy. Que esta pasando. Finalmente, después de arrancarme el pelo, busco en la base del código; era java por cierto. La cadena “Wendy” está codificada en 150 lugares diferentes en 10s de miles de líneas de código que componen el sistema de servicio al cliente. Si bla es igual a “Wendy”, entonces haz esto, debería haber renunciado, pero eso no fue nada comparado con lo que estaba por venir.

Al menos podrían haber tenido una constante llamada “gerente” establecida en “Wendy”, pero no. El código limpio, por supuesto, significa mucho más que eso, pero entiendes mi significado. ¿Supongamos que queremos tener más de una persona con la configuración de seguridad “Wendy”? Olvídese de que todos los que necesiten esa capacidad necesitarán conocer la contraseña de “Wendys”. No me pidas que cambie ese código porque si crees que un ID de usuario codificado es malo, créeme, no has visto nada.

Agregando, debido a un comentario de Mehmet a continuación:

Mehmet mencionó 10,000 líneas de código en un jsp. Esta compañía para la que trabajé había incorporado toda la lógica de cupones de descuento, campañas de marketing y ventas de diferentes tipos en un Servlet que era su página de pago; Más de 10k líneas de código en un solo servlet responsable de una sola página, la mayoría de los cuales fue un procedimiento, casi sin funciones o subrutinas. Este fue un código pre jsp escrito alrededor del año 2000 y constantemente modificado y empeorado hasta que cayó en mi regazo a fines de 2006.

El código del servlet era exactamente lo contrario del código limpio. El código del servlet sería como este pseudocódigo:

Revisa:
Escriba un código de tabla que haga un encabezado para la página
Para cada artículo en el carrito:
Obtenga el precio de la base de datos;
Si estamos haciendo una oferta de dos por uno en este artículo, verifique si es SKU 123456. Luego
Es el último SKU = 123456 ENTONCES
precio = 0
Terminara si
Terminara si
Si estamos haciendo un cupón y se ingresa un cupón, entonces
Por cada cupón en cupón

etcétera etcétera.

Como puede ver, la interfaz de usuario o la capa de presentación se mezclan en una lógica de negocios que calcula el precio y ofrece descuentos. Obtiene cosas como escribir “

” seguido de calcular el precio y luego escribirlo. Hay bucles dentro de bucles que usan índices i, j, k, i2 que abarcan miles de líneas de código. Los ID de sku que en realidad son ID de tabla en una base de datos de SQL Server están codificados en todas partes. Nadie puede mirar este código y entenderlo. No se puede mantener, no se puede actualizar.

El resultado de esto es que la compañía no tenía idea de por qué vendería una chaqueta de $ 150 por $ 40. Cada vez que la empresa presentaba un nuevo tipo de venta o un nuevo conjunto de SKU para la venta, alguien actualizaba el código en esta página. Hubo errores Se produjo un error cuando alguien actualizó el código y creó un error en el que se podían aplicar múltiples cupones a un artículo en oferta. Esto causó que los abrigos de $ 200 salieran por $ 25 dólares. Los sitios de cupones se enteraron de esto y los cupones se volvieron virales. El sitio se bloqueó debido a una avalancha de usuarios, pero no antes de que la compañía perdiera alrededor de $ 200,000 debido al error del cupón.

Es por eso que quieres un código limpio. La persona que actualizó el servlet no pudo ganar. Es un código incompatible.

Más tarde, la compañía contrató a un CFO real que quería poder calcular los márgenes, etc. Bueno, todos esos cálculos se hicieron en el código del servlet de pago, no había forma de volver y calcular los márgenes. La compañía nunca supo realmente en qué artículos estaba ganando dinero debido a la falta de código limpio.

¿Alguna vez has leído la escritura de una persona cuya letra era casi ilegible? La intención del autor original se ha perdido en el mar de arañazos de pollo.

Del mismo modo, la escritura a mano de una persona en el código depende de la calidad de su código. ¿Nombran las variables apropiadamente? ¿Tienen métodos auxiliares que realizan tareas más pequeñas para una función más grande? ¿Siguen los estilos de sangría / espaciado? ¿Es la lógica en una función relativamente sencilla?

Si se garantiza y mantiene una alta calidad de código, esto significa que los futuros ingenieros que profundicen en la base de código podrán construir nuevas características / solucionar problemas que encuentran mucho más fácilmente.

Un buen código es importante porque le estás contando una historia a los programadores. La historia apesta si está mal escrita, es ilógica o desordenada. Se puede argumentar qué es exactamente un buen código, pero lo tomaría como una cuestión subjetiva en lugar de objetiva. Por supuesto, hay algunos hechos u opiniones universales que la mayoría de la gente considera buenos. Tenemos pautas de código, patrones de diseño, métricas de código y perfiladores; en mi opinión, esto no mide qué tan bueno es el código. ¡Un código puede ser bueno incluso si es completamente abstracto y, por lo tanto, no se puede ejecutar!

Un buen código generalmente es escrito por buenos o buenos programadores. Entienden que lo más importante en la codificación es la abstracción clara de los conceptos. Considero que un código automáticamente es malo si veo malas abstracciones. Debo señalar que estoy hablando de abstracciones matemáticas, no esas abstracciones que OO “inventó”.

Puede nombrar sus variables, funciones, clases y archivos como desee; la denominación no puede hacer que su código sea incorrecto. Además, puede sangrar y documentar su código como lo desee, incluso descuidar esto no hace que su código sea malo. Esas cosas pueden indicar que eres un mal desarrollador pero no hace que tu código sea malo. Incluso los desarrolladores pobres pueden ser buenos programadores (que escriben un buen código). La calidad del código es una medida de lo buen programador que eres: si quieres aparecer como un mal programador, entonces adelante y escribe un código pobre.

Simple … ¿Le gustaría hacerse cargo de un proyecto que tiene un código muy desordenado y no está documentado? He escrito muchos programas “rápidos y sucios” en myslef, pero creo en escribir código reutilizable, código bien diseñado, orientado a objetos y escalable.

¡Se acabaron los días de escribir código críptico! ¡Documente su código y nunca intente poner a otro desarrollador en un lío al tratar de descifrar el código de espagueti! ¡Hemos pasado eso!

¿Vamos a definir qué hace que un código sea ‘bueno’?

Veo estas tres características autoexplicativas de un buen código.

  • sencillez
  • eficiencia
  • modularidad

¿Por qué queremos un buen código?

  • Menos errores ya que es simple y desacoplado.
  • Incluso si hay errores, es más fácil encontrarlos.
  • El código escrito hoy podría seguir siendo necesario en varios años. Los desarrolladores de software adoran desarrollar desde cero y un código / biblioteca incorrecto le da a la ma una muy buena razón para reescribirlo. Sin embargo, este tiempo podría haberse gastado en un trabajo más productivo reutilizando un buen código.
  • Los equipos cambian, alguien heredará el código heredado y pasará mucho tiempo tratando de entender qué hace o cómo solucionar un error.

Si todos quieren un buen código, ¿por qué aparece un código malo?

  • Falta de experiencia. Esto es trivial
  • Incluso los desarrolladores experimentados tienden a hacer que el código funcione primero, luego refactorizarlo / optimizarlo. En una buena cultura de ingeniería, el código se revisa, refactoriza y reutiliza continuamente. Lamentablemente, no muchas empresas tienen una buena cultura.
  • Desarrollar y tirar la estrategia. Hay desarrolladores a los que simplemente no les importa quién admitirá su código.
  • Outsourcing A los desarrolladores se les paga por su tiempo. Si el código es malo, eso significa que el tiempo necesario para el desarrollo aumenta, las pruebas y los ciclos de lanzamiento se extienden, etc. No creo que lo hagan a propósito (espero que sí), debería deberse a su cultura de ingeniería.

Con más de 10 años de experiencia en la industria del software, puedo decir que escribir código bueno y legible es realmente importante para los programadores y las partes interesadas de negocios.

Me gustaría comenzar diciendo que un buen código debe ser un código legible. Si el código es ilegible, entonces no puede ser bueno. ¿Por qué? porque hacer código ilegible está prohibiendo la continuidad del producto.

Por ejemplo, en el negocio del desarrollo de software personalizado, cada producto que creamos es el producto de nuestro cliente. Pueden hacer lo que quieran con él, usarlo internamente o venderlo a otra persona, pero lo más importante es que pueden extenderlo o modificarlo ellos mismos.

Para hacer eso, lo que necesitan es tener el código fuente. Pero, ¿qué pasa si el código que les dimos es incomprensible para cualquier otro desarrollador? ¿Podrán extenderlo o modificarlo más tarde? Si nuestros clientes no pueden entender la lógica para extender o modificar el producto que hemos construido, entonces, ¿no serían los dueños reales del producto?

Además, hemos visto que el 90% de las veces que un programador se enfrenta por primera vez con el código fuente escrito por otros, no lo aprobarán. Los encontrará diciendo cosas como: “¿Qué está haciendo esta cosa aquí?!?” “¿Para qué es esto?!?” “¿De dónde viene esto?!?” “¿Quién escribió esto?!? ¡Te encontraré!”

Cuando los programadores se enfrentan a la realidad de tener que trabajar con códigos incorrectos ilegibles, su motivación disminuye significativamente. Sin mencionar lo que sucede si hay plazos para cumplir. Revertir esta situación es difícil porque necesitas motivar a tu equipo para que lo haga y debes darles tiempo para hacerlo.

Si desea obtener más información sobre la importancia de un buen código, le recomiendo un artículo escrito por nuestro CTO, donde también encontrará algunos consejos y ejemplos sobre cómo producir un código legible “Déle al código limpio la importancia que merece”

Hace que su vida y la de los demás sea más fácil, cuando realiza correcciones de errores o mejoras, entonces es fácil y la gente felizmente se inscribirá. Además de un buen código, las buenas pruebas son muy importantes porque puedes refactorizar y mejorar el código si no es así.

Mantenibilidad

Porque la realidad cambia y su producto necesita adaptarse para adaptarse a la nueva realidad. Un buen código hace que esos cambios sean más fáciles, es decir, más baratos.