pátek, srpna 31, 2007

Plus C++

Nedávno jsem teď četl tenhle text Bjarne Stroustrupa: Evolving a language in and for the real world: C++ 1991-2006. Ach, pro neznalé: Stroustrup je ten člověk, který rozšířil jazyk C o třídy a všechny ty další objektově orientované vymyšlenosti a další doplňky jako jsou šablony a tak dále. Tím způsobil malou revoluci v programování, protože z objektově orientovaných jazyků, které do té doby byly převážně záležitostí akademického světa (Smalltalk, Eiffel a další, které to nikam nedotáhly), udělal něco, co mohly vzít ty hordy zkormoucených programátorů v C a zanést díky tomu do svých programů o dva řády více složitosti (samozřejmě, že časem se i programátoři v C naučili co to vlastně znamená ten objektově orientovaný přístup, ale i tak: znám některé lidi, kteří nikdy v C++ nenapsali jinou než statickou metodu a atribut.)

Nuže, v tom textu Stroustrup shrnuje jak se vyvíjel jazyk C++, co byly jeho hlavní cíle při jeho návrhu, jak se zformovala standardizační skupina ISO, kdo přišel z nechutným bastardem Embedded C++, jak je těžké se na něčem dohodnout, že STL neznamená Standard Template Library, protože Stepanov na STL pracoval dávno před tím, než v C++ existovala věc, které se říká template (neboli šablona; v tomto směru doporučuji rozhovor s Alexem Stepanovem Al Stevens Interviews Alex Stepanov) a tak dále a tak podobně.

Je to vážně moc zajímavé čtení a pokud programujete (jedno v jakém jazyce), rozhodně si ten text přečtěte, abyste příště, až budete mít chuť pomlouvat C++ nevypadali jako... no, jako někdo, kdo o něm nic neví.

Takže: chtěl jsem říct, že jsem pod dojmem tohoto textu tak trochu přemýšlel o C++. Jako ostatně každý soudný člověk, mám z C++ strach. C++ je krutý a syrový jazyk, který neodpouští chyby, a kdo není obdařen železnou disciplínou, která mu zabrání dělat cokoliv v rozporu s pravidly, toho rozdrtí, zašlape do země, poplive a nakonec se na jeho ostatky -- no, nechal jsem se unést, ale asi chápete co chci říct. Stroustrup přiznává, že jeho snahou nebylo znemožnit programátorů stát se svými vlastními oběťmi. (Oproti tomu designeři C# se vyznávají z opačného přístupu: C++ and the Pit Of Despair.) Stroustrup chtěl jazyk tak mocný, že umožní až bizarní úrověň abstrakce, ale přitom programy v něm napsané poběží stejně rychle, ne-li rychleji než ty v C.

Věru, to se mu povedlo. Nicméně cenou za to je, že spousta z nás, nedomrlých programátorských wannabes, si, jsme-li vyzbrojeni C++, dříve či později ustřelí nohu, nebo nějakou jinou, možná ještě důležitější, část těla.

Proto jsem si myslel, že čas C++ pomalu končí, že až vymře těch pár dědků s táákovýmihle fousy, kteří udržují v chodu existující aplikace, celý svět se prozáří, a všichni budeme rázem programovat jen a pouze pro garbage collected jazyky, které generují nějaký ten byte code pro virtuální stroje jako je Java Virtual Machine, nebo Common Language Runtime.

Samozřejmě, že to byla hloupá představa.

Problém je v tom, že nějaký ten mikroprocesor je součástí skoro každého zařízení, které koupíte ve vašem oblíbeném (internetovém) obchodě s elektronikou. A jelikož to zhusta jsou málo výkonné procesory, je potřeba psát pro ně v jazyce, který je hardwarovému modelu takového procesoru co nejblíže. A takovým jazykem je právě C++. C++ přistupuje k paměti se stejnou nenuceností jako C, ale přitom se v něm dá vyvíjet na rozumné úrovni abstrakce, takže výsledný program může být hotov rychle a dá se udržovat.

Samostatnou kapitolou pak jsou různé tyhle PDA, nebo chytré telefony. Čert vem PDA -- těm už vážně odzvonilo (jejich prodej opět poklesl o 40%), ale za pár let budou všechny telefony chytré, protože to bude lacinější, mít jen jednu základní desku (resp. její zapojení) pro celou modelovou řadu, a na každém telefonu poběží nějaký ten operační systém (ať už Symbian, nějaký ten klon Linuxu, nebo Windows Mobile, či jak se to vlastně bude za tři roky jmenovat), a pro ten bude potřeba vyvíjet aplikace v jazyce, který bude co nejblíže hardwaru.

Říkáte si: blbost, za pár let bude v každém telefonu Java, a po C++ nikdo ani nevzdechne. Myslím, že ne. Svůj odpor ke snobské společnosti Apple jsem tu vyjádřil tolikrát, že to už ani není zajímavé, ale přesto nemohu Apple upřít, že iPhone to bere v zásadě za správný konec. Mám na mysli tohle: co jsem tak četl, iPhone disponuje dlouhou výdrží baterie, což je jistě vlastnost, kterou každý rozumný člověk od podobného zařízení očekává, nicméně málokdy jsou jeho oprávněná očekávání naplněna.

Aby baterie vydržela dlouho, a přitom telefon mohl dělat všechny ty cool věci, které od něj očekáváme, má jeho výrobce v zásadě jedinou možnost: snížit spotřebu procesoru a pamětí (nebo displeje, ale displej je to, co dnes odlišuje jednotlivé třídy telefonů, takže pro high-end modely s ním nejde moc dělat). V tomto směru jsou tu dvě možnosti: zaprvé do telefonu strčit pro některé, na procesorový čas náročné operace, speciální obvod (jako je v iPhone hardwarový dekodér videa). To je ovšem drahé a pro low-end se to nehodí (na méně movité zákazníky s telefonem za 500USD dojem neuděláte), navíc speciální čip bude vysávat baterii. Nebo můžete do přístroje strčit pomalejší a úspornější procesor, který bude mít k dispozici méně paměti, a operační systém a aplikace napíšete tak, aby z takového hardware vyždímaly co se dá. A tady se zase vracíme k C++.

Čili, ať děláte co děláte, programování na úrovni (resp. rozsahu úrovní), kterou poskytuje C++ se nevyhneme ani v nejbližších několika letech.

Řikáte si: ale já kašlu na nějaký chytrý mobil. Mám své PC (od libovolného výrobce) a tam je výkonu taková přehršel, že se o nějakých pár usmolených wattů starat nemusím. Ohó, říkám já, to se tedy pletete.

Pomalu začíná docházet k tomu, po čem toužím už několik let: aby PC žraly (nedá se to říct jinak) méně. Počítače se zvolna začínají učit šetřit energií, a jak její cena poroste, a jak se na trhu budou stále více prosazovat mobilní PC (notebooky a to, v co se časem přemění TabletPC nebo UMPC), bude zase potřeba být s to využít výkon který je k dispozici co nejúčelněji.

.NET sice umí předkompilovat strojový kód svého virtuálního stroje do nativního kódu procesoru na kterém běží, a asi v tom je i docela dobrý, ale poctivá kompilace C++ programu nastavená na rychlost (nebo na velikost) je něco, s čím se dá asi při Just In Time kompilaci jen těžko bojovat.

Jsem první, kdo řekne: čert vem 15% výkonu, hlavně že tu aplikaci napíšu rychle, půjde udržovat, a využije konzistentního frameworku, ale firmy, které vyrábějí výpočetně a paměťově intenzivní software (třeba ty navigační programy, o kterých jsem tu tuhle mluvil), ví své. Každých pár kilobytů paměti se počítá, každé procento na rychlosti běhu se u zákazníků počítá.

Závěrem: Tak se stalo, že jsem se z odmítače C++ stal ostražitým sledovačem, který bude vývoj tohoto jazyka, který jsem už považoval za mrtvý (v smyslu, v jakém je mrtvá Latina), bude pečlivě sledovat. Protože jak tuhle řekl BVer: správný programátor udržuje svou bedničku s nářadím vybavenou a připravenou.

úterý, července 31, 2007

Stream.cz má svých 15 minut...

FSJ je ve formě, jako vždy: A challenge to Czech youth. (Svědčí o něčem to, že počet imbecilů v komentářích je vyšší než obvykle?)

Trvalky

Chtěl jsem něco chytrého napsat o tom, jak se nový Harry Potter objevil na Internetu a dokonce ho snad i někdo překládá do češtiny a tak dále.

Protože však psát něco chytrého je vyčerpávající, dám vám, milí čtenáři, šanci oslnit se vlastní bystrostí a řeknu jen tolik, že si myslím, že knihy se za těch pár set let opravdu osvědčily jako jedno z nejtrvalejších medií, a že prodeje tento únik vůbec neovlivní.

PS: Opravdu mě nezajímá, jak to dopadlo, ani kdo zemřel, ani nic podobného. Počkám si až bude příští rok hotový Medkův překlad, na který jsem zvyklý, a který jsem se naučil mít rád.

Potopa!

Takže jsem po týdnu spustil Bloglines a čekalo tam na mě přes 800 nových zpráv. 800. Trvalo mi hodinu, než jsem proletěl titulky těch pár zdrojů, které považuji za důležité, a naklikal je do pár desítek tabů ve Firefoxu. Pak jsem to všechno celý zbytek večera četl. Ano, jsem nemocný.

Problém, který řeším je tento: co přesně je a co není důležité? Třeba: zajímají mě tryskové motory, protože mě prostě zajímají tryskové motory. Takže na Wikipedii naklikám něco o tryskových motorech a už to jede: turbojets, turbofans, rockets, ramjets, pulse jets, pump-jets. A to jsme ještě ani nezačali. Pro úvodní seznámení je potřeba nastudovat: Air intakes, Compressors, Combustors, Turbines, Turbopumps, Afterburners, Nozzles, Thrust reversers, Cooling systems, Fuel system, Fuel pump, Engine starting system, Ignition, Lubrication system. Každá část odkazuje na desítky dalších textů, které je možná dobré znát, než se pustím do dalšího studia, ale možná důležité nejsou a můžu je s klidným srdcem přeskočit, pokud se v budoucnu nehodnám stát konstruktérem tryskových motorů (což nehodlám, i když tryskové motory jsou... prostě krásné).

Celé to pak vede k ADD (Attention Deficit Disorder), kdy v ideálním případě budu přeskakovat od odkazu k odkazu, nikdy se nic nedovím, ale budu šťastný, že mám information on my fingertips.

Nejhorší je, jak je tohle surfování, přes všechnu svou povrchnost a marnost, uspokojující. Rozumem chápu, že sledování desítek zpráv denně je nejen zbytečné a pošetilé, ale i vyčerpávající a od skutečné práce (nebo i zábavy) odvádějící, ale moje iracionální zvědavost mě prostě nutí celé to martyrium podstupovat znova a znova. Dokonce občas cítím senzorickou deprivaci, když se nic nového neděje (čti: žádný magor hodinu nic nenapsal). V dobách, kdy jsem ještě nebyl připojen permanentním připojením k Internetu jsem dokázal něco po večerech opravdu udělat. Ale ten poslední skoro-rok je opravdovým utrpením.

Přemýšlím, jestli tohle je Web2.0: neschopnost zdržet se u jedné věci déle než pár minut. Web1.0 řídily vyhledávače a portály. Ty dneska nikdo nebere vážně a každý má tuhle dvanulózní RSS čtečku (nebo podobné udělátko), do které přidává další a další zajímavosti, až nedělá nic jiného, než že čte pitomé zprávy od zhusta pitomých lidí. Když je dneska web o tolik chytřejší než byl loni, nebo předloni, kde je nějaký nástroj, který by člověku umožnit ten příval informací nějak důstojně zvládnout?

Takže tak nějak.

A hloupý vtip na závěr: co jsem to vlastně chtěl?

pondělí, července 30, 2007

i-no-GO

Byli jsme teď na dovolené v Krkonoších. Protože jsem špatný řidič a ještě horší navigátor, rozhodl jsem se zapůjčit si GPS modulem vybavené PDA s navigačním programem iGO 2006.

Popravdě: Je to dost děs.

Nerozumějte mi špatně: Ve skutečnosti je navigace docela užitečná věc, která člověku nejednou ušetří nervy když někde mine odbočku, nebo zahlásí ten správný sjezd z dálnice, ale celkově konkrétně iGO trpí několika velmi zásadními problémy, které místy činí celý program prakticky nepoužitělným.

Abych to vzal nějak postupně: elektronické navigace (ať už jednoúčelové, nebo jako software pro PDA) trpí tím, čím všechny elektronické serepetičky: totiž displejem. I když PDA, které jsem měl půjčené, mělo rozlišení 640x480, displej je maličký a ve srovnání s papírovou mapou má zanedbatelné rozlišení. A konkrétně u map zatraceně záleží na tom, abyste toho najednou viděli co nejvíce s co největšími detaily. Na mrňavém displeji navigace vidíte buď zazoomovaný detail, nebo velký orientační přehled.

iGO si je tohoto omezení vědomo, takže se snaží implementovat jakési inteligentní zoomování, které před křižovatkou najede na detail a na rovině se vzdálí do přehledového módu (to celé doplněné o tenhle 2.5D, nebo 3D režim, kdy se software nějakou pochybnou perspektivou snaží simulovat výhled oknem z auta, což trochu pomáhá řešit problém s velikostí displeje, ale vůbec si nejsem jistý, jestli mapová data obsahují informace o nadmořské výšce, takže nejspíš je to jen taková obezlička). Potíž je v tom, že na komplikovaných křižovatkách potřebujete jak detail na odbočku kterou máte jet, tak přehled o tom, co budete dělat až urazíte těch pár aktuálních metrů. iGO se neumí podívat dál než za jednu zatáčku/odbočku, a tak vám nějakou nechutnou křižovatku nazoomuje tak, že nevidíte nic než jeden velký ohyb, pak se jakoby trochu vzdálí, zase nazoomuje na další odbočku a tak podobně (to celé pěkně plynule a animovaně a poooomaaaaluuuu). Mně to trvalo asi dvě liberecké křižovatky, než jsem nastavil úroveň zoomu ručně tak, abych viděl co bylo potřeba.

Dalším zcela zásadním problémem je aktuálnost mapových dat. Když jedete podle ukazatelů nebo podle mapy, koukáte kde se oproti mapě co změnilo. Při použití navigace (a to mi potvrdil i další majitel podobného zařízení), člověk přejde do režimu slepého následování pokynů navigace a třeba křižovatka změněná na kruhový objezd (což se dneska děje poměrně často) se stane místem plným stresu a zmatků. Ještě horší jsou ovšem objížďky. iGO je vytrvalý software a (tuším v Jilemnici) se nás vytrvale snažil směrovat na silnici která byla uzavřena. Prý snad existují nějaká data o podobných kalamitách vysílaná v RDS. Musím říct, že bez nich se navigační software stává v situacích, kdy by měl největší využití, prakticky nepoužitelným.

A největší rána mé důvěře v navigace na závěr: přišlo mi, že lidé, kteří programovali vyhledávání cesty k tomuto problému přistoupili jako k algoritmicko-inženýrskému problému. Přitom navigace je mnohem vice psychologická záležitost. Co jsem tak vypozoroval, lidé se raději drží větších, pohodlnějších, méně členitých cest. Důvodů je určitě mnoho, zcela jistě existuje několik desítek studií na toto téma, ale já vidím jako hlavní důvod to pohodlí na široké cestě, po které se dá jet většinu času opravu těch povolených devadesát, než se kodrcat po okreskách, kde sice teoreticky můžete jet stejně rychle, ale každá zatáčka vás zbrzdí, nehledě na to, že pořád jezdíte z kopce do kopce a tak dále. Nevím jak tohle bere do úvahy konkrétně iGO, ale přišlo mi, že vůbec. Jak by se jinak mohlo stát, že nás navigace z hlavní cesty svedla na nějaké pochybné okresky (v dezolátním stavu, jak jinak) stoupající nejprve strmě do kopce (takže se dalo jet v lepším případě tak 50km/h) a pak zase strmě z kopce?

Celkově si sice pořád myslím, že navigace jsou užitečná záležitost, ale možná, že spíše než na všechny ty grafické vypečenosti by se měli autoři soustředit spíše na důkladné poznání toho, jak lidé opravdu jezdí, jak plánují trasy podle map a jak probíhá navigace podle mapy s živým navigátorem.

PS: Znova opakuji, že mluvím o iGO 2006, a nevím, jestli jiné navigační programy/systémy nejsou v tomhle lepší. I když možná kromě TomTom jsem dost skeptický...

sobota, července 21, 2007

Fake Steve Jobs...

...je prostě skvělý. Je vtipný, dělá ze skutečného Steva Jobse idiota (nejpikantnější jsou ovšem pitomci, kteří FSJ v komentářích upozorňují, že Angola neleží ve východní Evropě, nebo že enfant terrible není latinsky), ale přitom to, co píše, je zatracená pravda. Třeba tenhle text o nahrávacích společnostech, nebo o TAFKAP -ovi, nebo teď o Googlu.

Po dlouhé době blog, který můžu doporučit.

pátek, července 13, 2007

Bábel

Jak jsem tu už zmiňoval, drželi jsme s BVerem řeč na letošním Festivalu Fantazie (matně si vybavuji nějaké rčení o tom, že čím méně něčemu rozumíte, tím spíše o tom budete druhé poučovat...). V rámci přípravy jsem si napsal tyhle guidelines, kterých jsem se nakonec ani moc nedržel, protože tak už to na takových neformálních přednáškách chodí. Nicméně myslím, že publikum jsme pobavili (zejména jazyk WhiteSpace sklidil velký úspěch), nadhodili několik vcelku podmětných poznámek o DSL (ty zmatené obličeje, když jsem ukázal na pár odstavců anglicky psaného textu a řekl, že tohle je kód Inform7 stály za to) a tak dále a tak podobně.

Občas bylo potřeba trochu tlačit na pilu, aby mezi mnou a BVerem při přednášce vznikly nějaké třecí plochy, které pobaví posluchače, takže pokud se vám některé pasáže budou zdát příliš... erm... no prostě na několika místech jsem schválně přeháněl, protože to zkrátka bylo potřeba. Text asi obsahuje nějaké překlepy a tak podobně, ale vzhledem k jeho délce nemám sílu to znova celé číst a korigovat.

Jak já to vidím, přístup k programovacím jazykům se v posledních, řekněme destíti letech, tedy s nástupem Internetu, podstatně změnil.

Dříve se člověk seznámil s více programovacími jazyky maximálně tak na univerzitě, kde z didaktických důvodů přičichl ke Smalltalku, a tak trochu k Lispu, a samozřejmě k Pascalu, který, ze mně ne zcela zřejmých důvodů, bývá považován za vhodný jazyk k výuce programování. Když programátoři dospěli, skončili jaksi samozřejmě u C++, nebo ti progresivnější u Javy. (Nemluvíme tu o BASICu a assembleru, protože to jsou záležitosti pro nás staré dědky.)

Dnes je situace naprosto jiná. Mladí programátoři se začínají učit programovat v Javě nebo PHP (to je snad ještě děsivější než začínat s Pascalem), pak do sebe nacucnou celou škálu skriptovacích jazyků jako je Perl, Python nebo Ruby, pak se třeba podívají na Lisp a vrkají si spolu o tom, jak skvělý je typový systém v Haskellu, a že kdo to myslí s paralelizací vážně, nemůže než použít Erlang, k tomu nějaký ten C# pro nás Microsoftí poskoky, nebo, pokud máte silná zápěstí, třeba VisualBasic (s i bez Option strict, což je nastavení, které udělá z VisualBasicu úplně jiný jazyk se stejnými klíčovými slovy), a základem je určitě i SQL, a tak dále a tak podobně.

Prostě: tam, kde dříve programátoři konvergovali k jedinému jazyku (kterým bylo C nebo C++) a s tím vystačili na větší část své kariéry, se dnes mladí vlčáci naučí pět až šest diametrálně odlišných jazyků ještě než jim naskáčou na čele uhry.

Čím to je? Domnívám se, že rozdíl je v té šíři aplikací, pro které se dnes počítače používají. Jak již řekl můj fundovanější kolega, programovací jazyk vybíráme podle aplikační domény, tedy podle toho co se chystáme dělat. Jistě nemá smysl programovat webové aplikace v C++, a na druhou stranu, je zřejmé, že i když napsat kompilátor PHP do nativního kódu by asi nebyl takový problém, nikdo to neudělá jen proto, aby mohl pro své PDA vyvíjet ve stejném jazyce jaký používá 90% programátorů s klamnými představami o svých schopnostech.

Tedy: jak se rozšiřuje množství aplikací, rozšiřuje se i počet jazyků, kterými tyto aplikace píšeme. Na programování klademe v různých oblastech různé nároky (třeba: náročnost na zdroje, ověřitelnost správnosti, rychlost, přehlednost, rychlost implementace atd.), a tomu se uzpůsobují i jazyky, které používáme.

Problém s programovacími jazyky je tento: programovací jazyky, stejně jako Olomoucké tvarůžky, potřebují čas, aby dozrály. Už nějaký čas sleduji vývoj jednoho programovacího jazyka, na kterém pracuje řekněme deset dvacet lidí tak čtyři roky. Je to skvělý jazyk? Ó, to nepochybně. Boo je jeden z nejvíce sexy jazyků na které jsem narazil (jakožto milovník staticky typovaných jazyků se příliš nevzhlížím v Ruby nebo Pythonu). Použil bych ho pro psaní nějaké aplikace, u níž předpokládám vývoj delší než řekněme dva měsíce? To nikdy.

Programovací jazyky jsou založeny na kompilátorech a interpreterech. A kompilátory a interpretery jsou software jako každý jiný. A software obsahuje chyby. A dovedete si představit něco více frustrujícího než používat programovací jazyk, jehož kompilátor (nebo interpreter) je plný chyb?

Můj volnomyšlenkářský kolega tu prezentoval svou antipatii k jazykům vlastněným firmám. Vážený příteli, velké firmy jsou jediné instituce, které dokáží uřídit vývoj něčeho tak delikátního jako je programovací jazyk s dostatečnou kvalitou. Skutečnost, že stovky tisíc open-source dobrovolníků dokázaly vyvinout za více než dvacet let existence open-source hnutí tři použitelné skriptovací jazyky (Perl, Python a Ruby), mluví samo za sebe. Všechny ostatní jazyky "vlastní" buď nějaká soukromá společnost, nebo univerzita, nebo se brzy po svém vzniku rozštěpily do tolika větví a jsou tak nespolehlivé, že je nikdo seriózně nepoužívá (viz třeba Lisp, který má asi tři sta dvacet sedm vzájemně nekompatibilních dialektů a nepoužitelné knihovny). To, že vlastníci těchto jazyků maskují za licenci GPL vůbec nic neznamená.

Tím jsem se dostal k další záležitosti, kterou tady pan doktor nakousl: knihovny. Knihovny jsou dneska stejně důležité, ne-li důležitejší, než samotný jazyk. Bez knihoven, na úrovni abstrakce, na které se musíte dneska pohybovat, abyste v konečném čase stvořili něco smysluplného, bez pořádného balíku knihoven, nejlépe celého frameworku, nesvedete nic. Potřebujete knihovny na práci s unicode řetězci (což je oblast, jejíž složitost si většina jedinců ani nedokáže představit), s implementací TCP/IP socketů, nějaké to šifrování, zobrazování, XML, formátování výstupu a zpracování vstupů v závislosti na národním nastavení, prostředky pro komunikaci a synchronizaci u vícevláknových aplikací, přístup na disky se všemi těmi zabezpečovacími serepetičkami, izolovaná úložiště dat, a tak dále a tak podobně. A to jsme ještě nezabrousili do oblastí řízení bezpečnosti aplikací a přidělování oprávnění k přístupu k různým částem operačního systému.

Chci říct: napsat programovací jazyk je jedna věc, ale učinit ho užitečným je věc úplně jiná. A sílu učinit jazyk užitečným mají podle mého jen společnosti, které jsou dost bohaté a schopné na to, aby vývoj tohole všeho zvládly v čase kratším než geologickém.

Aha, vidím nespokojenost na tváři tady mého veleváženého kolegy. Inu, má pravdu. Existuje způsob jak vyvinout dobrý jazyk a dobrými knihovnami a nestrávit tím celý život: použijete existující framework s virtuálním strojem, a pro ten svůj skvělý jazyk napíšete. Dnes máme na výběr ze dvou variant: jednak je tu Java Virtual Machine od Sun Microsystems, na kterém běží Java, dvak Common Language Runtime od Microsoftu, který využívá široká paleta .NET jazyků. Samozřejmě, že přítomné zrdojanarchisty nemůže uklidnit to, že je jejich jazyk plně open-source, když běží na virtuálním stroji soukromé společnosti, ale výhody pro nás ostatní jsou zřejmé: zaprvé od úplného začátku existuje celý balík velmi dobrých knihoven, které lze použít, a zadruhé: všechny tyhle optimalizační a portační kejkle za vás udělá někdo jiný. Vy si jen poklidně kompilujete do nějakého toho bytekódu, který pak virtuální stroj překládá do instrukcí procesoru který právě používáte.

Proto: pokud dneska opravdu chcete napsat programovací jazyk, piště jej pro některý z těchto virtuálních strojů. Jinak se sice naučíte spoustu zajímavých věcí o kompilátorech a procesorech a všech ostatních cool věcech, kterými neuděláte dojem na slečny dole u baru, ale bude to práce, kterou nikdo neocení.

Existuje ještě jedna skupina jazyků, o kterých jsme se tu ani já, ani můj vzdělanější kolega nezmínili. Jde o tzv. DSL, neboli domain specific languages, tedy jazyků určených pro jednu konkrétní aplikační doménu. Tento druh jazyků se dneska většinou píše v programovacích jazycích které vládnou syntaktickými makry, tedy takovou vypečenou věcičkou, která vám umožní do jakési meta-funkce předat jako parametr kus kódu, který se pak při kompilaci (nebo interpretaci) přeloží do skutečného kódu toho kterého jazyka. Příhodnou ukázkou může být třeba generování XML (nebo HTML), kdy místo používání ordinérních prostředků pro zapisování tagů použijete virtuálně vytvořená klíčová slova vašeho DSL, čímž celou věc krásně zpřehledníte a zjednodušíte.

DSL je dneska progresivní oblast programovacích jazyků (asi jako začátkem devadesátých let OOP), která pomocí dostatečně mocných obecných jazyků umožňuje napsat speciální jazyk pro každou aplikaci tak, že z kódu je hned zřejmé nejen jak věci děláte, ale také co děláte a leckdy i proč.

Nejzářnějším příkladem DSL je Inform7, tedy programovací jazyk určený k vývoji interaktivních fikcí (tedy textových adventur), který se snaží předstírat, že programujete v angličtině. V I7 napíšete něco jako "Miska s vodou stojí na stole v kuchyni," a překladač z toho sám odvodí, že miska je kontejner, stůl je objekt, na kterém mohou ležet jiné objekty a že kuchyň je místnost ve hře. Problém je v tom, že a) to funguje jen v angličtině, b) když se dostanete za hranice takto jednoduchých vztahů, musíte tvořit další pravidla pomocí syntaxe, která není ani zdaleka tak přehledná. Nehledě na to, že v takovémto jazyce se prakticky nedá ladit.

Nicméně si myslím, že podobně formované DSL budou v nejbližší budoucnosti poměrně populární, a že otevřou programování mnohem šiřší skupině než lidí, než by starému von Neumanovi bylo milé (ten dokonce považoval i assembler za zatemňování smyslu programu; ale co byste čekali od člověka, který sčítal nekonečné řady z hlavy).

Takže: i když, jak tu můj esotericky zaměřený kolega prezentoval, lze napsat programovací jazyk o jediné instrukci a přesto bude Turing-kompletní, volba správného programovacího jazyka je a bude zatraceně důležitá. Správný programovací jazyk vás zbaví potřeby znát polovinu návrhových vzorů z té provařené knihy gangu 4 (z hlavy si vzpomenu třeba na iterator, strategii a visitor), ty správné (funkcionální) jazyky budou potřeba pro rozvoj opravdu paralelního programování, příhodné jazykové konstrukce vás dokáží zbavit potřeby šmudlit složité SQL dotazy, nebo opakovat jeden skoro stejný kód dvacetkrát.

Zkrátka: pokud jste se rozhodli následovat osud dinosaurů, držte se svého jazyka a o nic dalšího se nezajímejte. Vy ostatní: vítejte v Babylonu!

A abych nezapomněl: stav je zdrojem všeho zla!

středa, června 27, 2007

To neprojde...

Taková malinkatá celebritka mezi .NET vývojáři Jeff Atwood se rozhodl, že si na svůj blog vpustí reklamu a zisky z ní utratí na sponzorování open source (OSS) projektů vyvinutých pro .NET (viz Supporting Open Source Projects in the Microsoft Ecosystem. Vcelku nic moc zajímavého.

Zajímavé jsou ale některé komentáře pod jeho textem. Třeba ten od Franse Bouma:

In fact, the whole MS platform eco system isn't suitable for open source tools to become very effective. As soon as they do, MS will come with an equivalent, and what's worse: large droves of developers don't even know how to spell open source, left alone that they're even looking for open source projects, they simply look at Redmond and wait till MS comes with something.

In the Java community, things are completely the opposite. The whole eco-system around Java is simply build on top of the open source model: libraries and tools are very often free and open source. The business model of java oriented companies is build around providing services, not by selling licenses. On the MS platform this is the opposite.

Vcelku s tímto popisem situace souhlasím. Také používám (soukromě i pracovně) několik OSS produktů, jako je třeba MbUnit (na kterou jsem přešel z NUnit, protože MbUnit má spoustu sexy vlastností, které NUnit nemá), nebo ZedGraph (vážně lepší než drtivá většina placených komponet pro kreslení grafů, distribuovaná pod LGPL), nebo #ziplib (a asi i další).

Nicméně je fakt, že většina těchto komponent dříve nebo později dojde do situace, kdy si Microsoft všimne, že mu někdo loupe perníček, a buď si koupí (rozuměj zaměstná) přímo vývojáře té které komponenty, nebo vymyslí něco vlastního, skoro stejného, ale ne tak úplně kompatibilního, a přibalí to k Visual Studiu, nebo to vydá jako nějakou zdarma stažitelnou komponentu, na což vývojáři většinou reagují tak, že převedou své aplikace na věci od Microsoftu. Podívejte, jak nepotřebné jsou k Visual Studiu přibalené Crystal Reports od doby, kdy Microsoft distribuuje svůj vlastní ReportViewer (pro jednoduché reporty, samozřejmě).

Já to Microsoftu nezazlívám: je to firma, jejímž cílem je znásobovat investice do ní vložené, která potřebuje růst na trhy na kterých zatím není a tak dále. Microsoft je trochu jako hypermarket: všechno co potřebujete byste měli najít pod jednous třechou, aby vás ani nenapadlo dívat se jinam. Na druhou stranu se pak nemůže nikdo divit, že některé lidi takový přístup znechutí, a že začnou raději věnovat něčamu jinému než je .NET. Něčemu, co jim přinese nehynoucí slávu a uznání, a ne jen temný kout v domě zapomnění.

Říkám si: v čem je ten rozdíl, mezi vývojáři opravdového OSS, kteří se věnují Javě, nebo Ruby, nebo něčemu podobně zajímavému, a vývojáři kteří se spokojeně rochní v teplé náruči Microsoftu?

Napadlo mě tohle: zatímco všichni ti opravdoví OSS vývojáři tělem i duší, sní o tom, že jejich produkt (jeden z mnoha ve stejné kategorii na Sourceforge) napraví svět a tak dále, a že když budou dost dobří, tak je nakonec zaměstná Google nebo nějaká podobně trendy firma, snem vývojářů pro Windows (nebo platformy Microsotu obecně) je opustit řeholi zaměstnání, stát se nejprve MicroISV a pak třeba i regulérním ISV (tedy že naberou zaměstnance, kteří budou makat za ně). Rozdíl je totiž v tom, že zatímco pro osvědčené OSS platformy (Linux, Java, atp.) jsou věci zadarmo, pro ty, co se tak či onak spolčili s Microsoftem je naopak normální za věci platit. Takže stačí, když vyvinete nějakou sadu dostatečně kulatých a gradientních tlačítek, vyrobíte si stránku, zaspamujete pár diskusních fór (nebo nabídnete svůj "produkt" pro nekomerční využití zdarma), a díky té mase vývojářů se docela slušně uživíte.

Jistě OSS produkty se živí službami. Ale množství počátečního kapitálu a výše rizika pro zaběhnutí produktu založeného na službě jsou úplně jinde než u balíku ovládacích prvků, který lze vyvinout poměrně dobře i u práce (dokonce i když máte rodinu) a riziko je vcelku nulové.

Chci tím říct: myslím si, že lidem, kteří obcují s produkty Microsoftu současný stav vcelku vyhovuje. Dává jim totiž naději, že jednoho dne budou pracovat na svém, a že zvyk Microsoftích nohsledů nakupovat licence, jim umožní zbavit se jha práce pro někoho jiného. To, že v okamžiku, kdy se stanou příliš úspěšnými, vrhne Microsoft na stejné pole několik set ze svých tisíců vývojářů, kteří je o jejich malý kšeft zase připraví, je nevzrušuje, protože se ukájejí tím, co tvrdí Paul Graham a Tim O'Reilly: totiž že jsou pod radarem, že na ně není vidět, že jim se něco takového prostě nemůže stát.

Proto si myslím, že podporovat finančně OSS projekty pro .NET je jen takové plácnutí do vody, které stejně nikam nepovede. Aby to bylo k něčemu, musel by se změnit přístup Microsoftu, a to se nestane, protože Microsoft potřebuje růst a nemůže si dovolit, aby místo, kam by se mohl natlačit on sám, zabírala nějaká pochybná skupinka předstírající filantropii, či co.

Tak tohle mě napadlo.

neděle, června 24, 2007

Úleva?

Opravdu jsem se těšil. Víte, myslel jsem, že až dodělám tu zatracenou disertaci, tak že se mi strašně uleví nejen od toho, že nejsem typ ABD (Anything But Dissertation) studenta, ale že i ty páteční a sobotní večery ihned přejdou zpět na ten poklidný režim, ve kterém byly ještě tak před dvěma lety (tedy než jsem si uvědomil, že by se mohlo stát, že to nestihnu). Však to znáte: lahvinka bílého, nějaké to programování, nějaké to hraní počítačových her, trochu toho nezávazného psaní.

A ono nic.

Pořád jsem nějaký napjatý, nějak se nedovedu dostat do režimu příjemného utrácení toho infinitizemálního množství volného času kterým teď disponuji.

Dobrá, ještě jsem měl nějaké resty v podobě článku na letošní IMEKO, který jsem slíbil školiteli, a který jsem včera dopsal do nějaké ucelenější podoby. Pak je tu ta věc s přednáškou, kterou budeme mít na Avalconu (pardon, Festivalu Fantazie, či jak se to píše), ale to už je zábava, to není úkol, který by mě stresoval (seriózní práci jsem vychytrale nechal na BVerovi a sám se chystám působit jako ten hloupý z komické dvojice). Je taky fakt, že software, který píšu v práci se blíží k vydání, a že mě stresuje skutečnost, že vzhledem k tomu, že jsem na tuto část byl prakticky sám, tak teď musím nejen dokončovat nějaké ty pozapomenuté drobnosti, dopisovat unit testy, provádět aplikační testování, psát manuál a do pátku nastudovat WiX a vyrobit v něm instalátor, ale jelikož jsem se vcelku dobře naučil nenosit si práci domů, tak kromě takového toho latentního stresu to mimo pracovní dobu nějak extra neprožívám.

Čili nechápu, v čem je problém. Kam se, sakra, poděl můj víkendový klid?

Říkám si, jestli to není tím, že jsem si konečně začal uvědomovat to, o čem psal před časem Steve Yegge, tedy fakt, že už mi zbývá jen velmi omezené množství pětiletých projektů, které stihnu ve svém volném čase udělat. Momentálně mám v hlavě nejméně čtyři, a každý víkend, který věnuji něčemu jinému mě vzdaluje od realizace byť i jediného z nich.

Proto nějak nejsem s to donutit se dohrát Moment of Silence, a který jsem se opravdu těšil (a který mě opravdu nadzvihl dementní ochranou StarForce, která není inzerována na obalu). Proto tři dny chodím kolem knihovny, než vyberu nějakou knihu k přečtení, protože je mně jasné, že než i jen začít číst nějakou zhovadilost, je lepší nečíst nic, proto mám na stole tři knížky o programování (resp. o technologiích), u kterých uvažuji, jestli stojí zato číst je celé, když nejspíše 80% z jejich obsahu nikdy k ničemu nepoužiji (i když Mythical Manmonth jsem nakonec dočetl, a nemrzí mě to, protože pěkně shrnuje to, co jsem tak nějak tušil), proto sem málo píšu, protože něco rozumného napsat mi sebere hodinu až dvě času, který jsem mohl třeba prospat (ověřil jsem si, co psal George Orwell v Holdu Katalánsku -- dospělí muži opravdu dokáží žít velmi dlouho v brutálním spánkovém deficitu).

A tak dále.

Zkrátka, jsem nějak celkově vypruzený, a nevím co s tím mám dělat.

Ach jo.

pátek, června 22, 2007

The Rise of Machines

Už je to tady: Japanese firm exhibits droid construction worker.

Kapitán Kyborg může začít psát knihu "A vy jste se mi smáli, volové"