sobota 5. ledna 2008

Closures: opravdu děkuji, ale nechci

Po přečtení výborného článku Java: Evolutionary Dead End z pera Bruce Eckela a prohlédnutí prezentace Closures controversy Joshuy Blocha ve mě definitivně uzrálo přesvědčení, že closures opravdu, ale opravdu v Jave nechci.

Souhlasím s Blochem v tom, že na komplexnost dané vlastnosti jazyku není možné nahlížet izolovaně, ale musíme na ni nahlížet v kombinaci s všemi dalšími vlastnostmi jazyku. To samozřejmě znamená netriviální zvýšení komplexnosti, kterou sebou každá nová vlastnost přináší.

...that it's not just the complexity of a particular feature in isolation, where it can often seem fairly straightforward. It's the combinatorial complexity that you get when you combine a new feature in every possible way with the other language features. When you shoehorn a feature into an existing language rather than carefully designing it in from the beginning, you cannot control how that feature combines with other existing features. The combinatorial complexity can produce horrifying surprises, typically after the feature is added when it's too late to do anything about it.

Krasným potvrzením výše vyřčeného jsou generické typy (generiky) přidané do Javy 1.5. Dovolím si odcitovat z článku BGGA closures: The end of many Java careers.

It would be a mistake to evaluate the complexity of BGGA in isolation. Indeed, the 427 page generics FAQ, for instance, doesn't talk about generics in isolation. In reality, it is the interaction of generics with other language features that makes generics so hard to master. Its a curious coincidence that Angelika Langer on the generics FAQ thanks 3 of the 4 BGGA authors for patiently answering "countless questions posed" regarding generics. You'd expect that the BGGA authors' first initiative would be to simplify generics and make its behavior & interaction with other language features more predictable, instead of attempting to make changes that further convolute the type system and add cognitive load to the language for little benefit.

Je na místě si položit otázku, co stojí za snahou rozšířit Javu o closures. Eckel nabízí zajímavou paralelu pro generiky.

This was remarkably coincidental with the appearance of generics in C#, which also appeared to produce several other features in Java 5. It seems that the urgency of these features came not from solving true problems in the Java language, but in Sun trying to maintain the perception of competitiveness against Microsoft's C#. This is probably not so far off the mark, because the reason that Java had to be rushed out in rough form in the first place was the belief that there was a market window that must be captured. A programming language designed by following marketing impulses is eventually going to end up chasing its tail.

Z mého osobního pohledu nepřináší BGGA návrh Closures (BGGA je akronym složený z prvních písmen příjmení autorů návrhu, tedy: Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahé) téměř žádnou výhodu oproti problémům, které nastanou.

Moje problémy s closures:

  • vzroste složitost syntaxe vedoucí ke kódu, který bude těžko čitelný a spravovatelný
  • nejasný problém kolem komplexnosti vzhledem k dalším vlastnostem jazyku
  • zpětně nekompatibilní změna
  • nejasná motivace, komu to prospěje?

Snaha udělat z Javy multiúčelový jazyk, alespoň tak se mi to zdá v případě closures, se ve výsledku obrátí proti Jave samotné - myšleno jazyku. Povede k tomu, že po rysech z funkcionálních jazyků se do syntaxe začnou přidávat rysy například jazyků určených pro konkurenční zpracování jako Erlang. Infrastruktura Javy, tedy JVM, nabízí dostatek možností, abychom mohli speciální požadavky realizovat jazyky, jejichž design byl navržen s ohledem na tyto požadavky.

Bloch ve svojí prezentaci nabízí zjednodušenou formu closures. Ja bých jeho návrh označil za takové syntaktické cukrátko. A to je pro mě osobně asi maximum toho, co jsem schopen akceptovat v dobré víře jako alternativu anonymních vnitřních tříd.

Starší související články

úterý 1. ledna 2008

O komplexnosti

Je opravdu Java tak neefektivní pro tvorbu webových aplikací a nebo je to jenom mýtus? Jednou z nevýhod Javy, která bývá často vznášena, je přílišná komplexnost. Mezi další nevýhody patří hosting a deployment. Zpět k té komplexnosti Javy pro webové aplikace. Položme si otázku, co za tou komplexností vězí.

Kdy jsem se o tom bavil s Vlastou Vávrů, kerý může porovnávat svět Javy i PHP, tak z naší diskuse vyplynulo, a nebo jsem si to alespoň tak přebral, že tvorba webových aplikací v Jave vyžaduje mnohem větší znalosti. Skončili jsme u oddělení vrstev, řízení transakcí, optimistickém zamykání dat a nebo ORM frameworků. Klíčové je položit si otázku, jestli všechny tyto technologie a postupy musíte použít.

V Java světě vám každý druhý řekne, že samozřejmě ano. Máme o tom spoustu informací, takže funguje něco jako všeobecné povědomí. Povědomí: "Chceš dělat webovou aplikaci? Na to potřebuješ technologii X a transakce a ORM řešené Y atd.". Ve skutečnosti stačí obyčejné JSP a Servlety a standardní API Javy. Pokud si to připustíme a budeme ignorovat infrastrukturní problémy, které jsem zmínil na začátku článku, pak je komplexnost zvoleného řešení (JSP, Servlety, J2SE API) srovnatelná s PHP.

Jenže v zápětí vám každý zkušenější webový vývojář omlátí o hlavu, že je potřeba oddělit data od jejich prezentace. Takže na jakékoliv platformě skončíte u nějakého MVC frameworku. Tím je ovšem přidaná další úroveň komplexnosti. A takhle se v tom vrstvení komplexnosti dá pokračovat dále. Klíčové je uvědomit si, jaká úroveň komplexnosti je pro danou aplikaci ještě akceptovatelná a tu nepřekročit.

Nemůžeme jednoduše říci, že stavět webové aplikace nad RoR je jednoduší než v Jave a nebo v PHP. Vždycky totiž musíme vzít v úvahu míru komplexnosti, kterou vyžaduje daná aplikace. Na druhou stranu si myslím, že některé webové aplikace tvořené v Jave si vlastní komplexnost zvyšují uměle a jsou předesignované. Ale to podle mého soudu není důvod považovat obecně Javu pro tvorbu webových aplikací jako příliš složitou a komplexní.

neděle 30. prosince 2007

Malá bilancující glosa

Nevím, mám-li na konci kalendářního roku 2007 rekapitulovat věci minulé a nebo se pouštět prognóz ohledně věcí budoucích. Zvolím tedy od každého trochu, aby bylo vyváženosti této glosy učiněno zadost.

Vezmu to trochu obšírněji a začnu tím, že je to pět let co tu s vámi, tu s větším, tu s menším úspěchem, koexistuji formou tohoto blogu. Když jsem v roce 2OO2 začínal, bylo tu pár blogů, tenkrát se jim říkalo weblogy (asi podle zaměření na web), jako Sova v síti a nebo conBlog. O Jave tenkrát nepsal nikdo a ani já jsem neměl nějaké přehnané ambice. Dnes jsem napočítal ve své RSS portfóliu sedm pravidelných českých blogů zaměřených především na Javu. Další blogy vznikají a je o nich čas od času slyšet především skrze Java.cz.

Ještě před dvěma lety bylo něco jako setkání České java komunity spíše zbožným přáním. V roce 2007 jsme se v rámci CZJUG sešli celkem desetkrát. Pro rok 2008 máme zajištěný program (REST, GlassFish clustering, performance) na následující dva měsíce a v zásobě několik možných témat (bezpečnost, OSGi) pro setkání budoucí. Neméně pilně chystáme další díly nepravidelného podcastu.

Nyní trochu něco osobního. Když jsem tady před těmi pěti lety začínal, měl tento blog jediného čtenáře a to jsem byl já sám. Potom se začali návštěvníci nabalovat a jejich počet roste neustále, což mi dělá velkou radost. Postupem času jsem začal zjišťovat, že tento blog čte i plno kolegů, což mi nejednou přivodilo horké chvilky, když jsem si pustil pusu na špacír. Od jisté doby už vím, že je neradno brát si beztrestně na paškál kolegy z jihovýchodní Asie, protože i tam se dostala čeština.

Popravdě řečeno ani pořádně nevím, co nás v následujícím roce čeká za události v Java světě. Ani si s tím nehodlám lámat hlavu, protože těch událostí bude určitě taková záplava, že vybrat z nich nebude problém. To svědčí o tom, že Java jako platforma je zralým a fungujícím ekosystémem, který má před sebou budoucnost. Samozřejmě i Java má před sebou několik výzev a tou nejvýraznější je podle mého soudu hozená rukavice v podobě efektivity vývoje. Uvidíme, které z nich a v jaké míře, se podaří naplnit.

Co by to bylo za bilancující článek, kdybych Vám nepopřál do nového roku. Nuže milí čtenáři, přeji Vám do roku 2008 především hodně zdraví, protože všechno ostatní si koupíme ;-)...