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

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


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

Dati-mi voie sa dau inca un exemplu de lipsa de credinta in existenta noutatilor radicale si, deci, de lipsa de credinta in nevoie de a invata cum sa le abordam. Practica educationala cea mai des intalnita este aceea de a prezenta schimbarea intr-un mod gradual, aproape imperceptibil. Cate texte educationale nu sunt recomandate din cauza ca apeleaza la intuitia studentului! Ele incearca in mod permanent sa prezinte tot ce ar putea sa fie o noutate incitanta drept ceva cat de familiar posibil. In mod constient incearca sa lege noul de ceva ce ar trebui sa fie cunoscut. Incepe cu aritmetica. In loc sa invete ca „2 + 3 = 5”, hidosul operator „+” este camuflat cu grija in conjunctia „si”, iar apoi copiilor le sunt date exemple familiare, preferand obiectele vizibile de genul merelor si perelor celorlalte exemple, la fel de numarabile, precum electronii sau procentele. Aceeasi traditie nastrusnica se reflecta si la nivelul universitar, in diferitele cursuri introductive de analiza matematica pentru viitorul fizician, arhitect sau manager, fiecare ornat cu exemple din mediile respective. Dogma educationala pare sa fie aceea ca totul e ok atata vreme cat studentul nu observa ca invata ceva nou; si de cele mai multe ori, impresia studentului este intr-adevar corecta. Dar consider ca esecul practicii educationale de a pregati noua generatie pentru fenomenul noutatilor radicale va fi o problema serioasa. [Cand Regele Ferdinand a vizitat conservatoarea Universitate din Cervera, Rectorul l-a asigurat pe monarh cu mandrie ca „departe de noi, Sire, primejdioasa noutate a gandirii”. Problemele Spaniei in secolul care a urmat justifica caracterizarea problemei ca fiind „serioasa”.] Dar atat despre adoptarea paradigmei schimbarii graduale in educatie.

Conceptul noutatii radicale are o semnificatie actuala, pentru ca, in acest timp in care noi suntem nepregatiti sa le abordam, stiintele si tehnologia sunt experte in a ni le oferi. Exemple precedente din stiinta sunt teoria relativitatii si mecanica cuantica; exemple tehnologice mai tarzii ar fi bomba atomica si pilula. Timp de decade, primele au dat nastere unui torent de extensii religioase, filozofice sau pseudo-stiintifice. Si zilnic putem observa profunda inadecvare cu care cele din urma sunt abordate, fie de catre oamenii nostri de stat sau de liderii religiosi sau chiar de largul public. Si cam atata despre paguba produsa linistii noastre de catre noutatile radicale.

Pomenesc despre toate aceste lucruri pentru ca sustin ca calculatoarele reprezinta o noutate radicala, si ca numai identificandu-le ca atare putem sa filtram nonsensul, neintelegerile si mitologia din jurul lor. O inspectie mai amanuntita va releva faptul ca este mai mult de atat, si anume ca calculatoarele nu reprezinta o singura noutate radicala ci doua.

Prima noutate radicala este o consecinta directa a puterii efective a echipamentelor de calcul actuale. Cu totii stim cum sa abordam ceva complex si mare – „imparte si stapaneste”, adica afla partile intregului si studiaza fiecare parte in mod separat. Daca partea in continuare este prea mare, repeta procesul. Orasul este alcatuit din cartiere, care sunt structurate pe strazi, care contin cladiri, care sunt facute din ziduri si etaje, care sunt construite din caramizi, etc, pana cand in cele din urma ajungem la nivel de particule. Si, pentru intregul proces, avem specialisti in fiecare din nivelele de partitionare ale problemei, de la urbanisti, prin arhitect, catre fizicianul in mecanica solidelor si asa mai departe. Din cauza ca, intr-un fel, intregul este mai mult decat suma partilor, adancimea ierarhiei de partitionare este un fel de logaritm al raportului dintre „marimile” intregului si ultima, cea mai mica parte. Dar, de la un bit la cateva sute de megaocteti, de la o microsecunda la o ora de calcul, ne confruntam cu rapoarte naucitoare de 10^9 (10 la puterea a 9-a)! Programatorul este intr-o pozitie unica, meseria lui este singura in care un raport de asa o magnitudine, de neimaginat, trebuie sa fie acoperit de o singura tehnologie. Este confruntat cu ierarhii conceptuale mult mai adanci decat orice alta ierarhie intalnita in trecut. Comparata ca numar de nivele semantice, teoria matematica de nivel mediu este aproape plata. In fine, facand evidenta necesitatea ierarhiilor conceptuale de mare adancime, calculatoarele ne confrunta, si ne arunca in fata o noua provocare intelectuala fara precedent in istorie.

Din nou, trebuie sa subliniez aceasta noutate radicala pentru ca un credincios in schimbarea graduala si in imbunatatirile treptate nu va fi capabil sa o vada. Pentru el, un calculator este ceva gen masina de marcat, dar oarecum mai mare, mai rapida, mai flexibila. Dar analogia este incredibil de superficiala: este de cateva ordine de magnitudine mai rea decat comparatia – ca mijloace de transport – dintre un avion supersonic si un bebelus, raportul in acest caz fiind numai de 10^3.

A doua noutate radicala este aceea ca calculatoarele sunt primele dispozitive digitale de scara mare. Am avut si inainte cateva componente discrete: tocmai ce am pomenit casa de marcat, si as putea sa adaug masina de scris – cu o singura apasare cineva poate obtine literele Q sau W, dar, desi tastele sunt una langa alta, nu poate obtine un amestec din ele. Dar aceste mecanisme sunt mai degraba exceptia, vasta majoritate a lucrurilor in realitate pot fi vazute mai degraba ca dispozitive analogice, a caror comportament acopera o arie mai larga a unei functii continui dependente de parametri implicati: daca apasam varful creionului un pic mai tare, vom obtine o linie un pic mai lata, daca violonistul pune degetul putin langa, vioara scoate un sunet un pic diferit. La aceasta ar trebui sa adaug ca, la modul in care ne privim pe noi insine ca mecanisme, ne consideram in mod primar niste dispozitive analogice: daca fortam un pic mai mult ne asteptam sa facem un pic mai bine. Foarte des comportamentul nu este numai continuu, ci urmareste si o functie monotona: ca sa aflam daca un ciocan se potriveste la un numar de cuie de diferite marimi, il incercam cu cel mai mic si cu cel mai mare, si daca rezultatele sunt pozitive, atunci tragem concluzia ca ciocanul va functiona cu toate cuiele din celelalte marimi.

Este posibil, ba chiar tentant, sa consideram un program un mecanism abstract, un fel de dispozitiv. Asta insa ar fi ceva foarte primejdios: analogia este superficiala, pentru ca un program, ca mecanism, este complet diferit de toate dispozitivele analogice care ne sunt familiare. Ca orice informatie codificata digital, are o proprietate neplacuta, aceea ca orice perturbatie, indiferent de infima – de exemplu schimbarea unui singur bit – poate avea consecintele cele mai drastice (de dragul completitudinii voi adauga ca introducerea mecanismelor de corectie a erorii sau redundanta nu schimba schimba situatia in mod esential). In lumea digitala nu exista nici o masuratoare valida cu care schimbarile „mici” merg mana in mana cu efectele „mici”, si nu va exista niciodata.

Aceasta a doua noutate radicala impartaseste soarta celorlalte: este negata, pentru ca admiterea adevarului ar fi prea deranjanta. Nu imi dau seama cati bani sunt irositi din cauza acestui adevar in SUA, dar o estimare de 1 milion de dolari pe zi mi se pare o estimare modesta.

Dupa ce am descris – recunosc ca in termenii cei mai generali – natura noutatilor din domeniul calculatoarelor, voi aduce dovezi ca aceste noutati sunt, intr-adevar, radicale. O voi face explicand un numar de fenomene ciudate precum eforturile sustinute – dar, dupa cum stim, condamnate – de a ascunde sau nega lipsa incomoda de familiaritate.

Un numar de exemple de fenomene din aceasta categorie sunt stranse sub titlul de „Inginerie Software”. Asa cum economia este poreclita „mizerabila stiinta”, ingineria software ar trebui poreclita „disciplina condamnata”, condamnata pentru ca nici macar nu se poate apropia de scopul urmarit de vreme ce scopul este contradictoriu in sine. „Ingineria” in acest domeniu se prezinta ca o cauza demna, dar asta e numai suprafata: daca citesti cu atentie literatura si analizezi ce fac devotatii ei, vei descoperi ca ingineria software si-a preluat ca motto „cum sa programezi cand nu poti programa”.

Popularitatea titlului respectiv este suficient sa o faca suspecta. In cele ce sunt denumite „societati primitive”, superstitia ca stiind cuiva numele adevarat iti da puteri asupra aceluia este relativ comuna. Cu greu se poate spune ca suntem mai putin primitivi: de ce continuam de exemplu sa raspundem la telefon cu un „alo” inutil, in loc sa ne spunem numele?

Mai departe, in continuare nu reusim sa ne ridicam deasupra superstitiei primitive care afirma ca obtinem control asupra unui demon necunoscut si rautacios daca ii dam un nume familiar si inocent, precum „inginerie”. Numele este simbolic, asa cum un producator american de calculatoare a demonstrat acum cativa ani, cand a angajat peste noapte cateva sute de ingineri software, prin metoda simpla de a ridica pe toti programatorii la nivel de invidiat respectiv. Cam atat si despre titlul cu pricina.

Practica este inundata de iluzia repetata ca programele sunt dispozitive ca oricare altele, singura diferenta admisa fiind aceea ca crearea lor ar putea cere un soi special de muncitori, si anume programatorii. De aici este un pas extrem de mic acela de a a masura „productivitatea programatorilor” in termenii „numarului de linii de cod pe luna”. Aceasta este insa o unitate de masura extrem de costisitoare, pentru ca incurajeaza crearea de cod inutil, dar am de gand sa evit pana si critica dintr-un punct economic de vedere. Punctul meu de vedere este ca, daca dorim sa numaram liniile de cod, acestea ar trebui vazute nu ca „linii produse”, ci ca „linii cheltuite”: acesta fiind un caz in care intelepciunea conventionala este atat de gresita incat se poate spune ca numara in directia gresita a axei.

Dincolo de notiunea de productivitate, cea de calitate a controlului continua sa fie distorsionata de iluzia confortanta ca ceea ce merge cu alte dispozitive merge si cu programele la fel de bine. Sunt deja doua decade de cand cineva a facut observatia ca testarea programelor poate demonstra prezenta defectelor dar nu absenta lor. Dar chiar si dupa dupa citarea cu convingere a acestei observatii, inginerul software se va intoarce la ordinea de zi si-si va imbunatati metoda de testare, la fel ca alchimistul de alta data, care continua sa-si imbunatateasca purificarile criocosmice.

O neasteptata lipsa de intelegere este revelata mai departe de termenul „mentenanta de software”, rezultand, in mentalitatea multora, in credinta ca programele sau limbajele de programare sufera de degradare a calitatii. Masina ta are nevoie de mentenanta, nu? Este cunoscut exemplul unei companii de petrol care a sustinut ca programele in Pascal nu vor dura cat cele scrise in Fortran, pentru ca „Pascal nu a fost mentinut”.

Pe aceeasi linie trebuie sa atrag atentia asupra uimitoarei usurinte in a accepta sugesta ca chinurile prin care trec programatorii sunt cauzate de lipsa unor „scule de programare” adecvate (dand nastere si expresiei „bancului de lucru al programatorului”). Din nou, aceeasi analogie superficiala demna de Evul Mediu. Confruntari cu un insipide „scule” din tagma „animatiilor de algoritmi” nu mi-au inmuiat judecata; dimpotriva, mi-au confirmat suspiciunile ca ne confruntam in primul rand cu o alta dimensiune ale unei afaceri cu „ulei de sarpe”.

In final, vreau sa corectez impresia gresita ca inabilitatea de a face fata noutatilor radicale ar fi rezervata lumii industriale, asa ca voi oferi o explicatie a popularitatii – cel putin in America – a bransei Inteligentei Artificiale. Cineva s-ar astepta ca oamenii sa se simta amenintati de „creiere uriase sau masinarii care gandesc”. De fapt, calculatorul infiorator devine mult mai putin infiorator cand este folosit la simularea unui noncomputer familiar. Sunt sigur ca aceasta afirmatie va ramane controversiala pentru o buna bucata de vreme, pentru ca se doreste ca Inteligenta Artificiala ca imitatoare a creierului uman sa fie partea cea mai vizibila, cand de fapt explicatia mea ii rezerva un loc mult mai modest. (Efortul de a folosi masini pentru imitarea mintii umane mi s-a parut intotdeauna oarecum copilaresc; as folosi masinile pentru imitat ceva mai bun de atat).

Si cam atat ca dovada ca noutatile in bransa calculatoarelor sunt, intr-adevar, radicale.

(va urma)

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: