¿Cómo se puede explicar el "código hermoso" a un no programador? [cerrado]

44

Cuando hablaba con una amiga que no era programadora, mencioné el concepto de "código hermoso" y ella quería entender lo que eso significaba, pero no sabía cómo explicarlo a alguien que no tendría contexto en absoluto.

Cuando todo el código parece galimatías para alguien de todos modos, ¿cómo puede explicar qué hace que una pieza de código sea más bonita que otra? Las analogías también podrían ser útiles.

Daniel Vandersluis
fuente
12
¿Puedes explicar un código hermoso a un programador sin mostrar el código? La descripción es en sí misma un arte.
kojiro
99
Si podemos llegar a una buena idea aquí, tal vez pueda usarla para describir una hermosa prueba a un no matemático.
David Thornley
Un código hermoso puede ser el que usa las ideas más simples y menos mientras hace el trabajo correctamente. Irónicamente, la tarea anterior de encontrar ideas simples puede ser un trabajo complejo, y eso lo admiramos. - Lo siento, no puedo encontrar en este momento una forma de explicar esto de una manera más natural a alguien.
LatinSuD
Un código hermoso es cuando configura su fuente IDE en Comic Sans. suspiro
Kirk Broadhurst

Respuestas:

88

Analogía del lenguaje

Piensa en tu historia más favorita. Probablemente esté bellamente escrito. Para un hablante que no habla inglés, solo porque no pueden entenderlo o comprender por qué es hermoso no le resta valor a su belleza.

Analogía de construcción

Considere una casa mal construida. Tiene puertas y ventanas que obviamente están tapiadas. El mortero está agrietado en una esquina donde la base era insuficiente. Y nadie puede entender por qué hay una escalera que conduce a un segundo piso que no existe. El inodoro está construido al lado de la cocina sin ventilador de extracción y está situado de tal manera que los vientos dominantes soplarán los malos olores del pantano en el resto de la casa. La chimenea de la chimenea abierta está a 5 cm de un poco de madera, lista para prenderse fuego.

Compare que con una casa donde todo está donde debería estar, es de bajo mantenimiento, está perfectamente aislado para que un poco de calor solar lo mantenga caliente en invierno, la energía se recupera de la ventilación, por lo que tiene aire fresco y una temperatura confortable. y facturas de energía insignificantes. Está construido con materiales no inflamables para que no se queme con el fuego. Soportará un terremoto de 9.0 y un tornado F5. La construcción solo cuesta un 30% más que la otra casa, pero pagará la diferencia en 5 años. Y es estéticamente agradable.

La GUI es como la apariencia externa de una casa. Un usuario puede reconocer la belleza en una GUI, al igual que puede apreciar una hermosa casa. Pero quizás aún más importante, la verdadera belleza en el diseño tanto en las casas como en los programas son las cosas que son invisibles para los no iniciados, pero importantes o agradables de tener independientemente.

usuario21007
fuente
19
¡Esa analogía de construcción es perfecta!
Daniel Vandersluis
1
+1 @ user21007: Hace mucho, mucho tiempo fui arquitecto de información para sitios enormes: todos tienen la analogía de la construcción y el concepto de sistemas que simplemente funcionan y se sienten bien.
errores
1
Buena analogía para productos con GUI. No tan bueno para frameworks y bibliotecas.
Den
1
Me recuerda un poco a este anuncio: youtube.com/watch?v=p9tjs-6wbsI
JohnL
44
He usado mucho la analogía del lenguaje en el pasado: "Estoy trabajando con este código feo ..." "Espera, ¿qué quieres decir con feo?" "ves, es escribir mentira que"
DistantEcho
28

Piensa en un auto.

La mayoría de nosotros miramos el auto y solo podemos ver el cuerpo. Si alguien repara algunas abolladuras y pone un nuevo trabajo de pintura en el automóvil, se verá mucho más hermoso. Básicamente es el mismo auto, pero eso es todo lo que vemos.

Un mecánico abre el auto y mira el motor. Ven lo bueno que es ese motor. Ven que todo está organizado para que sea fácil llegar a él, mantenerlo y trabajar en él. Ven las piezas y saben lo bien diseñado que estaba. Para un mecánico experimentado, el motor de un automóvil de alta calidad bien mantenido se convierte en algo bello. No pueden explicarle qué lo hace hermoso, pero es probable que su noción de belleza se traduzca en menores costos de mantenimiento, una mayor vida útil del automóvil y un mejor rendimiento. Todo esto aumenta el valor de ese automóvil, a pesar de que no se puede ver.

Cuando miras un sitio web o una aplicación, lo estás viendo como la mayoría de nosotros vemos autos. Cuando miro el código, lo veo como el mecánico mira el motor del automóvil. Nunca puedes experimentar la belleza de ese código como lo hago yo, es literalmente invisible para ti. Pero esa belleza es importante al igual que la belleza del mecánico. Determina qué tan bien se ejecuta ese software, qué tipo de problemas tendrá, con qué facilidad se puede mejorar el software, etc. Todo esto aumenta el valor de ese software, a pesar de que no puede verlo.

btilly
fuente
11

Se requiere todo el código presente, y ninguno de ellos requiere explicación.

Steven Evers
fuente
2
@zdan: respondería diciendo que aquellos que lo encuentran hermoso, tienen el conocimiento requerido (por lo tanto, a los ojos del espectador). Además, inteligente! = Hermosa IMO.
Steven Evers
2
@zdan: cuando se requiere mucha explicación como esa, no se trata de un "código hermoso", sino de "un truco inteligente".
Mason Wheeler
1
El FFT es un truco muy inteligente, pero no hay forma de que puedas llamarlo hermoso.
Kyte
1
Estoy de acuerdo con SnOrfus en su mayor parte. Sin embargo, para mí, un código hermoso no solo debe ser necesario, suficiente y autoexplicativo, sino que subjetivamente debe sentirse perfecto y ligero. Creo que un montón de código podría calificar los criterios expuestos por SnOrfus, pero se siente bastante engorroso o imperfecto de alguna otra manera. Yo diría que ese código es hermoso.
asoundmove 05 de
1
Creo que la idea de "algo reducido a lo esencial, pero no más" está en el camino correcto. Sin embargo, algo insostenible y escrito en el idioma incorrecto para la tarea también encajaría en esta definición. Además, al exigir que no requiera explicación, es probable que la mayoría de las tareas que se ajusten a su definición también sean triviales. No creo que "Hello World" pueda llamarse hermoso.
user21007
5

Me referiría a la poesía:

Un poema bien escrito tiene una sensación diferente que un extracto de un manual mal traducido sobre el mismo tema.

usuario1249
fuente
Este fue mi pensamiento también, pero no a todos les gusta o entienden la poesía. La música también vino a mi mente: buena canción versus mala canción, pero eso también es bastante subjetivo.
PSU
¿Qué ... 25 interfaces +25 clases, todas heredadas de clases abstractas? Solo quería una carretilla roja. Y tal vez algunas gallinas.
Erik Reppen
5

Los problemas de codificación son acerca de la conceptualización, por lo que un código hermoso representa una conceptualización notable del problema.

Por ejemplo, nos gusta cuando un problema puede reducirse a un problema resuelto existente, dando una idea de la naturaleza del problema en sí .

A veces, una reconceptualización del problema puede hacer que parezca tan fácil; Hablamos de soluciones elegantes que requieren trucos simples que simplifican una tarea difícil.

Para mí, el Quicksort es un hermoso ejemplo: elija un elemento aleatorio de una matriz y luego compare todos los demás elementos de la matriz; si el número es menor, póngalo en la pila A; si el número es mayor que él, póngalo en la pila B. Ahora, por la desigualdad del triángulo, ningún elemento en la pila A tendrá que compararse con ningún elemento en la pila B. Vuelva a aparecer en A y B, y ya está .

Macneil
fuente
5

Me recuerda a esto:

http://imgs.xkcd.com/comics/lisp.jpg

Fuente: XKCD - LISP

Nick Bedford
fuente
55
Es mejor tener eso como un enlace, especialmente porque falta el texto de desplazamiento.
user151019
1
Y el hovertext es la mitad de la broma en este caso.
4

Ningún código no trivial puede ser perfecto porque el código perfecto requiere simultáneamente objetivos satisfactorios que a menudo entran en conflicto. Un código hermoso, por lo tanto, equilibra todos los atributos importantes perfectamente para la tarea en cuestión y se acerca más a satisfacerlos simultáneamente de lo que la mayoría pensaría posible. En ningún orden en particular:

  • Legibilidad
  • Concisión
  • Eficiencia
  • Flexibilidad
  • Claridad
  • Robustez
  • Seguridad / a prueba de idiotas
  • Lo completo
  • Consistencia
  • Facilidad de uso (para API)
dsimcha
fuente
2

Las pinturas de Jackson Pollock son un ejemplo de algo hermoso para algunos y galimatías para otros.

S.Lott
fuente
Hmmmm ... no lo estoy sintiendo.
Dinámico
La programación es más artesanía que arte (o ciencia para el caso). No es que yo esté tocando tampoco.
Erik Reppen
1

Si la persona conoce bien las matemáticas, me gusta comparar códigos hermosos con una solución elegante a un problema.

Chris Cudmore
fuente
1

Algunos aspectos del buen código son:

  1. Tiene una gran cantidad de pequeños detalles que apuntan a la misma dirección.
  2. es consistente en estructura , cada parte sigue el mismo patrón
  3. pero no se repite , en cambio cada parte es diferente
  4. sino que también no permite que el comportamiento que se considera no válido
  5. tiene el menor número posible de estados diferentes
  6. Puedes entender todo el comportamiento del código leyendo prototipos de funciones
  7. no tiene efectos secundarios
  8. la ejecución de la misma está garantizada para detener
  9. que no utiliza ningún características avanzadas disponibles en lenguajes de programación
  10. no es demasiado complejo en comparación con la complejidad del problema que resuelve
  11. no hay errores o comportamiento indefinido
  12. se puede compilar con compiladores de diferentes proveedores
  13. no tiene dependencias del código que no se usa
revs tp1
fuente
0

Para mí, los idiomas son mis herramientas.

Y como cualquier artesano, prefiero que mis herramientas estén en perfecto estado.

Cuanto mejor sea la condición del código, en cuanto a claridad de concepto, facilidad de mantenimiento y legibilidad. Cuanto mejor sea el código.

Entonces, para mí, leer código bien escrito es como abrir una caja de herramientas con herramientas bien diseñadas.

He usado esta analogía un par de veces con éxito. Especialmente las personas con antecedentes más prácticos o artísticos parecen entender el concepto de código limpio / hermoso de esta manera.

Guidhouse
fuente
0

Creo que depende de lo que quieras decir con código hermoso.

Para mí, el código es hermoso cuando es legible. Además de posibles problemas con los conceptos de programación, un lego podía leer y, al menos a un alto nivel, entender lo que estaba haciendo el código.

Como se ha discutido en otras respuestas, el código también puede ser hermoso en el sentido de que logra una funcionalidad compleja combinando un par de conceptos simples. No estoy seguro de qué tipo de analogía sería mejor explicarle a un no programador, depende del lego. Los juguetes de rompecabezas vienen a la mente, como el NeoCube .

Paul D. Waite
fuente
0

En mi humilde y personal opinión, un código hermoso es como un buen libro de novelas:

  • puede leerlo de principio a fin / no debería tener que saltar a las páginas futuras de un libro para comprender la página actual.
  • no tiene repeticiones innecesarias / un libro es un poco aburrido si siempre dice las mismas cosas.
  • la intención de cada parte es evidente casi siempre / no debería necesitar tener un diccionario a su lado en todo momento para leer un libro (a menos que sea poesía / código golf xD).
  • está organizado en subestructuras de tamaños y complejidad asequibles (módulos, funciones, declaraciones, etc.), no tiene demasiados 'anidamientos' / capítulos, los párrafos y las oraciones están debidamente equilibrados; no utiliza demasiados niveles de subordinación de oraciones, etc.
  • es agradable a la vista de una manera estética (bien sangrado, bloques correctamente delimitados, etc.) / como un libro con una composición tipográfica adecuada.
fortran
fuente
0

Es como una empresa magra, donde todos conocen su papel, es fácil descubrir quién es bueno en qué y no hay duplicación de esfuerzos.

Vs.

Office Space, donde se defiende la mediocridad, tres gerentes no tienen nada mejor que hacer que molestarlos con los informes de TPS, ¡la máquina de fax! @ # $ Ing NUNCA FUNCIONA! y un empleado determinado solo puede obtener unos 15 minutos de trabajo real realizado a la semana. Es posible que un empleado ni siquiera trabaje técnicamente allí porque alguien olvidó despedirlo (es difícil saberlo realmente porque nadie trabaja de manera eficiente y es difícil evaluar lo que está tratando de lograr). Y para hacer algo práctico requiere navegar por un sistema absurdamente excesivamente complicado sobre el cual alguien leyó y pensó que se vería ordenado en su currículum, aunque en realidad no resuelva un problema que tenían.

Erik Reppen
fuente
-1

No hay un "código hermoso", hay "algoritmos elegantes" y "diseños elegantes". El diseño puede ser entendido por no programadores.

Odio a los programadores que discuten sobre el "código hermoso", porque de una forma u otra, realmente no saben cómo un intérprete o un compilador lo digerirán y qué hará la máquina, por lo que es más como un niño que le muestra a su madre cómo maravillosa es su historia, pero en realidad no lo es.

jokoon
fuente
-1

¿Le explica a la gente por qué una buena foto es buena? No. Les muestras la imagen (porque, ya sabes, una imagen dice más de 1000 palabras). Entonces, lo mejor es mostrarles un pequeño código que es realmente elegante, hermoso, perfecto (y tal vez, en comparación, cómo Joe Average lo habría codificado).

flolo
fuente