Drobkův blog
obrázek kategorie

DROBKŮV BLOG

Motivační úvodní slovo o LISPu (01.12. 2008)

Předem bych chtěl upozornit, že můj seriál o Common LISPu nemá ambice býti úplným a vyčerpávajícím, spíše však předvést a ukázat krásu tohoto programovacího jazyka trochu širšímu okruhu lidí, než který se prozatím programováním v LISPu zabývá. Vítejte u nultého dílu.


Zamysleme se tedy nejdříve nad tím, proč jazyk natolik univerzální a praktický nesídlí v popředí zájmu opěvován serenádami spokojených programátorů a uživatelů.
Odpověď je velice jednoduchá – LISP totiž není pro blbce.
Už tato prostá a ve své podstatě naprosto triviální věta totiž smete ze stolu valnou většinu mainstreamových rádoby-programátorů, kteří jako opičky den za dnem naklikávají stále stejný kód, který již dávno někdo jiný vymyslel (a mnohdy lépe) a říkají si programátoři. Těmto lidem se nebudeme smát ani na ně nebudeme ukazovat, přinejlepším nám jich může být líto, nicméně jsou nezajímaví a jako takové je zanedbáme.
Pojďme se podívat proč tedy LISP neproráží mezi opravdovými programátory.
Důvody jsou zejména tyto:

  1. strach a neschopnost přizpůsobit se
  2. kolující mýty

Co se strachu a neochoty přizpůsobit se týče, musíme si uvědomit, že člověku, který třebas i pár let programuje v nějakém jazyce a je v tom dobrý se vžije jistý způsob přemýšlení, který je tomuto jazyku vlastní. Tento způsob je dán mnoha aspekty jazyka jako je například syntaxe, vžitý standard pro užívání různých částí jazyka a cyklů či nástroje pro práci s různými entitami jazyka. Hlavním faktem, který však definuje způsob programátorova myšlení jsou omezení z daného jazyka vyplývající. Vývojáři jazyků to nemysleli zle. Pevně typované C či C++ má řadu velkých výhod spojených právě s touto zdánlivou nevýhodou avšak nutí celou svou stavbou programátora myslet určitým způsobem. Člověka uvyklého programování v C++ pak ani nenapadne prostá jednoduchá a efektivnější idea nějakého problému právě proto, že je proti způsobu myšlení samotného jazyka.

