Come puoi spiegare un "bellissimo codice" a un non programmatore? [chiuso]


44

Quando ho parlato con un amico non programmatore, mi è capitato di menzionare il concetto di "bellissimo codice" e lei voleva capire cosa significasse, ma ero un po 'in perdita su come spiegarlo a qualcuno che non avrebbe avuto contesto qualunque.

Quando comunque tutto il codice sembra incomprensibile per qualcuno, come puoi spiegare cosa rende un pezzo di codice più bello di un altro? Anche le analogie potrebbero essere utili.


12
Puoi spiegare un bel codice a un programmatore senza mostrarlo? La descrizione è essa stessa un'arte.
Kojiro,

9
Se riusciamo a trovare una buona idea qui, forse posso usarla per descrivere una bella prova a un non matematico.
David Thornley,

Un bellissimo codice può essere quello che usa le idee più semplici e meno mentre fa il lavoro correttamente. Ironia della sorte, il compito precedente di trovare idee semplici può essere un lavoro complesso, e questo lo ammiriamo. - Mi dispiace non riuscire a trovare in questo momento un modo per spiegare questo in modo più naturale a qualcuno.
LatinSuD,

Il bellissimo codice è quando si imposta il carattere IDE su Comic Sans. sospiro
Kirk Broadhurst il

Risposte:


88

Analogia linguistica

Pensa alla tua storia preferita. Probabilmente è scritto magnificamente. Per un oratore non inglese, solo perché non riescono a capirlo o capire perché è bello non toglie nulla alla sua bellezza.

Analogia costruttiva

Prendi in considerazione una casa costruita in modo scadente. Ha porte e finestre che sono ovviamente murate. Il mortaio è rotto in un angolo in cui la fondazione era insufficiente. E nessuno può capire perché c'è una tromba delle scale che porta al 2 ° piano che non esiste. La toilette è costruita accanto alla cucina senza ventola di scarico e situata in modo tale che i venti dominanti soffieranno i cattivi odori della torbiera attraverso il resto della casa. Il camino del camino aperto si trova a 5 cm di distanza da un po 'di legno, pronto a prendere fuoco.

In contrasto con una casa dove tutto è dove dovrebbe essere, è a bassa manutenzione, perfettamente isolata in modo che un po 'di calore solare lo mantenga caldo in inverno, l'energia viene recuperata dalla ventilazione, quindi hai sia aria fresca, temperatura confortevole e trascurabili bollette della luce. È costruito con materiali non infiammabili in modo che non possa bruciare a causa di un incendio. Resisterà a un terremoto 9.0 e un tornado F5. Costruire costa solo il 30% in più rispetto all'altra casa, ma pagherà la differenza in 5 anni. Ed è esteticamente piacevole.

La GUI è come l'aspetto esteriore di una casa. Un utente può riconoscere la bellezza in una GUI, proprio come può apprezzare una bella casa. Ma forse ancora più importante, la vera bellezza del design in entrambe le case e i programmi sono le cose che sono invisibili ai non iniziati, ma importanti o belli da avere indipendentemente.


19
Quell'analogia costruttiva è perfetta!
Daniel Vandersluis,

1
+1 @ user21007: Molto, molto tempo fa, ero un architetto dell'informazione per siti enormi: tutti hanno l'analogia della costruzione e il concetto di sistemi che funzionano e si sentono bene.
errori

1
Buona analogia per i prodotti con GUI. Non così buono per framework e librerie.
Den

1
Un po 'mi ricorda questo annuncio: youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
Ho usato molto l'analogia linguistica in passato: "Sto lavorando con questo brutto codice ..." "Aspetta, cosa intendi con brutto?" "Vedi, è come se lo fosse"
DistantEcho,

28

Pensa a un'auto.

La maggior parte di noi guarda la macchina e vede solo il corpo. Se qualcuno ripara delle ammaccature e mette una nuova verniciatura sull'auto, sembrerà molto più bella. È fondamentalmente la stessa macchina, ma è tutto ciò che vediamo.

Un meccanico apre la macchina e guarda il motore. Vedono quanto è buono quel motore. Vedono che tutto è organizzato per essere facile da raggiungere, mantenere e lavorare. Vedono le parti e sanno quanto fosse ben progettato. Per un meccanico esperto, il motore di un'auto di alta qualità ben mantenuta diventa una cosa di bellezza. Non possono spiegarti cosa la rende bella, ma è probabile che la loro nozione di bellezza si traduca in minori costi di manutenzione, una durata della vita più lunga dell'auto e prestazioni migliori. Tutto ciò aumenta il valore di quella macchina, anche se non puoi vederla.

Quando guardi un sito Web o un'applicazione, lo guardi come la maggior parte di noi vede le auto. Quando guardo il codice, lo guardo come se il meccanico guardasse il motore della macchina. Non puoi mai sperimentare la bellezza di quel codice come faccio io, è letteralmente invisibile per te. Ma quella bellezza è importante proprio come la bellezza del meccanico. Determina quanto bene funziona quel software, che tipo di problemi avrà, quanto facilmente il software può essere migliorato e così via. Tutto ciò aumenta il valore di quel software, anche se non puoi vederlo.


11

Tutto il codice presente è obbligatorio e nessuno richiede spiegazioni.


2
@zdan: risponderei dicendo che chi lo trova bello ha le conoscenze necessarie (quindi, agli occhi di chi guarda). Inoltre, intelligente! = Bellissimo IMO.
Steven Evers,

2
@zdan: quando richiede molte spiegazioni del genere, non si tratta di "codice bellissimo", ma "un trucco intelligente".
Mason Wheeler,

1
La FFT è un trucco molto intelligente, ma non c'è modo di chiamarlo bello.
Kyte,

1
Sono d'accordo con SnOrfus per la maggior parte. Comunque per me il bellissimo codice non deve solo essere necessario, sufficiente e autoesplicativo, ma deve anche sentirsi soggettivamente perfetto e leggero. Credo che un sacco di codice potrebbe qualificare i criteri esposti da SnOrfus, ma in qualche modo sembra piuttosto ingombrante o imperfetto. Definirei un codice così bello.
asoundmove,

1
Penso che l'idea di "qualcosa di ridotto all'essenziale, ma non di più" sia sulla buona strada. Tuttavia, qualcosa di irraggiungibile e scritto nella lingua sbagliata per il compito si adatterebbe anche a questa definizione. Inoltre, richiedendo che non richieda spiegazioni, è probabile che anche la maggior parte delle attività che si adattano alla tua definizione debba essere banale. Non credo che "Hello World" possa essere definito bello.
user21007,

5

Vorrei fare riferimento alla poesia:

Una poesia ben scritta ha un aspetto diverso rispetto a un estratto di un manuale mal tradotto sullo stesso argomento.


Questo era anche il mio pensiero, ma non a tutti piace o capisce la poesia. Mi è venuta in mente anche la musica: buona canzone contro cattiva canzone, ma è anche abbastanza soggettiva.
PSU

Che cosa ... 25 interfacce +25 classi che ereditano tutte da classi astratte? Volevo solo una carriola rossa. E forse delle galline.
Erik Reppen,

5

I problemi di codifica riguardano la concettualizzazione, quindi un bellissimo codice rappresenta una notevole concettualizzazione del problema.

Ad esempio, ci piace quando un problema può essere ridotto a un problema risolto esistente, fornendo informazioni sulla natura del problema stesso .

A volte una riconcettualizzazione del problema può farlo sembrare così facile; parliamo di soluzioni eleganti che richiedono semplici accorgimenti che semplificano un compito difficile.

Per me, Quicksort è un bell'esempio: scegli un elemento casuale da un array, quindi confronta ogni altro elemento dell'array con esso; se il numero è inferiore ad esso, inserirlo nella pila A; se il numero è maggiore di esso, mettilo nella pila B. Ora, in base alla disuguaglianza del triangolo, nessun elemento nella pila A dovrà mai essere confrontato con qualsiasi elemento nella pila B. Reclama su A e B, e il gioco è fatto .


5

Mi ricorda questo:

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

Fonte: XKCD - LISP


5
Meglio averlo come collegamento, specialmente perché manca il testo al passaggio del mouse.
user151019

1
E l'hovertext è la metà dello scherzo in questo caso.

4

Nessun codice non banale può essere perfetto perché un codice perfetto richiede obiettivi soddisfacenti contemporaneamente che spesso sono in conflitto. Il bellissimo codice, quindi, bilancia perfettamente tutti gli attributi importanti per l'attività a portata di mano e si avvicina al soddisfacimento di tutti questi simultaneamente di quanto la maggior parte riterrebbe possibile. Senza un ordine particolare:

  • leggibilità
  • conciseness
  • Efficienza
  • Flessibilità
  • esplicitazione
  • Robustezza
  • Sicurezza / idiot-proofness
  • Completezza
  • Consistenza
  • Facilità d'uso (per API)

2

I dipinti di Jackson Pollock sono un esempio di qualcosa di bello per alcuni e incomprensibile per altri.


Hmmmm ... Non lo sento.
Dinamico

La programmazione è più arte che arte (o scienza per quella materia). Non che sto bussando neanche io.
Erik Reppen,

1

Se la persona è molto esperta in matematica, mi piace confrontare un bel codice con una soluzione elegante a un problema.


1

