http://www.sklisen.cz/sahaweb/index.php

17. listopadu 2016

O programování 01 - Úvod

Programováním, potažmo tvorbou SW se zabývám nějakých 30 let. Začátky v šesté třídě na IQ 151 nelze brát vážně, ale seriózně se programováním zabývám více než 20 let. Za tu dobu jsem poznal kromě "běžných" procedurálních a objektových jazyků i jazyky funkcionální a logické (při studiu) i deklarativní typu SQL. Díky tomu uznávám sílu jiných přístupů, protože jeden správně napsaný update v SQL může mít stejnou sílu jako několik desítek řádků v Javě. 

Primárně mě však živí Java a tak mně před lety docela zaujalo, že se do Javy 8 dostaly rysy funkcionálních jazyků. Ovšem po letmém seznámení se s implementací jsem začal být skeptický a k využití nových rysů jsem se dlouho nemohl odhodlat. Až v poslední době jsem si s tím trochu pohrál v práci a následně jsem si chtěl soukromě porovnat výkonnost a přehlednost kódu. Výsledek mě však spíše zklamal a prvotní dojem byl ten, že implementace využívající funkcionálních rysů Javy 8 není ani časově výhodnější ani syntakticky přehlednější. Výkonnost nebyla cílem zavedení funkcionálních rysů, takže není fér tohle Javě vyčítat, cílem bylo umožnění funkcionálního přístupu, jenže způsob, jakým to řeší Java 8 se mi moc nelíbí a nepřijde mi přehledný.

Postupem času jsem ale tento názor korigoval, o tom však budou další díly. Také bych chtěl zdůraznit, že se rozhodně nevymezuji vůči vlastním konceptům funkcionálního programování, ty jsou super (možnost předat funkci jako parametr, mapování funkce na seznamy a další mohou výrazně zjednodušit a zelegantnit algoritmus), ale javovská implementace mi připadá jako syntaktický podvod, který není ani přehledný ani elegantní. 

Mým cílem je v následujících článcích implementovat pár základních algoritmů, které jsem v práci řešil klasickým cyklem foreach a jejich následné převedení do funkcionální podoby. Na tyto konstrukce se podívám z hlediska výkonnosti a hlavně přehlednosti zápisu, dále bych chtěl tytéž úlohy řešit v dalších programovacích jazycích, abych vysvětlil, proč Javovskou implementaci nepovažuji za elegantní. Ještě nemám jasno v tom, které jazyky použiji, mezi kandidáty patří Ruby, Haskell, Erlang a jím inspirované Clojura a Scala, lákala by mě i Lua. Možná dojde i na Lisp nebo Javascript, který také umožňuje zajímavé syntaktické konstrukce. Záměrně vynechávám Perl, protože tam by šlo vše napsat zhruba 30 způsoby více či méně čitelnými až nečitelnými. 

Tuto sérii článků beru i jako výzvu, protože se většinu z uvedených jazyků budu muset když ne naučit, tak alespoň oprášit letité znalosti. Navíc se posledních pár let zabývám spíše analýzou, architekturou a řízením a na vlastní kódování mi už nezbývá tolik prostoru a času. 

No a když už si s tou Javou budu hrát, tak si chci vyzkoušet některé konstrukce a postupy, které se tu doporučují, tu zase nedoporučují - jde o věci, které člověk běžně používá, protože někde někdo psal, že to tak má být, ale už není čas si to reálně vyzkoušet a ověřit.