Qual è il bellissimo codice? [chiuso]


30

Leggo spesso che gli sviluppatori devono scrivere un bellissimo codice, ma per un principiante come me rimane oscuro di cos'è un bellissimo codice e come lo riconosci?

La domanda corollaria è: come scrivere un bellissimo codice e quali sono alcune abitudini pratiche per migliorare la qualità del tuo codice? , cosa dovrei preoccuparmi di rendere bello il codice che scrivo (e cosa devo imparare).



4
È solo una figura retorica. La bellezza sta negli occhi di chi guarda, e oltre a ciò, si tratta della chiarezza delle istruzioni che hai stabilito in un file di testo per risolvere un problema e di quanto facilmente tu o chiunque altro potete modificarlo e mantenerlo nel futuro. Oltre a ciò, quanta più bellezza emana il tuo codice dipende interamente da te: rientri, struttura modulare, complessità, efficienza simultaneamente con una facile leggibilità, convenzioni di denominazione, ecc.
bad_keypoints il

Potresti essere interessato a leggere Beautiful Code: Leading Programmers Spiega come pensano allora!
ZioZeiv,

Risposte:


55

"La bellezza è acquistata dal giudizio dell'occhio".

Detto questo, penso che la maggior parte dei programmatori concorderà sul fatto che il bellissimo codice dimostra un equilibrio tra chiarezza e trasparenza, eleganza, efficienza ed estetica.

  • Chiarezza e trasparenza : la chiarezza è la facilità con cui un lettore può dedurre ciò che fa il codice. Il codice trasparente fa quello che sembra fare. Se il codice sembra fare una cosa, ma in realtà fa qualcos'altro (o qualcosa di più), non è trasparente - è fuorviante.

  • Eleganza : ci sono molti modi per implementare la maggior parte degli algoritmi, ma alcuni modi sono goffi mentre altri sono ordinati e aggraziati. La succintività spesso aggiunge eleganza, ma l'eccessiva succinta può ridurre la chiarezza.

  • Efficienza : evitare l'uso non necessario di risorse (come tempo della CPU, memoria e I / O).

  • Estetica : essere facili per gli occhi. Questo è abbastanza soggettivo. Si tratta principalmente di stile. Una considerazione importante è avere uno stile coerente . Il codice che cambia, ad esempio, facendo rientrare lo stile a metà, è brutto.


11
una bella spiegazione, +1
koenmetsu

2
Vorrei eliminare "Efficienza". Sebbene in senso stretto sia positivo, includerlo nell'elenco può essere fuorviante nella migliore delle ipotesi. Normalmente è un sottoprodotto degli altri e dovrebbe essere una preoccupazione secondaria al momento della codifica. Il motivo principale è che, per la maggior parte, si manifesta solo dopo che il compilatore ha elaborato la sua magia oscura.
DPM,

@Jubbat In effetti - a volte la soluzione più efficiente in realtà porta a un codice molto brutto. (Ad esempio la classica funzione di radice quadrata inversa veloce)
Darrel Hoffman,

@DarrelHoffman Giusto, anche se quel compromesso è vero anche per più variabili che definiscono un buon codice, non solo efficienza e tutto il resto (c'è una lunga spiegazione di ciò in "Codice completo" - sfortunatamente non ricordo in quale sezione del libro, vicino all'inizio probabilmente-)
DPM

@Jubbat: concordo sul fatto che l'efficienza è di solito una preoccupazione secondaria, ma penso ancora che influisca sull'equazione della bellezza.
Igby Largeman,

20

Non lasciare che le persone ti ingannino nel pensare che il bellissimo codice sia il seguente:

  • algoritmi intelligenti
  • caratteristiche del linguaggio subdolo
  • risolvere un problema con il minor numero di tasti premuti

Perché non lo è. Un codice del genere è carino e vale sicuramente la pena dare un'occhiata, ma non è il tipo di codice con cui vuoi sistemarti.

E sai quel fantasioso polimorfismo statico meta-ricorsivo modellato che eredita le lambda variatiche ... o qualunque cosa tu abbia letto su online? Potresti essere ansioso di saltare su trucchi innovativi e ingegnosi senza una chiara ragione per usarli. Ma il codice che spinge i confini di una lingua non è neanche bello.

