1. Lezioni di scrittura? Non proprio.
La scrittura del codice sorgente è abbastanza diversa dalla scrittura di un libro.
Mentre entrambi perseguono gli stessi obiettivi: essere il più inequivocabile possibile ed essere facili da capire, lo stanno facendo in un modo molto diverso e le cose che uno scrittore dovrebbe imparare non sono le stesse cose che uno sviluppatore di software dovrebbe imparare.
Esempio 1: figure retoriche
Le figure retoriche sono preziose quando si scrivono romanzi, poesie, ecc., Poiché aumentano l'espressività della scrittura.
Qual è l'ultima volta che hai visto un ossimoro o una litote nel codice sorgente ? Aiuterebbe ad averli o sarebbe piuttosto dannoso per qualsiasi sviluppatore che dovrà mantenere tale codice sorgente in seguito?
Esempio 2: vocabolario
Il ricco vocabolario è molto apprezzato in letteratura. Il vocabolario di William Shakespeare, per esempio, è di ventimila-venticinquemila parole. Il vocabolario più ricco rende più interessante leggere un romanzo o una poesia.
Quando scrivi il codice sorgente, ti aspetti che venga letto da persone che non parlano molto bene l'inglese . Mostrando quanto conosci l'inglese sarebbe estremamente dannoso per il tuo codice. Se conosci una parola di fantasia che significa esattamente ciò di cui hai bisogno ma sai che molte persone non conoscono il significato di questa parola, dovresti piuttosto trovare un sinonimo meno espressivo o un insieme di parole che spiegano il significato. Un vocabolario di poche migliaia di parole è spesso in gran parte sufficiente per un determinato progetto.
Nota un aspetto importante: sebbene Google Translate possa essere di grande aiuto per un madrelingua, ci sono due problemi con qualsiasi traduttore:
Una coppia di lingue non ha necessariamente una corrispondenza 1: 1 tra le parole. Alcune parole non hanno alcuna traduzione in altre lingue, oppure più parole potrebbero tradursi in una sola parola in una lingua straniera. Ad esempio, in russo, c'è un'enorme quantità di parole che colpiscono specifici stati di neve e tempo freddo, e tradurli in francese o spagnolo è solitamente impossibile senza perdere la loro specificità.
Una parola a volte ha molteplici significati e il significato viene dedotto dal contesto. Google Translate, nonostante la sua alta qualità, di solito non è in grado di indicare il significato per nessuna delle situazioni più elementari.
Esempio 3: espressioni
Le espressioni rendono anche la prosa più ricca. Un autore si aspetta che un lettore abbia una certa quantità di cultura generale e sfrutta questa opportunità per rendere il testo più espressivo.
Analogamente all'esempio precedente, tali espressioni potrebbero essere molto problematiche se lette da persone che non sono madrelingua. Ma se il vocabolario generale di solito può essere tradotto, le espressioni sono molto più problematiche.
Ad esempio, l'inglese non è la mia prima lingua e, su base giornaliera, incontro espressioni, anche qui su StackExchange, che non conosco. Cerco di indovinarne il significato e a volte ho ragione. Ma a volte mi sbaglio, e cercare su Google quelle espressioni non aiuta.
Un utente nel suo commento mi ha ricordato un esempio che mi ha fatto soffrire a lungo quando ho appena iniziato a programmare: l' ago e il pagliaio di PHP . Non ero a conoscenza della corrispondente figura retorica, quindi ogni volta che leggevo la documentazione mi chiedevo di cosa si trattasse. Inutile dire che C # sequence.Contains(element)
o gli eccellenti Python element in sequence
sono un'alternativa molto migliore. Beh, almeno, gli sviluppatori che non conoscono l'ebraico hanno dovuto soffrire anche di PHP , ma questa è una storia diversa.
Esempio 4: riferimenti culturali
Riferimenti culturali In letteratura, è allettante includere elementi di una determinata cultura, e anche questo rende il libro più ricco e talvolta più interessante da leggere.
Tuttavia, il codice è indirizzato agli sviluppatori di tutto il mondo. Pertanto, ciò che è un ovvio riferimento per uno sviluppatore italiano potrebbe non essere così ovvio per uno russo, e ciò che ogni ragazzo o ragazza indiana conosce potrebbe non essere necessariamente conosciuto da un programmatore americano.
Lo stesso utente che ha parlato dell'ago e del pagliaio ha fornito anche un eccellente esempio di tale riferimento culturale: il Graal. Chi non sa cos'è il Graal? Bene, voglio dire, è "Graal" in francese, "Grial" in spagnolo e ... "Kutsal Kâse" in turco, ma comunque. Tuttavia, quanti sviluppatori americani o europei conoscono la storia medievale della Cina o dell'India? Perché qualcuno dovrebbe presumere che ogni programmatore cinese e indiano debba conoscere il riferimento al Santo Graal?
2. Lezioni per scrivere codice sorgente espressivo? Sicuro.
Qualsiasi sviluppatore dovrebbe imparare a scrivere codice sorgente espressivo.
Qualsiasi sviluppatore dovrebbe spiegare perché il commento in:
int j = i + 1; // Creating i and adding 1 to it.
fa male, a parte il fatto che è totalmente sbagliato.
Qualsiasi sviluppatore dovrebbe essere in grado di comprendere il refactoring di base e come aiuta a rendere più espressivo il codice sorgente.
Qualsiasi sviluppatore dovrebbe ricordare che il 20% del tempo è dedicato allo sviluppo del codice e l'80% del tempo a mantenerlo. Per alcuni progetti, è più simile al 5% - 95%.
eccetera.
In sostanza, la programmazione è vicina alla documentazione tecnica. Una persona che scrive una scheda tecnica per un bolt deve prendere lezioni di scrittura? Non proprio. Lo stesso vale per gli sviluppatori. Chiunque dovrebbe scrivere senza commettere errori di ortografia in ogni parola e chiunque dovrebbe essere in grado di comunicare le proprie idee in modo abbastanza chiaro. A parte questo, non sono sicuro di come scrivere lezioni sarebbe più utile di, diciamo, un corso di informatica o di sicurezza IT o altro.
L'espressività del codice sorgente può essere appresa con altri mezzi. superM ne ha menzionato uno nella sua risposta : leggere un buon codice. Posso citarne alcuni altri:
Leggere libri come Beautiful Code o Code Complete,
Chiedere a uno sviluppatore più esperto di rivedere il tuo codice,
Comprensione dei modelli e come e quando usarli.