Celým tímto obšírným úvodem jsem se samozřejmě snažil dostat k prostoru pro chválu LISPu, neboť ten se snaží programátora neomezovat. Máme jazyky procedurální (běžné jazyky jako je C, C++, ...), funkcionální (java, scheme, ...), objektové (C#,...), jazyky používající logické paradigma (prolog) a další spousty programovacích jazyků vyvinutých kvůli různým odvětvím problémů, jež jsou pomocí nich řešené. Každý jazyk má své paradigma podle kterého se v něm programuje a které jednoznačně určuje, k čemu je vhodný a k čemu ne. Zde přichází jedna z obrovských předností LISPu. V něm se totiž dá programovat podle libovolného paradigmatu, které se vám líbí a které je pro daný problém vhodné, pokud vám něco v jazyce chybí, není problém to dodefinovat. Pokud se vám některé část nelíbí. Měli byste se nejdřív kounout do definice standardu LISPu, poté se zamyslet, zda to raději nechcete udělat jinak, ale pokud si holt myslíte, že vaše verze implementace je lepší, nic vám nebrání předefinovat téměř jakoukoliv část LISPu. Většina implementace Common LISPu je totiž psána právě v Common LISPu (samozřejmě až na některé základní části, ty jsou ovšem natolik spjaté s fungováním jazyka, že není důvod proč je měnit).

Odpověď na otázku proč se programátoři LISPu bojí nebo se neumějí přizpůsobit je tedy ta, že LISP je nepovede za ručičku a nebude jim říkat jak mají co dělat, právě naopak, LISP nabízí pro každý problém soubor různých náhledů a pomůcek pro zcela odlišná řešení. Správný programátor by však tento strach z neznáma a obrovské míry možností měl překonat a brzy se těšit z možností jež CL nabízí namísto aby kvůli odlišnému náhledu na způsob řešení problému nežli měli programátoři navrhující jazyk musel zápasit se syntaxí a vnitřní stavbou jazyka.

Co se kolujících mýtů týče, těch jsem zaslehl již hodnou řádku (a pravdou je že některé z nich jsem nedovedl ještě donedávna vyvrátit).
Pro některé lidi nejdůležitějším mýtem kvůli kterému CL odmítají je údajná nízká rychlost v něm napsaných programů oproti běžným programovacím jazykům.
To je samozřejmě hloupost. Základ mýtu spočívá v tom, že LISP je primárně interpretovaný, nikoliv kompilovaný jazyk. Kompilaci však samozřejmě umožňuje a podporuje. Ba dokonce umožňuje kompilaci za chodu a o věcech, které lze předvádět s LISPovými makry si může každý Céčkař nechat leda tak zdát. Na podporu mých slov o rychlosti bych uvedl příklad, kdy se jeden z tvůrců LISPu vsadil v hospodě s kamarádem, že napíše v LISPu knihovnu pro práci s regulárními výrazy rychlejší než PERL. Nevím jak je tomu teď ale díky této sázce (a možnosti LISPu kompilovat výrazy za běhu a faktu že program a data jsou v LISPu zaměnitelná) se lisp poměrně dlouhou dobu (do vylepšení PERLu) honosil nejrychlejší knihovnou pro práci s regulárními výrazy na světě.

LISP je červená piluklka, když jste unavení vším svinstvem okolo

Dalším oblíbeným blduem je prohlášení "LISP je výukový jazyk, nehodící se pro praktické použití" nad touto větou se člověk, který o LISPu alespoň něco ví vždy pozastaví s kroucením hlavou. Vždyť to je naprostý nesmysl. LISP totiž není jen o práci s čísly a jiné syntaxi než na kteoru jsou lidé zvyklí jak se člověk, který si prošel pár výukových příkladů může mylně domnívat.
LISPu nechybí funkce a třídy pro práci s téměř ničím co je prakticky použitelné a s nepříliš velkou námahou je téměř každý nadprůměrný programátor schopen připrogramovat do LISPu cokoliv, co mu tam chybí a mohl by potřebovat. Opět je tento mýtus tedy založen na nepochopení myšlenky samozného LISPu, který dává programátorovi volnost (avšak opička chce vézt za ručičku aby dostala za svých pár řádků banánek)

Snad jedinou věcí, která se dá LISPu vytknout je absence "klikacího" vývojového prostředí, ve kterém by mohla opička programátor naklkat čudlíčky a formuláře a potom si naklikat kdy se má co spustit a nakonec přidat pár řádek zmršeného kódu. Když si však uvědomíme, že Common LISP je nástrojem inteligentních a uvědomělých programátorů, můžeme se na tento fakt v klidu a v pohodě vykašlat, protože na Cliki je několik různých knihoven pro uživatelský interface v LISPu.

Doufám, že tento motivační úvod nikoho neurazil a alespoň někoho nadchnul pro krásu LISPu. V dalších dílech tohoto seriálu se již začnu věnovat nejprve syntaxi a poté příkladům, pomocí nihž, doufám podám onu potřebnou pomocnou ruku těm několika lidem, kteří mají an to být opravdovými programátory a pouze netušili, kde najít ten správný nástroj. Již se těším na alesopň polobouřlivou diskuzi.

PS: K tomuto článku nepochybně náleží i poděkování Michalovi Krupkovi za zajímavé semináře o Common LISPu.
PPS: A taky za velmi zajímavé poučné a příjemně strávené čtyři hodiny při udělování zápočtu z Common LISPu.


Komentáře k článku

Nebojte se napsat, že se vám článek líbil, nebo nelíbil a proč. Rád si přečtu i váš názor ;)

Systém podporuje Gravatary. Email je nutné vyplnit, avšak nezobrazí se.

Přidat nový příspěvek





Gravatar Drobek   04.12. 2008 12:44
www stránky: http://drobek.nadrobeny.net

Nojo to psal nějaký zákeřný odpůrce LISPu. LISP je původně zkratka pro LISt processing aneb zpracovávání seznamů (a přesně na tom je celý jazyk založen)

Gravatar Ghondar   04.12. 2008 09:40


LISP - Lots of Infuriating & Silly Parenthesis

Tohle jsem našel, když jsem si zjišťoval na netu, co to ten LISP je :D

Gravatar DoMaS   03.12. 2008 10:47
www stránky: http://sites.google.com/site/chlupd/

Ještě jsem nepřečetl celý článek,ale můj první dojem při pohledu na tento web byl, že se na přednáškách o Common Lispu musela vytvořit nějaká fanatická sekta :-) Tak mě napadá; není škoda bílého místa po okrajích stránky, které není vyplněno lambdama??? ;-)

Gravatar Drobek   01.12. 2008 17:35
www stránky: http://drobek.nadrobeny.net

Nojo. Tak to jsem pak asi začal psát ten správnej seriál ne? ;)

V tomhle máš docela pravdu. I když na druhou stranu hyperspec je fajn když se s ním naučíš.
Máš tam podle názvů funkcí, podle funkčnosti a pak ještě jakýsi kapitolový index takže víš jestli hledáš konkrtní funkci nebo něco co dělá "zhruba tohle", případně nevíš kde hledáš ale tušíš, že to bude u stringů tak se proklikáš kapitolama ... prostě chce to si zvyknout.

LISP je hodně velkej takže asi jednoduchej help hned tak nebude.

No a programátoři jsou hodně líní, takže se jim nechce komentovat jejich knihovny.

Gravatar darktatka   01.12. 2008 17:19


no prave proto ze sem si to prosel, rikam ze k lispovskym vazbam na poradne knihovny neni solidni dokumentace - na stejny neduh trpi vetsina mene pouzivanych jazyku, ale lisp je v tom prebornik.
Nejde o to ze by to lisp neumel, jde o to ze nejde najit literaturu o tom jak na vec, nedejboze tutorialy, blogy atd...
To taky znamena, ze jakykoli bug ve vazbe si budes muset pravdepodobne odhalit sam, a diky male uzivatelske zakladne si ho budes muset i sam opravit.

Gravatar Drobek   01.12. 2008 16:09
www stránky: http://drobek.nadrobeny.net

Projdi si http://www.cliki.net/Categorized%20Libraries v sekci User Interfaces tam máš čtyři knihovny (a myslím tam není nejpoužívanější CAPI)

jiank ten můj kód pouze generoval deset labelů s inputboxy jim příslušnými a odesílací tlačítko - což by klikací opičce trvalo mnohem dýl než napsat tenhle kód (přesunout deset labelů, postupně je pojmenovat zatímco já mám jména v seznamu, přesunout deset inputboxů, přesunout tlačítko)

ani v mém příkladu ani u opičky se zatím nepředpokládala tvorba kódu.

Tohle je motivační článek, praktické příklady přijdou později ;)

Gravatar darktatka   01.12. 2008 12:44


vytvoreni labelu a jednoho tlacitka nepovazuji za kod, tim sem myslel ze "nic nedela"

Gravatar darktatka   01.12. 2008 12:42


to je sice hezke, ale tvuj kod nic nedela. Vyber si hezci priklad nez nejaky trivialni, ukaz solidni dokumentaci k provazani LISPu s moderni grafickou knihovnou jako je QT a muzeme se zacit bavit.

Gravatar Drobek   01.12. 2008 12:13
www stránky: http://drobek.nadrobeny.net

Tottalitta, darktatka:
No, já nikde netvrdím,ž e je to pohled nezaujatý, nicméně je to pohled mýma očima.

darktatka: však absence nějakého pěknéhu klikacího gui jsem LISPu vytknul, nicméně vzhledem k tomu co všechno umožňuje jsem druhým dechem dodal, že není třeba.

Ono co je rychlejší? Napsat něco ve stylu

  1. (make-form
  2.  (dolist (popisek popisky)
  3.    (make-label popisek (make-text-input)))
  4.  (make-send-button))

nebo naklikat deset labelů s popisky a natahat je kam potřebuješ?

A emacs má pro LISP údajně hodně dobré addony kde určitě bude autocompletion nehledě na to, že existují i pro LispWorks (stačí kouknout na Cliki)

Gravatar darktatka   01.12. 2008 11:27


jojo, NAPROSTO, ANI V NEJMENSIM nezaujaty pohled na lisp ;)
opicka programator klika cudliky, pouziva autocompletion a intellisense z jednoho duvodu - je to zatracene rychlejsi, a opicky programatorske si sveho casu vazi.

Gravatar Tottalitta   01.12. 2008 09:47


Absolutně nezaujatý pohled na LISP. Naprostou souhlasím! Bravo..Těším se na další díl!