Ziua în care fiecare va programa

Zilele trecute, Barack Obama a devenit primul președinte al Statelor Unite care să programeze. Un lucru mărunt, aparent fără importanță, care totuși vrea să transmită un semnal tuturor oamenilor: în curând, toată lumea va învăța să programeze, într-o formă sau alta.

Anul trecut, la inițiativa celor de la code.org, Obama îi invita pe tinerii americani să învețe să programeze. În clipul de un minut, președintele american sugera că dacă oamenii își doresc ca America să rămână puternică, tinerii trebuie să stăpânească tehnologiile și uneltele viitorului.

Rareori am auzit ceva mai greșit, iar ziua aceea în care fiecare va scrie cod este o zi de coșmar pentru toată lumea.

Programarea e un lucru foarte fain, dacă ajunge să-ți placă. Dacă nu îți place, programarea e un lucru sufocant, care te limitează puternic, pentru că granița dintre insucces și succes poate fi de netrecut. De-asta mulți programatori aleg să se facă manageri; e o provocare imensă să stai în fiecare zi față în față cu o bucată de cod, să te întrebi de ce nu merge cum te-ai aștepta. E o provocare imensă să îți dai seama în fiecare zi că ceea ce ai scris este demn de aruncat la gunoi, și de rescris de altul mai deștept, la fel cum e o provocare imensă să te abții de la a administra o pereche de palme tânărului ambițios care îți ține teorii despre cum să scrii cod corect. Engineering is tough.

Programarea, cu alte cuvinte, nu e pentru cei slabi de inimă. E o provocare intelectuală zilnică mult peste nivelul intelectual pe care îl cere, de exemplu, lectura. Programarea e un lucru dificil.

Ăsta e motivul pentru care nivelul de programare acceptabil pentru un utilizator de produs e să ai un câmp unde un om să selecteze ora la care să pornească alarma ceasului. Pentru că dacă Apple ar fi vândut automate programabile, ar fi avut câteva mii de utilizatori, programatori și ei.

Nu, nu toată lumea trebuie să știe programare, la fel cum pentru a utiliza curentul electric nu toată lumea trebuie să fie electrician, iar pentru a folosi calculatorul nu ai nevoie de diplomă de inginer electronist. Programarea nu e o cunoștință necesară, și până la programare mai avem niște pași de parcurs.

În primul rând, alfabetizarea. Oamenii care nu mai știu să citească, sau o fac fără să ajungă nimic la ei. Apoi limba engleză și, pe același palier, utilizarea autonomă a calculatorului. Apoi construcția de sisteme de calcul, și mă refer la a folosi blocuri de construcție în stilul Lego, precum promite Project Ara. Abia atunci “programarea” va deveni o prioritate în alfabetizare, pentru că abia atunci va avea sens ca oricine să pună cap la cap automatizări.

Până atunci, ne relaxăm. Obama mai ține un discurs frumos citit de pe prompter, iar noi ne bucurăm că oamenii învață programare. Chiar, mai mult, ne gândim cu speranță că în viitor și colegii noștri de branșă, programatori, vor învăța un pic de programare. După cinci-zece ani de carieră, ar fi timpul.

Comments

