Dinamična invazija

programiranje

Hacknot se u članku Invasion Of The Dynamic Language Weenies obrušio na dinamičke jezike, a izgleda da mu rubisti posebno smetaju. Članak nije objektivan, autor je imao već izgrađeno mišljenje i onda je samo tražio kako da ga istakne navodeći što ekstremnije primjere.

Grohotom se namijao na tvrdnju Stephena Deibela (Wing IDE) koji je rekao da zahvaljujući Pythonu aplikacija ima 10-20% koda kojeg bi inače imala aplikacija napisana u Javi ili C++-u. Autor članka nema neko veliko iskustvo s dinamičkim jezicima jer da ima ne bi bio toliko samouvjeren u svojem grohotu. Jasno je da konačna hrpa koda ovisi o programeru, netko treći bi napisao Wing IDE s 200-300% koda koliko bi trebalo četvrtom Java programeru, ali ima i konkretnih primjera kako dinamički jezici pomažu. Tiny ERP ima 31k linija koda, open source erpovi napisani u Javi imaju od 180-260k linija koda dok Navision teži čak 900k. Svi imaju slične funkcionalnosti. U čemu je razlika? Samo u programskim jezicima? Jasno da nije, razlika je u pristupu problemu. Kod Tiny ERP-a je sve dinamično, kod se ne ponavlja, forme i ekrani nisu isprogramirani već su definirani u xml-u. Programiranje izgleda ekrana je jako loš način za trošenje vremena developera. Problem kod većine prosječnih statičnih programera je što i razmišljaju statično, skloniji su zapeći stvari u kod. I sve to duže traje i traži više linija koda.

Nisam detaljno čitao cijeli članak jer je ogroman pa samo očima preletio dijelove gdje se on zakačio za najčešće tvrdnje kojima štovatelji dinamičkih jezika pokušavaju dokazati ispravnost svoje religije. Činjenica je da neke od njih stoje, ali isto tako se svaka od njih može osporiti na različite načine. A ključne stvari u svemu su opet iskustvo programera i pristup problemu. Česti je argument statičkih programera da im prevoditelj (compiler) pomaže u nalaženju grešaka. Ali program preveden bez grešaka ne mora raditi ispravno. Oni koji koriste dinamičke jezike posjeduju veći stupanj samokontrole i više paze na kod. Činjenica je da su i današnja okruženja za razvoj toliko napredovala da većinu grešaka sama detektiraju prilikom kucanja koda pa one i ne dođu do faze prevođenja. U tome je posebno dobar Eclipse za Java kod. Iz vlastitog iskustva znam da je prevođenje prolazilo bez problema u 95% slučajeva nakon što je IDE odradio svoje.

Slažem se s autorom u pogledu prirodne sintakse programskih jezika. Neki ističu tu prednost kao ključnu, kao kod, kad se čita naredbu po naredbu, postaje savršeno razumljiv, opisuje što se zapravo radi. To je naizgled savršeno, ali...kod se jednom piše i puno puta čita. Čita? Ne znam kako vi, ali ja ne čitam kod, skeniram ga pogledom (zato mi ponekad promaknu neuočljivi tipfeleri), okom zahvaćam cijeli red ili manju strukturu. Bio bih jako neproduktivan kad bih svaki put čitao kod naredbu po naredbu, varijablu po varijablu, operatere... Važnije mi je da kod ima jasnu strukturu i obrasce tako da oko zna gdje treba što tražiti, a ne da se mora baviti prirodnim sricanjem...

Predviđanje o tome kako će dinamički jezici nestati je jedna velika glupost. Činjenica je da statički jezici tj. oni koji se aktivno i brzo razvijaju (npr. C#, D) poprimaju osobine dinamičkih jezika. To zacijelo ne bi bilo tako da su dinamički jezici meteor koji će brzo izgorjeti. Prije bih rekao da će se slijedećih godina još više koristiti. I Java i .NET platforme uveliko koketiraju s njima, a tu su još i sve bogatije Internet aplikacije koje su nepomične bez dinamičkih jezika.

Čini mi se da autor pogrešno pretpostavlja da dinamičke jezike uglavnom koriste adolescenti. To nije istina, oni su samo najglasniji. Koriste ih i stari jarci. ;-)



Komentari

28. travnja 2007. 19:15

Zanimljiv post, kao i uvijek. Prvo bih se osvrnuo na broj linija koda. Da, slazem se da sam jezik moze utjecati na krajnji broj linija, ali on najvise odnosi koliko dizajner aplikacije i programer(i) rade "reusable code". Osim toga, veci broj linija koda ne mora nuzno znaciti lošiji kod, primjer bi bio: loš programer moze u jednu klasu strpati sav kod, sve natrpati u jednu funkciju, dok bi dobar programer kod podijelio u nekoliko klasa ovisno o namjeni, MVC model je klasican primjer toga. Tada bi taj kod sigurno imao više linija koda, ali bi definitivno bio bolji od prvog. U objektim jezicima nepisano pravilo dobrog programiranja je "programing by interface not by implementation" što forsira veci broj klasa, a po meni, definitivno je je ovo pravilo bitnije od smanjenja broja linija koda. Povecanje broja linija koda na mikrorazini (razini konkretnih klasa i paketa) moze rezultirati smanjenjem na razini cijele aplikaciji - zbog reusebility-a.

Što se tiče dinamičkih jezika, u prvom sam postu na svom blogu stao na stranu statičkih jezika, no priznajem da i dinamički jezici imaju svojih prednosti. Najveca prednost dinamičkog jezika je , IMHO, to što se u dinamičkim jezicima može napisati kod koji je više reusable nego u statičkim jezicima.

No. isto kao što ti kažeš da otkrivanje grešaka u compile time-u nije toliko bitno jer čak i ako otkriješ sve "type casting" greške još uvijek ne znaci da je program bez grešaka druge vrste, ja bih mogao reci da ako ti dinamički programski jezik omogućava automatsko pretvaranje tipova to puno ne pomaže jer ti ipak tocno moraš znati s kojim tipovima radiš pa je jedina prednost nešto manja kolicina koda. Međutim, ukusi se razlikuju, pa je nekom bitnije to, a drugima (uključujući i mene) ,to da je iz tipa varijable vrlo jasno s čime radim i što radim, te da IDE tocno zna koje funkcije ima pojedina instanca prilikom koristenja code completitiona.

28. travnja 2007. 20:10

Sad si pak spomenuo Navision. Imaš li kakvih iskustava s Navisionom? Kad spominješ količinu njegovog koda, misliš li samo na C/AL kod (C/AL je jezik u kojem se programira Navisionova poslovna logika) ili i na kod (C?) u kojem je pisan sam Navisionov klijent i prateće aplikacije (NAS, Business Analytics itd.)? Btw, nisi mi odgovorio na pitanje o iSiteu.

28. travnja 2007. 20:57

Navedeni podatak je za inačicu iz 2001. godine i nije točno naznačeno što sve obuhvaća navedeni broj. Odgovoreno.

28. travnja 2007. 21:08

Mali prilog za pogled u budućnost dinamičkih jezika:

28. travnja 2007. 21:08

Po meni su takve diskusije besmislene da li je dinamcno bolje od statickog, da li je perl bolji od phytona...

Svaki je programki jezik bio napravljen u oderednom vremenu i sa namjerom da rijesi odredeni problem..

29. travnja 2007. 19:38

Prica je ovdje jedostavna, ponavlja se ciklicki svakih tjedan-dva a glasi ovako:

Vuk voli Python i on onda ide okolo po webu i trazi ljude koji takodjer vole Python. Ti ljudi obicno onda vole i open-source, vole dinamicke jezike, mrze Microsoft, itd, itd, i oni o svemu tome pisu uvijek jedne te iste stvari, a onda nam ih vuk (uvijek jedne te iste stvari!) prenosi ovdje na svom blogu: python rulez - ruby sucks! Open source rulez - MS sucks, dynamic languages rulez - static sucks, imperative programming rulez - functional sucks, i iznad svega: "pragmatic" programer's principles rulez!

Sve smo mi to ovdje vec culi barem 800 puta, daj malo "promijeni plocu".

Jer dobro, vec i vrapci na grani znaju: volis python, volis open-source, ne volis Microsoft. Mislim da bi ta jedna jedina recenica, da je stavis ovdje na blog, pokrila 99% onoga sto zelis reci u svojim storijama, jasnije i konciznije! Pa onda reci tako, covjece!

Jer da je suprotno, onda bismo valjda vidjeli i jos pokoju stvar osim vec ofucanog skrati-net-a, zar ne? Zao mi je uvijek kad vidim da se covjek koji ima potencijala ovako suludo gubi na glupostima!

29. travnja 2007. 20:11

Autor nije biased nego kriticki gleda clanak objavljen od strane uglednog izdavaca (IEEE). Citajuci claimove u originalnom clanku i kako ih Hacknot "napada", moram se sloziti sa Hacknotom da je clanak u IEEE-u de facto biased sranje.

Ono sto zaista skracuje programe i uklanja greske je to sto dinamicki jezici, uz svoju dinamicnost, takodjer dopustaju i funkcionalni stil programiranja (closures, itd). Postoje staticki, strongly-typed jezici, koji zadrzavaju kratkocu i jasnocu izraza (u odnosu na npr. Javu), a istovremeno se i kompajliraju u native kod. Npr. SML, Ocaml ili Microsoftov F# (za koji nisam siguran postoji li native kompajler). Guess what - svi podrzavaju funkcionalnu paradigmu.

Autor IEEE clanka (pretpostavljam Deibel) je definitivno u krivu ako tvrdi da je dinamicnost to sto olaksava pisanje programa i skracuje kod. Jedini Hacknotov propust je sto nije spomenuo raspolozivost funkcionalnog pristupa u dinamickim jezicima. To bi ucinilo njegovu kritiku jos jacom.

(Eh da, citat: "static type declaration and syntactic sugar" - Deibel ocito nije upoznat sa istrazivanjima u podrucju type inferencea [Milner] i da je staticki strong typing moguc bez eksplicitnih deklaracija tipova. U svakom slucaju, slozio bih se s Hacknotom da je Deibelov tekst de facto marketinski srot).

29. travnja 2007. 20:27

Citajuci ovaj Hacknot-clanak, posebno sam zapazila ovo: "For instance, I notice that in "Programming Ruby", at the top of Dave Thomas' list of techniques for debugging Ruby problems is "Run your scripts with warnings enabled" — in other words, examine the sort of information that a compiler would already have given you, were you using a static language! This tendency to exaggerate the advantages of some language feature while deliberately ignoring the disadvantages of that same feature is characteristic of much DL advocacy."

Moram priznati da se u ovome definitvno slazem s gore recenim - i samu me iznenadilo Thomasovo pozivanje na smijesnu "ruby -w" tehniku!

Inace, kad smo vec kod funkcionalnog stila, C# ce u svojim novim inkarnacijama imati sve vise elemenata funkcionalnih jezika, sto smatram da je dobro: naime, jos od Turinga vs Von Neummana postoji taj dualizam u definiranju "kompjutabilityja" i stalne carke oko toga je li bolji imperativni nacin ili funkcionalni. Za mene, prava istina je: treba znati i razumjeti i jedan i drugi, a pravi programski jezik u sebi mora imati odlike i jednoga i drugoga.

30. travnja 2007. 10:23

@math_baby: tu uporno ponavljaš svoju subverzivnu djelatnost, a niti volim Python niti mrzim Microsoft, osjećaje čuvam za ljude. A čak niti među ljudima ne bi mogao izvojiti nikoga za koga bih mogao reći da ga mrzim. Budući da se, iz tvoje perspektive, sadržaj ovog bloga može svesti jednu rečenicu onda nema smisla da ga dalje posjećuješ. A svima je jasno tko cijelo vrijeme vrti istu ploču.

30. travnja 2007. 10:29

Napisi novu aplikaciju, pa se onda javi... :) A premda se sadrzaj ovog bloga zaista moze svesti na tu jednu recenicu, ja cu ga i dalje posjecivati, jer me to zabavlja! ;)

A ti pokazi svoju otvorenost i toleranciju i prema tvojim "non-klimateljima"

a) otvori svoj kod od skrati.net-a, jer ga do sada skrivas kao zmija noge b) nemoj me opet banati, jer mi je ovdje bas super! :)

30. travnja 2007. 10:32

Eh, zaboravila sam te pitati: a zasto je moja djelatnost subverzivna? Ja nekako mislim da vi svi volite citati moje komentare, sto je potvrdjeno i onda kad je link na moj blog bio najposjeceniji link na skrati.net-u?

Vuk, daj odrasti vise: shvati da nekad u zivotu moras imati i oponente a ne samo "klimatelje" - to je uvijek dobro za zdravo odrastanje! :)

30. travnja 2007. 11:46

a) svi oni koji me na e-mail su zatražili cijeli kod ili njegov dio dobili su to bez problema. Sva trojica. Otvaranje koda bi trajalo duže nego njegovo pisanje pa to nema smisla.

U životu je interesantno imati oponente, ali ne one koji cijelo vrijeme vrte jednu ploču. Dosadna si.

30. travnja 2007. 12:57

@math_baby: da li ti imas zivot ili samo pricas o micro...?

30. travnja 2007. 14:17

@ vuk: Ja pricam isto, ali isto radis i ti, tako da ne vidim u cemu je problem.

@misko: ne, ja nemam zivot. Samo pricam o micro... :) Zadovoljan?

3. svibnja 2007. 20:44

Vuk kaze: "Otvaranje koda bi trajalo duže nego njegovo pisanje pa to nema smisla."

Ja odgovaram: da, fakat bi otvaranje koda jaaaaaako dugo trajalo: stavis link za download na web i kazes da ga izdajes pod tvojom milom GP-licencom, i to je to!

Ali naravno, jasno je da ti to ne zelis uciniti: kada bi ti stavio svoj kod u javnost, vrlo brzo bi se u njemu nasli sigurnosni propusti, razni XSS-bugovi, razne SQL-injection bugovi i tome slicno, pa bi ti netko tako zlocest i pametan poput moje malenkosti mozda mogao hakirati tvoj velebni uradak! :)

E moj Vuk, zalosna su tvoja jalova i neuvjerljiva opravdavanja zbog nepodastiranja svog koda na uvid. Jos jednom te pozivam: practice what you preach!

3. svibnja 2007. 21:26

Nisi dobro odradila domaću zadaću, okruženje koje koristim se već brine o takvim stvarima. Pogledaj si malo kako to ide s open source programima, treba to baciti u neki source control sistem, treba napisati dokumentaciju, spakirati ga , ulickati. I onda kad to napraviš onda slijedi gomila mailova ljudi koji to nisu uspjeli instalirati zato što nisu čitali datoteku INSTALL.

Ne pada mi na pamet da sad ja to sve spakiram da bi ti po tome mogla čeprkati iz čiste zlobe. Kao što rekoh, oni koje je zanimao kod i koji su ga lijepo zatražili ti su ga i dobili.

Zapravo potrudio bih se da to sve obavim kad bi se netko obvezao da će napraviti dodatne funkcionalnosti koje imam na TODO listi (dodavanje korisnika, mogućnost personifikacije kratica, otvoreni API za mashupiranje). Ako si spremna za to već ovaj vikend sve dižem na sourceforge. Ali garancija nekakve math_baby mi ništa ne znači, od onoga kome ću prepustiti projekt očekujem da svojim imenom i prezimenom te kratkim CV-om potvrdi svoju vjerodostojnost.

4. lipnja 2008. 10:59

zivcira ova math baby pravi se pametna bas me zanima na sta lici to stvorenje