Alan Kay: come insegnerei Computer Science 101

«Una delle ragioni per cui vale davvero la pena iscriversi all'università è uscire dai limiti di una semplice preparazione professionale e afferrare invece idee più profonde.»

Alan Kay: come insegnerei Computer Science 101

Riflettiamo un po' su questa questione. Alcuni anni fa, i dipartimenti di Computer Science mi hanno invitato per delle lezioni in vari università. Per caso, chiesi al mio primo pubblico, composto da studenti del quarto anno, dottorandi e professori, quale fosse la loro definizione di «Computer Science». Tutti poterono fornire solo una definizione ingegneristica. Ho fatto questa domanda in ogni nuovo luogo e ovunque ho ricevuto risultati simili.

Un'altra domanda era: «Chi è Douglas Engelbart?». Alcune persone dissero: «non era in qualche modo collegato al mouse del computer?» (e questo mi deluse molto, poiché la mia comunità scientifica aveva fatto molti sforzi affinché la risposta a questa domanda fosse disponibile dopo due o tre clic del mouse e per accertarsi che Engelbart fosse effettivamente collegato al mouse del computer).

Parte del problema risiedeva nell'assenza di curiosità, parte nei confini ristretti degli obiettivi personali che non erano legati all'apprendimento, parte nella mancanza di comprensione di cosa rappresenti realmente questa scienza, e così via.

Lavoro part-time nel dipartimento di ingegneria informatica dell'Università della California da diversi anni (in sostanza sono professore, ma non devo partecipare alle riunioni di dipartimento). Di tanto in tanto tengo corsi, a volte per studenti del primo anno. Negli anni, e senza contare il già basso livello di curiosità verso la Computer Science, questo è diminuito ulteriormente (ma è aumentata la popolarità, poiché l'ingegneria informatica è vista come un percorso verso un lavoro ben retribuito se si sa programmare e si ottiene un certificato in una delle migliori 10 scuole). Di conseguenza, nessuno studente si è ancora lamentato del fatto che il primo linguaggio all'Università della California è C++!

Mi sembra che ci siamo trovati di fronte a una situazione in cui entrambi i termini «Computer» e «Scienza» siano stati distrutti da concetti massivi e deboli per creare un nuovo termine — una sorta di etichetta sui jeans — che suona bene, ma è abbastanza vuoto. Un termine correlato, anch'esso distrutto in modo analogo, è «ingegneria del software», che, di nuovo, non ha utilizzato le idee più geniali di «programmazione» e «ingegneria», ma le ha semplicemente combinate (questo è stato fatto intenzionalmente negli anni '60, quando è stato coniato il termine).

Uno dei motivi per cui vale davvero la pena iscriversi all'università è andare oltre la semplice formazione professionale e abbracciare idee più profonde. Mi sembra piuttosto ragionevole, come introduzione alla disciplina, cercare — se possibile, con l'ausilio di esempi — di coinvolgere gli apprendisti nella risoluzione di problemi reali e far loro comprendere ciò che è realmente interessante, importante e centrale in questo campo.

Gli alunni della prima classe si entusiasmano quando vedono come un righello sopra un altro righello si trasforma in un calcolatore, con cui possono superare i ragazzi di quinta classe nell'aggiungere frazioni. E poi saranno felici di partecipare allo sviluppo di calcolatori migliorati. Hanno toccato un vero computer — uno strumento fisico e mentale che ci aiuta a pensare. Hanno appreso un modo davvero efficace per rappresentare i numeri — più efficace di quanto si insegni a scuola!

Sono riusciti a connettere la loro idea sana di «aggiunta» come «accumulo» con qualcosa di analogamente potente e nuovo. L'hanno programmato in modo da poter risolvere una varietà di problemi.

Lo hanno anche ampliato. E così via. Non è un computer digitale. E non è un computer con programma memorizzato. Ma questa è l'essenza del computer. Proprio come meccanismo di Antikythera — questa è in generale l'essenza del computer e dei calcoli.

Alan Kay: come insegnerei Computer Science 101

Meccanismo di Antikythera

Quanto lontano possiamo arrivare e quanto possiamo fare prima che tutto sfugga di mano, e ci perdiamo nelle astrazioni? Sono sempre stato sensibile alla caratterizzazione di Alan Perlis — il primo vincitore del premio Turing, che forse ha coniato il termine «Computer Science» — che negli anni '60 disse: «La Computer Science è la scienza dei processi». Di tutti i processi.

Per il bene dell'azienda Quora, evitiamo di portare avanti questo discorso o di trasformarlo in una dogma religiosa. Limitiamoci a utilizzare felicemente l'idea Alan Perlis, per riflettere meglio sul nostro campo. E in particolare su come insegnarlo. Ora dobbiamo considerare il significato moderno di «scienza», e Perlis era piuttosto convinto che non dovesse essere diluito dai significati e usi antiquati (per esempio, come «raccolta di conoscenze») e utilizzi (ad esempio, «scienze bibliotecarie» o persino «scienze sociali»). Con «scienza» cercava di capire il fenomeno, creando modelli/mappe che tentano di mostrare, «tracciare» e prevedere fenomeni.

Alan Kay: come insegnerei Computer Science 101

Ho dato alcune interviste su come le migliori mappe e modelli possano spesso adattarsi a una maglietta, proprio come le equazioni di Maxwell e altro. L'analogia è che esiste una «scienza dei ponti», anche se la maggior parte dei ponti sono costruiti dall'uomo. Ma una volta che il ponte è costruito, esso riflette fenomeni che gli scienziati possono studiare, dai ponti è possibile creare modelli di molti tipi e formare teorie sui «ponti» complete e utili. La cosa divertente è che poi si possono progettare e costruire nuovi ponti (ho già accennato che è difficile trovare qualcosa di più divertente della collaborazione tra scienziati e ingegneri per risolvere grandi e importanti problemi!)

Alan Kay: come insegnerei Computer Science 101

Herbert Simon — vincitore del premio Turing e del premio Nobel — ha chiamato tutto questo «scienza dell'artificiale» (e ha scritto un magnifico libro con lo stesso titolo).

Alan Kay: come insegnerei Computer Science 101

Permettetemi di fare un esempio. Negli anni '50 le aziende e le università costruivano computer con programmi memorizzabili e iniziavano a programmarli — e ci fu un momento speciale, nel 1956, quando apparve Fortran — che non era il primo linguaggio di alto livello, ma probabilmente il primo fatto così bene da essere utilizzato in molte aree diverse, comprese molte che prima erano state realizzate solo in linguaggio macchina.

Tutto ciò ha generato «fenomeni».

Alan Kay: come insegnerei Computer Science 101

John McCarthy

La storia di Lisp è più complessa, ma John McCarthy era interessato al tentativo di trovare una «teoria matematica del calcolo» ed era determinato a far funzionare tutto alla perfezione. La funzione eval, che interpreta Lisp, può tranquillamente essere stampata su una maglietta! Rispetto al «sistema di programmazione», ciò è insignificante. Ciò che è più importante, questa «teoria del calcolo» aveva un concetto più potente rispetto al Fortran! È stata la migliore idea di collegamento!

La miniaturizzazione di Lisp consente all'intera idea della programmazione di essere afferrata con un paio di clic a un livello più profondo e di essere riflessa in un modo che sembra semplicemente impossibile quando guardi i grandi artefatti (questo è uno dei motivi per cui gli scienziati amano che la matematica sia compatta e potente). La matematica utilizzata qui è una nuova matematica, poiché ammette concetti come «prima» e «dopo», e ciò porta alla «logica della variabile», che consente di mantenere sia la dipendenza funzionale che il ragionamento logico, consentendo anche la posizione e il passare del tempo. (Questo non è ancora compreso ai nostri tempi nel crudele mondo della programmazione situazionale).

Lisp, fungendo da potente linguaggio di programmazione e meta-linguaggio capace di rappresentare la propria teoria, è un esempio di vera informatica. Se lo imparerai e imparerai altre cose simili, potrai pensare più profondamente e avere maggiore responsabilità sul tuo destino, rispetto al semplice apprendere a programmare in Fortran o nei suoi equivalenti moderni (... così potrai avvicinarti ai programmatori!).

Imparerai molto di più sui tipi speciali di design necessari nei calcoli (ad esempio, non è apprezzato solitamente quando i calcoli richiedono spesso di andare oltre l'ambiente computazionale: una delle caratteristiche speciali dei calcoli programmati memorizzati è che non è solo materiale per un programma, ma materiale per un computer completamente nuovo).

Un'altra ragione per scegliere la definizione di Perliss è che nel complesso il calcolo è molto più legato alla creazione di sistemi di vari tipi, piuttosto che ad algoritmi, «strutture dati» o persino alla programmazione in sé. Ad esempio, un computer è un sistema, i calcoli sono sistemi, una rete locale e Internet sono sistemi, e la maggior parte dei programmi dovrebbe rappresentare sistemi migliori di quelli che sono (lo stile di programmazione degli anni '50 è durato fino al punto in cui sembra che la programmazione debba essere così — nulla è più lontano dalla verità).

Internet è un buon esempio: a differenza della maggior parte dei programmi al giorno d'oggi, Internet non deve essere fermato per riparare o migliorare qualcosa — è più simile a un sistema biologico — secondo la nostra intenzione, piuttosto che a ciò che la maggior parte delle persone considera un sistema computazionale. Ed è molto più scalabile e affidabile della maggior parte dei sistemi software esistenti oggi. Vale davvero la pena riflettere su questo prima di insegnare ai principianti nella programmazione concetti non così potenti!

Quindi, cosa dobbiamo fare nel primo corso di Informatica? È fondamentale considerare cosa possono fare concretamente gli studenti fin dall'inizio e poi cercare di rimanere nei limiti del loro «carico cognitivo», per aiutarli a raggiungere ciò che è veramente importante. È molto importante «rimanere autentici» e trovare modi che siano intellettualmente onesti e adatti a chi sta appena iniziando l'apprendimento. (Per favore, non insegnate idee sbagliate solo perché sembrano un po' più semplici — molte idee sbagliate sono in realtà più semplici!).

Gli studenti devono iniziare creando qualcosa che avesse molte importanti caratteristiche di cui ho parlato qui. Dovrebbe essere un sistema di più parti che interagiscono dinamicamente e così via. Un buon modo per decidere quale linguaggio di programmazione utilizzare è semplicemente fare qualcosa che ha migliaia di parti che interagiscono! Se non lo hai, dovresti trovarne uno. La cosa peggiore che puoi fare è mettere gli studenti su un percorso di scarsa fluidità, che limiterebbe fortemente le idee su larga scala. Questo li uccide semplicemente — e noi vogliamo farli crescere, non ucciderli.

Sulla scuola GoTo

Alan Kay: come insegnerei Computer Science 101

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster