Alan Kay: cum aș preda Computer Science 101

„Unul dintre motivele de a merge la universitate este să depășești pregătirea profesională simplă și, în schimb, să te apuci de idei mai profunde.”

Alan Kay: cum aș preda Computer Science 101

Hai să reflectăm puțin la această întrebare. Cu câțiva ani în urmă, departamentele de Computer Science m-au invitat la o serie de prelegeri în diverse universități. Aproape întâmplător, am întrebat prima mea audiență, formată din studenți în anul final, masteranzi și profesori, cum defineau „Computer Science”. Toți au putut oferi doar o definiție inginerescă. Am purtat această întrebare în fiecare nou loc și am avut rezultate similare peste tot.

O altă întrebare a fost: „Cine este Douglas Engelbart?”. Câțiva oameni au spus: „nu a avut el ceva de-a face cu mouse-ul computerului?” (și m-a dezamăgit foarte mult, deoarece comunitatea mea științifică a depus mult efort pentru ca răspunsul la această întrebare să fie posibil după două-trei clicuri de mouse și să ne asigurăm că Engelbart chiar avea o legătură cu mouse-ul computerului).

Parțial, problema a constat în lipsa curiozității, parțial în îngustimea scopurilor personale, care nu erau legate de învățare, parțial în lipsa unei imagini clare despre ce înseamnă această știință și așa mai departe.

Lucrez cu jumătate de normă la departamentul de computere al Universității din California de câțiva ani (în esență sunt profesor, dar nu trebuie să particip la întâlnirile departamentului). Din când în când, țin cursuri, uneori pentru studenți de anul întâi. De-a lungul acestor ani, nivelul deja scăzut de curiozitate pentru Computer Science a scăzut semnificativ (dar în același timp, popularitatea a crescut, deoarece știința computațională este văzută ca o cale spre un loc de muncă bine plătit, dacă știi să programezi și ai obținut un certificat de la cele mai bune 10 școli). Prin urmare, nici un student nu s-a plâns că prima limbă la Universitatea din California este C++!

Cred că ne-am confruntat cu o situație în care ambele noțiuni de „Computer” și „Știință” au fost destrămate de concepte masive slabe, pentru a crea un nou termen — un fel de etichetă pe blugi — care sună bine, dar este suficient de gol. Un termen conex, care a fost de asemenea destrămat, este „inginerie software”, care, din nou, nu a folosit cele mai geniale idei din „programare” și „inginerie”, ci doar le-a combinat (acest lucru a fost făcut intenționat în anii '60, când a fost inventat termenul).

Unul dintre motivele pentru a te înscrie efectiv la universitate este de a depăși pregătirea profesională simplă și a te agăța de idei mai profunde. Mi se pare destul de rezonabil, pentru o introducere în specialitate, să încercăm — dacă este posibil, cu ajutorul exemplelor — să facem ca învățăceii să se implice în probleme reale și să înceapă să înțeleagă ce este cu adevărat interesant, important și central în acest domeniu.

Elevii din clasa întâi se bucură când li se arată cum o riglă deasupra alteia devine un aritmetru, cu ajutorul căruia pot depăși colegii din clasa a cincea atunci când adaugă o fracție. Apoi, vor fi fericiți să participe la dezvoltarea de aritmometre îmbunătățite. Au intrat în contact cu un computer adevărat — un instrument fizic și mental care ne ajută să gândim. Au învățat o modalitate cu adevărat eficientă de a reprezenta numerele — mai eficientă decât ceea ce se predă în școli!

Au reușit să conecteze ideea lor sănătoasă de „adunare” ca „acumulare” cu ceva similar cu noi proprietăți puternice. L-au programat astfel încât să fie capabil să rezolve probleme diverse.

Ei l-au extins, de asemenea. Și așa mai departe. Acesta nu este un computer digital. Și nu este un computer cu programabilitate memorabilă. Dar acesta este esența computerului. Exact așa cum mecanismul Antikythera — este, în esență, esența computerului și a calculului.

Alan Kay: cum aș preda Computer Science 101

Mecanismul Antikythera

Cât de departe putem merge și cât de mult putem realiza înainte de a pierde controlul și ne pierdem în abstractizări? Am fost întotdeauna interesat de caracterizarea Alan Perlis — primul laureat al premiului Turing, care a inventat termenul „Computer Science” — care în anii ’60 a spus: „Computer Science este știința proceselor”. Despre toate procesele.

Pentru compania Quora, să nu încercăm să ducem acest lucru mai departe sau să-l transformăm într-o dogmă religioasă. Să folosim cu bucurie ideea. Alan Perlis, pentru a gândi mai bine despre domeniul nostru. Și în special despre cum să îl predăm. Acum trebuie să ne uităm la semnificația modernă a „științei”, iar Perlis era destul de convins că nu ar trebui să fie diluată cu semnificații vechi (de exemplu, „acumularea de cunoștințe”) și utilizări (precum „știința biblioteconomică” sau chiar „științele sociale”). Prin „știință”, el încerca să înțeleagă fenomenul, creând modele/hărți care încearcă să arate, să „urmărească” și să prezică fenomenele.

Alan Kay: cum aș preda Computer Science 101

Am dat câteva interviuri despre cum cele mai bune hărți și modele pot adesea fi potrivite pentru o cămașă, așa cum se potrivesc ecuațiile lui Maxwell și altele. Analogía este că există o „știință a podurilor”, deși majoritatea podurilor sunt făcute de om. Dar de îndată ce un pod este construit, el reflectă fenomenele, iar oamenii de știință pot să le studieze, din poduri se pot crea modele de multe tipuri și să se formeze „teorii ale podurilor” cuprinzătoare și utile. Cei mai încântători este că apoi se pot proiecta și construi noi poduri (am menționat deja că probabil nu există nimic mai plăcut decât colaborarea între cercetători și ingineri pentru a rezolva probleme mari și importante!)

Alan Kay: cum aș preda Computer Science 101

Herbert Simon — laureat al premiului Turing și al premiului Nobel — a numit toate acestea „științele artificiale” (și a scris o carte minunată cu același titlu).

Alan Kay: cum aș preda Computer Science 101

Permiteți-mi să dau un exemplu. În anii ’50, companiile și universitățile construiau computere cu programabilitate și începeau să le programeze — și a fost un moment special în 1956 când a apărut Fortran — care nu a fost primul limbaj de programare de nivel înalt, dar, poate, primul creat atât de bine încât să fie folosit în numeroase domenii diferite, inclusiv multe care anterior erau realizate doar în limbaj de asamblare.

Toate acestea au generat „fenomene”.

Alan Kay: cum aș preda Computer Science 101

John McCarthy

Istoria Lisp-ului este mai complicată, dar John McCarthy a fost interesat de încercarea de a găsi o „teorie matematică a calculului” și a fost hotărât să se asigure că totul funcționează perfect. Funcția eval, care interpretează Lisp, poate fi ușor plasată pe o tricou! Comparativ cu „sistemul de programare”, este nesemnificativ. Ceea ce este mai important, această „teorie a calculului” avea o concept mai puternic decât Fortran! A fost cea mai bună idee de legătură!

Miniaturnitatea Lisp-ului permite întregii idei de programare să fie cuprinsă prin câteva apăsări pe un nivel mai profund și să fie gândită la un nivel care pare absolut imposibil, atunci când te uiți la marile artefacte (aceasta este una dintre motivele pentru care oamenii de știință preferă matematica compactă și puternică). Matematica folosită aici este o nouă matematică, deoarece admite concepte precum „înainte” și „după”, iar aceasta duce la „logica variabilei”, care permite menținerea atât a dependenței funcționale, cât și a cursului logic de gândire, permițând în același timp poziția și desfășurarea timpului. (Aceasta încă nu este înțeleasă în vremurile noastre în lumea dură a programării situaționale).

Lisp, acționând ca un limbaj de programare puternic și meta-limbaj, capabil să-și prezinte propria teorie, este un exemplu veritabil de știință a computerelor. Dacă îl înveți și alte lucruri similare, vei putea gândi mai profund și vei avea o mai mare responsabilitate asupra propriului destin decât dacă ai învăța doar să programezi în Fortran sau echivalentele sale moderne (... astfel vei reuși să te apropii de programatori!).

Vei învăța mult mai multe despre tipurile speciale de design necesare în calcul (de exemplu, nu este apreciat când calculele necesită adesea să depășească mediul computațional: una dintre caracteristicile speciale ale calculului programelor stocate este că nu este doar material pentru program, ci material pentru un computer complet nou).

O altă gafă în alegerea definiției lui Perl este că, în general, calculul este mult mai legat de crearea sistemelor de diferite tipuri, decât de algoritmi, „structuri de date” sau chiar programare în sine. De exemplu, un calculator este un sistem, calculul este un sistem, rețeaua locală și internetul sunt sisteme, iar majoritatea programelor ar trebui să reprezinte sisteme mai bune decât cele care sunt (vechiul stil de programare din anii '50 a persistat atât de mult încât pare că programarea ar trebui să fie astfel — nu există nimic mai departe de adevăr).

Internetul este un bun exemplu — spre deosebire de majoritatea programelor din zilele noastre, internetul nu trebuie oprit pentru a repara sau îmbunătăți ceva — este mai degrabă asemănător cu un sistem biologic — în funcție de intenția noastră, decât ceea ce majoritatea oamenilor consideră a fi un sistem de calcul. Și este mult mai scalabil și fiabil decât aproape toate sistemele software existente astăzi. Merită cu adevărat să ne gândim la asta înainte de a învăța novicii în programare concepte atât de puțin puternice!

Așadar, ceea ce trebuie să facem în primul curs de Computer Science este să luăm în considerare ce pot face exact studenții la început, și apoi să încercăm să rămânem în limitele „încărcării lor cognitive” pentru a-i ajuta să ajungă la ceea ce este cu adevărat important. Este foarte important să „rămânem autentici” și să găsim căi care să fie intelectual corecte și care să se potrivească celor care abia încep să învețe. (Vă rugăm să nu învățați idei proaste doar pentru că par puțin mai simple — multe idei proaste sunt de fapt mai simple!).

Studenții ar trebui să înceapă prin a crea ceva care să aibă numeroase caracteristici importante, pe care le-am discutat aici. Ar trebui să fie un sistem compus din mai multe părți care interacționează dinamic și așa mai departe. O modalitate bună de a decide ce limbaj de programare să folosești este pur și simplu să creezi ceva care are mii de părți interconectate! Dacă nu este cazul, ar trebui să găsești unul de acest tip. Cel mai rău lucru pe care îl poți face este să pui studenții pe o cale de prea slabă îndemânare, care ar restricționa considerabil ideile grandioase. Asta pur și simplu le omoară entuziasmul - iar noi vrem să îi dezvoltăm, nu să îi distrugem.

Despre școala GoTo

Alan Kay: cum aș preda Computer Science 101

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster