w sprawie „O okrucieństwie faktycznego nauczania informatyki”


33

Dijkstra w swoim eseju O okrucieństwie prawdziwego nauczania informatyki przedstawia następującą propozycję wprowadzenia kursu programowania:

Z jednej strony uczymy czegoś, co wygląda na rachunek predykatu, ale robimy to zupełnie inaczej niż filozofowie. Aby wyszkolić początkującego programistę w zakresie manipulowania nieinterpretowanymi formułami, uczymy go bardziej jako algebry boolowskiej, zapoznając studenta ze wszystkimi właściwościami algebraicznymi połączeń logicznych. Aby dodatkowo odciąć linki do intuicji, zmieniamy nazwy wartości {true, false} domeny boolean na {black, white}.

Z drugiej strony uczymy prostego, czystego, imperatywnego języka programowania, z pominięciem i wielokrotnym przypisaniem jako podstawowymi instrukcjami, ze strukturą blokową dla zmiennych lokalnych, średnikiem jako operatorem składu instrukcji, ładną alternatywną konstrukcją, ładnym powtórzenie i, jeśli to pożądane, wywołanie procedury. Do tego dodajemy minimum typów danych, np. Logiczne, liczby całkowite, znaki i łańcuchy. Istotne jest to, że niezależnie od tego, co wprowadzimy, odpowiednią semantykę określają reguły dowodu, które się z nią wiążą.

Od samego początku i przez cały czas podkreślamy, że zadaniem programisty nie jest tylko napisanie programu, ale że jego głównym zadaniem jest przedstawienie formalnego dowodu, że program, który proponuje, spełnia równie formalną specyfikację funkcjonalną. Projektując dowody i programy ręka w rękę, uczeń ma wiele okazji do doskonalenia swojej sprawności manipulacyjnej za pomocą rachunku predykatu. Wreszcie, aby przekazać wiadomość, że ten wstępny kurs programowania jest przede wszystkim kursem matematyki formalnej, dopilnujemy, aby dany język programowania nie został zaimplementowany w kampusie, aby uczniowie byli chronieni przed pokusą przetestowania swoich programów .

Podkreśla, że ​​jest to poważna propozycja i przedstawia różne możliwe zastrzeżenia, w tym że jego pomysł jest „całkowicie nierealny” i „zdecydowanie zbyt trudny”.

Ale ten latawiec też nie poleci, ponieważ postulat okazał się błędny: od wczesnych lat 80-tych setki studentów pierwszego roku z powodzeniem organizowało taki wstępny kurs programowania. [Ponieważ, z mojego doświadczenia, powiedzenie tego raz nie wystarczy, poprzednie zdanie należy powtórzyć przynajmniej dwa razy.]

Do którego kursu odnosi się Dijkstra i czy jest dostępna inna literatura, która go omawia?

Esej ukazał się w 1988 roku, kiedy Dijkstra studiował na University of Texas w Austin, co jest prawdopodobnie wskazówką - są gospodarzem archiwum Dijkstra, ale jest ono ogromne i szczególnie interesują mnie informacje od innych o tym kursie.

Nie chcę dyskutować, czy pomysł Dijkstry jest tutaj dobry czy realistyczny. Zastanawiałem się nad opublikowaniem tego na cstheory.se lub cs.se, ale zdecydowałem się na to tutaj, ponieważ a) społeczność nauczycieli może mieć większą szansę na kogoś, kto może łatwo odpowiedzieć, i b) sam Dijkstra podkreśla, że ​​jego kurs jest „przede wszystkim matematyka formalna ”. Jeśli się nie zgadzasz, możesz zgłosić flagę do migracji.


2
Jestem prawie pewien, że Dijkstra krytykuje szczególny styl nauczania matematyki (taki, który buduje wszystko, w stylu Bourbaki, z aksjomatów) i że jest to zamierzone jako satyra . Nie mam jednak dowodów na poparcie tego (skąd komentarz zamiast odpowiedzi).

lol „dopilnujemy, aby dany język programowania nie został zaimplementowany w kampusie, aby uczniowie byli chronieni przed pokusą przetestowania swoich programów”. wygląda na to, że odnosi się do klasy, której sam nauczał / konceptualizował? Przypomina mi „nauczania CS bez komputerów”
vzn

4
@LoopSpace Nie sądzę, więc Dijkstra jest znany z silnych opinii i zdecydowanie był po stronie matematyki w CS.
Raphael

1
Czy sprawdziłeś kursy, które sam dał? Takie nieokreślone odniesienie prawdopodobnie wskazuje na jego własne doświadczenie.
Raphael

4
najwyraźniej nie jest to satyra. Dijkstra był ogólnie rzecznikiem / rzecznikiem ogólnie cytowanych tutaj pomysłów. btw duplicate
vzn

Odpowiedzi:


18

Właśnie tak wyglądała edukacja informatyczna TU Eindhoven, zaprojektowana i wdrożona przez Dijkstrę i jej współpracowników, od momentu jej powstania, około 1980 roku, do momentu, gdy wpływy Dijkstry zaczęły słabnąć, gdzieś w połowie lat dziewięćdziesiątych.

Zacząłem studiować CS na Uniwersytecie Nijmegen w 1982 roku; kolega z klasy zrobił to samo w TU Eindhoven. Każdej wiosny nasza stara szkoła średnia miała dzień, w którym dawni uczniowie przedstawiali wybrany kierunek studiów obecnym uczniom, i oboje byliśmy tam, aby wprowadzić CS, więc porównaliśmy nasze doświadczenia. Byli bardzo różni. W Nijmegen zdobyliśmy rzeczywiste doświadczenie z rzeczywistymi językami programowania, faktycznie uruchamiając nasze programy przypisań na rzeczywistym komputerze (konkretnie maszynie wirtualnej VM / CMS). Nie w Eindhoven. Mój były kolega z klasy powiedział mi, że nie wolno im dotykać komputera w pierwszym roku. Programowanie w Eindhoven oznaczało naukę matematycznego konstruowania poprawnych algorytmów na podstawie matematycznych definicji problemów. Na papierze.

Po odejściu Dijkstry postawa ta była nieco rozluźniona, ale nawet na początku lat dziewięćdziesiątych kursy o nazwie Programmeren (Programowanie), liczące od 1 do 9 i trwające kilka lat, nadal składały się z tej samej działalności, a jedna z nich stanowiła poważną przeszkodę dla uczniowie. Nigdy nie brałem udziału w żadnym z tych kursów, ale wątpię, by w grę wchodziło użycie komputera.

Jeśli się zastanawiasz: dzisiejsza edukacja informatyczna w TU Eindhoven jest zupełnie inna.


Świetna odpowiedź, prawie straciłam nadzieję na to pytanie, ale wygląda na to, że masz. Masz pomysł, gdzie mogę znaleźć więcej informacji na temat kursu TU Eindhoven 80s CS, o którym mówisz?
Matthew Towers

Niepewny. Nie jestem też pewien, czy moja odpowiedź jest najlepsza - wtedy mnie tam nie było.
reinierpost

1
Mam kopię sylabusa Programmeren 1 en 2 z sierpnia 1982 r., Przeniesionego z pisma Dijkstry. Biblioteka TU Eindhoven ma skan online. W 1984 roku Dijkstra i Feijen opracowali tę książkę, wydaną w języku angielskim w 1988 roku: Metoda programowania .
reinierpost

Czy masz link do wersji online @reinierpost?
adrianN


2

Spójrz na „Metodę programowania Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa”. Zawiera materiał przywołany w cytatach. Cudowna lektura.


Czy ta literatura omawia treść kursu takiego jak ten sugerowany przez Dijkstrę? Jeśli tak, proszę przedstawić streszczenie / wprowadzenie do podanego źródła. Jeśli nie, czy jesteś pewien, że to odpowiada na pytanie?
Dyskretna jaszczurka

@Discretelizard: to jest kurs.
Yves Daoust,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.