Neobsahuje názory Henryka Laholy

Výzva pro Opravdové Programátory

Co bude programovacím jazykem budoucnosti?

Motto: Každý nový programovací jazyk prochází nejprve fází úvodní obskurnosti. Po téhle fázi přijde dlouhé období částečné obskurnosti, ukončené obdobím totální obskurnosti. - Paul Bissex

Znáte to – jste programátor, a pokud zrovna nepracujete v Unicornu nebov nějaké jiné fabrice na řádky kódu, tak vás napadají bujnosti. Třeba zkusit jiný jazyk. Nebo zkusit něco většího. Třeba programátoři v PHP: Nejdřív se PHP učí, pak o něm začnou psát do blogu, pak v něm skutečně programují, a pokud nezůstanou v téhle fázi a nesekají weby jak Baťa cvičky, tak je začne cosi šimrat – a když jsou opravdu dobří, tak napíšou vlastní framework. Ti nejlepší pak napíšou framework funkční...

Tohle nutkání není jen výsadou programátorů v PHP. To je vlastní všem Opravdovým Programátorům (prosím, nepleťte si Opravdového Programátora s nepraktickým uhrovatým nerdem, to je jiný živočišný druh). Normální programátor píše dál redakční systémy, business-processing logiku, účetní programy, grafické jádro či cojávím, a dělá to dobře. Učí se nové techniky, někdy se naučí i nový jazyk... Perfektní. Ale pořád málo.

Dovolte abych volně ocitoval z eseje, kterou napsal Steve Yegge a která se jmenuje Příští Velký Jazyk (The Next Big Language, NBL):

Lidé po mně často chtějí, abych okomentoval jazyk, který právě navrhli. Nevím jak vám, ale mně se to zdá docela směšné, když tak sleduju styl svých komentářů k existujícím programovacím jazykům. (...) Necítím se dobře, když jim mám říct svůj názor, protože je nechci odradit. Ale je to tak, že nikdo nebude nikdy, NIKDY jejich jazyk používat.

Ovšem za sebe bych chtěl povzbudit lidi, aby si udělali vlastní programovací jazyk, protože tím ze sebe udělají programátora světové úrovně. Opravdu. Ne jen "lepšího programátora", ale "nejlepšího". Jak jsem už řekl, a trvám si na tom: Velmi dobré porozumění kompilátorům je to, co odděluje zrno od plev. Říkám to, aniž bych měl sebemenší ánung co to jsou "plevy", ale předpokládám, že to je nějaká náhražka zrní, vyráběná nejspíš z tofu.

Ano, to je ta Výzva pro Opravdové Programátory: Navrhněte si vlastní jazyk! Napište si pro něj překladač, napište si pro něj základní knihovny, zkuste si ho zaintegrovat do systému, zkuste v něm něco napsat... Uvidíte, co to udělá s vašimi programátorskými schopnostmi.

Steve: Ale vážně potřebuju přestat mrhat časem na to, abych těm lidem jednomu po druhém vysvětloval, proč je jejich jazyk odsouzen k neúspěchu. Místo toho to sepíšu do tohoto zápisku. (Pro neprogramátory či "programátory v HTML": Tím zápiskem myslí Steve ten, na který vede výše zmíněný odkaz!)

Úhrnem: Váš jazyk je odsouzen k neúspěchu s pravděpodobností 1 mínus epsilon. Když padáte z třicetipatrové budovy, tak můžete přežít, ale vyhlídky jsou prakticky nulové.

Doporučuju si Stevův článek přečíst, protože je opravdu zajímavý a rozebírá problematiku programovacích jazyků vtipně a s nadhledem a tipuje, co že bude ten Příští Velký Jazyk. Některé myšlenky a postřehy stojí za ocitování:

NBL nenahradí C++. C++ není třeba nahrazovat. Je ohavný a každý ho umí. Přesto tu není moc lidí, co by ho zkoušeli nahradit. Jediní uchazeči, o nichž vím, jsou Objective C a jazyk D. D je opravdu pěkný jazyk. Měl by být tím dalším po C++. Programátoři v C++ ho nebudou chtít, protože má garbage collection (a to i přesto, že může být vypnuta, a i přesto, že SAMOTNÝ Stroustrup nyní prosazuje přidání garbage collectoru do C++). Walter Bright (...) demonstruje, že D je stejně rychlý nebo rychlejší než C++ a má téměř takové vyjadřovací možnosti jako Ruby nebo Python. Je to tajná zbraň, čekající na to, až bude uchopena nějakou chytrou firmou nebo opensource projektem.

Ale nikdo tu nechce obviňovat programátory z toho, že by byli chytří.

---

Každopádně, netvrdím, že NBL bude skvělý jazyk; říkám jen, že nebude programátory prudit.

---

Co bude podle Steva ten Příští Velký Jazyk mít?

Syntax jako C: I když je hrozná. Jako programátor si možná myslíte, že vám zápis programů v C pomáhá. Naneštěstí hned ve chvíli, kdy se pokusíte napsat kód, který bude rozumět zápisu programu v C, tak narazíte. Bohužel, jak Ruby tak Python, které se tváří jako "syntakticky jednoduché", mají také velmi komplikovanou gramatiku, která ztěžuje psaní programu, který by dokázal zpracovat zdrojový kód. (...) Teď víte, proč si myslím, že je céčkový zápis špatný. Je to proto, že JE špatný. Ale špatný nebo ne, NBL bude mít podobný způsob zápisu, protože kdyby neměl, tak mu většina programátorů nevěnuje ani druhý pohled.

Dynamické typování s možností statických typů: Starší přístup byl superstatický, aby ochránil programátory před jejich vlastní blbostí. Klasický příklad je SML, který je tak fanaticky typový, že jeho zápis zaručuje, že NIKDY nedostanete běhovou chybu, protože svůj zatracený program nikdy nezkompilujete. Není nic veselejšího než kompiler, který oznámí: "Error: expected type (int, int, int) but got type (int, int, int)".

Výkon: Aspoň takový jako má Java. To znamená, že pokud je NBL některý z existujících dynamicky typovaných jazyků, tak by se muselo stát něco velmi významného s jeho výkonem. (...) NBL se musí soustředit na výkonnost víc než takzvané "skriptovací jazyky". Říkám si, že pokud to je opravdu Další Velká Věc, tak to musí běžet na mobilních zařízeních, herních platformách a na všech možných hardwarově omezených zařízení. Zní to nemožně, já vím. Ale není. Autoři kompilerů jsou mazaná parta a mají desetiletí zkušeností.

Nástroje: Pohlédněme pravdě do očí: Jeden z nejzásadnějších důvodů, proč lidi nepoužívají Ruby nebo Python je ten, že mají mizerná IDE. IDE jako je Visual Studio nebo Eclipse nastavila laťku a většina programátorů očekává něco takového. Nedokážu říct kolikrát jsem už slyšel lidi říkat, že nechtějí použít Ruby, protože nemá automatické refaktorizační nástroje. Ruby ve skutečnosti takové nástroje nepotřebuje. Ale programátoři jsou banda tvrdohlavá, a vyhrát nad nimi znamená dát jim to, co si myslí, že chtějí.

Výlevka: NBL smíchá všechno, na co jsou programátoři zvyklí z ostatních jazyků. Objektový zápis pro pole a hashe, regulární výrazy kompatibilní s PERL5, přiřazení typu (x,y = vratDveHodnoty()), OOP standardy, iterátory, generátory, jmenné prostory, balíčky, víceplatformní GUI, přetěžování operátorů, ...

Multiplatformnost: NBL poběží minimálně jako standalone a nad JVM. Nejsem si jist jestli i nad .NET, ale vypadá to, že se to musí stát taky. A jsou ještě dvě platformy, kde musí NBL běžet, pokud se chce prosadit, ale to už bych prozrazoval moc.

Steve svůj článek uzavírá tvrzením "Hlavně to nesmí uživatele štvát" (no... nabízí se jadrnější překlad, ale zůstaneme u toho štvaní).

