images/logo.png
SHWB na blogspot  | Uživatel: Nepřihlášen

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.

17.11.2016
Přidat názor:
Vyhrazuji si právo libovolný komentář smazat bez udání důvodu. Kritika mi nevadí, ale chci omezit anonymní výkřiky, které nemají s tématem nic společného.
V textu je možné používat HTML tagy a tuto zjednodušenou MarkDown syntaxi
Jméno
Text
Postřehy:
31.07.2019: Arduino 01 - Motivace k elektrotechnice
To jsem se jednou, nechci říct nudil, ale zkrátka jsem narazil na knihy "Porty, bajty, osmibity" a "Hradla, volty, jednočipy" od Martina Malého z produkce sdružení NIC.CZ, které jsou volně dostupné na knihy.nic.cz.
extravaganza.controverso@seznam.cz: Zdravím, krásný a informacemi nabitý blog. Musím pochválit. Plánuji rozjet undergroundový zin, co by se týkal black matalu, ambientu, satanismu, left hand
Poslední diskuse Postřehy
O programování 06 - Návrhové vzory - síla i slabina Javy
P.S. samozrejme "Context" mel byt "Client" .. To jsem jen narazil na nejak divne pojmenovany diagram.. (Context je samozrejme trosku neco jineho...)
...
David | 25.02.2017
O programování 06 - Návrhové vzory - síla i slabina Javy
To k cemu jsi dosel (tedy implementace LooperRunner + ILoopMethod), tak je ta prava Strategy by GoF :) To co je tam dulezite je ze Context (LooperRunner) je oddeleny od Strategy (ILoopMethod),
...
David | 25.02.2017
O programování 03 - Přehlednost funkcionálního zápisu v Java 8
Máš pravdu, to map je tam zbytečné. Odněkud jsem to opsal a nezkontroloval. Tím ovšem trochu padá pointa celého článku.
...
Saha | 14.12.2016
O programování 03 - Přehlednost funkcionálního zápisu v Java 8
Jen takova otazka k tomu druhemu prikladu:
Proc tam tu cast s "map" ktera de facto s prvky toho streamu nic nedela? Nestacilo by
list.stream().reduce(0, Integer::sum);
?
Ja teda moc
...
David P. | 13.12.2016
Paleo na půl - 01 - První tři dny bez mléka
Kvalitní hořké čokolády jsou bez mléka.. :) (a to i ty méně "kvalitní"). Mléko bývá součástí jen těch "sladkých".
...
David | 04.05.2015
Statistiky
Aktualizováno: 21.08.2019
Počet článků/fotek: 1374/13795
(C) Saha - 1990 - 2019 - Verze 1.3.32 - 11.05.2019 - Generated by SHREC 2.214
Veškeré zde uvedené materiály vyjadřují pouze moje soukromé názory (s výjimkou knihy návštěv a diskusí, kam může přispívat kdokoliv), a pokud s nimi někdo nesouhlasí, tak je to jeho problém, nikoliv můj.