1. ¿Lecciones de escritura? Realmente no.
Escribir el código fuente es lo suficientemente diferente de escribir un libro.
Si bien ambos persiguen los mismos objetivos: ser tan ambiguos como sea posible y fáciles de entender, lo están haciendo de una manera muy diferente, y las cosas que un escritor debe aprender no son lo mismo que un desarrollador de software debería aprender.
Ejemplo 1: figuras retóricas
Las figuras retóricas son valiosas al escribir novelas, poesía, etc., ya que aumentan la expresividad de la escritura.
¿Cuál es la última vez que has visto un oxímoron o un litotes en el código fuente ? ¿Sería útil tenerlos, o preferiría ser extremadamente perjudicial para cualquier desarrollador que tendrá que mantener dicho código fuente más adelante?
Ejemplo 2: vocabulario
El vocabulario rico es muy apreciado en la literatura. El vocabulario de William Shakespeare, por ejemplo, es de veinte mil a veinticinco mil palabras. Un vocabulario más rico hace que sea más interesante leer una novela o un poema.
Cuando escribe el código fuente, espera que sea leído por personas que no hablan inglés muy bien . Mostrar qué tan bien sabes inglés sería extremadamente dañino para tu código. Si conoce una palabra elegante que significa exactamente lo que necesita pero sabe que muchas personas no saben el significado de esta palabra, debería encontrar un sinónimo menos expresivo o un conjunto de palabras que expliquen el significado. Un vocabulario de unos pocos miles de palabras suele ser suficiente para un proyecto determinado.
Tenga en cuenta un aspecto importante: aunque Google Translate podría ser de gran ayuda para un hablante no nativo, hay dos problemas con cualquier traductor:
Un par de idiomas no necesariamente tienen una coincidencia 1: 1 entre las palabras. Algunas palabras no tienen traducción en otros idiomas, o varias palabras podrían traducirse en una sola palabra en un idioma extranjero. Por ejemplo, en ruso, hay una gran cantidad de palabras que apuntan a estados específicos de nieve y clima frío, y traducirlas en francés o español generalmente es imposible sin perder su especificidad.
Una palabra a veces tiene múltiples significados, y el significado se deduce del contexto. El Traductor de Google, a pesar de su alta calidad, generalmente no puede indicar el significado de ninguna de las situaciones más básicas.
Ejemplo 3: expresiones
Las expresiones enriquecen la prosa también. Un autor espera que un lector tenga una cantidad determinada de cultura general, y aprovecha esta oportunidad para hacer que el texto sea más expresivo.
De manera similar al ejemplo anterior, tales expresiones podrían ser muy problemáticas cuando las leen personas que no son hablantes nativos. Pero si el vocabulario general generalmente se puede traducir, las expresiones son mucho más problemáticas.
Por ejemplo, el inglés no es mi lengua materna y, a diario, encuentro expresiones, incluso aquí en StackExchange, que no sé. Trato de adivinar su significado, y a veces tengo razón. Pero a veces me equivoco, y buscar esas expresiones en Google no ayuda.
Un usuario en su comentario me recordó un ejemplo que me hizo sufrir durante mucho tiempo cuando recién comencé a programar: la aguja y el pajar de PHP . No tenía conocimiento de la forma de hablar correspondiente, así que cada vez que leía la documentación, me preguntaba de qué se trata todo esto. No hace falta decir que los C # sequence.Contains(element)
o el excelente Python element in sequence
son una alternativa mucho mejor. Bueno, al menos, los desarrolladores que no saben hebreo también tuvieron que sufrir PHP , pero esta es una historia diferente.
Ejemplo 4: referencias culturales
Referencias culturales. En la literatura, es tentador incluir elementos de una cultura determinada, y esto también hace que el libro sea más rico y, a veces, más interesante de leer.
Sin embargo, el código está dirigido a desarrolladores de todo el mundo. Por lo tanto, lo que es una referencia obvia para un desarrollador italiano puede no ser tan obvio para un desarrollador ruso, y lo que todo niño o niña indio sabe no necesariamente debe ser conocido por un programador estadounidense.
El mismo usuario que habló sobre la aguja y el pajar también dio un excelente ejemplo de referencia cultural: el Grial. ¿Quién no sabe qué es Grial? Bueno, quiero decir, es "Graal" en francés, "Grial" en español y ... "Kutsal Kâse" en turco, pero aún así. Sin embargo, ¿cuánto conocen los desarrolladores estadounidenses o europeos la historia medieval de China o India? ¿Por qué alguien asumiría que todo programador chino e indio tiene que conocer la referencia del Santo Grial?
2. ¿Lecciones para escribir código fuente expresivo? Seguro.
Cualquier desarrollador debe aprender a escribir código fuente expresivo.
Cualquier desarrollador debe explicar por qué el comentario en:
int j = i + 1; // Creating i and adding 1 to it.
es malo, incluso dejando de lado el hecho de que está totalmente mal.
Cualquier desarrollador debe poder comprender la refactorización básica y cómo ayuda a hacer que el código fuente sea más expresivo.
Cualquier desarrollador debe recordar que el 20% del tiempo se dedica a desarrollar código y el 80% del tiempo a mantenerlo. Para algunos proyectos, es más como 5% - 95%.
etc.
En esencia, la programación está cerca de la documentación técnica. ¿Una persona que escribe una hoja de especificaciones para un perno necesita tomar lecciones de escritura? Realmente no. Lo mismo se aplica para los desarrolladores. Cualquiera debería escribir sin cometer errores ortográficos en cada palabra, y cualquiera debería poder comunicar sus ideas con suficiente claridad. Aparte de eso, no estoy seguro de cómo escribir lecciones sería más útil que, digamos, un curso de informática o seguridad informática o lo que sea.
La expresividad del código fuente se puede aprender por otros medios. SuperM mencionó uno de ellos en su respuesta : leer un buen código. Puedo mencionar algunos otros:
Leyendo libros como Beautiful Code o Code Complete,
Solicitando a un desarrollador más experimentado que revise su código,
Comprender los patrones y cómo y cuándo usarlos.