su "Sulla crudeltà di insegnare davvero la scienza informatica"


33

Dijkstra, nel suo saggio Sulla crudeltà di insegnare davvero la scienza informatica , fa la seguente proposta per un corso introduttivo di programmazione:

Da un lato, insegniamo ciò che assomiglia al calcolo del predicato, ma lo facciamo in modo molto diverso dai filosofi. Per addestrare il programmatore inesperto alla manipolazione di formule non interpretate, lo insegniamo più come algebra booleana, familiarizzando lo studente con tutte le proprietà algebriche dei connettivi logici. Per interrompere ulteriormente i collegamenti all'intuizione, rinominiamo i valori {true, false} del dominio booleano come {black, white}.

D'altra parte, insegniamo un linguaggio di programmazione semplice, pulito e imperativo, con un salto e un'assegnazione multipla come istruzioni di base, con una struttura a blocchi per variabili locali, il punto e virgola come operatore per la composizione delle istruzioni, un bel costrutto alternativo, un bel ripetizione e, se desiderato, una chiamata di procedura. A questo aggiungiamo un minimo di tipi di dati, ad esempio valori booleani, numeri interi, caratteri e stringhe. L'essenziale è che, per qualunque cosa introduciamo, la semantica corrispondente è definita dalle regole di prova che ne derivano.

Fin dall'inizio, e per tutto il corso, sottolineiamo che il compito del programmatore non è solo quello di scrivere un programma, ma che il suo compito principale è quello di fornire una prova formale che il programma che propone soddisfa le specifiche funzionali ugualmente formali. Mentre progetta prove e programmi mano nella mano, lo studente ha ampie opportunità di perfezionare la sua agilità manipolativa con il calcolo del predicato. Infine, al fine di portare a casa il messaggio che questo corso introduttivo di programmazione è principalmente un corso di matematica formale, facciamo in modo che il linguaggio di programmazione in questione non sia stato implementato nel campus in modo che gli studenti siano protetti dalla tentazione di testare i loro programmi .

Sottolinea che si tratta di una proposta seria e delinea varie possibili obiezioni, inclusa la sua idea "assolutamente irrealistica" e "decisamente troppo difficile".

Ma quell'aquilone non volerà né per il postulato è stato smentito: dai primi anni '80, un tale corso di programmazione introduttiva è stato tenuto con successo a centinaia di matricole del college ogni anno. [Perché, nella mia esperienza, dire questo una volta non è sufficiente, la frase precedente dovrebbe essere ripetuta almeno altre due volte.]

A quale corso si riferisce Dijkstra e c'è qualche altra letteratura disponibile che ne discute?

Il saggio è apparso nel 1988 quando Dijkstra era all'Università del Texas ad Austin, il che è probabilmente un indizio: ospitano l'archivio Dijkstra ma è enorme, e sono particolarmente interessato a sentire gli altri su questo corso.

Non voglio discutere se l'idea di Dijkstra sia buona o realistica qui. Ho pensato di pubblicare questo su cstheory.se o cs.se ma mi sono stabilito qui perché a) una comunità di educatori potrebbe avere maggiori probabilità di avere qualcuno che possa rispondere facilmente, e b) Dijkstra stesso sottolinea che il suo corso è "principalmente un corso in matematica formale ". Sentiti libero di segnalare la migrazione se non sei d'accordo.


2
Sono abbastanza sicuro che Dijkstra stia criticando uno stile particolare di come la matematica è stata insegnata (una che costruisce tutto, in stile Bourbaki, dagli assiomi) e che questo è inteso come satira . Tuttavia, non ho prove a sostegno di ciò (da cui il commento piuttosto che la risposta).

lol "ci assicuriamo che il linguaggio di programmazione in questione non sia stato implementato nel campus in modo che gli studenti siano protetti dalla tentazione di testare i loro programmi". sembra che si riferisca a una lezione che lui stesso ha insegnato / concettualizzato? mi ricorda "insegnare CS senza computer"
vzn

4
@LoopSpace Non credo che Dijkstra sia noto per opinioni forti, ed era decisamente dalla parte della matematica di CS.
Raffaello

1
Hai controllato i corsi che lui stesso ha tenuto? Un riferimento non specifico come quello probabilmente indica la propria esperienza.
Raffaello

4
apparentemente non è satira. Dijkstra era un sostenitore / avvocato in generale delle idee specificamente citate qui. tra duplicati
vzn

Risposte:


18

Questo è praticamente ciò che l'educazione alla scienza informatica di TU Eindhoven, progettata e implementata da Dijkstra e colleghi, è stata come dal momento in cui è iniziata, intorno al 1980, fino a quando l'influenza di Dijkstra ha iniziato a diminuire, da qualche parte a metà degli anni '90.

Ho iniziato a studiare CS all'Università di Nimega nel 1982; un compagno di classe fece lo stesso alla TU Eindhoven. Ogni primavera, la nostra vecchia scuola secondaria avrebbe avuto un giorno in cui gli ex studenti avrebbero presentato il loro campo di studio prescelto agli studenti attuali, ed eravamo entrambi lì per introdurre CS, quindi abbiamo confrontato le nostre esperienze. Erano molto diversi. A Nimega, abbiamo acquisito esperienza effettiva con linguaggi di programmazione reali, eseguendo effettivamente i nostri programmi di assegnazione su un vero computer (una macchina virtuale VM / CMS, per essere precisi). Non così a Eindhoven. Il mio ex compagno di classe mi ha detto che non avevano il permesso di toccare un computer nel primo anno. La programmazione, a Eindhoven, significava imparare a costruire matematicamente algoritmi dimostrabilmente corretti da definizioni di problemi dichiarate matematicamente. Su carta.

Questo atteggiamento fu in qualche modo rilassato dopo che Dijkstra lasciò, ma anche nei primi anni '90, i corsi chiamati Programmeren (Programmazione), numerati da 1 a 9, e che abbracciavano diversi anni, consistevano ancora in quella stessa attività, e uno in particolare presentava un grosso ostacolo per Gli studenti. Non ho mai seguito nessuno di questi corsi, ma dubito che fosse implicato qualsiasi uso di computer.

Nel caso ti stia chiedendo: l'educazione informatica di oggi alla TU Eindhoven è molto diversa.


Ottima risposta, avevo quasi perso la speranza per questa domanda, ma sembra che tu l'abbia presa. Qualche idea su dove potrei trovare ulteriori informazioni sul corso TU Eindhoven 80s CS a cui ti riferisci?
Matthew Towers,

Non sono sicuro. Non sono nemmeno sicuro che la mia risposta sia la migliore - non ero lì al momento.
reinierpost,

1
Possiedo una copia del programma Programmeren 1 en 2 , datato agosto 1982, stampato dalla calligrafia di Dijkstra. La libreria TU Eindhoven ha una scansione online. Nel 1984 Dijkstra e Feijen lo trasformarono in un libro, pubblicato in inglese nel 1988: un metodo di programmazione .
reinierpost,

Hai un link alla versione online, @reinierpost?
adrianN,


2

Dai un'occhiata a "Un metodo di programmazione di Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa". Contiene il materiale evocato nelle citazioni. Una lettura deliziosa.


È questa letteratura che discute il contenuto di un corso come quello suggerito da Dijkstra? In tal caso, fornire un riepilogo / introduzione alla fonte fornita. In caso contrario, sei sicuro che questo risponda alla domanda?
Lucertola discreta

@Discretelizard: è il corso.
Yves Daoust,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.