Sono sexy .
Un sacco di divertimento, ma chiediti questo: voglio davvero passare il tempo ad esplorare l'anatomia di questa lingua, o voglio lavorare insieme con una lingua e costruire qualcosa di bello? Dopotutto, un linguaggio di programmazione è semplicemente lo strumento per creare.


Allora, qual è il bellissimo codice allora?

Bellissimo codice = codice gestibile. QUESTO È TUTTO!
QUESTA È LA FORMULA!

Se riesci a scrivere qualcosa, tornaci qualche mese dopo e continua a fare progressi su di esso, allora è bello. Se un anno dopo ti rendi conto che vuoi aggiungere funzionalità e modificare una funzionalità esistente, e riesci a farlo con relativa facilità, allora È FANTASTICO. Se altre persone possono entrare nella tua base di codice e capire rapidamente cosa sta succedendo perché le cose sono organizzate, avranno più capelli e saranno anche belle.

Quindi la vera domanda che vuoi porre è: "Come faccio a scrivere codice più gestibile?". Temo che sia una domanda più grande ed è piuttosto una disciplina creativa. Continua a scrivere il codice, ma questa volta non chiederti se può essere più bello. Chiediti se puoi renderlo più gestibile.


4
per combattere i problemi che sollevi c'è anche il consiglio di c2.com/cgi/wiki?KillYourDarlings
jk.

4

La mia opinione su questo è che "Beautiful Code" non è un termine oggettivo o particolarmente utile. E non dovremmo provare a definirlo.


Le definizioni tipiche del dizionario della parola inglese "bellezza" vanno così:

  • "1. la combinazione di tutte le qualità di una persona o cosa che delizia i sensi e soddisfa la mente"
  • "1. la qualità presente in una persona o cosa che dà intenso piacere estetico o profonda soddisfazione alla mente o ai sensi."
  • "1. La qualità che dà piacere alla mente o ai sensi ed è associata a proprietà come l'armonia della forma o del colore, l'eccellenza dell'arte, la veridicità e l'originalità."

(Fonte http://dictionary.com )

Il filo conduttore è che la "bellezza" riguarda ciò che è esteticamente piacevole. Ciò è necessariamente soggettivo ... come illustrato dal detto "La bellezza è negli occhi di chi guarda".


Possiamo applicare la parola "bellezza" al codice, e il significato ovvio è che il codice è "esteticamente gradevole".

Ma dire poi che "bellissimo codice" ha un certo insieme di attributi (come suggerito da altre risposte) è una contraddizione del significato ovvio di esteticamente piacevole. L'estetica riguarda il modo in cui le persone ... le singole persone ... percepiscono le cose.

O per dirla in altro modo, c'è qualcosa di ripugnante nel dire a qualcuno che mi dice cosa dovrei pensare sia bello, sia nelle persone, nelle opere d'arte o ... nel codice.

Per quanto mi riguarda, il bellissimo codice è un codice che penso sia bellissimo, e basta. È soggettivo e individuale, e lascialo solo a quello.


2

Ecco il mio consiglio

Guarda le risposte a Come puoi spiegare "bel codice" a un non programmatore? e vedere su quali caratteristiche dicono di concentrarsi. Quindi prendi un libro come Codice completo e leggilo per conoscere i consigli su come scrivere un codice migliore.

Ad un certo punto ti colpirà guardando il tuo vecchio codice, "Questo è brutto". Sarà una reazione estetica diretta. E osservandolo ti renderai conto che stai visualizzando il tuo codice come un programmatore e puoi vedere la bruttezza perché sai come dovrebbe apparire un codice più bello.


1

Solo perché leggi spesso sul bellissimo codice non significa che le persone che ne scrivono abbiano la stessa definizione. Purtroppo, a giudicare dalla tua domanda, non sembra che si siano nemmeno preoccupati di definirla in primo luogo.

Per me il bellissimo codice è:

  • Espressive
  • Conciso

Il codice conciso che non è espressivo può essere criptico, e il codice espressivo che non è conciso tende ad essere gonfio e noioso da leggere, quindi hai bisogno di entrambi.

Non includerei la manutenibilità come parte di ciò che rende bello il codice, perché la bellezza è qualcosa che vedi / leggi, non qualcosa su cui agisci. Ma poi di nuovo è la mia visione personale.


0

Il termine codice bellissimo è un termine molto vago e astratto. È facile capire cosa rappresenta e cosa significa, ma non dovrebbe mai essere visto come un obiettivo secondario.

Mi ricorda molto la metrica di copertura del codice. Quando il numero è abbastanza alto, puoi rilassarti e andare su qualcos'altro. Avere una base di codice con una copertura dell'80% circa è fantastico, non a prova di proiettile, ma abbastanza per rilassarsi e fare altre cose. Avere una copertura del 40% è abbastanza spaventoso e dovrebbe incoraggiarti ad aumentare quel numero.

Il punto è solo che la copertura del codice è davvero significativa solo se il numero è basso. Quindi non lasciare che sia basso. Quando la copertura sale a un certo punto, passa a qualcos'altro.

Allo stesso modo il bellissimo codice è fantastico. Se hai un bel codice, ottimo, passa a qualcos'altro. Non stressarti troppo. Non raggiungerai mai quel segno del 100% e, se lo fai, ti accorgerai di esserti concentrato troppo su ciò che legge, o su come appare, e non abbastanza su ciò che fa, o su come lo fa . Quindi arriva a un punteggio ragionevole e poi fermati.

Ma se il tuo codice è fugace, se è un disastro contorto di codice spaghetti, se ti fa male aprire fisicamente il file, se non hai commenti o documentazione, ecc. Ecc., Allora correggilo. E fallo al più presto.

Scoprirai nel tempo che la tua base di codice diventa generalmente più pulita, generalmente più luminosa e generalmente più bella e, soprattutto, più utilizzabile quando ti concentri sul renderla meno fugace. Scrivere un bellissimo codice non è un processo in un solo passaggio.

Non esiste una filosofia magica. I suoi 1000 passaggi più piccoli sono stati eseguiti tutti insieme, tutti utili a uno scopo concreto che non ha nulla a che fare con la bellezza del codice. Ma quando li servi tutti insieme, formano un bellissimo codice come la somma delle sue parti. Come voltron. O capitano pianeta.


0

Sono davvero d'accordo con le risposte qui, ma adottando un approccio meno tecnico direi che il bellissimo codice è un'espressione della chiarezza del pensiero dei suoi autori sul problema attuale che si manifesta attraverso un linguaggio ben formulato, preciso ma semplice.

Per me guardare attraverso un bellissimo codice è molto simile a guardare un'opera d'arte, vedere dettagli sempre nuovi che mostrano l'intenzione del produttore, ma anche come sono state realizzate le diverse parti, ognuna dando una risposta a così tante domande, e poi, infine, come la sua esistenza sembra una legge naturale a cui tutto si allinea in modo tale da poter essere descritto solo con parole di soggezione: magnifico, stimolante, bello.

Quindi da quel punto di vista, nella tua carriera di programmatore potresti fare scoperte di codici meravigliosi che altri potrebbero non capire perché mancano di conoscenza o potrebbero non trovare più degno di nota poiché sono stati viziati da troppa bellezza;)

Il bellissimo codice ha tutte le qualità pragmatiche come menzionato altrimenti, sono totalmente d'accordo.


0

Ho tre criteri:

  • Semplice: almeno deve essere leggibile dall'uomo. Ad esempio, puoi scrivere un codice che funziona su O (1) per una soluzione con tonnellate di linee, ma preferisco il codice che funziona con 0 (n) risolve con poche righe. Questo potrebbe cambiare in situazioni estreme, ma all'inizio la semplicità è importante.
  • Riutilizzabile: il codice deve essere riutilizzabile, ma non sovrascritto. Se hai bisogno di un'operazione, dovresti definirla come puoi usarla anni dopo.
  • Rientro: forse questo non è un problema per te, ma per il livello principiante, questa è la prima cosa da risolvere.
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.