¿Qué es un código hermoso? [cerrado]

30

A menudo leo que los desarrolladores deben escribir un código hermoso, pero para un principiante como soy, no se sabe qué es un código hermoso y cómo lo reconoce.

La pregunta del corolario es: ¿Cómo escribir un código hermoso y cuáles son algunos hábitos prácticos para mejorar la calidad de su código? , ¿qué debería importarme para que el código que escribo sea hermoso?

torr
fuente
44
Es solo una forma de hablar. La belleza está en los ojos del espectador, y más allá de eso, se trata de la claridad de las instrucciones que ha establecido en un archivo de texto para resolver un problema, y ​​qué tan fácilmente usted o cualquier otra persona puede modificarlo y mantenerlo en el futuro. Más allá de eso, la cantidad de belleza que exuda su código depende completamente de usted: hendiduras, estructura modular, complejidad, eficiencia simultáneamente con facilidad de lectura, convenciones de nomenclatura, etc.
bad_keypoints
¡Quizás te interese leer Beautiful Code: los principales programadores explican cómo piensan entonces!
UncleZeiv

Respuestas:

55

"La belleza se compra por juicio del ojo".

Dicho esto, creo que la mayoría de los programadores estarán de acuerdo en que un código hermoso demuestra un equilibrio entre claridad y transparencia, elegancia, eficiencia y estética.

  • Claridad y transparencia : la claridad es la facilidad con que un lector puede deducir lo que hace el código. El código transparente hace lo que parece hacer. Si el código parece hacer una cosa pero en realidad hace otra (o algo más), no es transparente, es engañoso.

  • Elegancia : hay muchas formas de implementar la mayoría de los algoritmos, pero algunas son torpes, mientras que otras son ordenadas y elegantes. La concisión a menudo agrega elegancia, pero la concisión excesiva puede reducir la claridad.

  • Eficiencia : evitar el uso innecesario de recursos (como tiempo de CPU, memoria y E / S).

  • Estética : ser agradable a la vista. Esto es bastante subjetivo. Principalmente se reduce al estilo. Una consideración importante es tener un estilo consistente . El código que cambia, por ejemplo, el estilo de sangría a la mitad, es feo.

Igby Largeman
fuente
11
una hermosa explicación, +1
koenmetsu
2
Quitaría "Eficiencia". Aunque en sentido estricto es positivo, incluirlo en la lista puede ser engañoso en el mejor de los casos. Normalmente es un subproducto de los demás y debería ser una preocupación secundaria en el momento de la codificación. La razón principal es que, en su mayor parte, solo se manifiesta después de que el compilador ha trabajado su magia oscura.
DPM
@Jubbat De hecho, a veces la solución más eficiente en realidad conduce a un código muy feo. (Por ejemplo, la función clásica de raíz cuadrada inversa rápida)
Darrel Hoffman
@DarrelHoffman Correcto, aunque ese compromiso también es cierto por más variables que definen un buen código, no solo la eficiencia y el resto (hay una buena explicación extensa de esto en "Código Completo"; desafortunadamente no recuerdo en qué sección del código libro, probablemente cerca del principio)
DPM
@Jubbat: Estoy de acuerdo en que la eficiencia suele ser una preocupación secundaria, pero sigo pensando que tiene en cuenta la ecuación de belleza.
Igby Largeman
20

No permita que la gente lo engañe haciéndole creer que un código hermoso es el siguiente:

  • algoritmos inteligentes
  • características del lenguaje furtivo
  • resolver un problema con la menor cantidad de pulsaciones de teclas

Porque no lo es. Un código como ese es lindo , y ciertamente vale la pena echarle un vistazo, pero no es el tipo de código con el que desea establecerse.

¿Y sabes que ese sofisticado polimorfismo estático recursivo con plantilla que hereda lambdas variadas, o lo que sea que hayas leído en línea? Es posible que esté ansioso por saltar sobre trucos innovadores e ingeniosos sin una razón clara para usarlos. Pero el código que empuja los límites de un idioma tampoco es hermoso.

