Prima pagină > baliverne > Despre cruzimea procesului de predare a cursurilor de calculatoare. (4)

Despre cruzimea procesului de predare a cursurilor de calculatoare. (4)


(in original la website-ul lui Dijkstra – link)

Am avut cristalul meu de magician de suficient de mult timp. Prezicerile lui sunt invariabil deprimante si de obicei corecte, dar deja m-am obisnuit cu asta si n-o sa ma tina din sugerat cate lucruri, chiar daca este numai un exercitiu in inutilitate al carui singur efect va fi acela de a va face sa va simtiti vinovati.

Am putea, de exemplu, prin a incepe sa curatam limbajul in domeniu, e cazul sa ne oprim din denumit un „bug” „bug”, si sa-l numim „eroare”. Este mult mai onest, pentru ca pune vina acolo unde este de fapt, pe programatorul care a creat eroarea. Metafora „gandacului” care s-a strecurat pe nesimtite cand programatorul se uita inalta parte este intelectual neonesta, pentru ca deghizeaza faptul ca eroarea este de fapt creata de programator. Lucrul de admirat in aceasta simpla schimbare de vocabular este ca are un impact profund: in time ce, inainte, un program cu un „bug” era „aproape corect”, dupa, un program cu o eroare este pur si simplu „gresit”.

Urmatoarea sugestie lingvistica este mai riguroasa. Este sugestia de a lupta cu sindromul „daca asta vrea sa vorbeasca cu celalalt”: trebuie sa ne oprim din antropomorfizat parti de programe sau echipamente, si studentii nu ar trebui lasati sa faca asta. Imbunatatirea aceasta lingvistica este mult mai dificil de implementat, si un departament ar putea sa impuna amenzi pentru violarea regulii – sa zicem 25 centi pentru studentii din programul primar, 50 pentru masteranzi si doctoranzi si 5 dolari pentru cadrele didactice: la finele primului semestru cu noul regim, probabil vor fi suficienti bani pentru doua burse.

Motivul acestei sugestii este ca metafora antropomorfica – pentru care trebuie sa-i multumim lui John von Neumann – este un handicap enorm pentru comunitatea calculatoarelor care a adoptat-o. Am intalnit deja programe care doreau, stiau, asteptau, credeau, etc., si de fiecare data asta a dat nastere unor confuzii evitabile. Analogia de sub aceasta personificare este atat de superficiala incat nu numai pacaleste, dar si paralizeaza.

Pacaleste in sensul ca sugereaza ca ne putem descurca in mod adecvat cu universul discret nefamiliar pus in termeni ai familiarului continuu, adica noi insine. Si este paralizanta in sensul in care, din cauza ca persoane exista si actioneaza in timp, adoptarea metaforei blocheaza in mod eficace parasirea semanticilor operationale si astfel forteaza programatorii sa-si gandeasca programele in termenii comportamentelor computationale, care ruleaza insa pe un alt model computational. Asta e un lucru rau, pentru ca rationamentul in termen de operatii este un urias efort mental inutil.

Dati-mi voie sa explic natura acestei incredibile inutilitati, si dati-mi voie sa incerc sa va conving ca afirmatia nu este o exagerare. Pentru o scurta vreme voi trece la explicatii tehnice, dar nu e cazul sa va speriati: este genul de matematica ce poate fi abordata cu mainile in buzunare. Ceea ce vreau sa afirm este ca daca vrem sa demonstram ceva despre toate elementele dintr-un set mare, este incredibil de ineficient sa ne ocupam de fiecare din elemente in mod special: argumentatia eficace nu se va referi la fiecare din elementele individuale deloc, ci va fi exprimata in termenii definitiei setului.

Sa consideram o figura in plan din 8×8 patrate, pe care o numim Q, si din care extragem, din doua colturi diametral opuse, doua patrate. Aria lui Q devine 62, care este egala cu aria a 31 de piese de domino. Teorema care trebuie demonstrata este ca figura Q nu poate fi acoperita de 31 de piese de domino.

Alta cale de a enunta teorema este ca daca pornesti de la o bucata patrata de hartie si incepeti sa o acoperiti plasand piese de domino una langa alta, nici un plasament de 31 de dominouri nu poate crea figura Q.

O posibila cale de a demonstra teorema este prin generarea tuturor plasamentelor de piese de domino si verificarea faptului ca plasamentele nu creaza figura Q: un efort imens.