Alcuni aspetti del buon codice sono:

  1. Ha un gran numero di piccoli dettagli che puntano tutti nella stessa direzione
  2. è coerente nella struttura , ogni parte segue lo stesso modello
  3. ma non si ripete , invece ogni parte è diversa
  4. ma anche non consente un comportamento che è considerato non valido
  5. ha il minor numero possibile di stati diversi
  6. puoi capire l'intero comportamento del codice leggendo i prototipi delle funzioni
  7. non ha effetti collaterali
  8. l'esecuzione di esso è garantita per fermarsi
  9. essa non usare tutte le funzioni avanzate disponibili nei linguaggi di programmazione
  10. non è troppo complesso rispetto alla complessità del problema che risolve
  11. non ci sono errori o comportamenti indefiniti in esso
  12. si può essere compilato con i compilatori da diversi fornitori
  13. non ha dipendenze dal codice che non viene utilizzato

0

Per me le lingue sono i miei strumenti.

E come ogni artigiano, preferisco che i miei strumenti siano in ottime condizioni.

Migliore è la condizione del codice, per quanto riguarda la chiarezza del concetto, la manutenibilità e la leggibilità. migliore è il codice.

Quindi per me leggere un codice ben scritto è come aprire una cassetta degli attrezzi con strumenti ben realizzati.

Ho usato questa analogia un paio di volte con successo. Soprattutto le persone con un background più pratico o artistico sembrano comprendere il concetto di codice pulito / bello in questo modo.


0

Penso che dipende da cosa si intende per codice bello.

Per me, il codice è bello quando è leggibile. A parte possibili problemi con i concetti di programmazione, un profano potrebbe leggere e, almeno ad un livello elevato, capire cosa sta facendo il codice.

Come alcune altre risposte hanno discusso, il codice può anche essere bello nel senso che raggiunge funzionalità complesse combinando un paio di concetti semplici. Non sono sicuro di quale tipo di analogia sarebbe meglio spiegarlo a un non programmatore, dipende dal profano. I giocattoli rompicapo vengono in mente, come il NeoCube .


0

Secondo la mia modesta e personale opinione, il bellissimo codice è come un buon libro di romanzi:

  • puoi leggerlo dall'inizio alla fine / non dovresti dover saltare alle pagine future di un libro per capire la pagina corrente.
  • non ha ripetizioni inutili / un libro è un po 'noioso se dice sempre le stesse cose.
  • l'intento di ogni parte è evidente quasi ogni volta / non dovresti avere sempre un dizionario al tuo fianco per leggere un libro (a meno che non sia poesia / codice golf xD).
  • è organizzato in sottostrutture di dimensioni e complessità convenienti (moduli, funzioni, dichiarazioni, ecc.), non ha troppi "annidamenti" / capitoli, i paragrafi e le frasi sono adeguatamente bilanciati; non usa troppi livelli di subordinazione alle frasi, ecc.
  • è piacevole alla vista in modo estetico (ben rientrato, blocchi correttamente delimitati, ecc.) / come un libro con una composizione corretta.

0

È come una società magra in cui tutti conoscono il loro ruolo, è facile capire chi è bravo in cosa e non c'è duplicazione di sforzi

Vs.

Office Space in cui si difende la mediocrità, tre manager non hanno niente di meglio da fare che infastidirti sui rapporti TPS, la MACCHINA FAX FAX @ # $ NON FUNZIONA MAI !!! e ogni singolo dipendente potrebbe ottenere solo circa 15 minuti di lavoro effettivo alla settimana. Un dipendente potrebbe anche non lavorare più tecnicamente lì perché qualcuno ha dimenticato di licenziarlo (è difficile dirlo davvero perché nessuno lavora in modo efficiente ed è difficile valutare ciò che stanno cercando di realizzare). E per fare qualcosa di pratico è necessario navigare in un sistema assurdamente troppo complicato di cui qualcuno ha letto e pensato che sarebbe sembrato pulito sul suo curriculum, anche se in realtà non risolve un problema che avevano.


-1

Non esiste un "bel codice", esistono "algoritmi eleganti" e "disegni eleganti". Il design può essere compreso da non programmatori.

Odio i programmatori che discutono del "bellissimo codice", perché in un modo o nell'altro non sanno davvero come un interprete o un compilatore lo digeriranno e cosa farà la macchina, quindi è più come un bambino che mostra a sua madre come la sua storia è meravigliosa, ma in realtà non lo è.


-1

Spieghi alla gente perché una bella foto è bella? No. Tu mostri loro l'immagine (perché, sai, un'immagine dice più di 1000 parole). Quindi la cosa migliore è mostrare loro un piccolo pezzo di codice che è davvero elegante, bello, perfetto (e forse come confronto come Joe Average lo avrebbe codificato).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.