Son atractiva .
Un montón de diversión, pero pregúntese esto: ¿Realmente quiero pasar tiempo explorando la anatomía de este idioma, o quiero trabajar junto con un idioma y construir algo hermoso? Después de todo, un lenguaje de programación es simplemente la herramienta para crear.


Entonces, ¿qué es un código hermoso ?

Hermoso código = código mantenible. ¡ESO ES!
Esa es la fórmula!

Si puede escribir algo, vuelva unos meses más tarde y continúe progresando, entonces eso es hermoso. Si un año después se da cuenta de que desea agregar funcionalidad y ajustar una característica existente, y logra hacerlo con relativa facilidad, entonces ESTO es hermoso. Si otras personas pueden ingresar a su base de código y descubrir rápidamente qué está sucediendo porque las cosas están organizadas, tendrán más cabello y también serán hermosas.

Entonces, la verdadera pregunta que desea hacer es: "¿Cómo escribo más código mantenible?". Me temo que es una pregunta más importante y es una disciplina bastante creativa. Sigue escribiendo código, pero esta vez no te preguntes si puede ser más hermoso. Pregúntese si puede hacerlo más fácil de mantener.

Trevor Hickey
fuente
44
para combatir los problemas que plantea, también hay consejos para c2.com/cgi/wiki?KillYourDarlings
jk.
4

Mi opinión sobre esto es que "Beautiful Code" no es un término objetivo o particularmente útil. Y no debemos tratar de definirlo.


Las definiciones de diccionario típicas de la palabra inglesa "beauty" son así:

  • "1. la combinación de todas las cualidades de una persona o cosa que deleitan los sentidos y complacen la mente"
  • "1. La calidad presente en una persona o cosa que da placer estético intenso o satisfacción profunda a la mente o los sentidos".
  • "1. La calidad que da placer a la mente o los sentidos y está asociada con propiedades tales como la armonía de la forma o el color, la excelencia del arte, la veracidad y la originalidad".

(Fuente http://dictionary.com )

El hilo conductor es que la "belleza" se trata de lo que es estéticamente agradable. Eso es necesariamente subjetivo ... como lo ilustra el dicho "La belleza está en el ojo del espectador".


Podemos aplicar la palabra "belleza" al código, y el significado obvio es que el código es "estéticamente agradable".

Pero decir que "código hermoso" tiene un cierto conjunto de atributos (como lo sugieren otras respuestas) es una contradicción del significado obvio de estéticamente agradable. La estética se trata de cómo las personas ... las personas individuales ... perciben las cosas.

O para decirlo de otra manera, hay algo repugnante en que alguien me diga lo que debería pensar que es hermoso, ya sea en personas, obras de arte o ... código.

En lo que a mí respecta, un código hermoso es un código que creo que es hermoso, y eso es todo. Es subjetivo e individual, y dejémoslo así.

Stephen C
fuente
2

Aquí está mi consejo.

Mire las respuestas a ¿Cómo puede explicar el "código hermoso" a un no programador? y ver en qué características dicen centrarse. Luego, tome un libro como Code Complete y léalo para obtener consejos sobre cómo escribir un mejor código.

En algún momento te golpeará mientras miras un código antiguo tuyo, "Esto es feo". Será una reacción estética directa. Y al mirarlo, se dará cuenta de que está viendo su código como un programador, y puede ver la fealdad porque sabe cómo debería ser un código de mejor aspecto.

btilly
fuente
1

El hecho de que a menudo lea sobre código hermoso no significa que las personas que escriben sobre él tengan la misma definición. Lamentablemente, a juzgar por su pregunta, no parece que incluso se hayan molestado en definirlo en primer lugar.

Para mí, el código hermoso es:

  • Expresivo
  • Conciso

El código conciso que no es expresivo puede ser críptico, y el código expresivo que no es conciso tiende a ser hinchado y tedioso de leer, por lo que necesita ambos.

No incluiría el mantenimiento como parte de lo que hace que el código sea hermoso, porque la belleza es algo que ves / lees, no algo sobre lo que actúas. Pero, de nuevo, es mi punto de vista personal.

guillaume31
fuente
0

El término código hermoso es un término muy vago y abstracto. Es fácil darse cuenta de lo que representa y lo que significa, pero nunca debe verse como algo más que un objetivo secundario.

Me recuerda mucho a la métrica de cobertura del código. Cuando obtiene el número lo suficientemente alto, puede relajarse y pasar a otra cosa. Tener una base de código con aproximadamente el 80% de cobertura es excelente, no a prueba de balas, pero lo suficiente como para relajarse y hacer otras cosas. Tener una cobertura del 40% es bastante aterrador y debería alentarlo a aumentar ese número.

El punto es solo que la cobertura del código solo es realmente significativa si el número es bajo. Así que no dejes que sea bajo. Cuando la cobertura se eleva a un cierto punto, pase a otra cosa.

Del mismo modo, el código hermoso es genial. Si tienes un código bonito, genial, pasa a otra cosa. No te preocupes demasiado por eso. Nunca alcanzarás esa marca del 100%, y si lo haces, te darás cuenta de que te has centrado demasiado en cómo se lee, o cómo se ve, y no lo suficiente en lo que hace o cómo lo hace. . Así que llega a una marca razonable y luego detente.

Pero si su código es fugoso, si es un desorden enredado gigante de código de espagueti, si físicamente le duele abrir el archivo, si no tiene comentarios o documentación, etc., etc., luego corríjalo. Y hazlo lo antes posible.

Con el tiempo, encontrará que su base de código termina generalmente más limpia, generalmente más brillante y generalmente más hermosa y, lo que es más importante, más útil cuando se concentra en hacerla menos fugosa. Escribir un código hermoso no es un proceso de un solo paso.

No hay filosofía mágica. Sus 1000 pasos más pequeños, todos juntos, todos tienen un propósito concreto que no tiene nada que ver con lo hermoso que se ve el código. Pero, cuando los sirve todos juntos, forman un hermoso código como la suma de sus partes. Como voltron. O el capitán del planeta.

astronauta
fuente
0

Estoy de acuerdo con las respuestas aquí realmente, pero adoptando un enfoque menos técnico, diría que un código hermoso es una expresión de la claridad de pensamiento de sus autores sobre el problema en cuestión que se manifiesta a través de un lenguaje bien formulado y preciso pero simple.

Para mí, mirar a través de un código hermoso es muy parecido a mirar una obra de arte, ver detalles siempre nuevos que muestran la intención del creador, pero también cómo se realizaron las diferentes partes, cada una dando una respuesta a tantas preguntas, y luego, finalmente, cómo su existencia se siente como una ley natural a la que todo se alinea de tal manera que solo puede describirse con palabras de asombro: magnífica, inspiradora, hermosa.

Entonces, desde esa perspectiva, en su carrera como programador, puede hacer descubrimientos de códigos hermosos que otros quizás no entiendan porque carecen de los conocimientos o ya no los encontrarán notables ya que han sido mimados por demasiada belleza;)

Hermoso código tiene todas las cualidades pragmáticas como se mencionó de otra manera, estoy totalmente de acuerdo.

Filou
fuente
0

Tengo tres criterios:

  • Simple: al menos debe ser legible por humanos. Por ejemplo, puede escribir un código que funcione en O (1) para una solución con toneladas de líneas, pero prefiero el código que funciona con 0 (n) resuelve con pocas líneas. Esto puede cambiar para situaciones extremas, pero para empezar la simplicidad es importante.
  • Reutilizable: el código debe ser reutilizable, pero no sobrescrito. Si necesita una operación, debe definirla de la forma en que puede usarla años después.
  • Sangría: tal vez esto no sea un problema para usted, pero para el nivel principiante, esto es lo primero que debe resolverse.
usuario2674653
fuente