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. ;-)
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.