Perché codificare è così difficile? | Parte 1

Questo è un post su un argomento tecnico: il coding. Ma per essere chiari, non ho un background tecnico.

Sono l’orgoglioso figlio di un artista che mi ha insegnato ad usare le mie emozioni come bussola per navigare nella vita, piuttosto che la logica. Argilla, grafite, inchiostro, pittura, tela, carta e adesivo scorrono nelle mie vene.

Ho lottato a scuola per molte ragioni, tra cui due difficoltà di apprendimento: danni ai nervi cerebrali da complicazioni alla nascita e dislessia, che non sarebbe stata diagnosticata fino ai miei ultimi 20 anni. I miei punteggi migliori nei test erano così brutti che quasi non sono entrato al college.

Ho studiato scienze politiche a scuola e i miei primi tentativi falliti di carriera sono stati nel cinema e nel design grafico.

Ho insegnato a me stesso come codificare – è una delle cose più difficili che abbia mai fatto. Ho anche insegnato il codice in un bootcamp qui a D.C. per circa 5 anni e ho fatto da mentore ad alcuni amici, di tanto in tanto.

Anche se è difficile, non è impossibile. Quando sei un autodidatta, stai imparando pezzi e pezzi. A volte qualcosa ha senso immediatamente, mentre altre scatteranno tra anni. Il sentiero della spiegazione è ben battuto, ma ho scoperto che le tue esperienze di vita, le tue disposizioni e la tua educazione significano che metà della tua battaglia è trovare le giuste risorse di apprendimento.

Due cose prima di iniziare:

  1. Se posso farlo io, puoi farlo anche tu.
  2. Non siete soli.

Nuovo vocabolario, nuovi concetti, nuovo… tutto

Una delle difficili barriere per imparare a scrivere codice è che i termini usati per descrivere qualsiasi cosa in “lingua del codice” possono spesso significare qualcosa di completamente diverso in inglese normale. Il mio esempio è la parola “Classe”.

A differenza delle connotazioni accademiche o sociologiche a cui siamo abituati, una Classe nel linguaggio di programmazione è diversa a seconda del linguaggio di programmazione che state usando. Ancora più confuso in questi diversi linguaggi di programmazione, una Classe è sia abbastanza correlata concettualmente per tracciare paralleli di somiglianza sul perché i suoi autori originali hanno scelto di chiamarla Classe, ma l’uso effettivo è abbastanza diverso da essere davvero qualcosa di completamente diverso. (Specificamente classi CSS contro classi orientate agli oggetti)

Parlare di codice è quasi simile allo slang, che come ogni genitore sa, è frustrante. Può essere difficile all’inizio segnalare cos’è una normale parola inglese e cos’è un termine “codice”.

Inoltre, spesso li sentite in rapida successione, quindi una frase completa in code-speak sarà grammaticalmente corretta e conoscerete ciascuna delle parole separatamente, ma non quando sono disposte in questo modo.

“Dopo aver lavato sia la cache del browser in locale che ho chiesto a John di svuotare la cache del server in allestimento, pensando che dovesse essere un qualche tipo di problema di memoria persistente o di stato, si è rivelata una collisione di nomi che sovrascriveva le invocazioni definite in precedenza nella root. Farò un biglietto per aggiungere le mappe dei sorgenti in modo da poter rintracciare più facilmente le istanze invece di cercare nel repo”.

Non solo partire da zero, ma anche definire cos’è lo zero

Oltre a questo, ci sono concetti che non hai mai dovuto incontrare prima, tanto meno combatterci.

Un esempio che mi piace usare con i miei studenti è:
Diciamo che vuoi programmare il tuo computer per farti una tazza di caffè. Semplice giusto?

Tu: Hey Computer: fammi una tazza di caffè.

Computer: BEEP BOOP: CERTO PAT. CHE COSA E’ IL CAFFÈ E CHE COSA E’ FARE?

Immagina tutti i modi in cui potresti fare il caffè… poi immagina il processo di ottenere il chicco di caffè dall’albero su cui è cresciuto, in una forma che puoi usare in questo processo… yikes.

Spesso partiamo da zero, e anche le cose piccole e semplici per noi sono in realtà spesso incredibilmente complesse da realizzare con il codice.

Non devi solo programmare le cose, devi innanzitutto definire cosa sono. Poi, dovete rinforzare il vostro codice per gestire tutti i possibili modi in cui potrebbe andare male. Compiti semplici diventano cattedrali sbalorditive che onorano gli dei dell’esplicito.

“Basta Google”

Forse il consiglio che mi fa infuriare di più dai miei colleghi ai nuovi sviluppatori è di “Google”.

Chiunque sia stato nel fango fino al petto sa quanto questo sia inutile.

A. Non sai come diagnosticare cosa c’è di sbagliato, quindi non sai nemmeno da dove cominciare. (Se lo sapessi, non lo chiederesti).
B. Anche se lo faceste, non sapete quali termini sono associati al problema.
C. E anche se lo faceste, i risultati sono spesso così sconcertanti che non li riconoscereste nemmeno se vi stessero fissando. (O come diceva mio nonno, non saresti in grado di versare l’acqua da uno stivale se ci fossero le istruzioni sul fondo.)

Codificare è come una lingua straniera

Ci sono sorprendenti parallelismi tra l’imparare a scrivere codice e imparare una lingua straniera. Ho scoperto che gli studenti di lingua, inglese o altro, tendono ad imparare la sintassi più velocemente.

Sì, ci sono schemi e logica nei sistemi.

Sì, alcune cose sono idiosincratiche e non possono essere succintamente trasmesse nel loro equivalente inglese.

Sì, ci sono eccezioni ai 2 punti precedenti che contraddicono o non hanno senso, ma è il modo in cui è così che devi memorizzarlo.

Mezzo pastore/mezzo scienziato

La contraddizione forse più esasperante che un programmatore deve soddisfare è che si ha il compito sia di sapere come funziona il tutto, sia di attribuire una sana maggioranza alla fede.

Per programmare, si deve usare la logica, la ragione e l’inferenza. Il debugging è un processo deduttivo. Un buon codice è ben strutturato, volutamente logico e ben organizzato.

D’altra parte, stiamo usando rocce che abbiamo ingannato per pensare (computer). Ci affidiamo a framework, librerie e frammenti scritti da altre persone che o non capiamo a causa del tempo o prendiamo puramente per fede. C’è così tanto che accade in ogni linea di codice che non potremmo mai finire la funzione se dovessimo fermarci a pensare a cosa fa tutto.

Per essere un programmatore, devi essere sia un sacerdote/sacerdotessa basato sulla fede che un logico Spock dal cuore di pietra.

Immagine via Paramount Pictures.

Conclusione

Quindi, come potete vedere, abbiamo il nostro lavoro da fare. Ma proprio come non siamo venuti al mondo sapendo come parlare, o scrivere, o completare uno qualsiasi dei compiti che ora troviamo di routine, ma con cui una volta abbiamo lottato: possiamo farlo.

La profonda verità dietro il coding è che è il prodotto, i migliori sforzi di livello – le buone intenzioni – il dono onesto di alcune persone molto intelligenti per rendere la vita più facile. Qualche persona intelligente, da qualche parte ha detto: “Questo fa schifo. Ci deve essere un modo migliore di questo.”

E il codice ha fatto il suo primo respiro.

Nella prossima sezione, vi darò alcune strategie per facilitare questo processo e farvi muovere verso i vostri obiettivi. Il codice è qui per restare, è qui per aiutare, e se non altro, potreste anche divertirvi un po’.

Leave a Reply

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.