Demonstratia simpla urmeaza. Colorati patratele ca pe o tabla de sah. Fiecare domino, acoperind doua patrate adiacente, va acoperi un patrat alb si unul negru, si, deci, fiecare plasament de piese de domino va acoperi la fel de multe patrate albe cate negre. Figura Q, insa, va avea un numar de patrate albe diferit cu doua de numarul de patrate negre, de vreme ce colturile opuse inlaturate erau de aceeasi culoare – in final, nici un plasament posibil de dominouri nu va acoperi figura Q.

Nu numai ca simpla demonstratie de mai sus este cu multe ordine de magnitudine mai scurta decat cautarea exhaustiva prin toate posibilele plasamente, dar este in mod esential mai puternica, pentru ca permite generalizarea figurii Q de la un patrat de 8 pe 8 la orice dreptunghi cu laturile de lungimi pare. Numarul acestor dreptunghiuri fiind practic infinit, metoda cautarii exhaustive se dovedeste inadecvata pentru demonstratia teoremei generalizate.

Si cu asta inchei exemplul. L-am prezentat pentru ca ilustreaza pe scurt puterea matematicii aplicate; nu mai e nevoie sa adaug, refuzul de a exploata aceatsa matematica echivaleaza cu o sinucidere intelectuala si tehnologica. Morala povestii devine: ignora elementele individuale ale multimii si lucreaza pe definitie.

Inapoi la programare. Afirmatia cum ca un program dat indeplineste o specificatie se reduce la o afirmatie despre toate calculele care s-ar putea intampla in programul respectiv. Si de vreme ce aceste set de calcule este definit de programul dat, morala recenta ar putea sa spuna: ignora toate calculele posibile ale programului si lucraza cu programul. Trebuie sa invatam sa lucram cu texte de program (deocamdata) in timp ce ignoram faptul ca ele permit interpretarea codului executabil.

Un alt mod de a spune cele de mai sus este urmatorul: un limbaj de programare, cu sintaxa formala si cu regulile de demonstrare care ii definesc semantica, este un sistem formal pentru care executia programului este numai un model. Este bine stiut faptul ca sistemele formale trebuiesc abordate ca atare, si nu puse in termenii unui model specific. Si, din nou, corolarul este ca ar trebui sa ne gandim la program fara nici un fel de mentiune la posibilele lui „comportamente”.

Si asta incheie mica excursie tehnica in motivul pentru care rationamentul operational despre programare este „un imens si inutil efort”, si, de ce, din cauza asta, antropomorfizarea ar trebui interzisa.

Nu toata lumea intelege cele de mai sus suficient de bine. De curand am asistat la demonstratia a ceva care pretindea a fi un software educational pentru un curs de programare introductiv. Cu „vizualizarile” de pe ecran era un exemplu evident de infantilizare a educatiei, iar autorul ar fi trebuit sa fie judecat pentru desconsiderarea studentilor, dar asta era o ofensa minora pe langa modul in care vizualizarie erau folosite: erau folosite pentru demonstrarea a tot felul de prelucrari evoluand sub controlul programului studentului. Sistemul demonstra cu exactitate ceea ce studentul trebuia sa invete sa ignore, punea accentul pe exact ceea ce studentul trebuia sa uite. De vreme ce ruperea de obiceiurile rele, mai degraba decat invatatul altor obiceiuri, este partea cea mai dificila a procesului de invatare, trebuie sa ne asteptam de la sistemul acela la pagube mentale permanente pentru studentii care au fost expus la el.

Nu e nevoie sa afirm, acel sistem ascundea faptul ca, de unul singur, un program nu este mai mult decat jumatate dintr-o conjunctura. Cealalta parte a conjuncturii este specificatia functionala a programului pe care el trebuie sa o satisfaca. Munca programatorului este de a prezenta conjuncturi complete ca teoreme demonstrate.

Inainte sa ne despartim, as vrea sa va invit sa considerati urmatoarea cale de a face dreptate noutatii radicale a calcului intr-un curs de programare introductiv.

Pe de o parte, predam ceva ce pare calcul predicativ, dar o facem intr-un mod diferit de filozofi. Ca sa antrenam novicii in manipularea formulelor neinterpretate, predam calculul mai degraba ca pe algebra booleana, familiarizand studentul cu proprietatile algebrice ale conectorilor logici. Ca sa retezam mai departe legaturile cu intuitia, vom redenumi valorile de adevar si fals intr-un domeniu boolean cu alb si negru.

Pe partea cealalata, predam un limbaj de programare imperativ, simplu, clar, cu salt si asignari multiple ca instructiuni de baza, cu structuri de blocuri pentru variabile locale, cu punct si virgula pentru demarcarea instructiunilor, cu operator de constructie bine definit, cu o bucla usor de utilizat, si, daca se doreste, cu un apel de procedura. La asta adaugam un minim de tipuri de date, sa zicem booleene, intregi, caractere si siruri de caractere. Faptul estential este ca, pentru orice introducem, semanticile corespunzatoare sunt definite de regulile de demonstratie introduse cu limbajul.

Chiar de la inceput, si apoi in intreg cursul, subliniem faptul ca problema programatorului nu este numai sa scrie un program, dar ca partea esentiala consta in demonstratia formala a faptului ca programul indeplineste specificatia functionala definita in mod formal. In timp ce dezvolta programe si demonstratia lor in acelasi timp, studentul are ocazia ampla de a-si perfectiona agilitatea in a manipula calculul predicativ. In cele din urma, pentru a sublinia mesajul ca cursul deprogramare introductiv este in mod primar un curs in matematici formare, vom avea grija ca limbajul de programare respectiv nu este de fapt implementat, pentru a ii tine pe studenti departe de dorinta de a-si testa programele. Si cu asta inchei schita propunerii pentru cursul introductiv de programare pentru studentii din anii incepatori.

Este o propunere serioasa, si cat se poate de bine gandita. Singurul dezavantaj este ca e prea radicala pentru multi, care, nefiind in stare sa o accepte, sunt fortati sa inventeze un motiv imediat, indiferent cat de invalid, pentru a o contrazice. Voi da cateva exemple de astfel de motive imediate.

Nu e nevoie sa-mi luati propunerea in serios pentru ca „e atat de ridicola incat e evident ca sunt complet rupt de realitate”. Dar motivul asta nu tine, pentru ca cunosc realitatea prea bine: problemle realitatii sunt exact aceia cu care ramaneti cand refuzati sa aplicati solutiile lor efective. Asa ca sa incercam din nou.

Nu e nevoie sa-mi luati propunerea in serios pentru ca e „este incredibil de nerealist sa predati asa ceva studentilor din anii primari”. Dar n-ar fi acest motiv doar o cale usoara de a iesi din impas? Postulati ca ar fi mult prea dificil. Dar nici acest motiv nu tine, pentru ca postulatul a fost deja dovedit gresit: inca de la inceputul anilor 80 astfel de programe au fost predate deja cu succes studentilor din anii primari. (pentru ca, din experienta, spunand acest lucru o singura data nu e suficient, propozita precedenta ar trebui repetata macar de doua ori). Dar sa incercam din nou.

Admitand cu reluctantaca poate ar putea fi predat unor studenti suficient de docili, refuzati totusi propunerea pe motivul ca asa un curs ar devia prea mult de la ceea ce studentii de 18 ani sunt obisnuiti si asteapta sa fie invatati, si ca deci expunandu-i la asa un curs ar fi un act de iresponsabilitate: i-ar frustra numai pe studenti. Nu mai e nevoie sa o spun, nici motivul asta nu tine. Este adevarat ca studentii neobisnuiti in a manipula formule neinterpretate realizeaza destul de repede ca sunt confruntati cu ceva complet nou. Dar, din fericire, regulile manipularilor in acest caz sunt putine si simple, in asa fel incat repede face placuta descoperire ca incepe sa devina expert intr-o unealta, care, in intreaga ei simplitate, ii da o putere care depaseste cu mult orice imaginat in prealabil.

Predarea utilizarii eficace a metodelor formale in fata unor studenti luati prin surprindere este una din bucuriile mele personale, pentru ca da rezultate extrem de benefice. In cateva luni, ei isi gasesc drumul in lumea noua cu un grad inalt de confidenta care e complet nou pentru ei; in cateva luni de zile conceptul lor de cultura intelectuala capata o dimensiune radical noua. Dupa gustul si parerea mea, aceasta e adevarata educatie. Universitatilor n-ar trebui sa le fie frica sa predea concepte radical noi; dimpotriva, asta le este chemarea, de a aborda cu bratele deschise oportunitatea respectiva. Dorinta lor de a face asta ar trebui sa fie principala arma impotriva dictaturii, fie ea proletara, a stabilimentului stiintific sau a elitei economice.

Austin, 2 Dec 1988
prof. dr. Edsger W. Dijkstra
Department of Computer Sciences
The University of Texas at Austin
Austin, TX 78712-1188
USA

Anunțuri
Categorii:baliverne
  1. Niciun comentariu până acum.
  1. No trackbacks yet.

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: