Programatorii Adevarati

Friday, 02 July, Year 2 d.Tr. | Author: Mircea Popescu

Daca tot discutam subtilitati de teoria programarii masinilor numerice sub acoperirea unor intamplari absolut banale - acoperire care spre incantarea mea n-a impiedicat cititorii sa urmareasca firul discutiei - hai sa spunem doua vorbe despre Programatorii Adevarati. Si anume, repetand vorbele lui utastro!nather din 1983, pe care uite ca usenet-ul le-a pastrat pana-n zilele noastre. Deci :

    Un articol recent devotat partii "macho" a programarii facea fara ezitare afirmatia trufasa ca "Programatorii Adevarati nu scriu in FORTRAN".

    Poate ca astazi scriu,
    in aceasta era decadenta
    a berii light si calculatoarelor de mana si programelor "user-friendly"
    dar in Zilele de Demult
    pe cand cuvantul "software" suna ciudat
    si Computerele Adevarate erau facute din role de memorie si tuburi de vid
    Programatorii Adevarati scriau cod masina
    Nu FORTRAN. Nu RATFOR. Nici macar asamblare.
    Cod masina.
    Brut, nedecorat, inscrutabil : numere hexadecimale.
    Direct.

    De teama ca o intreaga generatie de programatori
    va creste in ignoranta fata de acest trecut glorios
    simt ca-i de datoria mea sa descriu
    asa cum pot, peste prapastia dintre generatii,
    cum scrie cod un Programator Adevarat.
    Il voi numi Mel,
    pentru ca asa-l chema.

    L-am intalnit prima oara pe Mel cand m-am angajat la Royal McBee Computer Corp.,
    o subsidiara de-acum defuncta a producatorului de masini de batut.
    Firma producea LGP-30,
    un mic, ieftin (dupa standardele de-atunci)
    computer cu memorie pe rola
    Integratele costau prea mult
    si oricum n-aveau nici un viitor
    (De-asta n-ati auzit nici de companie
    nici de computer)

    Fusesem angajat sa scriu un compilator de FORTRAN
    pentru aceasta minune a tehnicii, si Mel imi era ghidul in splendorile ei
    Mel nu era de acord cu compilatoarele.

    "Daca un program nu-si poate rescrie codul",
    m-a intrebat, "la ce foloseste ?"

    Mel scrisese,
    in hex
    cel mai popular program pe care-l avea compania
    rula pe LGP-30
    si juca blackjack cu eventualii clienti
    la trade-show-uri
    Efectul era intotdeauna dramatic
    Standul LGP-30 era intotdeauna plin la fiecare show
    si vanzatorii IBM stateau imprejur
    povestind intre ei.
    Daca asta chiar vindea computere
    nu s-a discutat niciodata.

    Sarcina lui Mel era sa rescrie
    programul de blackjack pentru RPC-4000
    (A porta ? Ce-i aia ?)
    Acest computer nou avea o schema de adresare
    unu-plus-unu,
    in care fiecare instructiune masina
    pe langa codul operatiei
    si adresa operandului
    avea inca o adresa care indica unde, pe rola in rotatie,
    se gaseste noua instructiune.

    In vorbele moderne,
    fiecare instructiune era urmata de un GO TO!
    Puneti asta in pipa Pascal-ului si fumati-o.

    Mel iubea RPC-4000-ul
    pentru ca putea sa-si optimizeze codul :
    asta inseamna, sa localizeze instructiunile pe rola
    asa incat pe masura ce una isi termina treaba,
    urmatoarea tocmai ce ajungea la capul de citire
    si putea fi executata imediat.
    Exista un program care sa faca treaba asta,
    un "assembler cu optimizare"
    dar Mel refuza sa-l foloseasca.

    "Nu stii niciodata unde va pune chestiile"
    a explicat, "asa incat ai fi silit sa folosesti constante separate".

    A trecut mult timp pan-am priceput ce vroia sa zica.
    Deoarece Mel cunostea valoarea numerica
    a fiecarei instructiuni
    si isi aloca singur adresele
    fiecare instructiune pe care-o scria putea de asemenea sa fie
    o constanta numerica
    Putea sa aghete o adunare anterioara, de exemplu
    si sa inmulteasca cu ea
    daca avea valoarea numerica corecta.
    Codul scris de el nu era usor de modificat pentru altii.

    Am comparat programele optimizate de mana lui Mel
    cu aceleasi prelucrate de assembler-ul cu optimizare,
    si programele lui Mel intotdeauna rulau mai repede.
    Asta pentru ca design-ul de sus in jos nu fusese inventat inca
    oricum Mel nu l-ar fi folosit.
    Isi scria rutinele cele mai adanci intai,
    asa incat sa le poata plasa cat mai convenabil
    pe adresele optime de pe rola.
    Optimizatorul nu era suficient de inteligent sa faca acelasi lucru.

    Mel nu scria niciodata bucle de intarziere,
    chiar si cand greoiul Flexowriter
    necesita o pauza intre caracterele trimise pentru a functiona corect.
    El pur si simplu localiza instructiunile pe rola
    asa incat fiecare tocmai trecuse de capul de citire
    cand ii venea randul ;
    Rola trebuia atunci sa execute o revolutie completa
    ca sa-si gaseasca instructiunea urmatoare.
    A inventat un termen de neuitat pentru acest procedeu.
    Desi "optim" e un superlativ absolut,
    ca si "unic", devenise practica lingvistica comuna
    sa fie tratat drept relativ :
    "nu chiar optim" sau "mai putin optim"
    sau "nu prea optim".
    Mel numea localizarile cu intarziere maxima
    "cel mai pessimum".

    Dupa ce si-a terminat programul de blackjack
    si l-a pornit
    ("Pana si initializatorul e optimizat"
    a spus cu mandrie)
    a primit o Cerere de Modificare din partea departamentului de vanzari.
    Programul folosea un elegant (si optimizat)
    generator de numere aleatoare
    pentru a amesteca "cartile" si-a distribui mainile
    iar unii dintre vanzatori erau de parere ca-i prea cinstit,
    deoarece uneori clientii pierdeau.
    Vroiau ca Mel sa modifice programul
    asa fel incat la apasarea unui buton pe consola
    sa poata modifica sansele si sa permita clientilor sa castige.

    Mel s-a opus.
    I se parea ca asa ceva e pur si simplu necinstit,
    ceea ce era adevarat,
    si ca aducea atingere integritatii lui personale, ca programator,
    ceea ce era adevarat,
    asa incat a refuzat sa faca modificarea.
    Seful departamentului de vanzari a vorbit cu Mel,
    asa cum a vorbit si Seful Mare, si, la rugamintea lui,
    cativa alti Colegi Programatori.
    In cele din urma Mel a cedat si-a modificat programul,
    dar l-a nimerit pe dos,
    asa incat, cand butonul era apasat,
    programul trisa, castigand intotdeauna.
    Mel a fost incantat de rezultat,
    declarand ca subconstientul lui era in mod necontrolabil etic
    si a refuzat cu hotarare sa repare problema.

    Dupa ce Mel a parasit firma plecand spre pajisti mai inver$ite
    Seful cel Mare m-a rugat sa ma uit la program,
    si sa vad daca pot gasi testul sa-l inversez.
    Oarecum ezitant, am fost de acord sa incerc.
    A urmari codul lui Mel era o adevarata aventura.

    De multe ori mi-a parut ca programarea calculatoarelor este o arta,
    a carei adevarata frumusete poate fi apreciata
    doar de un altul priceput in aceeasi arcana ;
    exista nestemate stralucitoare si lovituri de maestru
    ascunse de ochii si admiratia oamenilor, uneori pentru totdeauna,
    de chiar natura procesului.
    Poti afla multe despre un individ
    doar citindu-i codul,
    chiar si in hex.
    Mel era, cred, un geniu necunoscut.

    Probabil cel mai mare soc l-am suferit
    cand am gasit o bucla inocenta care n-avea nici un test.
    Nici un test. Nici unul.
    Cel mai elementar bun simt indica c-ar fi trebuit sa ramana o bucla inchisa,
    in care programul si-ar petrece, in cercuri, eternitatea, pentru totdeauna.
    Executia curgea fara probleme prin ea totusi,
    si iesea in siguranta de partea cealalta.
    Mi-a luat doua saptamani sa ma prind.

    RPC-4000-ul avea o facilitate cu adevarat moderna,
    numita un registru index.
    El permitea programatorului sa scrie o bucla
    care folosea o instructiune indexata de-acolo;
    de fiecare data,
    numarul din registrul index
    era adaugat adresei instructiunii,
    asa incat referinta
    trecea la urmatoarea data intr-o serie.
    Tot ce-avea de facut era sa incrementeze registrul
    de fiecare data.
    Mel nu-l folosea niciodata.

    In loc, incarca instructiunile intr-un registru masina
    adauga unu la adresa
    si-o salva la loc
    Executa apoi instructiunea modificata
    direct din registru.
    Bucla era scrisa asa fel incat acest timp aditional de executie
    era luat in considerare -
    chiar pe cand instructiunea termina, urmatoarea era fix sub capul de citire
    gata de executie.
    Dar bucla n-avea nici un test in ea.

    Am remarcat indiciul crucial cand am observat
    ca bitul indexului registru
    bitul care se afla intre adresa si codul masina in cuvantul-instructiune
    era aprins -
    si totusi, Mel nu folosea niciodata indexul registru,
    lasandu-l mereu 0.
    Cand s-a aprins lumina aproape ca m-a orbit.

    Pozitionase datele pe care lucra
    aproape de varful memoriei -
    cele mai mari locatii pe care instructiunile le puteau adresa
    asa incat, dupa ce ultima data era gestionata,
    incrementarea adresei instructiunii
    ducea la overflow.
    Carry-bit-ul adauga unu la
    instructiunea masina, transformand-o in urmatoarea din set :
    un jump.
    Asa cum v-ati astepta, urmatoarea instructiune era la adresa 0
    si programul isi continuna fericit poteca.

    N-am tinut legatura cu Mel,
    si nu stiu daca a cedat sau nu deluviului de
    schimbari care-au curs peste tehnicile de programare
    din acele zile demult trecute si pana astazi.
    Imi place sa cred ca n-a cedat.
    In tot cazul,
    am fost suficient de impresionat incat am renuntat la a cauta
    testul in discutie
    spunandu-i Sefului Mare ca nu l-am putut gasi.
    N-a parut surprins.

    Cand am parasit firma,
    programul de blackjack inca trisa
    daca-i apasai butonul de pe consola
    si cred ca asa si trebuia sa fie.
    Eu unul nu m-am simtit pregatit
    sa hacui codul unui Programator Adevarat.

Category: 3 ani experienta
Comments feed : RSS 2.0. Leave your own comment below, or send a trackback.

21 Responses

  1. Nu suna la fel de bine in romana.

  2. Mircea Popescu`s avatar
    2
    Mircea Popescu 
    Friday, 2 July 2010

    Pai si cine-i de vina ?

    :p

  3. eminescu! cel mai mare haxor de limba romana. :D

  4. Mircea Popescu`s avatar
    4
    Mircea Popescu 
    Saturday, 3 July 2010

    Lol

  5. Un programator bun si un basist bun...cele mai greu de gasit lucruri :D

  6. Mircea Popescu`s avatar
    6
    Mircea Popescu 
    Saturday, 3 July 2010

    Si-un barbat educabil.

  7. Mai sus e vorba de versuri sau de folosirea necorespunzatoare a functiei copy/paste ?

  8. La origine a fost scris in paragrafe uzuale, insa pe masura ce a calatorit pe internete cineva i-a dat forma versificata. Traducerea respecta versiunea populara.

  9. by the way, "put that in your pipe and smoke it" ar veni "baga la capatana si las-o sa dea un clocot". Nu-mi prea dau seama cum s-ar putea translata sensul in jurul lui Pascal .. "Gandeste-te acum la Pascal si las-o (lasa ideea) sa dea un clocot"?

  10. Mircea Popescu`s avatar
    10
    Mircea Popescu 
    Saturday, 3 July 2010

    @dAImon "So basically usenet hacked the story of Mel. We think this is somehow appropriate."

    E mai dur de-atat, put X in your pipe and smoke it implica ca tragi cocaina la pipa de sticla, adica metaforic ca traiesti intr-un univers paralel, sau mai bine zis ortogonal realitatii. Am preferat sa traduc pedestru pentru ca orice vorbitor de engleza sa inteleaga de la ce referinta originala am pornit, avand in vedere ca limba romana, incantata cum este sa ingaduie oamenilor sa traiasca fara greturi in universuri ortogonale realitatii (vezi cazul Marian) nu detine o expresie de-aceeasi tarie.

  11. Să înțelegem că programatorii care își neglijează latura umană/afectivă sunt contrafăcuți? :D

  12. Mircea Popescu`s avatar
    12
    Mircea Popescu 
    Monday, 5 July 2010

    Asa sa intelegem!

  13. Imi aduc si eu aminte ca primul meu contact cu computerul a fost cu unul pe cartele cu gauri, si cum se tineau cartelele in sertare, si cum un var de al meu care lucra in asa ceva imi citea cartoanele uitanduse la ele, eu nu intelegeam nicmi, nu vedeam decat niste gauri puse haotic pe niste hartii, ei bine eram si un pusti pe atunci.
    Primul meu computer a fosit un HP2000 si am facut cateva programe atunci in basic si nu imi mergea si tot acel amic mi-a facut el un moc program care nu facea mult, facea cateva calcule si muta o minge pe ecran in cod masina, mi sa parut ca e un geniu nebun care nu inteleg cumpoate tine minte asa ceva.
    Si anul trecut am avut o experienta cu cineva care mi-a programat casa de marcat de la firma direct in cod masina, zicea ca dureaza mai putin ca a ainvatat toate comenzile in cof masina si pe calea celalata prin care o conecta la PC puteau aparea de multe ori erori, eu nu inteleg cum aparea erori mai putin, eu unul care gresesc mereu cate un caracter

  14. Mircea Popescu`s avatar
    14
    Mircea Popescu 
    Wednesday, 14 July 2010

    Pai ai fi bun de chirurg :D

  15. Cristian`s avatar
    15
    Cristian 
    Saturday, 13 August 2011

    Fain, dar la capitolul mentenanță lasă de dorit :-)

  16. Mircea Popescu`s avatar
    16
    Mircea Popescu 
    Saturday, 13 August 2011

    Mentenanta ? Ce e aia ?

    Un program bine facut e bine facut. Pentru totdeauna. Restul nu merita rulate.

  17. lol mirshea comunistul

  18. Acum e cu Agile, chestii de-astea. In mediul asta, cam cel mai important lucru e sa poti modifica aplicatia cat mai rapid si cat mai sigur. In ultimii 10 ani la asta s-a lucrat la capitolul software engineering.

  1. Programatorii Adevarati pe Trilema - Un blog de Mircea Popescu-...

    Tradusa de catre je, mai demult. Despre calculatoare....

  2. [...] Programatorii Adevarati [...]

  3. [...] have ever hoped to set eyes upon the inside of a program was through sufficiently impressing the actual men in the world ? If he could never do any own-bedroom self-stroking, if none of you ever could, would [...]

Add your cents! »
    If this is your first comment, it will wait to be approved. This usually takes a few hours. Subsequent comments are not delayed.