Lo scopo del codice è "idiomatico" per ridurre il sovraccarico cognitivo?

22

Sto cercando di spiegare a qualcuno che il modo in cui hanno scritto il codice lo rende difficile da capire e, se lo si rifatta, è più facile da leggere. Questo stile di codice che sto guidando è comunemente chiamato "codice idiomatico".

Ma la frase codice idiomatico porta con sé un bagaglio di correttezza morale , che non è un grande motivatore per indurre le persone a cambiare il loro stile di codifica. Un modo più positivo per dire che questo è codice che segue lo stile comune - ma per un pensatore critico che si imbatte nel ragionamento della mentalità della mandria.

Il modo in cui sono arrivato a spiegare questa idea in un modo che motiva le persone a cambiare il loro codice è:

  • scrivendo il codice in modo da ridurre il sovraccarico cognitivo del lettore (ad esempio, non ricordo se questo è il primo tipo di vettore - o il quinto tipo di vettore)
  • codice che rende più facile comprendere l'intento (es. per cosa è questo vettore?)

(Per inciso, sono consapevole che il libro The Joy of Clojure, prima della sua prima pubblicazione, aveva la bozza del titolo Idiomatic Clojure, quindi sembrerebbe un motivo per rendere il codice "idiomatico", per "portare gioia" al lettore).

La mia domanda è: Lo scopo del codice è "idiomatico" per ridurre l'overhead cognitivo?

    
posta hawkeye 21.01.2016 - 01:45
fonte

3 risposte

19

Per prima cosa, non sono sicuro che esista una sorta di "correttezza morale" nel termine "idiomatico". La definizione del dizionario semplice è semplicemente

peculiar to or characteristic of a particular language or dialect: idiomatic French.

Sì, il codice idiomatico generalmente riduce il sovraccarico cognitivo, in particolare nelle definizioni di interfaccia in cui le librerie standard e le librerie di terze parti di cui il progetto ha bisogno sono (praticamente) tutte idiomatiche.

Come punto vendita, però, mi concentrerei su ciò che riduce il sovraccarico cognitivo per te. Rende più facile per i programmatori individuare gli errori perché non stanno tentando di svelare il codice scritto in uno stile unico per capire dove è leggermente sottovalutato da uno o maltrattare un caso limite. Rende più semplice la revisione del codice di altre persone che rende più probabile che il team esegua revisioni reali che identificano i problemi reali piuttosto che discutere sulla sintassi.

Oltre a ridurre il sovraccarico cognitivo, il codice idiomatico è in genere un codice più efficiente. La maggior parte degli idiomi in un particolare linguaggio si evolvono perché il linguaggio è progettato per affrontare i problemi in un modo particolare. I compilatori o gli interpreti che stai utilizzando concentreranno le loro ottimizzazioni sul codice idiomatico. Se si utilizza un linguaggio in cui la ricorsione è il modo idiomatico di strutturare un pezzo di codice, ad esempio, si può essere quasi sicuri che il compilatore implementa la ricorsione della coda. Se si utilizza un linguaggio in cui la ricorsione non è idiomatica, è molto meno probabile. È improbabile che la ricorsione della coda non possa essere implementata ovunque, ma la maggior parte degli autori di compilatori non si concentrerà su cose che non accadono comunemente.

    
risposta data 21.01.2016 - 02:07
fonte
10

Non sono sicuro di dove tu abbia l'idea che gli idiomi abbiano qualche connotazione morale. Gli idiomi sono solo un modo per esprimere le cose. Sono modelli con una scala più grande di singole parole o frasi.

Se ti dicessi che devi urlare con i lupi, non sapresti cosa intendo, anche se questo è un ben noto idioma tedesco. Se, OTOH, ti ho detto, quando sei a Roma, fai come fanno i romani, saprai immediatamente di cosa sto parlando, perché ho usato il giusto idioma inglese.

Le lingue del computer non sono diverse.

In realtà, un nome alternativo per "idioma" nel mondo della programmazione è "modello di implementazione". Questo collega l'idea all'idea di modelli, che proviene dall'architetto (brick-and-mortar non bits-and-bytes) Christopher Alexander. La maggior parte dei programmatori conosce i Pattern di progettazione, alcuni conoscono i Pattern di architettura, che sono modelli su una scala più grandi di Design Patterns. Gli idiomi sono modelli su una scala più piccoli di modelli di design.

    
risposta data 21.01.2016 - 02:14
fonte
5

La maggior parte delle lingue si prestano intenzionalmente a uno stile particolare. Il codice scritto in quello stile è ciò che è idiomatico. Se si guarda oltre il fatto circostanziato che la scelta dell'ambiente runtime restringe la scelta di lingue disponibili, è necessario scegliere le lingue perché il problema in questione è facile da esprimere nei particolari idiomi di una lingua.

La maggior parte delle persone però non capisce. Ad esempio, molti programmatori Java si sforzano di mantenere lo stesso stile quando devono scrivere JavaScript (potrebbero aver scritto Java e compilato in modo incrociato, attenzione) e riuscire in qualche modo - scrivendo codice che è Java-idiomatico in JavaScript - ma avranno sempre la sensazione di combattere JavaScript. Manca determinate funzionalità o trova difficile emularle.

Il codice idiomatico è buono. È difficile per gli estranei, ma possono imparare. In definitiva, il codice deve essere mantenuto per anni, quindi se riesci a trovare un linguaggio all'interno degli idiomi in cui il programma sottostante può essere espresso in modo semplice, è quello che dovresti fare.

Permettetemi di chiarire che esiste sicuramente una cosa come l'uso eccessivo di idiomi (o le caratteristiche linguistiche sottostanti). Se si utilizzano i modelli C ++ per eseguire parti significative della logica dell'applicazione in fase di compilazione, o se il proprio programma Lisp completo è una chiamata ad una macro che si sviluppa alla cosa reale in modi praticamente imprevedibili, se la soluzione Java di un semplice problema si gonfia in le proporzioni di FizzBuzzEnterpriseEdition ... stai sbagliando.

Le persone dicono che il codice deve essere facile da leggere. Questa è solo metà della verità. Deve essere facile da capire, il che richiede che sia anche facile ragionare. Ciò richiede un adeguato uso di astrazioni. Come con la maggior parte delle cose, si tratta di trovare il giusto equilibrio.

    
risposta data 21.01.2016 - 16:28
fonte

Leggi altre domande sui tag