Odpad vrací úder. Neúspěšně

Pátek 9. 01. 2009 • Ostatní

Celý čas předvánoční, vánoční, silvestrovský a novoroční plynul velmi zvolna a v ospalé atmosféře. Našla se spousta věcí, o kterých by se dalo napsat, ale lenost mě vždy přemohla. Ve velmi krátké době se vše vrátí do starých kolejí, avšak ještě než se to stane, tento článek si nemůžu odpustit. Minule jsem psal o programátorském odpadu a lhal bych, kdybych tvrdil, že jsem se neinspiroval mým okolím, avšak jednalo se pouze o zhruba 10% z celého článku. Dnes mi přišly dva krásné komentáře, které však neschválím – bohužel nejsou k tématu. To ale neznamená, že se o ně nepodělím formou citace.

Napsaly je právě dva pánové z mého okolí a tak bych jim rád poděkoval, že svou vlastní iniciativou potvrzují mé teze z minula – nemusím tak používat vlastní argumenty, stačí, když je nechám promluvit.

Mudrc první, vlastním jménem „pan X“

Napsal velice pěkný komentář, nelze mu upřít snahu o použití diakritiky, malých a velkých písmen a taky je vidět obrovský kus práce nad tím, aby to alespoň trošku dávalo smysl:

Ve svém komentáři bych nejdříve chtěl apelovat na autora tím, že pobavil par lidi  svým srovnáním kódu designeru a frontpage, nehledě na to, že autor zřejmě ani netuší, rozdíl mezi c a c#. Mimo jiné, c# je multiplatformní, ale to už zřejmě nepatří do sumáře autorových skvělých znalostí. Jako poslední věc jsem přemýšlel, jak vyřídit poznámku mého kamaráda skvělého programátora, ale nenašel jsem vhodnější formu, než std::cout<<“Jdi do *****“; a vřelou pozvánku do DDM Spektrum PV, kde by si s ním moc rád promluvil, jeden moc známý skvělý člověk, který mu, doufám, že se stejnou ochotou jakou mě všemu učil, vysvětlí věci, které ho příště nepovedou k tomu, aby napsala takovou, s prominutím všech slušných lidí, kteří čtou tento blog, „kravinu“.

Pokud nechápete souvislost mezi mým minulým článkem a tímto komentářem, nevadí. Byl bych na tom totiž naprosto stejně, kdyby to nebyla reakce na má slova z našeho rozhovoru. Tenkrát jsem se mu na zjednodušeném příkladu, rozdílu mezi webový projektem vytvořeným ve FrontPage a projektem napsaným od základu, snažil vysvětlit, v čem je obrovská výhoda znát věci, na kterých pracuji, do hloubky. Bohužel bez výsledku. O jeho dovednostech se můžete přesvědčit třeba tady (podle Radovana je to ale stejně břídil) a jenom pro úplnost bych zde rád uvedl ještě tento odkaz.

Se stejnou radostí bych se ještě chtěl vyjádřit k tvrzení, že jazyk C# je multiplatformní. Bohužel to není pravda – k běhu aplikací vytvořených v tomto jazyce je potřeba Microsoft .NET Framework, který je pouze pro Windows. Existuje sice open source projekt zvaný Mono, ten však není vyvíjen Microsoftem a tudíž se nedá o jazyku C# hovořit jako o multiplatformním. To by se totiž dal jako multiplatformní považovat skoro každý program pro Windows – existuje přece Wine. Jiná situace je v případě Javy nebo Qt, ty totiž poskytují běhová prostředí prakticky pro všechny operační systémy.

Mudrc druhý, vlastní přezdívkou „pan Y“

Ač jsem si skoro jist tím, že znám jméno autora následujícího citovaného komentáře, budu se přesto držet toho, jak se jeho autor podepsal.  A musí se nechat, doopravdy mě dostal:

Tak na to ti milý autore muzu rict tak akorat

int i = 0;
const char text[] = {0×4A,0×64,0×69,0×20,0×64,0×6F,0×20,0×70,0×72,0×64,0×65,0×6C,0×65,0×21,0};
while(text[i] != 0)
printf(text[i++]);

Taky jste si všimli té čárky nad písmenem ypsilon? Ještě pár let a možná se i naučí psát česky. A ani se nemusíte lekat, že by náhodou ve svém komentáři použil značku pro předformátovaný text, byl to můj zásah. Nejsem si zcela jistý, co si od tohoto pokusu sliboval – jestli jsem měl jako neprogramátor tuto zákeřnou smyčku pochopit ve smyslu vykopání válečné sekyry a nebo si snad myslel, že se mu ten kód spustí? U té druhé možnosti se mi ani nechce věřit, že by se tomu dalo uvěřit a tento člověk by to byť na jednu sekundu mohl myslet vážně, je to přece (podle komentáře pana X) skvělý programátor.

Jak jsem uvedl na začátku, žádné vlastní argumenty nebyly třeba, pánové se dokázali dostatečně zdiskreditovat vlastními silami. Vše podstatné jsem ostatně napsal už v mnohokrát vzpomínaném článku. Závěrem bych jim (a nejen jim) velice rád popřál mnoho štěstí v jejich programátorské kariéře – až budou za pár korun házet lopatou v továrně na kód, budou ho potřebovat. Nic jiného tihle pánové totiž neumí, teda nejspíš ani to ne…

Přidáno 10. 1. ve 2.10: Musím uznat, že celá následná soukromá debata probíhala na vysoké úrovni a věcně, proto jsem se, jako vstřícné gesto, rozhodl smazat jméno/přezdívku obou pánů. Dále bych chtěl upozornit, že komentáře pokračující v už tak vysoké míře osobní roviny nebudu schvalovat. Taky bych rád poupravil svoje tvrzení o zákeřné smyčce, která má jiný úkol.

Mohlo by vás zajímat: , , ,

