Hola Habr!
驴Con qu茅 frecuencia tuvo que usted o sus colegas no pod铆an describir su propio c贸digo con un par de frases?
Les traigo a su atenci贸n una traducci贸n del art铆culo "C贸mo escribir c贸digo f谩cilmente descripble" de Cedd Burge , en el que comparte su consejo sobre c贸mo evitar tales situaciones.

Cuando el c贸digo es dif铆cil de describir con palabras, la mayor铆a de las personas tienen que usar la imaginaci贸n para hacerlo. Por esta raz贸n, se desperdicia energ铆a mental y aumenta el riesgo de errores en la interpretaci贸n del c贸digo. Diferentes personas a煤n percibir谩n las palabras a su manera, lo que generar谩 confusi贸n al discutir el c贸digo.
Como regla general, tales discusiones se convierten en terreno f茅rtil para los errores que surgen debido a malentendidos, y la correcci贸n de estos errores a menudo conduce a la aparici贸n de nuevos errores por las mismas razones. Al final, obtenemos un c贸digo incomprensible con el que nadie quiere trabajar.
Ejemplo de c贸digo indescriptible
Puede pensar que el c贸digo es solo un lenguaje escrito. Si el c贸digo parece simple, entonces se puede leer, describir y comprender f谩cilmente. Sin embargo, este no es siempre el caso.
La decisi贸n general a continuaci贸n determina si un a帽o es bisiesto.
(divisibleBy(4) and not divisibleBy(100)) or divisibleBy(400)
Este es un c贸digo simple. Llama a funciones 3 veces, tiene 3 operadores (y, o, no) y dos niveles de anidamiento.
Pero creo que si tiene un segundo para describir este algoritmo usando palabras, tendr谩 dificultades.
驴Quiz谩s "un a帽o es bisiesto si es divisible por 4 y no divisible por 100, o divisible por 400"?
El problema es que, en palabras, a diferencia del c贸digo, no hay corchetes. Por lo tanto, es dif铆cil describir adecuadamente la condici贸n en palabras y si la palabra "es divisible por 400" se refiere a "divisible por 4" o "no divisible por 400". Para solucionar este problema, puede especificar corchetes con la mano o hacer pausas m谩s largas entre las condiciones, pero la probabilidad de un error seguir谩 siendo grande.
Refactorizando el c贸digo descrito
Primero podemos describir las condiciones en palabras y solo luego reducirlas, haci茅ndolas tan claras y concisas como sea posible. Comencemos as铆:
"400 a帽os es un caso 煤nico. Si un a帽o es divisible por 400, entonces este es un a帽o bisiesto. 100 a帽os tambi茅n es un caso 煤nico. Si un a帽o es divisible por 100, entonces no es un a帽o bisiesto a menos que sea divisible por 400, entonces la prioridad para el caso especial es "400 a帽os". Si no hay casos especiales, este a帽o es bisiesto, siempre que se divida entre 4 ".
Parece claro, pero no conciso, por lo que acortaremos un poco el texto:
鈥淪i el a帽o se divide por 400, entonces es un a帽o bisiesto. Si se divide entre 100, este es un a帽o normal, pero cuando se divide entre 4, este es un a帽o bisiesto ".
Si convertimos estas palabras en c贸digo, obtenemos algo como lo siguiente:
if divisbleBy(400): return LeapYear elif divisbleBy(100) return NormalYear elif divisbleBy(4): return LeapYear else: return NormalYear
Conclusiones
El c贸digo dif铆cil de entender es com煤n para casi todos los programadores. Nos ayudaremos a nosotros mismos y a nuestros colegas si escribimos c贸digo que se describe f谩cilmente en palabras.
Y lo m谩s importante, escribir c贸digo de esta manera es m谩s f谩cil, ya que no hay un esfuerzo mental vano. El "truco" es que el algoritmo se describe primero con las palabras que luego se usar谩n para escribir el c贸digo.
En muchas organizaciones, el c贸digo ya ha comenzado a describirse en palabras en pruebas de aceptaci贸n o historias de usuarios, lo que puede mejorar la productividad.