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.

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

  1. Dovolil bych si několik poznámek k tomuto textu abych uvedl na pravou míru.
    1. Vývoj – .NET není uzavřený, zdrojové kódy jsou dostupné, za druhé portovatelnost je slušná. jedna MS platforma (včetně mobilních windows a xboxu), dále linux (Mono) a android a ios (xamarin ale ten není zdarma), i mikrokontrolery (.net micro framework).
    2. visual studio
    2.1 intelisence se potřebuje naučit a za 5 minut se opravdu nenauční slušně napovídat. po několika málo dnech už ano a dokáže napovídat velice dobře.
    2.2 rychlost visual studia – rozhodně není pomalejší než v javě napsané eclipse 😉
    2.3 Migrace solution – na novější verze bez problémů zpět to jednoduše nejde ale při migraci se defautně vytváří záloha.
    2.4 build z command lajny – je tu MsBuild. ve firme resime build a deploy projektu projektu pomoci scriptu ktere udelaji vse potrebne.
    3. C# – kolekce – existuje dictionary, klicem muze byt libovolny objekt pak se pro hledani pouziva hashTable a je to i docela rychle.
    4. Konvence psaní kódu a jejich vynucování – čistě věc subjektivního názoru ale mě příjde lepší když mi jazyk umožní psát jaké prasečiny chci. psát přehledný kód by měl každý programátor a příjde mi nesprávné když kompilátor vyžaduje nějaký styl formátování.
    5. Dokumentace – milovnící open source mi promiňte ale u žádného open source projektu jsem ještě neviděl tak dobrou a přehlednou dokumentaci jako msdn.com (jedinou mouchou jsou defaultní strojové překlady do češtiny ale dá se to vypnout)

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *