Pár důvodů, proč nemám rád .NET a C#

Ti, kdo mě alespoň trochu znají, tak už to o mně dávno ví. Jsem javista a vyvíjím pod linuxem. Kdykoliv mám vyvíjet pod Windows tak nadávám. A co teprve, pokud mám vyvíjet v jazyce či na platformě, kterou si sám Microsoft vytvořil. A k nim pochopitelně patří i jazyk C# a platforma .NET.

Vzhledem k tomu, že jsem nyní nucen příležitostně v tomto jazyce vyvíjet, mám alespoň částečnou možnost srovnávat. Srovnávat C# s Javou. Ale taky s tím, co by – podle mě – mělo být správné, nebo co by se mně osobně líbilo.

Vývojář

Microsoft. To je kapitola sama pro sebe (a že pokud nebudu po uveřejnění toho článku ukamenován, mám v plánu něco napsat). To, že je celá platforma .NET v režii společnosti Microsoft beru jako jednu z nejvýraznějších nevýhod. Jednak člověk na každém rohu naráží na totální přešlapy, které jsou pro produkty Microsoftu typické. A pak – platforma, která je vyvíjena jednou(!) a ještě navíc komerční(!) společností, to nemůže vést k ničemu dobrému. Je to jako být si sám sobě oponentem u akademické práce nebo plodit potomky se svou vlastní sestrou. To zřejmě eliminaci oněch přešlapů moc nenapomáhá.

Co však asi napadne každého: uzavřenost, nepřenositelnost a nerozšiřitelnost. Pro mě jako pro javistu je to naprosto nemyslitelné. Na druhou stranu – abych zase jen nekritizoval – tyto tři vlastnosti vedou i k výhodám, jako je optimalita a odladěnost.

Vývojové prostředí a nástroje

Microsoft vydává vlastní vývojové prostředí, Microsoft Visual Studio. Už jen ten název – co má společný vývoj software se slovy vizuální a studio (s názvy produktů si obecně v Microsoftu hlavy nikdo moc neláme – stačí říct Internet Explorer nebo Windows)? Má to prý umět úplně všechno. To asi ano (ač jsem nikdy nepoužil víc jak 5% toho, co by asi tak mohlo nabízet), takže je těžkopádné, náročné a často pomalé.

Opomenu-li některé dle mého názoru fatální po uživatelské stránce pochybení (např. IntelliSence, rádoby kontrola kódu ještě před překladem, nebo našeptávač, který v základu našeptává všechny identifikátory, na které kde narazil), tak – jedno IDE je prostě špatně. Znám spoustu lidí, co na MS VS nadávají, ale – prakticky nemají možnost změny.

A to ani nemluvím o úplné absenci nějakého jednoduchého (ne nutně konzolového) nástroje. Čekám, kdy budu muset spouštět VS jenom proto, abych opravil překlep na webové stránce. Nemluvě o migraci projektu („solůšny“) mezi verzemi VS a vůbec – celý deployment aplikací. Pro Javistu, obzvlášť pracující na libovolném unixu, je projekt složka se zdrojovými kódy (a dalšími „resources“) a obvykle jeden konfigurák, který se stará o projekt jako takový. IDE slouží jen jako nástavba, není žádný problém se o veškerou konfiguraci a deployment projektů starat ručně (vše je standardizováno a zdokumentováno).

Jazyk C#

Nu, můj první dojem (který trvá doposud) byl: „Oni se asi drží pravidla čím kratší kód, tím míň chyb.“ A tak do jazyka vkládají spousty udělátek, které jej komplikují, ve snaze snížit délku napsaného kódu. Programátor je tak obtěžkán nutností myslet také na prvky jazyka, nikoliv jen čistě na programování.

Také často říkávám, že C# je slátanina VisualBasicu a C++. Hraje si na vysokoúrovňový jazyk, ale přitom používá tak primitivní a nízkoúrovňové nástroje, jako je např.  :  (zápis pro dědičnost) namespace  či enum  a struct . Namespace působí, jako nástroj, který má zabránit kolizím názvů a ne jako nástroj pro strukturizaci projektu. Výčty sice najdete i např. v Javě, ale mnohem propracovanější a použitelnější. Struktury Java nemá vůbec – v Javě je (kromě primitivních datových typů) všechno objekt.

Vlastnosti – nástroj, který má programátora ušetřit od psaní zapouzdření. Jenže i zapouzdření jsou metody. A proto by se s nimi podle toho taky tak mělo zacházet. Gettery mohou být parametrizované (a to často častěji než neparametrizované), navíc umožňují i smysluplnější pojmenování (např. find nebo create). Rozdíl klíčových slov  readonly , const a proměnné bez setteru nechápu doteď.

Třešničkou na dortu jsou pak kolekce. Tedy vlastně nejsou. Mám na mysli javovské kolekce, které totiž v C# úplně chybí. Většina C# programátorů říkává: „Když vím, kolik toho je, použiju [ ] , jinak List<> .“ A co když budu potřebovat rychle vyhledávat (přidávat, odebírat)? A nebo automaticky objekty uspořádávat? A nebo nemít duplicity? A v neposlední řadě – já osobně se polím vyhýbám jak jen to jde (vždyť je to prehistorický nástroj, který, jak známo, např. Python už nemá vůbec).

Závěrem

Je toho pochopitelně ještě mnohem víc. Například konvence – ostré závorky na samostatných řádcích mě vyloženě vytáčí, kód je pak strašně roztahaný – a tím i pro mě nepřehledný. Také mi vadí podtržítka v názvech proměnných a vlastnosti psané s velikým písmenem – tedy stejně jako třídy. Ale, co by jste chtěli, když nemáte  getProperty  a setProperty ? Hold je potřeba si dopomoct nějakým umělým způsobem.

Sečteno, podtrženo, C# na mě působí „neprofesionálním“ dojmem. To znamená, že se snaží co nejvíce ušetřit práci programátorovi na úkor toho, že ho často přiměje k porušení (resp. nedonutí k dodržení) některých nepsaných pravidel programování. Jeden příklad za všechny – klíčové slovo  partial . Proč používat další nástroj pro rozdělení kódu třídy do více souborů, když máme dědičnost a agregaci/kompozici? Pak člověk zjistí, že minimálně dva jeho kamarádi (a to programují v C# minimálně tak, jak já v Javě) nepoužívají, nebo používají nesprávně něco tak základního, jako je dědičnost.

Na druhou stranu, jak jsem zmínil na počátku – nespornými výhodami je fakt, že platforma .NET je odladěna na míru operačnímu systému Windows, takže je to (oproti Javě) určitě rychlejší. A díky tomu, že se nikdo nezabývá přenositelností, tak mnohdy i jednodušší (typický příklad – lomítka v cestách k souborům).

A to hlavní – vývoj je tak rychlejší a levnější (a z mé zkušenosti v C# programují lidé s nižší kvalifikací). Čímž se ovšem dostávám k tomu, že u programování se prostě musí přemýšlet, což si často lidé bez patřičného vzdělání moc neuvědomují. Zeptejte se třeba Donalda Knutha, koneckonců je to jeho myšlenka. Bez přemýšlení prostě programování nebude programováním, ale psaním příkazů do souboru. A mám pocit, že Microsoft se občas trošku snaží razit právě touto cestou.

Lustr

Když může televize Nova vysílat reportáže o tom, proč padá chleba namazanou stranou dolů, proč bych já nemohl napsat o tom, jak jsem montoval lustr?

Bylo krásné jarní nedělní odpoledne. Až moc krásné na to, abych jej trávil u počítače prací. Nicméně – ven se mi tak nějak ani nechtělo, bylo mi totiž jasné, že by stejný nápad měla polovina města. Rozhlédl jsem se tedy kolem sebe a říkal si, co bych tak mohl dělat doma.

Při procházení bytem jsem však pozoroval všude jen potřebu nudných rutinních domácích prací. V tom jsem ale zakopl o nenápadnou krabici.

Byla to krabice s lustrem. Ano, s lustrem (stropním svítidlem chcete-li). Octnula se tam totiž docela náhodou.

Někdy na podzim jsem zpozoroval, že v nejmenovaném obchodním řetězci s nábytkem a domácími potřebami vyprodávají jeden typ lustru. Vzhledem k tomu, že sestřin pokoj se snažil působit relativně moderně a přívětivě, tak žárovka visící ze stropu (dobře, a ještě spolu s hradbou postavenou z U-101 skříněk pocházejících z UP Rousínov, n.p.) celkový dojem silně kazila.

Díra sem, díra tam

Jal jsem se tedy ono svítidlo zakoupiti. Po jeho rozbalení jsem zjistil, že k jeho montáži postačuje „pouze“ přichycení dvěma šroubky ke stropu. Vzhledem k tomu, že vrtačka, kterou disponuji doma by šla použít stěží jako ruční šlehač, natož jako něco, čím udělám díru do železobetonového stropního panelu, kontaktoval jsem mámu.

Její přítel je totiž velký kutil a z nářadí má téměř všechno a co ne, tak milerád dokoupí (mimochodem – kdybyste někdo měli pár hektarů pole na poorání, napište, na to taky máme mašinku). Jenže znáte to – bydlí na druhém konci města, pracuje na tom třetím, takže co by pohledával u mě? A ještě navíc s vrtačkou?

Takže se to tak nějak pořád odkládalo, pak přišly Vánoce, chřipková epidemie, zkouškové a až – konečně tu stojí ve dveřích mámin přítel s vrtačkou v ruce. Opět otevírám krabici s lustrem, beru ho do ruky odměřuji si díry a vrtám. Půl půl roku čekání, půl minuty vrtání a je hotovo. Nevadí, poděkoval jsem, rozloučil se a lustr opět schoval se slovy, až budu mít čas, tak ho tam přichytím a zapojím.

Kabel – kabel – kabel

Tedy do dneška. Opět jsem tedy otevřel krabici a vrhl se do díla.

V těle lustru (jak budu říkat té plechové vaničce připláclé ke stropu) byla připevněna (napevno) čokoláda, která rozváděla elektřinu do tří esteticky pozohýbaných a navzájem propletených kovových trubiček, které měly být zakončené skleněnými baňkami s žárovkami. Hned mi bylo jasné, že ten 30let starý hliníkový přívod, který lustr napájí, do této čokoládky opravdu nedostanu.

Musel jsem tedy na stávající, ze stropu trčící, asi pěticentimetrový hliníkový fragment kabelu (při demontáži původního světla se u nuláku ulomilo dalšího půl centimetru, drželo to pohromadě jen silou vůle) napojit kabel, který měl propojit čokoládku u stropu s čokoládkou v těle světla.

Už v ten moment mi bylo jasné, že vecpat dvě čokolády a kus kabelu je propojující do malé plechové vaničky nebude vůbec nic lehkého. Nicméně – ustřihl jsem si kus kabelu, jak mám ve zvyku odizolované konce zapájel a šel ho zapojit. Problém číslo 1: V jedné ruce držím šroubovák, v druhé ruce světlo. Jak přesvědčím ty vodiče, aby se zasunuly do čokolády a vydržely tam, než je utáhnu?

Po chvíli experimentování jsem si vypomohl igelitovým obalem, ve kterém byl celý lustr v krabici zabalen (lustr jsem tak udržoval u stropu jen pomocí dvou prstů). Elektrickou část jsem tedy měl celkem úspěšně za sebou.

Když jsem začal lustr přišroubovávat ke stropu, začal se však cukat. On totiž měl být upevněn na principu „bajonetu“ (lustr se nasadil přes šroubky, pootočením se usadil a šroubky se dotáhly).  Křivostí stropu (nebo vyvrtaných děr) ale spíš faktem, že nikdo nepočítal s tím, že se dovnitř bude muset vměstnat o čokoládu víc, se světlem prakticky nešlo pootočit. To znamená, že nezávisle na dotažení šroubků světlo šlo k zemi stejně snadno jako jsem ho ke stropu přitlačil já rukou, tedy bez ohledu na nějaké šroubky.

Přisunul jsem si stůl a vlezl na něj, abych se do toho mohl trošku víc opřít. Chvíli jsem s lustrem hýbal, až se mi ho podařilo nějak znásilnit, aby mohl držet alespoň na 1 a půl šroubku (a když jsem viděl, jak se začíná plech okolo šroubků deformovat, raději už jsem to tak nechal).

Zdobení vánočního stromečku

Nyní přišla závěrečná fáze – montáž baněk. Každá (z těch estetických) trubiček byla zakončena plastovou objímkou na žárovku, která měla zvnějšku závit s matkou, kterou se měla přichytit baňka. Baňka měla pro tento (a jistě také estetický a termoregulační) důvod v přední části otvor.

Dobře, nasadil jsem tedy baňku na objímku, prostrčil otvorem matku a že ji zašroubuji. Záhy jsem ale zjistil, že mé prsty jsou na to moc krátké – sotva jsem dosáhl na objímku, natož abych na ni našrouboval matku. Kleště sice byly dlouhé tak akorát, ale – tentokrát byla zase pro změnu moc široká matka. Zkusil jsem i kleště na porcování drůbeže, ale také bez šance.

Nakonec jsem to vyřešil tak, že jsem baňku vycpal vším, co bylo po ruce (sáčky od součástek světla a bublinkové igelity z krabice), do toho zarazil prsty a začal točit. Točil jsem tím, co bylo vevnitř, točil jsem baňkou a ono to prostě donutilo otočit se i tu matku. Připadal jsem si sice, jako policista, když šroubuje žárovku (znáte to, jeden drží žárovku, 4 točí stolem – akorát tady jsem na to byl sám), ale fungovalo to!

Když jsem takto montoval třetí baňku, zjistil jsem, že když poté přitlačím baňku k matce a začnu s ní otáčet, kupodivu rozpohybuje i matku. S radostí, že budu moct tímto způsobem dotáhnout všechny baňky tak, aby nezačaly cinkat pokaždé, když někdo udělá krok, začal jsem zpětně dotahovat zbylé dvě.  K mému překvapení jsem při dotahování druhé uslyšel slabé křupnutí a zpozoroval hrstku střepů, jak se řítí k zemi. Kousek baňky se prostě jen tak ulomil. To už jsem opravdu nadával.

Budiž světlo!

Dobře, tak už jsem raději nechal utahování a našrouboval jsem tam žárovky a šel to zkusit. Nu, první dvě minuty elektronika v žárovkách bzučela jak bulharské transformátory, pak se trošku uklidnila. Světla lustr dává docela dost, jen přece jen vypadá trošku vyjukaně na tom starém socialistickém stropě. Nebo si možná budu muset jen zvyknout na to, že lustr konečně nějak vypadá.

Závěrem bych chtěl dodat, že výrobci nábytku a bytových doplňků občas produkují pěkné kousky. Schválně – kolikrát se vám stalo, že se vám při skládání třeba stolečku zatoulala jedna matka? A zrovna taková, která měla asijský závit, a nebyla nikde k sehnání.

O kvalitě by se také dalo polemizovat. Je to sice jen lustr, tedy něco, u čeho se nepředpokládá, že bude nějak extrémně zatěžován a namáhán, ale – co montáž? Stačí, aby se vám špatně chytil šroubek (nebo spíš vrut) a už to není to, co v testovací laboratoři schválili a – pak se divte, že je to křivé.

Jo a také se hodí občas mezi těmi bublinkovými igelity vyhrabat návod. Třeba v něm zjistíte, že někde v hloubi té krabice se nachází nějaký jednoduchý nástroj, který slouží k dotahování matek (tak jako tomu právě teď je v mém případě).

Když už nic, alespoň jsem si doplnil zásoby bublinkového igelitu. Takže až zase budu ve hodně nervózní, mám co praskat.