Ziua în care fiecare va programa — 31 Comments

  1. Toate campaniile de marketing spun că „dacă faci ce zicem noi va curge lapte peste miere”. Și binențeles că nu va curge. Campania asta nu e o excepție. Aici ai dreptate.

    Dar campania hour-of-code poate fi privită și într-o lumină mai pozitivă.

    Ai dreptate că nu trebuie să fii electrician ca să utilizezi curentul electric. Însă, e ăsta un motiv pentru a *nu* include în programa școlară noțiuni precum curentul electric? Mai general, aproape nimic din ce se învață la școală nu folosești în viața de zi cu zi. E ăsta un motiv pentru a nu mai face nimic în școală?

    Hai s-o luăm așa. Urmează situație ipotetică, idealizată: Sunt un milion de lucruri care s-ar putea preda la școală. Fiecare dintre lucrurile astea îi este util cuiva în viața de zi cu zi. Dar, fiecare persoană folosește numai zece din alea un milion de lucruri în viața de zi cu zi. La școală nu e timp decât de o mie de lucruri, nu pentru toate un milion. E, ce părere crezi tu că vor avea toți oamenii, din propria experiență? Pentru fiecare, din alea 10 lucruri care îi sunt lui utile, cam pe 0 le-a învățat la școală; în plus, alea 1000 de lucruri pe care le-a învățat, sunt toate inutile. Așa că toată lumea ajunge să creadă că tot ce se predă la școală este inutil, deși tot ce se predă la școală este util. Totuși, unele lucruri pot fi mai utile decât altele. În situația de aici, fiecare lucru este util în medie unui om din 100,000. Deci, un lucru care este util pentru 1% din populație este complet ieșit din comun — este *foarte* util.

    Cum se aplică aici observațiile din modelul idealizat de mai sus?

    Campania hour-of-code nu trebuie văzută ca având scopul să-i transforme pe toți în programatori. (Ăsta e laptele care nu va curge niciodată.) Campania hour-of-code e mai degrabă o încercare de a-i convinge pe învățători să le explice elevilor ce este un algoritm: o secvență de instrucțiuni pe care le urmezi pas cu pas *exact* așa cum sunt scrise. Cât de util le va fi asta copiilor? Cam la fel de util cât le va fi să știe că există ceva care se cheamă curent electric. Sau poate un pic mai util.

    Cât despre alfabetizare și utilizarea calculatorului voi spune atât: În facultate am ales un curs de birotică sau așa ceva (alternativa fiind ceva limba chineză nord-vestică). Am aflat apoi că „birotică” însemna „microsoft office”. Îmi petreceam majoritatea laboratorului închipuindu-mi cum îl plesnesc pe prof peste față cu tastatura, monitorul, CDurile cu Office, etc. Și regretam că n-am ales chineza. Atât de groaznic era. Așa că probabil nu pot fi obiectiv pe subiectul ăsta.

    Voi spune doar atât: E mult mai plăcut să înveți să folosești calculatorul făcând jocurile cu Angry Birds de la code.org, decât utilizând Office. Cu alte cuvinte, ca să înveți să folosești calculatorul, trebuie să folosești calculatorul pentru a face ceva anume. Și acel ceva anume e mult mai distractiv dacă e scrisul de programe gen lightbot sau robozzle, decât scrisul de scrisori în Word.

  2. Ca fost programator (ocazional si “actual programator” de jocuri), dar cu alt job si total alte aspiratii (publicitate, scriitura) as mai adauga ceva: majoritatea programatorilor actuali fac “grunt work”, adica scriu cod repetitiv, din instructiuni standard. Viitorul ala in care toti inteleg algoritmica si “programeaza” nu e un viitor in care lumea e bine platita si deschisa, ci un viitor in care programatorii de baza (cei fara viziune reala) vor fi echivalentul muncitorilor calificati (in multe tari, deja sunt – norocul romanilor e tocmai “sistemul invechit” care-i invata mai mult decat un simplu limbaj de programare).

  3. @rgrig: îți garantez că orele alea de Office sunt mult mai utile decât ce face code.org. Dar asta nu contează prea mult, ideea că oamenii au nevoie de programare e falsă. Au nevoie să folosească produse inteligente care să le ușureze viața. Nu au nevoie de programare. Programarea e un produs intermediar fără valoare dacă nu există produsul final.

    Oamenii, din contră, trebuie să știe cât mai puțin despre programare. Asta e ce l-a făcut pe Jobs bogat, și asta e direcția naturală. Facem tractoare pentru că nu vrem să dăm cu sapa, facem drujba pentru că nu vrem să învățăm tehnici de tăiere cu toporul, și tot așa.

    Programarea ar trebui să fie câmpul de lucru al unei comunități restrânse.

  4. Hm, Obama e un idiot. Nu e prima oara cind maninca kko. De exemplu maarele lui discurs din Cairo cu salamalekum si cum a facut si el rugaciuni de 5 ori pe zi si ce minunat e Islam-ul. Toata lumea era convinsa ca gata! s-a terminat, o sa fie pace si covrigi.
    Asa si aici. Daca spune el nu inseamna nimic, e doar barba.

  5. Dorine, tu nu ai înţeles ideea. Nu spune nimeni că toată lumea trebuie să ştie să programeze, ci că toată lumea să ştie ce se poate face. E ca şi când ai învăţa să schimbi bateria de la chiuvetă, fără să fii specialist în instalaţii. Faptul că ştii să schimbi un robinet nu echivalează cu experienţa de a trage ţevi prin casă.
    Este vorba de experienţa minimă din şcoli. Dacă în şcoală înveţi despre electricitate, nu înseamnă că deja ai experienţa unui electrician. Dar măcar înveţi să faci diferenţa între putere si voltaj.

  6. @Blue: nu trebuie să fii electrician ca să montezi o lustră şi nici programator profesionist ca să scrii câteva linii de cod. Iar la americani şi în ultima vreme, la cât îi imităm, şi la români DIYul a început să devină ceva obişnuit, pe măsură ce sculele şi piesele devin accesibile.

    Dar moneda are două feţe: dacă programarea / electrica / mecanica / instalaţiile sunt la îndemâna oricui, controlul social e mult mai greu de pus în practică de către Big Brother.

  7. @Dorin. Cât despre ultimul tău comentariu, îmi pare rău, dar eşti într-o mare greşeală ! Steve Jobs nu s-a îmbogătit pentru că nu era necesar ca lumea să ştie programare, ci pentru design-ul produsului în sine vinde produsul. Iar tractoarele şi drujbele nu au apărut pentru că nu vrem să dăm cu sapa sau cu toporul. Ci pentru că vrem să creştem productivitatea, odată ce cunoaştem acestee tehnici de bază. Dacă nu ştii să dai cu sapa, nici nu are rost să te sui într-un tractor, pentru că nu ştii exact ce trebuie să facă cu pământul, rişti să distrugi şi cultura, nu numai buruienile. Nu e automat, ca să ştie să facă totul din butoane. Ca să nu spun că trebuie să ai carnet de conducere pentru vehiculul respectiv, ca să ştii cum se gestionează puterea acestuia.Tot trebuie să ai cunoştiinţe minimale despre tehnică şi uneltele de bază !

  8. @Blue: zero cunoștințe despre sapă sunt necesare tractoristului. Zici că n-am înțeles, dar îmi demonstrezi că am zis foarte bine ce am zis.

  9. Ai dat la viaţa ta cu sapa, ca să vii cu replica asta ?
    De fapt, nu ştiu de ce îmi pierd timpul cu tine … Tu le ştii pe toate.

  10. Obama face doar un exercitiu de imagine, o incercare de a stimula interesul pentru calculatoare si programare.
    la ora actuala in SUA e o penurie de programatori, fac eforturi mari sa duca din alte parti, in special din Asia.
    Romania ce face sa suplineasca deficitul enorm de IT-isti?

  11. @Mircea: Mai uşor cu deficitul pe scări ! Şi aşa sunt mulţi neaveniţi în domeniu, creşterea numărului duce doar la scăderea calitătii produselor şi a salariului mediu în domeniu. Iar cu impozitul zero pentru IT-işti nu e de ajuns ?

    • @Blue: sunt multe alte motive pentru care se face rabat la calitate, am mai zis-o si cu alte ocazii. daca ramanem putini ca acum nu rezolvam presiunea de a livra rapid cantitate.
      scutirea de impozit o avem de multa vreme si nu ajuta situatiei actuale. doar ne tine inca in limite
      e atractivitatii.

  12. @Dorin: Sunt de acord că programarea va rămâne o activitate a unui grup restrâns. Sunt de acord că tractoarele vor înlocui sapele. Și sunt de acord că ambele tendințe sunt bune.

    Dar nici una și nici alta n-are nicio treabă cu dacă e bine sau nu să afle copiii în școală ce e ăla un algoritm. La fel cum faptul că echipamentele electrice nu mai au firele pe afară (și ăsta e un lucru bun) n-are nicio treabă cu dacă e bine sau nu să le spunem copiilor ce e ăla curent electric.

    Într-o școală vocațională, ce se predă trebuie într-adevăr să fie ales în funcție de cât de util va fi în viitorul apropriat. Dar nu toate școlile sunt vocaționale.

  13. Și nu mă enerva cu orele alea de Office. Îți garantez eu că au fost o pierdere de timp. Că eu le-am făcut, nu tu.

    Încă două lucruri:

    1. Dacă ai un copil prin preajmă, arată-i code.org. Uită-te la el o oră. Dup-aia vino și scrie pe blog ce-ai văzut. Eu unul mă simt foarte bine când văd cât de bucuros fac un copil doar arătându-i site-ul ăla. Chiar și simplul fapt că e bucuros pentru câteva minute, pentru mine e un motiv bun să nu bat câmpii de ce idee proastă e să pui copiii pe code.org.

    2. Dacă nu vrei să îi înveți pe copii programare, poate vrei să-i înveți ceea ce e în programă de mai mult de un secol — algebră și geometrie — folosind calculatoare. Pentru asta vezi http://www.bootstrapworld.org/

    • @rgrig
      0) Ai fi uimit să afli cât de inutil și degeaba află copilul în școală ce e ăla algoritm. Nici pe profesorii de info nu îi ajută prea tare 😀
      1) Notat, o să o fac.
      2) Interesant 😀

    • poate n-am inteles eu pe ce va tot contraziceti, dar daca e vorba de studii si programare, tin sa va contrazic: nu-ti trebuie studii de informatica pentru a ajunge un bun programator. am destui cunoscuti, fosti sau actuali colegi care intaresc aceasta regula. unii nici n-au facut o facultate, dintre ei nici macar n-au facut info la liceu, altii au terminat economia, auto, silvicultura, mecanica sau medicina.
      nu sunt multi, dar sunt suficienti. poate un sfert?
      scoala nu inlocuieste pasiunea si munca asiduua. mi-o spunea un profesor chiar ieri.
      fara dedicatie si munca sustinuta, scoala o faci degeaba.

    • @Mircea: practic ne învârtim în jurul lui: “Nu toată lumea trebuie să știe să programeze, e cunoștință inutilă pentru populația generală”.

  14. E o diferență intre ce se preda in școală si ceea ce trebuie sa știi pentru o anume profesie. Chiar daca am făcut o grămadă de chimie in școală generala, asta nu înseamă ca am vreo șansă sa ajung chimist.
    Ce anume din programare e necesar a se ști pentru cultura generală, e alta poveste.

    Pe de alta parte, nu am nimic împotriva ideii de programare ca si hobby – intr-o grămadă de alte domenii exista de mult timp persoane care le practica ca si hobby for personal fun, si nu e nici o problema ca niciodată nu se vor intersecta cu profesionistii din acel domeniu – electronica, muzica, matematica, radioamatori, mecanică auto etc..

    Ne place sa nu, programarea nu e o profesie reglementata ca medicina sau arhitectura – oricine o poate practica, dar cine e cu adevărat profesionist, nu isi face griji pentru un freelancer care face un website de 2 bani, așa cum un inginer auto la VW nu își face griji ca Gica meșterește la motorul lui in spatele blocului. 🙂

  15. asta am priceput, de acord. diviziunea muncii.
    insa m-as pregati pentru ziua in care, probabil, va fi cea mai raspandita meserie.

    • Eu mă îndoiesc, sincer, că va fi cea mai răspândită meserie. Nu are absolut niciun sens. Cred cu fermitate că meseria generică de agricultor e cea care va domina numeric.

    • da, asta e scenariul 2. 🙂 dar pentru asta trebuie sa se intample ceva…
      sincer, prefer varianta ta.

  16. Ui cata agitatia, mesaju omului e simplu, “ba generatie hepimil, nu va mai asteptati sa va dea cineva totu mura-n gura, puneti mana si invatati sa le faceti si singuri", in principiu eu vad mesaju omului ca un semnal de alarma, doar pentru ca pustimea din ziua de azi intra in categoria instant gratification si nu e responsabila pentru nimic.

    Si de aici pana la toata lumea trebuie sa butonache ca sa traim fericiti pana al adanci batraneti e o gramada de drum, nu am vazut v-un grafic sau v-o statistica dar ma gandesc ca v-un advisor d-ala a zis “ba sefu, tineretu asta cu o bala-n coltu gurii nu mai vrea sa faca nimic, asteapta ca lucrurile sa fie facute pentru ei, nu vrei sa zici si tu ceva la tv, pe internet sau pe-o carte postala?"

    Pe de alta parte mesaju e complet inutil, aia care n-au vrut sa invete nimic acu` 20-30 de ani n-au invatat nimic si, culmea, si acum e la fel, diferenta ar fi ca aia care sunt ca lemnele au gura mai mare si prostia/ignoranta lor e MULT mai accesibila/vizibila, oamenii vor avea varfurile care vor face si vor impinge lumea inainte si pulimea care se va incolona, asa a fost, asa va ramane.

  17. Lucrez în domeniul IT de 9 ani (în Iași); am început ca programator, am avansat ca team leader și acum sunt business analyst. Am o experiență largă pe tehnologii Microsoft dar nu numai (Web+Desktop). Codul produs de firma la care lucrez susține un business de 1 miliard de USD (în State este clientul). Am făcut liceul de Info și facultate de Info din Iași.
    Scriu astea de mai sus pentru a te evidenția faptul că s-ar putea să știu ce vorbesc :).
    Buun, și acuma să trec la subiect.
    Dorin, crezi că Obama nu are dreptate pentru că tu consideri că a programa înseamnă a scrie for-uri, if-uri, metode, clase și a folosi diverse framework-uri. Programarea înseamnă a determina computerul să facă ceea ce vrei tu iar mijloacele prin care faci asta nu înseamnă neapărat Visual Studio, IntelliJ IDEA, SharpDevelop, respectiv .Net, Java, Cobol sau altele.
    Atât timp cât știi să ”îi zici” calculatorului să folosească nu știu ce preset de sunet în Winamp ar trebui să știi să programezi. Aici probabil că ai să mă contrazici dar revin la ideea de mai sus că programarea nu înseamnă un IDE.
    Dacă privim în retrospectivă, cei care programau în ASM au să spună că cei care programau în MFC n-au nici o treabă cu programarea. Cei care programau în MFC au să zică de cei care programează în C# sau Java că n-au nici o treabă cu programarea. Și tot așa.
    Modurile în care se va programa vor evolua exponențial iar ce acum 10 ani părea un SF și îl făceau câțiva oameni peste 10 ani va fi banal de făcut și învățat de oricine.
    Deja tool-urile vizuale de programare au apărut și e necesar doar să creezi și să înlânțuiești niște blocuri predefinite. Pe viitor vor fi și mai uzuale.
    Q.E.D.

  18. “Deja tool-urile vizuale de programare au apărut și e necesar doar să creezi și să înlânțuiești niște blocuri predefinite. Pe viitor vor fi și mai uzuale”

    Felix – din pacate ceea ce descri mai sus (RAD) a fost “la moda” si acum 18 ani si chiar mai demult, dar din pacate nu a avut succesul scontat – daca acum 15 ani programam cu mare avant in Delphi si VB.NET (ambele cica RAD), nu mi-a luat mult timp sa-mi dau seama de limitari.. La ora actuala tendinta e in mare parte in sens invers – pana si Microsoft si-a dat seama ca directia asta nu mai merita investit – WinForms, WebForms etc au fost trecute pe linia moarta de ceva ani..

  19. Felix: Limbajul de programare Logo există de prin 1967. RAD se face de suficientă vreme. Iar “an hour of code” este exact ceea ce spune acolo: “an hour of code”.

    Aș modera opinia conform căreia ceva va evolua ‘exponențial’. O creștere exponențială este ultimul lucru pe care ni-l dorim.

    Revin asupra ideii de bază: Nu ai nevoie să fii un electrician sau electronist ca să folosești un calculator sau un telefon mobil. Gândește-te de ce “an hour of electrical theory” este o chestie inutilă, și chiar periculoasă.

  20. Cel mai fain ar fi dacă am fi toți în același oraș și am putea să discutăm pe larg la o ceașcă de vorbă sau o halbă de limbuție.

    Revenind la discuție, știi că sunt deja site-uri unde îți poți crea aplicația ta mobile doar din clickuri pentru toate platformele? touchdevelop.com te lasă să îți faci aplicația ta aproape simplu și aproape rapid? Asta tot programare se numește și, cum ziceam mai sus, nu mai necesită să ai cunoștințe de programare ci doar să ai o logică în ceea ce faci. Într-adevăr, vor exista în continuare programatori de meserie care vor face alea 20% din regula 80-20 dar atât timp cât majoritatea aplicațiilor sunt de genul CRUD fără mare overengineering atunci, da, toată lumea trebuie să știe să programeze.

    În ultimii 400 și ceva de ani toate creșterile tehnologice au fost exponențiale (nu logaritmice sau liniare cel puțin).

    Hai să îți dau alt exemplu: nu trebuie să fii constructor de meserie pentru a-ți face o căsuță în copac sau să îți ridici un cort. Analogii se pot face și de o parte și de alte deci nu e bun de continuat pe direcția asta.

    Și windows mobile exista înainte de IOS/Android deci exemplele cu ”nu a funcționat în trecut așa că n-o să meargă în viitor” nu le pot lua în considerare.

    Eu cred că s-a creat o imagine idealistică a programatorului și asta e rău pentru domeniu. Prefer inflația de programatori (chiar dacă 80-20 la calitate) decât deflația care tot timpul e mai periculoasă.

    Ș-am încălecat pe-o șa și v-am spus părerea mea.

  21. Un bun amic de-al meu este unul dintre principalii autori ai TouchDevelop. Motivația lui a fost că avea chef să programeze când era pe drum și se plictisea (de exemplu în avion), laptopul era cam greu de cărat, iar interfața mobilului cam neprietenoasă. Așadar, vroia să facă telefonul mai prietenos pentru programatori, nu să-i facă programatori pe cei care nu erau. (Motivul pentru care l-a făcut inițial pentru Windows Phone este că întâmplător lucra pentru Microsoft Research.)

    Partea bună pentru Hour-of-Code este că le arată multor oameni ce înseamnă să programezi. De ce e bine? Pentru că mulți nu ajung programatori fiindcă nici nu le trece prin cap că ar putea să le placă. La fel cum mulți ajung programatori fiindcă vor să câștige mulți bani — adică din motive greșite. Este mult mai bine să expui cât mai mulți copii la programare timpuriu ca să aibă șansa să aleagă, *nu* ca să le bagi pe gât ceva ce nu vor.

    Și TouchDevelop are același avantaj. Unii ne-programatori îl vor încerca (fiindcă e ușor de încercat) și vor descoperi că le place. Multora nu le va place, și asta e foarte bine.

    Încă o dată: Avem mulți programatori proști pentru că în loc să ajungă programatori cei cărora le-ar plăcea, ajung programatori cei care întâmplător cresc cu calculator în dormitor. Dacă le arăți multor copii într-o oră cam ce e aia programare, scopul nu e să-i faci pe toți programatori. Scopul e să descoperi cărora le place, dintre cei care în mod normal n-ar avea ocazia să facă așa ceva.