Excitare pe Web 3.0

February 3rd, 2009 Alex

Este ceva foarte în neregulă cu oamenii zilelor noastre. Ca o aromă ce o simţi în aer şi de care te fereşti iniţial, după care te obişnuieşti cu gustul ce-ţi lasă pe cerul gurii şi-ncepe să nu-ţi mai pese.

Aproape că-mi dă o lacrimă în colţul ochiului când contemplez la istoria fenomenului Web 2.0. Open Source, Google, bloguri, emoţii, Blogger, Wikipedia, înţelepciunea turmei, MySpace, iubire, Flickr, Gmail, blogosferă, Digg, Paul Graham … ca o melodie ostilă urechilor care parcă nu se mai termina. „Ce se-ntâmplă, ce se-ntâmplă?” strigau oamenii speriaţi pe stradă, îngroziţi de fenomenul necunoscut şi aparent duşmănos propriei lor existenţe.

Şi la fel cum pe vremuri oamenii îşi explicau fenomene ciudate în metafore pe care le înţelegeau (egiptenii îl aveau pe Ra, patronul soarelui), la răscruce de drumuri într-un moment extrem de oportun (in the nick of time), O’Reilly şi cu oamenii lui pun ştampila „Web 2.0”, şi deodată fenomenul părea a fi sub control. Şi n-am nici o îndoială ca peste 1000 de ani de acum vor fi descoperite prin peşteri desene cu biţi ce dansează pe fire.

Avansurile tehnologice au avut întotdeauna darul de a sparge tipare socio-politice, un exemplu memorabil fiind desfiinţarea sclaviei din ţările occidentale, şi poţi avea încredere că schimbarea este şi constantă şi inevitabilă.

Internetul reprezintă o unealtă fantastică, un apogeu al imaginaţiei noastre, şi încă de la început a fost destinat comunicării many-to-many (Clay Shirky are câte ceva de spus în privinţa asta), fiind un mijloc perfect de colaborare pentru oameni cu fetişuri similare ce sunt respinşi de societate pe plan local. Pe Internet putem participa la acte de creaţie pornite din nimic, putem cânta deşi n-avem talent … putem transcende.

Dar credeţi-mă pe cuvânt, chiar nu e nevoie de incataţii magice, de observarea „trendurilor”, de web semantic şi de alte aberaţii pentru a crea o aplicaţie sau un serviciu util. E nevoie doar de puţină sensibilitate la dorinţele altor oameni şi de puţină încredere în propriile idei.

Şi aşa cum se mai zice, cel mai bine prezici viitorul inventându-l ;)
~

Posted in rant | 1 Comment »

Social bitching

January 8th, 2009 Alex

Se zice că o aplicaţie este bună atunci când este folosită în scopuri la care autorii originali nu s-au gândit, dar câteodată întrebuinţările chiar sunt trase de păr.

Înţeleg nevoia de reţele sociale, pentru conectare, informare şi comunicare, pân` la urmă suntem creaturi cu nevoi sociale, dar n-o să înţeleg niciodată oamenii care urmăresc peste 50 de oameni pe Twitter. Eu urmăresc 11 oameni, şi sunt chiar interesat de ceea ce au de spus, dar chiar şi aşa, îmi scapă necitite o grămadă de mesaje, şi deja mi se pare zgomotul prea mare.

La 100 de „prieteni”, situaţie pe care o văd extrem de des inclusiv la câţiva dintre cei 11, ajungi să citeşti doar 5-10% din mesaje, şi cu toate că am listaţi momentan 40 de „ascultători”, sunt sigur că mesajele mele se duc în vid. Iar comunicarea este întrebuinţarea principală pentru Twitter, mai presus de conexiuni.

Mi-au zburat gândurile la acest aspect deoarece aparent sunt urmărit de Reg Braithwaite, un individ al cărui blog îl citeam cu sfinţenie (din păcate a renunţat la compunerea de eseruri). Dar fiind unul dintre cei 131 de oameni urmăriţi, este ca şi când n-aş fi.

Plus că oamenii au tendinţa de a-şi pune statusul actual mult prea des pe Twitter, gen „mănânc paste”, sau „mă cac”, şi mi se pare ok, între prieteni, dar nu când eşti conectat cu persoane care nu le-ai întâlnit niciodată. În loc să anunţi când îţi satisfaci nevoile primitive, mai bine oferi un link mişto, sau o bucăţică de înţelepciune, sau un eveniment, sau pur şi simplu o încurajare pentru noul an, pentru că mesajele n-au categorii ca să le poţi filtra.

Eh ~

Posted in rant, technology | No Comments »

Cultură software

November 14th, 2008 Alex

Se zice că informatica este apogeul imaginaţiei noastre, şi calculatorul că ar fi cea mai asemenea nouă creaţie, însă din păcate ne moşteneşte şi defectele.

Azi mi-am reamintit de un articol de Joel Spolsky, Biculturalism.

By contrast, in the Windows culture, you’re programming for Aunt Marge, and Aunt Marge might be justified in observing that a program that produces no output because it succeeded cannot be distinguished from a program that produced no output because it failed badly or a program that produced no output because it misinterpreted your request.

Da, şi poneii ar trebui să circule pe o alee separată.

Azi am avut neplăcerea să analizez o aplicaţie de Windows, făcută la cheie. Am încercat să o rulez, şi nimic, aşteptând câteva secunde bune poate se-ncarcă. O rulez din consolă, poate aruncă vreo excepţie ceva, şi nimic (pierdere de timp, poate aveam impresia că sunt pe Linux). Găsesc o clonă de strace pentru windows. Şi nu-mi spune mare lucru, doar că aplicaţia aruncă o excepţie. Caut o clonă de ltrace pentru windows, dar aici e mai greu. Deh, nici o problemă, downloadez WinDbg. De data asta obţin un rezultat: aplicaţia aruncă excepţie după ce încarcă modulul odbcint.dll. Instalez DAO 3.5, poate era problemă de drivere Access, şi nimic.

Într-un târziu găsesc printr-un doc aruncat în director o referinţă la C:\NumeAplicaţie. Şi-mi pică fisa … poate căile la fişiere sunt „hardcodate”. Copiez directorul aplicaţie în C:\ şi surpriză, acum merge.

Între timp după experimente, pentru că aplicaţia dezactivase butonul de închidere, dau click dreapta/close, şi nimeresc defapt pe task manager. Şi pentru că folosesc o maşină virtuală cu Windows 2003, fără să-mi dau seama de ce, îmi face shutdown fără să mă-ntrebe nimic, deşi la shutdown normal trebuie să-i specifici motivul altfel nu te lasă.

A doua problemă … bazele de date access sunt protejate cu parole. Caut pe net, şi găsesc o grămadă de warez, cu reclame la site-uri porno cu tot şi bălări pe bani (cum o fi să copiezi un rahat de algoritm de pe undeva, să-l adaptezi un pic la Access, şi să-ţi vinzi rezultatul pe $100 … trebuie să-ncerc şi eu odată). Într-un târziu găsesc Access PassView, şi din fericire am rezolvat problema.

Dar stau şi mă gândesc la biata mătuşă Marge.

Posted in rant | 5 Comments »

I18n extrem - mai bine rămânem la „lingua franca”

October 6th, 2008 Alex

Link

După selecție, presupunând că ai selectat din greșeală Chineza, și vrei să reselectezi Engleza …

Off, off.

Posted in design, rant | 1 Comment »

Idioții se nasc aici

June 15th, 2008 Alex

Nu e vorba despre România :) , deși ar fi un posibil subiect de discuție.

Am evaluat C# 3.0 pentru un proiect personal, și deși este superb ca limbaj, marele zid de care m-am lovit nu ține de motive tehnice, nici de deschiderea limitată a platformei (deși ar fi un motiv valid), și nici ștampila ce o poartă ca produs Microsoft.

Zidul este tot rahatul de marketing orientat pe “enterprise” ce trebuie să-l înghiți înainte de a putea respira.

Unul din motivele pentru care Microsoft este unde este are de a face cu atenția pe care a acordat-o întotdeauna programatorilor … Windows-ul a fost mult timp o platformă mai deschisă programatorilor decât OS/2 sau Mac OS sau diversele sisteme Unix ce existau acum 15 ani.

Dar azi situația chiar mi se pare sumbră, deoarece pe de-o parte ai o echipă de oameni ce cred în dezvoltarea de unelte puternice de abstractizare pentru a rezolva problemele reale ale lumii, iar drept dovadă platforma .NET are multe avantaje tehnice, și pe de altă parte ai o echipă de cretini ce “reinventează” conceptul de marketing prin idei provenite probabil dintr-un fund colectiv.

Adică hai să luăm ca exemplu campania “Heroes happen here“:

Trecând peste faptul că secvența este de o mediocritate de nedescris (de ce ai vrea să creezi benzi desenate fără eroi cu puteri supranaturale, fără crime și fără nimic amuzant?) … care naiba este mesajul aici?

Alternative ar fi:

  • De câte ori NU folosiți produse Microsoft, un indian moare de foame
  • Gândiți-vă la sărmanii indieni, și la copiii lor
  • Doar SUA are resurse nelimitate, restul lumii nu se joacă [deci folosiți produse provenite din SUA]
  • Deși majoritatea virușilor sunt specifici produselor Microsoft, soluția este să folosiți mai multe produse Microsoft

Yay! Și pentru că vorbeam de super eroi, nu i-ați cunoscut încă?

Meet the Fource:


„Mami, mami, când cresc mare vreau să fiu exact ca Office Master, să scriu notițe de la meeting-urile business-oriented ale companiei în Word, și să calculez impozitele în Excel, și de câte ori am o problemă, cum ar fi că mi se restartează calculatorul și-mi pierd toată munca, să mă iau la trântă cu Windows Vista Sensei, că doar n-are altceva mai bun de făcut.”

“Sigur băiatul meu, acum du-te la culcare că mâine ai test la citire, și iar ia ISV Super Gal note mai mari decât tine.”

Iar eu dacă aș fi părinte mi-ar fi super greu să explic copilului răspunsul la întrebări extrem de existențialiste, cum ar fi de unde vin copiii, sau de unde a apărut “serverul Windows” din casă, noroc că oameni cu doctorate se gândesc și la părinți …

Este posibil să existe o companie ce-și tratează clienții (atât end-useri cât și programatori) ca pe niște idioți si totuși să înflorească? Păi, se pare că da … dacă-i aduci pe toți la același nivel de prostie, îi poți convinge cu argumente, sau poți cumpăra guverne, orice este necesar, nu?

Posted in rant | 5 Comments »

A fi Hacker

May 29th, 2008 Alex

Lumina palidă a monitorului central cade difuz pe tastatura prăfuită. Pe monitorul din stânga se desfășoară pe consola afișată cuvinte și semne ciudate dintr-o limbă obscură și ezoterică. Omul din fața calculatorului stă nemișcat, iar în cameră nu se aude decât zumzetul muzicii venite din caștile audio de pe urechile sale. Însă spontan o avalanșă de țăcănituri intermitente disturbă liniștea camerei, în timp ce omul, sau mai degrabă să-i spunem entitatea din fața calculatorui se pune pe treabă proiectându-și gândurile pe ecranul din fața sa cu ajutorul tastaturii ce pare a ceda din cauza presiunii. După zece minute de activitate liniștea este restaurată, însă pe fața omului apare un surâs … a reușit.

În tot acest timp, pe holul luminos din dreptul camerei se plimbă oameni. Însă curioșii se mai opresc și mai aruncă câte o privire prin crăpătura lăsată de ușa întredeschisă … oare ce se întâmplă acolo? Dar pleacă mai departe văzându-și de treburile zilnice. Sunt oameni obișnuiți, ce știu ei ce înseamnă arta?

Să revenim …

Azi mă chinuie talentul, și stăteam și mă uitam pe rapoartele de la Google Analitycs. În mod surprinzător observ că vin oameni de pe Google cu fraze căutate gen …

  • vreau să fiu hacker
  • care e cel mai bun hacker
  • comenzi ms-dos hacker (cool)
  • cum pot deveni un hacker
  • cum pot să creez un hacker (what?)
  • cursuri hacker
  • hacker de programare
  • hacker way
  • limbaj de hacker
  • siteuri unde pot învăța cum pot sa fiu hacker

Televizorul ne-a prostit pe toți. Știai că dacă ești hacker poți sparge bănci și te poți îmbogăți? Asta dacă treci de firewall, adică de zidul de foc. Și dacă ai draci pe vreun bou din liceu îi poți sparge contul de Hi5 sau de „mess” și-l poți face de rahat în fața pretenilor … știai? Nu știai fraiere.

Degeaba explici că „hacker” este termenul pentru programatori pricepuți și curioși cărora le place să umble „pe sub capotă”, degeaba explici că termenul pentru oameni ce sparg sisteme este de „cracker” și degeaba explici că orice mediocru poate fi cracker dacă folosește scripturi scrise de alții și că nu este deloc o onoare să-ți folosești timpul și talentul în scopuri distructive. Vor să fie hackeri frate, să arate la băștinașii din același Internet Café ce pricepuți sunt, instalând troieni pentru a controla calculatoarele ignoranților ce nu se supun voinței lor.

Referitor la asta, pe vremea când frecventam și eu un Internet Café m-am distrat și eu cu un astfel de troian, și era funny, eu fiind un adolescent „ud după urechi” și încercând să impresionez fete prin altceva decât clasicul „asl pls”. Dar ce m-a amuzat cel mai tare este că m-am reîntâlnit peste vreo 2 ani cu un puști de 14 ani care m-a întrebat pe stradă … „hei, tu ești cel care a instalat virusul pe calculatoarele alea?” … iar în ochii sclipitori i se citea o extremă admirație față de ceea ce reprezentam.

Am devenit o legendă locală.

hacker emblem

Posted in humor, rant | 4 Comments »

Ne cuceresc marketroizii

May 1st, 2008 Alex

În timp mi-am format un nas foarte sensibil la rahaturi de marketing și la trucurile unor oameni de a părea mai interesanți.

Ca o paranteză, reclama cu „vorbiți afacereza?” de la „The Money Channel” mi se pare oribilă … doi indivizi ce folosesc romgleză (jargon ce folosește cuvinte din engleză, cu o lipsă totală de respect față de limba română) … și până la urmă care-i faza, că nu prea am înțeles?
Sunt mai interesanți? Știu ceva ce muritorii de rând nu știu?
Sau ne arată poate cât de proști sunt cei ce nu-nțeleg?

Am o mare problemă cu metodologiile agile.
În primul rând că termenul de „metodologie” pentru mine a căpătat o conotație negativă, și însăși definiția cuvântului pare a fi departe de sensul în care este folosit.

Și de câte ori aud de metodologi de dezvoltare, gândul mi se duce invariabil la oameni ce-și câștigă existența din cărți, seminarii și consultanță pe spinarea celor ce ascultă. Iar în momentul în care o practică este promovată la rang de religie, atunci știu cu siguranță că ar trebui să stau departe.
Același lucru s-a întâmplat de exemplu și cu programarea orientată pe obiecte … și probabil că programarea OOP, cea din C++ (bazată pe moștenire de clase, într-un limbaj de programare static) este cea mai greșită practică a informaticii, deoarece OOP-ul din C++ doar dă impresia de modularizare.
Dar autorii de cărți despre șabloane de proiectare trebuie să mănânce și ei.

Din metodologiile agile, cred că singura practică ce-mi place este testarea unitară, dar nu TDD-ul. „Test-Driven Development” este o practică ce nu-mi place, din același motiv pentru care nu-mi plac nici limbajele statice … fiind practic o povară pentru munca de explorare a ideilor. Și cel puțin limbajele statice le consider utile din alte puncte de vedere … performanță și capacitatea compilatorului de a descoperi dependințe între module. În schimb TDD-ul nu prea-mi dă nici un avantaj, și sincer să fiu, majoritatea vorbesc de TDD, dar puțini oameni am văzut să declare că folosesc TDD.

Acum, desigur, metodologiile agile se concentrează mai mult pe relațiile dintre oameni și pe rezolvarea conflictelor (sau cel puțin asta încearcă variantele mai light, gen SCRUM). Dar adevărul este că dacă doi oameni dintr-o echipă sunt incompatibili și nu se înțeleg, ai oricum puține șanse de remediere a situației prin numirea unui Scrum Master și prin ședințele de Scrum, care în loc să fie de 10-15 minute, se transformă în ședințe de o oră.
Și plus că este chiar stresant să dai raportul la fiecare pas pe care-l faci. Și deși în teorie ședințele de Scrum nu sunt de raportare a statusului, așa cum se spune … „diferența dintre teorie și practică este că în teorie nu există diferențe, dar în practică există”.

De ce este stresant să dai raport zilnic? Pentru că unii programatori (incluzându-mă pe mine în ecuație) lucrează în rafale, și au zile mai mult sau mai puțin productive, iar un raport dat după o zi neproductivă este un motiv de stres.

Desigur, o echipă de programatori are nevoie de standarde extrem de bine puse la punct, și din punct de vedere al ingineriei ai nevoie de strategii puse la punct pentru orice problemă cunoscută care ar putea apare. Iar o echipă fără automatizare a testelor (de exemplu) este din punctul meu de vedere disfuncțională.
Iar din punct de vedere al relațiilor dintre membrii, în orice echipă ai nevoie de armonie, de acel mediu creativ care te lasă să te concentrezi asupra problemelor importante. Nu exclud astfel practicile sănătoase ce au funcționat pentru alte proiecte (cum ar fi unit-testing), dar din păcate cunoștințele din domeniu sunt atât de empirice că de câte ori apare o nouă religie sunt destul de sceptic, și aștept deznodământul.

Dintre toate metodologiile însă, cea mai corectă și la obiect mi se pare următoarea …

Hack-Ship

Sursa: Crystal Methodology

Posted in management, rant | 3 Comments »

Bună dimineața

April 13th, 2008 Alex

Fiind dimineață în Santa Clara, îmi citesc blogurile la care sunt subscris (în timp ce mă gândesc de unde să fac rost de cafea), și atenția mi se oprește peste …

Nu particip aproape niciodata la eternele discutii despre Java vs. C++, Ruby vs. Python, Eclipse vs. IntelliJ, Ciocolata vs. Vanilie sau Kramer vs. Kramer.

Ma preocupa mult mai mult rezultatul final decat adevarul absolut legat de procesul prin care voi ajunge la acel rezultat.

Cititorii intreaba, Vivi raspunde [2]

De ce nu scriu eu și despre altceva în afară de software development?

Pentru că nu o fac pentru faimă și glorie, sau ca să demonstrez că “m-am ajuns”. Motivul existenței acestui blog este dorința mea de a-mi perfecționa talentul oratoric, și chiar și de a descoperi idei noi.

Writing doesn’t just communicate ideas; it generates them. If you’re bad at writing and don’t like to do it, you’ll miss out on most of the ideas writing would have generated.

Writing Briefly, Paul Graham [1]

Desigur, nu-i condamn pe cei ce-și expun viața personală pe un blog, mai ales dacă sunt departe de casă și au prieteni la mare depărtare care ar fi interesați de soarta lor. Dar și discuțiile despre proces de dezvoltare au rostul lor, pentru că, știți și voi … cei ce nu învață din greșelile trecutului sunt condamnați să le repete. Și gândindu-te la proces, și scriind despre asta, chiar ajută.

TIP 1: Care about your craft
Why spend your life developing software unless you care about doing it well?

The Pragmatic Programmer, by Andrew Hunt and David Thomas

Enough said.

Sunt în Santa Clara, California și săptămâna asta particip la conferința MySQL. Nu știu dacă am ceva de învățat de la conferință încă, dar cu siguranță este prima oară când văd Silicon Valley … o experiență absolut interesantă. Voi pune ulterior și poze.

Referințe …

  1. Writing, Briefly
  2. Cititorii intreaba, Vivi raspunde

Posted in blogging, rant | 1 Comment »

Obsesie pentru limbaj

April 5th, 2008 Alex

Timp de 5 luni am fost departe de casă, apartamentul meu fiind trecut printr-un dureros proces de renovare.
Asta a presupus o separare drastică a timpului liber de comoditățile cu care eram obișnuit, printre care și accesul la Internet, iar la servici întotdeauna se găsesc lucruri mai bune de făcut. Suntem totuși fericiți, eu și soția mea iubită, că totul s-a terminat și că suntem în sfârșit acasă.

Desigur, o parte din motivul pentru care nu sunt prea activ pe blog ține de abilitatea mea de a-mi exprima sentimentele în cuvinte. De multe ori simt o anumită idee, sau o anumită concluzie ca urmare al unui șir de evenimente ce au dus la observarea unui șablon, dar în lipsa unui limbaj adecvat sunt incapabil de multe ori să pun lucrurile în perspectivă și prefer să tac din gură. Fără un limbaj bogat procesele cognitive nu funcționează la capacitate maximă. Fără un limbaj adecvat nu ai ordine în idei și o astfel de idee pe care nu o poți exprima în mod eficient nu o poți folosi în construcții mai complexe (nu scalează).

Și ca o paranteză, vă rog să-mi scuzați articolul kilometric, dar n-am reușit să-mi exprim aceste gânduri într-un mod mai succint ;)

Este interesantă astfel paralela care poate fi trasată între programare și comunicarea dintre oameni. Programarea propriu-zisă este procesul prin care comunici unui calculator ideile. Iar cea mai mare problemă din informatică ține de managementul complexității, și dacă exită o determinată, printre colecțiile uriașe de cunoștințe empirice pe care le avem, este eterna complexitate a proiectelor ce crește de multe ori exponențial.

Programarea este cunoaștere.

Ideile sunt într-adevăr exprimate în limbaje străine oamenilor obișnuiți, dar acele limbaje sunt necesare deoarece limbajul natural are o gramatică non-deterministă și este nevoie de inteligență umană pentru a-l înțelege. De fapt, dacă ar fi să definim inteligența umană, am putea-o defini drept capabilitatea de a înțelege și de a comunica folosind limbajul natural (iar mulți oameni de știință sunt de părere că am evoluat din maimuțe odată cu dezvoltarea acestui mijloc eficient de a comunica). Desigur, și un cățeluș este un suflet, și un cățeluș comunică, dar limbajul său este rigid, se naște cu el și nu poate defini noi cuvinte decât foarte greu (există și excepții … Bella, fetița mea rottweiler, își scurură urechile când vrea afară, și-mi citește starea de spirit de cum mă vede, dar desigur, Bella este fata mea).

Practic poți păcăli teoria evoluției deoarece nu este nevoie de mii de generații ca organismul să se adapteze mediilor noi în care trăiești. Poți pur și simplu învăța de la alți oameni experiențe, greșeli, tehnici, și chiar și sentimente. Dacă te-ai ars cu focul, copiii tăi o vor învăța de la tine (deși câteodată este inevitabil pentru copii să repete aceleași greșeli, dar nu mai se pot scuza că n-au știut).

Încet, încet am ajuns la concluzia că cea mai importantă calitate a unui inginer (excluzând ambiția, calitate cu care probabil te naști) NU este folosirea eficientă a uneltelor, și nici învățarea perpetuă de lucruri noi, deși sunt calități destul de importante. Cea mai importană este capabilitatea de exprimare cât mai eficientă a ideilor.

Și ca să pun aceste vorbe în contextul profesiei mele … cu toți simțim asta mai ales când suntem cocoșați de complexitatea unui proiect ce a avut parte de alegeri neinspirate, sau poate o auzim de la alții, dar cred că este nevoie de o oarecare maturitate să o recunoști …

Modularizarea este banală și de multe ori ineficientă, mult mai scalabilă este abstractizarea meta-lingvistică (vezi [1])

Când am început să simt acest adevăr, prima reacție a fost să caut un limbaj de programare mai eficient, mai “enterprise”, mai popular. Eram în liceu și programam mici joculețe în Pascal. Eram total nemulțumit [2] în primul rând datorită restricțiilor impuse de compilator, și prima reacție a fost să învăț C++, deși n-am văzut nici o lumină când transformarea s-a încheiat. O a doua revoltă a fost odată cu trecerea de la PHP la Java, deoarece PHP îmi dădea impresia de jucărie, sau de la Java la Python, într-o încercare de reconciliere cu limbajele dinamice, încercând să-mi regăsesc latura pragmatică.

Există din păcate programatori ce nu reușesc să vadă valoarea limbajelor de programare. Și acești programatori formează o majoritate semnificativă.
Iar din anumite perspective au dreptate să o facă …

  1. un editor de texte deștept poate alina durerea cauzată de folosirea unui limbaj rigid pentru un domeniu pentru care nu a fost proiectat, cazurile cele mai populare fiind C++, Java și C#, iar mulți speră ca într-o zi un IDE le va alina probleme probabil prin citirea gândurilor :) (pentru o părere în acest sens vezi [3]).
  2. Tehnologiile informatice evoluează extrem de rapid, și ce este nou astăzi poate fi depășit peste un an
  3. Un limbaj nou vine cu paradigme noi (de cele mai multe ori, exceptând clonele cu mici variații), și este mai greu de învățat decât un framework nou
  4. Paradigmelor noi nu le observi oricum utilitatea decât după o perioadă de folosire în probleme reale

As long as our hypothetical Blub programmer is looking down the power continuum, he knows he’s looking down. Languages less powerful than Blub are obviously less powerful, because they’re missing some feature he’s used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn’t realize he’s looking up.

(Beating the Averages, Paul Graham [4])

Practic, un limbaj prea diferit de limbajele cu care ești obișnuit are potențialul de a te face să te simți incompetent (vezi plângerile celor ce au încercat Haskell). Și nimeni nu suportă asta.

Și din păcate toată lumea a devenit obsedată de rezultate și câștiguri rapide, de comoditizare, de ieftin și debarasabil, în timp ce adolescenții sunt orbiți de poveștile oamenilor ce au câștigat la Loto, sau de poveștile adolescentelor ce se mai cuplează cu câte un Irinel și cu prețul demnității au parte de succes fără efort (sau cel puțin așa se vede din exterior).

Și vorbind de aparențe, îmi aduc aminte de filmulețele demonstrative ale framework-ului ASP.NET [5]. Și sincer, câtă strălucire, câtă ușurință … trei click-uri, și țaca-paca ai un website complet. Și cât de naiv am fost să cred asta. Pentru că odată ce te apuci de mult subestimatele “probleme reale”, observi cât de non-standard și de problematic este mecanismul de postback, sau cât de rigide sunt componentele standard, sau cât de complex este pipeline-ul prin care se răspunde la un request (lovindu-te de problema abstracțiilor prea ambițioase [6]), sau cât de departe este ASP.NET de paradigmele și șabloanele de proiectare standard folosite în aplicațiile web uzuale, sau cât de rar este folosit ASP.NET pentru proiecte populare, deși tehnologia are deja 7 ani vechime (singura excepție semnificativă fiind MySpace). OK, știu că a mai evoluat, și că ultima versiune în sfârșit vine cu MVC (wow), poate sunt un pic rău, dar tot nu m-aș mai atinge de ASP.NET odată ce m-am fript.

În spusele lui Erik Naggum (vorbind de Haskell vs Lisp) …

If you have a language that is good at demonstrating such things, maybe it has been optimized for demonstrations? At least one really huge software company has made the bulk of its earnings on its ability to demonstrate to other people … what they could do.

From the Latin word “imponere”, base of the obsolete English “impone” and translated as “impress” in modern English, Nordic hackers have coined the terms “imponator” (a device that does nothing but impress bystanders, referred to as the “imponator effect”) and “imponade” (that “goo” that fills you as you get impressed with something — from “marmelade”, often referred as “full of imponade”, always ironic).

Erik Naggum, comp.lang.lisp

Un alt exemplu de regresie în industria IT este obsesia programarilor de a mapa modelul de reprezentare a datelor relaționale în obiecte. SGBD-urile relaționale au multe defecte, iar sistemul relațional de reprezentare a datelor (tabelar), deși cu multe defecte, ne este mai intuitiv decât programarea orientată pe obiecte (cred că și un copil de 5 ani poate pricepe un tabel). Este însă o oarecare prăpastie între obiectele din OOP și datele din sistemul relațional, agravată de necesitatea programatorilor de a învăța SQL. Oh, da. Deși SQL-ul este cea mai utilă abstractizare meta-lingvistică pe care o cunosc, mulți programatori sunt mai mult decât fericiți să folosească metode și clase Java, prost concepute aș mai adăuga, pentru interogări.

De ce ar a vrea cineva să folosească Hibernate sau DB4O, în loc de SQL, cumva îmi scapă.

Adică, dacă vrei validarea automată a tipurilor de date, nu este mai bine să folosești un limbaj mai flexibil?
Dacă vrei să treci facil la MySQL, de la Oracle, nu poți scrie un compilator? Atât teoria [7], cât și uneltele necesare [8] sunt valabile de câțiva zeci de ani, iar uneltele curente au evoluat atât de mult încât este posibilă scrierea unui parser pentru un limbaj relativ complex în câteva ore, cu tot cu teste unitare.

Și da, când vine vorba de compilatoare există un șoc inițial, cauzat de concepte nefamiliare majorității. Și nerăbdarea cu care vrei să aplici aceste tehnici este un dezavantaj.

the clumsiness of people who have to engage their brain at every step is unbearably painful to watch, at least to me, and that’s what the novice-friendly software makes people do, because there’s no elegance in them, it’s just a mass of features to be learned by rote. however, this suits people a hell of a lot better than setting out at age 6 to become a great ballet dancer and
achieving their goal 20 years later after every tendon and muscle and joint has been asked to perform just a little bit more than nature ever intended over and over and over again. to most people, this is insanity. but in reality, it’s art, and it’s the _art_ in what we do that makes us human.

once you have attained that level of effortless and carefree performance, you forget the pain.

Learning Emacs, by Erik Naggum [11]

La ce se reduce totul?

Eu am acceptat abstractizarea meta-lingvistică drept o alternativă la modularizare. Mi-a luat ceva timp, și am trecut prin durere căutând ceva timp limbajul perfect, mediul de dezvoltare perfect, etc… Voi lăsa însă la o parte mănușile și voi îmblânzi dragonul [7].

Limbajele de programare nu sunt nici zei ce trebuie idolatrizați, dar nici efecte secundare ce trebuiesc suportate în așteptarea unui IDE mai bun. Sunt doar unelte de abstractizare a complexității.

Cred că abstractizarea meta-lingvistică este explicată mai bine în cursul 6.001 de la MIT [9], acompaniat de celebra referință Structure and Interpretation of Computer Programs [1].
Deasemenea, vezi … Growing a Language, de Guy Steele [10].

Bibliografie

  1. SICP, chapter 4
  2. Pasiune de copil, si o alegere personala (lexoft.eu)
  3. It’s the IDE, dummy
  4. Beating the Averages
  5. ASP.NET tutorials
  6. Leaky Abstractions, Joel Spolsky
  7. Compilers, the Red Dragon book ;)
  8. Antlr, Bison, Flex
  9. Structure and Interpretation of Computer Programs (Video Lessons)
  10. Growing a Language, Guy Steele
  11. Learning Emacs, Erik Naggum

Posted in compilers, passion, rant | 4 Comments »

Linux, simbolul unei generații

February 8th, 2008 Alex

N-am făcut niciodată parte din RLUG, deși am încercat de mai multe ori să rezist câteva zile pe listele de discuții. Am rezistat un pic mai mult acum câțiva ani pe forumul dedicat distribuției mandrake (redenumită mandriva). Cred că sunt prea anti-social chiar și pentru astfel de comunități.

Părerea lui Petre m-a pus pe gânduri. Adică Linux este mainstream, și nu mai avem nevoie de comunități? De fapt ce este o comunitate Linux? Dacă ar fi să o definim ca fiind o adunătură de oameni cu interes pentru produsul Linux … la naiba, normal că sunt un grup de oameni uniți doar de dificultatea cu care poate fi instalat și utilizat acest sistem. În momentul în care produsul devine ușor de folosit datorită evoluției constante, comunitate normal că se destramă.

Linux este însă un ecosistem, unde ideile prind viață, și la fel ca-n viața reală, unele se materializează și altele nu. Și comunitățile care vor rezista timpului sunt cele unite de un țel constructiv. Și chiar regret că-n București nu există astfel de comunități, precum KDE, OLPC, și (de ce nu) lambda-the-ultimate. Este peste puterea noastră.

Când am încercat prima oară Linux, într-adevăr, am făcut-o ca să mă simt special, ca să fac parte dintr-un grup de elite. Eram pe drumul spre glorie. Însă am crescut, și nu mai am nevoie de gloria ștampilei ce o port datorită preferințelor mele. Și de fapt îmi provoacă repulsie aroganța, deși sunt în mare măsură vinovat de aceleași devieri de comportament.

Însă o comunitate care nu este unită de un țel constructiv, o comunitate al cărei motiv de existență este reprezentat de nostalgii, vise elitiste și probleme întâmpinate la servici, are tot atâtea șanse să reziste cât întrunirile fanilor Star Trek.

Este întotdeauna vorba de oameni și de idei, iar pentru unii Linux încă promite o revoluție într-o lume în care libertatea cuvântului și însăși esența cunoașterii este pusă în pericol în numele capitalismului, iar ideile ce stau la temelia ecosistemului încă nu au ajuns mainstream.

If I can’t dance, you can keep your revolution

- Emma Goldman

Posted in linux, rant | 3 Comments »