A protože je zjevně zkušený autor, uzavírá svůj článek větou "A pokud chcete vidět prvotřídní variaci na starou hru Ukamenujte Proroka, tak si vychutnejte komentáře!"

Fakt stojej za to!

PS pro méně chápavé: To co je kurzívou, to je volná citace z výše zmíněného článku. Chcete-li s něčím z toho polemizovat, račte tak učinit tam, nikoli zde.

PPS: Někdy v roce 1999 jsem hledal překladač pro DOS32 extender, bohužel marně. A protože mě nebavilo mazat se s assemblerem, tak jsem si nakonec navrhl vlastní jednoduchý jazyk (ideově vyšel z C-- a Pascalu) a v TurboPascalu jsem si k němu napsal překladač. Fungoval... Pak jsem bohužel koupil nové PC a zjistil jsem, že svět už DOS32 nezajímá a DPMI je pravděpodobně zdechlé, a to tak že navěky. No, škoda. Bylo to jednoduché, bylo to bez středníků a mělo to i "cyklus s podmínkou uprostřed" ;) No, pro Windows to přepisovat nebudu; to si spíš navrhnu další. Když už mám ten framework... ;)

Dne 3.03.2008

Twittni

Přidej do: Přidat na Conota Linkuj si ! asdf.sk StumbleUpon Toolbar Stumble It!

Komentáře

[1] (dond ) 03.03.2008, 14:28:40 [X] [D]
"Do you disagree? If so, I don't mind. It just means your standards aren't as high as mine."

Mňam. Dík za odkaz.

[2] (zlosyn ) 03.03.2008, 14:52:57 [X] [D]
http://stuffthathappens.com...l-do/ :)

[3] (klok - WWW) 03.03.2008, 16:07:55 [X] [D]
Chech, tak ty ses taky dostal k zazraku C--?
Vypada to ze si tim prosel kazdy kdo smeroval od asm k C :)

[4] (klok - WWW) 03.03.2008, 16:12:42 [X] [D]
BTW, pmatujete nekdo Unreal mode?
http://en.wikipedia.org...real_mode

Taky mi to pred lety pripadalo jako super napad. Ach ty romanticke roky. Skoda ze z toho clovek (ehm. programator samozrejme) musi vyrust :))

[5] (Arthur Dent [openID] - Mail - WWW) 03.03.2008, 16:29:42 [X] [D]
[3][4] Jasně že pamatuju. V C-- jsem nikdy nic nepsal, ale když jsem to viděl, tak jsem si říkal: TOHLE přeci musím zvládnout taky! ;)

[6] (mike ) 03.03.2008, 21:57:57 [X] [D]
[3] Kazdy ne, slysim o tom poprve :) U mne to slo Pascal -> asm -> C -> C++ -> C + asm. Vynuceno okolnostmi, ale nestezuju si. Ted jsem ve fazi, kdy pisu C++ kod v C :) Jelikoz C++ compiler na mnoha platformach, co podporujeme, proste neni. A kdyz je, tak minimalne velmi podezrely.

Clanek je fajn, snad budu mit cas si ho jednou precist i s komentari :)

[7] (obda@myopenid.com ) 03.03.2008, 22:32:06 [X] [D]
Jak vidim, postizenych asm je tu vic nez dost :) U mne to byl druhy jazyk hned po Basicu. Dneska OCaml (nejradeji), Python (male rychle veci) a Java (spoluprace s ostatnimi). Mel jsem tu moznost mluvit s lidmi kteri maji na svedomi nektere z hodne znamych jazyku a bylo to dost poucne. Stejne jako tech nekolik malo prekladacu, co jsem napsal. Takovy prekladac alespon casti Cecka ci Javy opravdu z cloveka udela lepsiho programatora. VYmyslet vlastni jazyk uz je opravdu silenstvi, pokud clovek neprichazi s necim hodne novym (Java, Haskell, ML) nebo alespon neupravuje to zname na nove podminky (napr. F#)

[8] (Tonda - Mail - WWW) 03.03.2008, 22:38:14 [X] [D]
Autor toho článku už zasahuje imho dost do extrémů. Je třeba brát v úvahu, že jazyk je jenom lopata a nemůže prostě 100% vyhovovat každýmu. To by si opravdu každej člověk musel napsat vlastní jazyk a to je malinko ... opravdu jenom malinko neproduktivní. :)

P.S.: Pokud NBL bude skutečně obsahovat všechno to viz. Výlevka, tak to bude pořádnej hnus. Jenom to x,y = vratDveHodnoty()) ... nevěřím. :)

[9] (Misha [openID] - Mail - WWW) 03.03.2008, 23:52:26 [X] [D]
já teda programovat neumím, začal a skončil jsem u basicu, ale překlad zrna, plev a tofu mě upřímně rozesmál :)

[10] ( #13 - WWW) 04.03.2008, 08:40:11 [X] [D]
[9] Mě taky. Tak jsem se díval, jak to napsal autor, a ke svému překvapení jsem zjistil, že přesně stejně :).

[11] (rony [openID] - Mail - WWW) 04.03.2008, 13:31:35 [X] [D]
[8] "Jenom to x,y = vratDveHodnoty()) ... nevěřím"

ked som nieco podobne videl robit regularnymi vyrazmi, tak mi to prislo naramne uzitocne :-)

nie som ziadny programator ale obcas sa prplem v Perle:

nieco taketo:

($a,$b) = $r = /^prva=(.+)\|druha=(.+)$/;

mi pride ako zaujimava a uzitocna vec, hodne podobna "vratDveHodnoty".

ps: verim v nekonecnu silu GOTO.

[12] (d ) 05.03.2008, 15:05:51 [X] [D]
V oblasti x86 architektury jsem pevne presvedcen o tom, ze zadny programovaci jazyk nikdy nenahradi C a assembler, neni k tomu totiz zadny duvod, neexistuje zpusob jak assembler nebo C vylepsit, protoze i dnes v nich lze napsat naprosto vse a vylepsovan je pouze kompilator. Takze D, #C, Python, Perl, Ruby, Bash, PHP a podobne pomale zmetky pro Script Kiddies casto konci ignorovany a jejich popularita se muze snizit tak rychle, jak se zvysila.

[13] (Arthur Dent [openID] - Mail - WWW) 05.03.2008, 23:11:15 [X] [D]
[12] Trochu jablíčka a hruštičky dohromady, že? Ale to nevadí, jsme zvyklí. Tak jen připomenu, že "v assembleru" jde napsat opravdu všechno pro jakýkoli procesor, ale je spousta důvodů, proč se assembler (a pomalu i C) používá jen v určitých úlohách, v určitých místech, ...

Třeba proto, že tvorba SW je dnes průmysl, který potřebuje silné a efektivní nástroje pro unifikovatelný a rychlý vývoj. Výkon ani nároky už nehrají takovou roli jakou hrály v 80. letech. Psát v assembleru nebo lowlevel céčku zkrátka už není čas.

Jinak jistě vývojářské firmy potěší, že jsou vlastně jen script kiddie, když nepíšou v ASM a neobjektovém C, a budou se tomu dlouho, dlouho smát... Jako já... :)

PS: Základ všech jazyků je FORTRAN a ti, co píšou v C, jsou jen pojídači koláčů ;)

[14] (David Grudl - Mail - WWW) 05.03.2008, 23:17:32 [X] [D]
[12][13] vono je to ještě dál. Dnes už se ví, že třeba takové MS Office v assembleru prostě napsat nejde. Pouze a jen v teoretické rovině.

[15] (Arthur Dent [openID] - Mail - WWW) 05.03.2008, 23:21:38 [X] [D]
[14] MS Office nelze napsat v žádném v současnosti známém programovacím jazyku (tzv. Druhý Dijkstrův teorém). Což mimochodem dokazuje existenci buď stroje času, nebo mimozemské civilizace.

[16] (Solvina - Mail ) 13.03.2008, 23:51:23 [X] [D]
Proč mě nenapadlo si napsat vlastní jazyk?
Vzdělání sem na to utrpěl dost velký...