Articles

Come insegnare l’informatica a se stessi: Il viaggio di 100 ore di uno sviluppatore

Mi sono chiesto per molto tempo: conoscere solo le basi dell’informatica aiuta a diventare uno sviluppatore migliore? E può portare valore ad uno sviluppatore?

Se anche voi vi fate queste domande, e non volete investire tempo (ancora) nell’apprendimento dell’informatica, ecco la storia della mia esperienza. In questo articolo, risponderò alle seguenti domande:

  • Perché imparare l’informatica?
  • Qual è stato il mio piano di studio?
  • Quali risorse ho usato?
  • Ho imparato qualcosa di utile che può essere trasferito al mio lavoro quotidiano come sviluppatore?

Ho iniziato con questa fantastica lista di risorse: teach yourself computer science. È fondamentalmente una linea guida su come studiare l’informatica come ingegnere del software, senza spendere un sacco di soldi cercando di entrare al MIT.

Perciò, perché imparare l’informatica da soli?

Questa è una domanda semplice ma importante: perché dovremmo farlo in primo luogo?

Per ogni progetto che richiede una buona dose di motivazione, cerco innanzitutto di definire degli obiettivi adeguati:

  1. Essere in grado di imparare più velocemente un nuovo linguaggio/nuova tecnologia conoscendo alcuni concetti fondamentali che si possono applicare ad ogni linguaggio/tecnologia.
  2. Migliorare la mia comprensione dei livelli di astrazione inferiori. Capire un po’ meglio “come funziona sotto il cofano” potrebbe migliorare la mia comprensione e quindi la mia efficienza per risolvere i bug o progettare algoritmi.
  3. Migliorare le mie capacità di ragionamento logico per rendere anche il mio codice più logico.
  4. Credo che la comprensione dei concetti fondamentali sia una chiave per innovare nel campo dello sviluppo.
  5. Comprendere la storia del settore: perché siamo dove siamo ora, cosa possiamo fare per migliorare il mondo dell’informatica?

Informatica 101: il piano di studio

Non mi interessa cercare di leggere ogni libro sull’informatica. Dovrebbe almeno fornirmi un senso di comprensione.

Ecco perché il mio piano di studio si è concentrato sulla ritenzione della memoria, sulla comprensione e sulla costruzione di un riferimento rapido su ciò che ho imparato, per essere in grado di tornarci facilmente.

  1. Ho studiato circa 2 o 3 ore ogni settimana, a seconda delle mie priorità. Non volevo fare troppo e sentirmi bruciato e stufo dell’informatica. La cosa più importante per me era studiare regolarmente, qualunque fosse la quantità di tempo. Doveva essere qualcosa che mi piaceva fare.
  2. Mentre studiavo nuovo materiale, scrivevo dei riassunti sotto forma di mappe mentali. Questo ha due vantaggi: scrivere aiuta a ricordare ciò che ho imparato e posso facilmente ricordare alcuni concetti chiave quando ne ho bisogno, in poco tempo.
  3. Il mio tempo di studio è diviso in due categorie:
    • Nuovo apprendimento (nuovo capitolo di un libro, guardare un nuovo video corso, fare esempi ed esercizi)
    • Quello che io chiamo “richiamo della base di conoscenza”. È principalmente fare (più) esercizi sul nuovo materiale che ho letto / visto la settimana prima, leggere le mie mappe mentali, e cercare di ricordare ciò che ho scritto in esso.
  4. Per quanto riguarda gli esercizi, cerco di non spendere più di 30min su ciascuno di essi. L’obiettivo è quello di lottare abbastanza per ricordare il concetto ma non troppo per sentirsi bruciati. È un equilibrio delicato.
  5. Provo a rifare alcuni esercizi che non sono riuscito a fare la prima volta, giorni (anche settimane) dopo i diversi tentativi, per vedere se la mia comprensione è migliorata.

Sto cercando di applicare alcuni principi di apprendimento attivo facendo più esercizi che posso, e ponendomi domande mentre rivedo le mie mappe mentali.

Rivisitare ciò che ho imparato da una settimana all’altra è davvero, davvero utile per migliorare la mia memoria e la mia comprensione.

Cosa ho fatto finora

motivazione per imparare la matematica discreta

Ecco cosa ho fatto precisamente durante queste (quasi) 100 ore di studio di informatica, in ordine cronologico.

I. Programmazione (32 ore 55m)

graph pomodoro fatto straordinario parte programmazione
Pomodoro (25 min) fatto a settimana per la Parte di programmazione

L’articolo intitolato “insegnati l’informatica” ha specificato che dovrei seguire “grosso modo” l’ordine di studio che propongono, iniziando dal campo della programmazione.

Risorsa principale: Structure and Interpretation of Computer Programs (SICP)

Questo libro è considerato da molti come la bibbia che ogni sviluppatore dovrebbe leggere. È gratuito e puoi trovare le migliori versioni epub e PDF qui.

Puoi trovare le soluzioni degli esercizi qui.

Sono riuscito a fare quasi tutti gli esercizi fino a 1.2.5 Greatest Common Divisors.

Risorsa complementare: Video Berkeley

I video sono disponibili qui. Le note del corso sono qui. Se cercate qualche esame di esempio da Berkeley, è qui.

Questi sono un ottimo complemento al libro: i concetti sono spiegati senza chiedervi troppo di matematica, in contrasto con il libro. Se volete studiare la SICP ma il vostro background matematico non è abbastanza forte, seguite semplicemente questo corso. I miei appunti e gli esercizi sono qui.

Cosa ho imparato da SICP finora

  • L’inizio di questo libro è molto interessante per capire davvero le radici della programmazione funzionale e delle ricorsioni.
  • Definisce molti termini che i programmatori usano ogni giorno, in modo molto preciso. Perfetto per essere ancora più precisi durante le discussioni tecniche.
  • Il libro ha spinto le mie capacità analitiche e di risoluzione dei problemi con i suoi esercizi.

Cosa posso usare nella vita reale?

L’intera discussione sulle ricorsioni nel libro mi ha aiutato in modo significativo a scriverle facilmente. È un argomento con cui ho sempre lottato un po’. Ora è un gioco da ragazzi affrontare qualsiasi problema che voglio risolvere con la ricorsione.

Quali difficoltà ho incontrato?

Questo libro non è per chi odia la matematica. È stato scritto per gli studenti del MIT che hanno già qualche conoscenza matematica. Senza questa conoscenza preliminare, gli esercizi possono essere piuttosto difficili e frustranti a volte.

È stata la causa di un altro problema: ho passato troppo tempo sugli esercizi. Potevo risolvere la maggior parte di essi, ma in alcuni casi mi ci volevano ore.

Da lì ho deciso che non avrei passato più di 30 minuti sugli esercizi per mantenere bassa la frustrazione senza scartare l’enorme beneficio di farli.

II. Matematica discreta (50 ore)

pomodoro grafico fatto nella parte di programmazione straordinaria
Pomodoro (25min) fatto a settimana per la matematica discreta

Più leggevo SICP, più trovavo gli esercizi difficili, soprattutto perché trattava alcuni concetti matematici che non conoscevo. Pertanto, ho deciso di andare avanti e di iniziare a studiare la Mathematics materia.

Risorsa principale: Matematica discreta e sue applicazioni

Teach yourself computer science consiglia di leggere gli appunti della lezione di László Lovász, liberamente disponibili qui come documento ps. L’ho convertito in PDF qui per coloro che non sanno cosa sia un documento ps. Neanche io lo sapevo.

Tuttavia, ho scelto un’altra risorsa principale di studio, apparentemente più amichevole per i principianti: Discrete Mathematics and its Application di Kenneth H. Rosen. È un libro piuttosto grande, abbastanza economico nelle sue prime edizioni.

In 50 ore sono riuscito a finire il primo capitolo (logica proposizionale) e a realizzare 54 esercizi.

Risorsa complementare: MIT 6.042J mathematics for computer science, Fall 2010

Questi video del MIT sono corsi più avanzati sulla matematica discreta. Anche in questo caso, presuppongono che si conosca abbastanza bene la matematica. Tuttavia, sono molto interessanti anche se ho avuto difficoltà a seguirli.

Nel peggiore dei casi vi darà almeno un buon assaggio di ciò che è la matematica discreta.

Un insegnante (Tom Leighton) ha migliori capacità di insegnamento degli altri. Tuttavia, tutti hanno una conoscenza molto profonda delle loro rispettive materie.

Cosa ho imparato finora

  • Il libro mi ha insegnato le basi della logica, un’abilità molto buona da avere come sviluppatore. Dopo tutto, il nostro lavoro si basa su una logica corretta.
  • La logica proposizionale con quantificatori e regole di inferenza. Fondamentalmente è il modo di scrivere affermazioni logiche, verificando che le affermazioni logiche abbiano un senso e provando i loro valori di verità.
  • Fondamenti di insiemi e teoria dei grafi, grazie ai video. È molto interessante ed è piuttosto utile per un sacco di cose: macchine a stati, networking…

Cosa posso usare nella vita reale?

  • Le tabelle di verità possono essere molto utili per ordinare complesse dichiarazioni condizionali o per rifattorizzarle.
  • Di recente ho potuto applicare le leggi di DeMorgan per migliorare la leggibilità di alcune dichiarazioni condizionali.
  • Esprimere specifiche confuse e brevi con predicati, congiunzioni e disgiunzioni (il linguaggio della logica proposizionale) può mostrare le contraddizioni e i dettagli mancanti. Può riassumere molto succintamente specifiche complesse in modo preciso. Può essere un buon ponte tra le specifiche e il codice stesso.

Quali difficoltà ho incontrato?

  • Capire come scrivere una dimostrazione matematica è difficile, specialmente quando nessuno può aiutarti o correggere la tua dimostrazione.
  • Mi mancano ancora alcune basi di matematica, specialmente necessarie per i video del MIT.

III. Ritorno alle basi della matematica (11 ore 15)

graph pomodoro fatto parte di programmazione straordinaria
Pomodoro (25 min) fatto a settimana per le basi della matematica

Dopo aver avuto alcuni altri problemi (minori) con le mie conoscenze di matematica in matematica discreta, Ho deciso di tornare alle basi.

Un’altra ragione importante che ha guidato la mia scelta: mi è piaciuto molto fare matematica. Senza questo, non avrei continuato a studiare informatica.

Non ti confondere: la matematica legata all’informatica è diversa da quella che hai studiato (e forse odiato) a scuola. Ti consiglio di fare un tentativo.

A quel punto ho deciso di alternare lo studio della matematica discreta con le basi della matematica.

Risorsa principale: Come imparare velocemente l’aritmetica di base

Questo video di 4 ore è davvero buono per rinfrescare un sacco di cose, dalle somme e il prodotto attraverso le percentuali, gli esponenti, i logaritmi… Copre un sacco di terreno molto velocemente con un sacco di esercizi.

Anche i consigli dati sono molto buoni per capire e risolvere i problemi di base rapidamente.

Si può vedere su youtube un’ora di anteprima del video. Se ti piace, puoi comprarlo su Vimeo.

Cosa ho imparato finora

  • Le mie capacità di calcolo mentale sono migliorate molto bene. Se hai difficoltà a calcolare velocemente le percentuali o anche a fare semplici moltiplicazioni senza una calcolatrice, questo corso ti aiuterà molto.
  • Fondamenti per manipolare frazioni, esponenti, radici quadrate, logaritmi e così via.

Cosa posso usare nella vita reale?

  • Essere in grado di calcolare mentalmente è molto utile per molte cose nella vita reale. Calcolare rapidamente le promozioni, approssimativamente quanto sarà costoso un carrello pieno…
  • Posso applicare tutte queste conoscenze mentre studio informatica.

Quali difficoltà ho incontrato?

Dopo aver studiato la SICP e la Matematica Discreta, è stato molto rilassante capire finalmente tutto con un po’ di lavoro. Non ho avuto molte difficoltà.

I miei consigli per i principianti in informatica

base-matematica-illustrazione

Se potessi tornare indietro all’inizio di questa avventura, avrei studiato le diverse materie in questo ordine:

  • I. Matematica di base
  • II. Matematica discreta
  • III. SICP

Io avrei studiato in parallelo i Fondamenti e la Matematica Discreta e poi sarei passato alla SICP, cercando di ottenere le conoscenze di Matematica che ancora mi mancavano lungo la strada.

Continuerò a studiare le basi della matematica e della matematica discreta per almeno 150 ore:

  • Il poco che conosco mi ha già aiutato parecchio nella mia vita quotidiana di sviluppatore.
  • Sento (e leggo) che è una base per ogni altro campo dell’informatica.
  • Mi piace studiarla! Ancora una volta, è una componente essenziale per rimanere motivati.

In breve: un’esperienza molto buona, che ha sottolineato molte delle mie debolezze ma che mi ha anche insegnato solidi fondamenti che mi mancavano.

Tenete a mente però: se vi aspettate di diventare un programmatore super mago studiando informatica, potreste rimanere delusi. L’informatica è difficile da studiare. Ha forti lati teorici e anche se ne ho già trovato qualche uso nel mio lavoro quotidiano, non è affatto strabiliante.

Passare attraverso questo percorso richiede lavoro, pazienza e dedizione. Avere obiettivi chiari, un piano di studio concreto e godersi il processo sono obbligatori.

Questo articolo è stato scritto da Matthieu Cneude ed è stato originariamente pubblicato su The Valuable Dev, un blog incentrato sui concetti importanti e senza tempo nello sviluppo del software. Potete leggere il pezzo qui.

Pubblicato il 1 ottobre 2020 – 12:46 UTC

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *