In căutarea ciocanului perfect
Posted by mzaharia on august 24, 2007
Filed Under Muncă, Tehnologie | 10 Comments
Contextul…
Fiecare meşteşug, şi implicit fiecare ramură a ingineriei, naşte o cultură. Cultură ce influenţează decizii, şabloane, soluţii, şi perspective de viitor. Juniorii ajung să înveţe de la seniori reguli nescrise ale meşteşugului practicat şi experienţa câştigată se transmite din generaţie în generaţie, continuu cizelată şi hrănită de ideile prezentului.
Într-o lume unde legea lui Moore a avut ca rezultat invalidarea cunoştinţelor despre tehnologie cam odată la 5 ani, există o cultură ce a rezistat timpului… Unix.
Şi deşi versiunea originală mai are puţine în comun cu reprezentanţii săi moderni (Linux, *BSD, Solaris), Unix reprezintă mai mult o filozofie foarte coerentă şi simplă ce a demonstrat că poate produce cele mai complexe sisteme software din lume, sumarizată excelent de Doug McIlroy, creatorul pipe-urilor din Unix …
“Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.”
Java
Când mă gândesc la Java, personal mă gândesc la sisteme mari şi greoaie, mă gândesc la consultanţi care şi-au vândut soluţiile pe bani buni sub umbrela presupusei scalabilităţi, mă gândesc la sisteme monolitice destinate să crape sub propria greutate.
In vorbele lui Albert Einstein…
“Any intelligent fool can make things bigger and more complex… It takes a touch of genius — and a lot of courage to move in the opposite direction”
Şi totuşi Java ca platformă este cea mai bună la ora actuală, dacă reuşeşti să vezi dincolo de zgomot …
- este cu adevărat multi-platform
- este un standard JCP … şi dacă nu consideraţi consorţiul JCP ca fiind unul valid, ei bine şi eu consider Ecma ca fiind o mare escrocherie (opinie personală)
- este Free Software
- un număr impresionant de limbaje de programare pot fi rulate deasupra maşinii virtuale, printre care cele mai importante sunt JRuby, Groovy, Scala, şi Javascript (via Rhino)
- JVM-ul este special optimizat pentru execuţia de limbaje dinamice (în contrast cu alte tehnologii concurente), Hotspot-ul fiind o versiune îmbunătăţită de StrongTalk
- Calitatea mediilor de dezvoltare disponibile este de neegalat [1] [2] [3] [4]
Cum alegi un framework web, sau o combinaţie, care să pună accentul pe simplitate, şi care să fie în antiteză cu tehnologiile uzuale, gen EJB şi Struts?
Am fost pus în faţa unei astfel de decizii, şi criteriile mele de selecţie sunt…
- să fie uşor de învăţat
- să fie uşor de folosit pentru 60% din cazuri (do one thing, and do it well)
- să fie scalabilă în mod natural, fără să scriu kilometri întregi de metadate
- imi e uşor silă de fişierele kilometrice de configurare… prefer valori implicite atent selecţionate
- să fie revoluţionară
Tocmai am descris Ruby on Rails ?
Poate că da.
Însă Ruby on Rails, deşi o adevărată plăcere, a eclipsat alte tehnologii mult mai disruptive, cum este Seaside. Şi spre marea mea bucurie am aflat că feature-ul principal, continuările, poate fi simulat şi-n maşina virtuală Java. De fapt JVM-ul suportă continuări intern pentru management-ul excepţiilor, dar funcţionalitatea nu este expusă programatorilor, dar poate fi folosită cu puţină magie posibilă prin instrumentare de byte-code.
Un framework ce profită din plin de continuări este Rife, şi care împreună cu Terracota se scalează în mod natural, folosind servere light, gen Tomcat sau Jetty.
Un exemplu de workflow cu Rife arată ceva de genul (extras dintr-unul din exemple):
public void processElement() {Template template = getHtmlTemplate(“game”);
int answer = 0, guesses = 0, guess = -1;
answer = randomNumbers.nextInt(101);
while (guess != answer) {
print(template);pause();
template.clear();
guess = getParameterInt(“guess”, -1);
if (guess < 0 || guess > 100) {
template.setBlock(“warning”, “invalid”);
continue;
}
guesses++;
// …
}ContinuationContext.getActiveContext().removeContextTree();
// ….
print(template);
}
Cel mai simplu mod de explicare a continuărilor este prin analogia cu un joc video… ai posibilitatea de a salva un joc, ai posibilitatea de a te reîntoarce la o salvare mai veche în cazul în care ai efectuat o manevră greşită, şi posibilitatea de a transporta salvările jocului de pe un calculator pe altul, fără să se piardă calitatea salvării.
Este un pic ciudat să te obişnuieşti cu continuările odată ce ai “cablat” interacţiunea între pagini web manual, dar odată ce o faci parcă nu-ţi mai vine să te uiţi înapoi.
O altă posibilitate de folosire a continuărilor este Rhino ce poate lucra cu acest concept şi este folosit de altfel în Cocoon.
Mai multe însă despre Rife, Rhino, şi importul de concepte din alte limbaje mai pure… date viitoare.
Comments
10 Responses to “In căutarea ciocanului perfect”
Leave a Reply