3 komentářů k Odpad vrací úder. Neúspěšně

  1. Milan Novotný říká:

    Zdravím!
    Náhodou jsem narazil na Váš článek a tak jsem ze zájmu pročetl i ten předchozí. Musím říci, že s Vašim názorem o „opicích v softwarové továrně“ souhlasím. I s tou kompatibilitou některých verzí tzv. profi produktů je to opravdu mizerné a vázat se jen na Win platformu a jeho komponenty (IE,WMP,…) je také to příslovečné házení perel sviním. S tím „čuměním“ do monitoru po celý den to není až tak jednoduché… Nevyhne se mu prakticky žádné IT odvětví (tj. programování,grafika,atd.) a pro programátora je nezbytné i v případě, že on je ta tvůrčí osobnost (není striktně podřízen vedení). Tak toliko k chválám. A když už jsem sem zavítal, tak se podělím i o své námitky z pozice softwarového architekta v nepříliš velké firmě. Jak už název pozice napovídá, jsem ten co programy navrhuje. První z řady připomínek je Vaše narážka na „ortodoxního linuxáka“. Ačkoli tuto osobu neznám a nemohu posoudit její povahu, tvrdím že experimentovat s DirectX není nic špatného, ono v C# pracovat s OpenGl je tak trochu složité a nepříliš vyhovující objektovému programování (proto se přikláním k variantě DirectX, alespoň při seznamování s 3D). Další výtkou je Vaše neustálé kritizování C# a .Net jako takového. Vidím že hlavním problémem je „multiplatformnost“. Ono o žádném kódu se nedá říct, že je multiplatformní, neboť je to „jen“ text… ¨V praxi jsou tři typy kódů (podle toho co „vypadne“ na konci):
    1) Neinterpretované – např. C,C++,… Z nich se získá binární kód, který lze až na vyjímky spustit jen na platformě, pro kterou byl zkopilován bezohledu na to jak multiplatformně je psán
    2) Interpretované – např. C#,Java,… Z těchto jazyků se získá taktéž binární kód, který je však vázán na Virtual Machine (někdy též nevím zda příliš správně Interpret). Kód ze své podstaty lze spustit všude, avšak za předpokladu, že na dané platformě máte nainstalován VM. Což je ať už .Net, Mono, Java VM, atd. Dnes jde většina z nich spustit i pod MacOS včetně C#. Že jazyk C# do této skupiny nepatří je typycký anti-ms nesmysl. Rychlost takto psaných programů je prakticky srovnatelná s neinetrpretovaným jazykem. Jediné zpomalení je zapříčiněno VM a s tím souvisejícím překladem nativního kódu pro danou platformu a jeho interpretací. U běžných aplikací je takřka zanedbatelné. Problémy nastávají až u aplikací s požadavkem na vyskoký výkon jako jsou hry, 3D editory atd.
    3) Skripty – Jako Interpretované jazyky, avšak k překladu do nativního kódu dojde až při spuštění interpreta (delší start, později rychlost srovnatelná s inetrpertovanými jazyky). Tzn. nejsou předkompilované.
    Dále srovnání Wine a .Net je poněkud „blbé“. Nelze srovnávat interpret (který jen vykonává nativní kód na dané platformě) a Emulátor(který program emuluje po celou dobu jen emuluje platformu jinou, v případě wine ještě za využití knihoven pocházejících z Windows).
    Další věc je poznání kódu do hloubky… Uznávám, že je to opravdu takřka nezbytné, avšak srovnávat kód designeru (který je mimochodem krásně čistý a není možné jej rukou napsat lépe) a Frontapage (který opravdu „zasere“ kód zbytečnostmi) je nemístné. Nezapomínejte navíc, že při kompilování kódu dochází i k jeho částečné optimalizaci.
    To je zřejmě vše k připomínkám o .Net. Jen ještě podotknu, že v tomto případě souhlasím s oběma pány. Já sám .Net často připomínám, avšak neváži se na něj. Musím uznat, že značně zvyšuje produktivitu a je to (až na velikost) jeden z nejlepších produktů společnosti Microsoft). Zákazníkům to tak navíc vyhovuje a to i přez skutečnost, že mnozí z nich pracují pod Linuxem. Klíčová je však právě produktivita. Mnoho menších firem si nemůže dovolit ztrácet čas rýpaním se v čistém C a proto raději sáhne po C#, jinak by byly nemilosrdně převálcovány konkurencí. Používat .Net rozhodně není špatné, ba je to mnohdy dokonce i žádané
    Tak a ještě na závěr…
    Do gramatiky prvního citátu se mi pouštět nechtělo, avšak narážka na „milý autore“ je poněkud mimo. Pokud se nepletu, ještě nedávno bylo „milý“ jako „mladý“. „Milí“ by vypadalo poněkud divně. To že je tam čárka není podstatné. Každý chybuje. Další věcí je že ta smyčka není na první pohled nekonečná. Podmínka je !=0, která se však hned na konci pole nachází. Troufám si tvrdit, že i vím co to provede… Podle rozložení písmen a mezer mi to silně připomíná vzkaz z první citace. Navíc se jedná o klasický programátorský fór. A ještě… Proč vlastně ty citace, když odmítáte schválit komentáře? Nevyjde to snad nastejno? :)
    Takže shrnutí…
    Původní myšlenka byla správná, ale narážky v dalších částech především na .Net jsou nemístné. Musím opravdu dát ve většíně pasáží zapravdu pánům.

    P.S.: Rada – Zkuste si to nejdřív sám a poté kritizovat :)
    P.P.S.: Ještě jedna rada – Pochopil jsem, že oba články jsou vlastně nějakou nesmyslnou hádkou. Není lepší sednout si někde v klidu, třeba i s někým nestraným a nejlépe i programátorsky a linuxácky orientovaným, a probrat to? Takovéhle On-Line Flamy nepatří dle mého názoru na web…

  2. Děkuji za Váš komentář.

    Narážka na používání DirectX zde byla z toho důvodu, že právě díky této technologii má Windows hodně navrch a to jak díky obchodnímu tlaku MS tak bezpochyby i díky tomu, že se s největší pravděpodobností jedná o nejlepší produkt v této oblasti. Což k člověku, který dříve „spával s tučňákem“ moc nesedí.

    Protože nejsem programátor (a vždy to rád zopakuji), moje kritika C# se odehrává pouze ve filozoficko-praktické rovině. Proto jsem ochotný připustit, že C# je po technické stránce dobrý jazyk (nemám jak to posoudit a nikdy jsem taky C# po technické stránce neodsuzoval). Technická stránka ovšem není zdaleka jediným měřítkem toho, jak je jazyk dobrý jako celek a jak moc perspektivní je pro programátora se ho učit. Potíž je, že v dnešní době se méně náročné aplikace stěhují na internet a naopak ty více náročné směřují (nebo spíše teprve začínají směřovat) k virtualizaci. Budoucnost je tedy taková, že význam operačního systému jako určité platformy opadne a s ním opadnou i řešení, která jsou na něm závislá. Proto považuji pro programátora jako mnohem perspektivnější zaměřit se buď na „nízkoúrovňovější“ věci (a tím pádem na, jak píšete, neinterpretované jazyky) pro uplatnění v kódování virtualizovaných věcí a nebo naopak na vysokoúrovňové záležitosti pro psaní kódu určeného pro internet.

    Dále si myslím, že se mnou budete určitě souhlasit, když napíšu, že C# se používá právě, především a nejvíce u aplikací psaných na zakázku, tedy u těch s tou nejméně záživnou formou vzniku – přijde SW architekt za „cvičenou opičkou“ a řekne „Přelož to!“. U C# je právě díky výše popsanému ta největší pravděpodobnost toho, že se programátor stane doopravdy pouze „dělníkem“. Postavení takového člověka je potom naprosto odlišné od někoho, kdo přišel do určité firmy plnit určitý úkol – příkladem můžou být třeba týmy u Seznamu, kde se každý stará o svoji aplikaci a takový člen týmu do tohoto prostředí šel právě kvůli tomu, aby mohl pracovat na konkrétní věci, za kterou nejenže dostává dobře zaplaceno, ale baví ho.

    Co je teda potom lepší? V útlém věku přemýšlet o tom, jak co nejrychleji něco „zbastlit“ a nebo začít svoje znalosti stavět „odspoda“? A k tomuto problému jsem právě zvolil přirovnání s FrontPage – nemyslel jsem tím, že by automaticky produkovaný kód musel být špatný, ale že tento postup absolutně nenutí tyto lidi přemýšlet. Najednou se změní poměry a tito lidé jsou nahraní – věděli pouze jak to naklikat ve Visual C#, ale proč to tam tak bylo, to už ne. A tady opět sedí to srovnání s FrontPage – vyrostla na něm určitá generace, která si myslela, kolik si ušetří práce, jenže poměry se změnily…

    Ano, milý je jako mladý – ta narážka byla na to, že ho napsal správně s diakritikou.
    Nastejno to nevyjde – ty komentáře doopravdy nesedí k tématu.

    Ad P.P.S.: Ten první ne (dozvěděli se o tom měsíc po vydání článku náhodou), ale ten druhý už samozřejmě je…

    Závěrem bych ještě jednou velice rád zdůraznil, že C# a .NET Framework po technické stránce nepovažuji za špatnou věc, nikde jsem toto netvrdil a ani jako neprogramátor tvrdit nemůžu. Problémy se nachází v jiných rovinách, které jsem se snažil popsat právě v tomto komentáři.

  3. Milan Novotný říká:

    Děkuji za Vaši rychlou a vyčerpávající reakci. Souhlasím s tím, že DirectX je opravdu výhodou MS (a to již dík implementaci nekolika novinek v DX10, které jsou akcelerovány HW a v OpenGl tak rychle nebudou) a když se dostanu k 3D, vždy automaticky sahám po OGL, avšak věřím, že je stále mnoho vývojářů, kteří kvůlu použití nových technologií volí DX, popřípadě kombinují obě varianty. Zaměřit se na nízkoúrovňové programování je lepší. Avšak většina programátorů C# začínala na C++. Není i on náhodou jedním z těchto případů? Já když jsem se poprve dostal k C#, tak bez znalosti C++ bych se býval prokousával kódem velmi dlouho. To, že je software psaný na zakázku, neznamená že jsou programátoři opice. Opicemi se člověk stává u velkých molochů, ale v menších společnostech to vypadá tak, že se zakázka předloží a její zpracování už záleží jen na programátorovi (popř. designerovi). Jediným ohraničením je zde vytýčená funkčnost. Nelze jej proto za opici příliš považovat. Což navazuje i na další odstavec. Práce u menších společností programátory často baví (i mě) a dokonce si myslím, že v mnoha případech to baví i ty opice ;) Dále děkuji za vyjasnění poenty s Frontapagem. Ano s tou nahraností souhlasím. Avšak u C# je to poněkud jiné. Designer produkuje kód, jehož tvorba by bez vyzuální odezvy byla nesnesitelná. Dokonce i v C se pro Win používal jakýsi Resource Editor, aby si uživatel mohl vytvořit vizuální podobu (i když napsat pak k těmto dialogům obsluhu byla práce stejně úmorná). Navíc s kódem který designer vyprodukuje se mnohdy dále pracuje. A většinu parametrů naklikaných v designeru poté programátor v krátkém úseku kódu stejně většinou „překope“. To je z mé strany asi vše. Ještě jednou Děkuji za objasnění názorů a snad někdy v budoucnu v nějaké diskuzi nashledanou!

Napsat komentář