RUGAMINTE:/PROVOCARE:
Poate cineva sa imi rezume postul asta intr-o fraza pe care sa o inteleg si care sa aiba maxim 5 randuri?
va rooog
p.s. imi place mult blogul vostru.
bravo!
deci se poate cu relaxare si cu lipsa de paranoia si la firmele moderne!
Hehe! Buna provocare! Hai ca incerc eu, desi e scris de colegul meu, Alex…
Ideea e ca framework-urile Java pot fi si agile, asa cum e Ruby on Rails, si nu monolitice si complicate, asa cum e perceptia in industrie. Un exemplu bun este RIFE.
Cam asta e ideea, dar Alex e mai destept decat noi, deci poate spune asta in mai multe cuvinte…
Articolul initial era mult mai lung, dar l-am simplificat
Cred ca ar trebui sa avem mereu ca scop cautarea simplitatii in orice cream … interfete, API-uri, workflow.
Iar simplitatea si agilitatea pot fi castigate atata timp cat esti deschis la idei si metodologi noi … fara sa aruncam vechile unelte la cosul de gunoi.
Si asa cum poti programa orientat pe obiecte in C (vezi GTK), cu putin efort se pot importa paradigme din programarea functionala in Java.
O sa mai scriu pe acest subiect … poate se leaga ceva
Ideea e ca framework-urile Java pot fi si agile, asa cum e Ruby on Rails, si nu monolitice si complicate, asa cum e perceptia in industrie. Un exemplu bun este RIFE.
pls define:
-framework
-monolitic
p.s. de unde vin inititlale RIFE?
p.s.2 multumesc pentru promotitudine
Salut!
Referitor la introducere, “Context” as putea completa si cu ce a spus John Maeda ( http://weblogs.media.mit.edu/SIMPLICITY/ ) la Ars Electronica : http://youtube.com/watch?v=cdQZ4U4ysUw
care zic eu ca este valabil si in programare
Ati uitat la limbajele ce pot rula peste JVM Python (Jython) si ca sa fim mai atractivi pentru cei din web development… PHP ( Caucho Quercus de la Resin ).
JVM-ul intr-adevar e tare. Cat despre ideea de agile, ea poate fi aplicata in aproape orice limbaj de programare modern. Motivul principal pentru ca majoritatea framework-urilor in java nu par agile e ca au fost dezvoltate pentru proiecte mai “enterprise” unde modelul de dezvoltare/development/marketing era in general opus fata de agile.
Si totusi, de unde primul post mai tehnic?
Mihai: interesant link, deşi m-am chinuit un pic să înţeleg ce se vorbeşte datorită sunetului cam prost … thanks.
Cristian: am enumerat doar limbajele importante pentru mine momentan
Jython a fost un deschizător de drumuri, dar dezvoltarea sa a cam stagnat.
M-am bucurat să văd că interesul în Jython este în creştere totuşi în ultimul timp şi plus că mai sunt şi mici iniţiative de colaborare între autorii de compilatoare de pe JVM … http://groups.google.com/group/jvm-languages
Viitorul sună bine.
Despre “enterprise” … agilitatea şi simplitatea sunt 2 lucruri separate şi poate ar fi trebuit să le discutăm separat.
O să dau doar un exemplu ca să poţi face o comparaţie … Debian Sarge (lansat în 2005), datorită modelului de dezvoltare distribuit, a ajuns la 230 de milioane de linii de cod. În comparaţie Windows Vista are doar în jur de 50 de milioane şi are probleme mari de complexitate … vezi confesiunile unui insider … http://blogs.msdn.com/philipsu/archive/2006/06/14/631438.aspx
Numai bine,
Multumesc si eu pentru link
http://differin.all-decadron.info/index.html differin