Bystroushaak's blog / Czech section / Programování / Selfové povzdechnutí a Manifest expanze mysli

Selfové povzdechnutí a Manifest expanze mysli

O Selfu jsem tu trousil narážky asi tak půl roku. Self je programovací jazyk, prostředí a virtuální stroj. Je to něco naprosto jiného, unikátního a jediné, co se tomu trochu blíží je původní koncept operačního systému, který běžel na Lisp machines a Smalltalk.

⚠️
Update: Tady je moje série článků o Selfu: 📂Seriál o Selfu.

Prvně povzdechnutí

Od doby, co jsem před dvěma lety (podle logu 2015/09/13) pochopil o co se jedná jsem zahodil většinu vlastních snah o vývoj vlastních komplexních systémů a prostě ho jen studoval. Mezi tím jsem opravil formátování v celém handbooku, který jsem si v průběhu těch let třikrát objednal jako knihu (a třikrát ho přečetl od začátku do konce), prošel jsem si tutoriál a naprogramoval v něm několik různých věcí, jako HTTP klienta a tak podobně. Taky jsem přečetl archiv mailové konference za celé desítky let, několik tisíc zpráv.

Tenhle měsíc jsem po roce a půl otevřel Pharo ve verzi 6 a celé to prostředí mi doslova vyrazilo dech. Když jsem s ním naposledy dělal, tak bylo takové hrubé a neotesané, na mnoha místech vrzající. Teď je z toho naprosto sexy věc, ve které je radost dělat. Vzhledem k tomu, že Self je víc Smalltalk než Smalltalk samotný, tak spousta toho co jsem se naučil je přenositelná a stále ještě si toho pamatuji tolik, že jsem byl schopný dát během chvíle dohromady jednoduchou aplikaci i s grafickým rozhraním.

To je takový rozdíl oproti Selfu, že nevím, co říct. Self je ve fakt špatném stavu. Původně jsem si myslel, že když se budu snažit, tak ho z toho během roku vytáhnu, ale už uběhly dva a pořád je to skoro ve stejném stavu, jako když jsem k němu přišel. Jsem někde v 80% toho tam narvat podporu Unicode výstupu, poté co se mi podařilo nahackovat vstup a celé je to jeden velký, bolestivý porod, který se táhne a táhne.

Self nemá skoro žádnou dokumentaci. Ani interně, ani externě. Handbook, jeden 20+ let starý tutoriál v naprosto nevalidním HTML, pár akademických paperů. To je všechno. Chybí i dokumentační stringy většiny metod. Naschvál:

„I have found that comments that document code tend to lie. Machine-checkable info is more reliable. In a live environment, such as Self, you can just try something out to see if you are passing in the right argument.“

a důvod proč nemít docstringy?

„In my experience such comments do not get fixed. Redundancy that is enforced manually is both ineffective and immoral. Ineffective because things do get out of sync. Immoral because it uses people's time for something that could be automated, decreasing the amount of time for creativity in the world. But all this is relative to my experience and value system. We could discuss which of us has more experience, but we are unlikely to change each other's values.“

To je z mailové konference, přímo od jednoho z původních autorů, když jsem se divil, proč tam nikde nic není.

Grafika vypadá fakt špatně a není ani možné jednoduše zvětšit font, který je na 2k monitoru hodně blbě čitelný. Což mi připomíná, že celý font subsystém je 20 let stará věc, která ani neumí načítat normální fonty a celé je to jeden hack. Self navíc nemá skoro žádné API, outlinery jsou naprosto úžasně debilní způsob, jak se hrabat v delším kódu. Zkuste si něco editovat v outlineru, který má na výšku asi tak pět metrů, to je fakt peklo přes to pořád scrollovat. A takových objektů je tam spousta přímo v systému. A package manager (resp. transporter) nemá žádné GUI (když vynechám těch pár dialogů), ovládá se skrz posílání zpráv, a co z něj leze je naprosto nečitelná směsice blitek, místo čitelného zdrojáku.

Naposledy když se někdo v konferenci zeptal jak se v Selfu ukládají data a co používá do databáze, tak dostal jako odpověď výsměch, že samotný Self je databáze, protože je založený na konceptu image. To je sice pěkné, ale k hovnu. Self je 32 bitový, takže jste omezeni na 4GB paměti a to vynechávám, že uložení 16MB image trvá snad pět vteřin. A sestřelit jí se mi povede asi tak pětkrát za den, když se nesnažím. A že taková databáze by neměla ani transakce, ani indexy, ani nic. V tomhle roce jsem začal studovat koncept objektových databází, přečetl jsem o tom jeden a půl knihy a prošel si různé tutoriály. Asi bych nějakou základní (jednoducé indexy, persistence na disku, transakce, špatný výkon) dokázal naprogramovat, jenže to je zase práce na měsíce a roky řešení problémů, které nijak nesouvisí s věcmi, které v tom chci psát.

A po tomhle jsem se pohyboval, hrabal se ve vnitřnostech a upravoval C++ kódy celé měsíce a roky. Jak skalní mnich, který je zvyklý žít z ranní rosy. Když jsem teď nakoukl do Phara 6, které oproti tomu působí jak zaslíbené údolí, kde lítají pečení holibi do huby, asi prostě neodolám a budu dál pokračovat se Smalltalkem. Ze Selfu se nejspíš stane jen jeden z vedlejších projektů.

Co mě nejvíc zdeptalo je, že moje schopnost v Selfu programovat je pořád na stejně špatné úrovni. Chtěl jsem si naprogramovat jednoduchou aplikaci na evidenci knih, jenže jsem selhal. To navíc vynechávám, že dokud nedodělám tu podporu unicode, tak to ani nemá smysl, protože do toho nemůžu psát česky. Self je pro mě stále příšerně těžký. A není to mnou, je to Selfem, respektive absencí dokumentace, moderních nástrojů (hodil by se třeba lepší editor, než ekvivalent notepadu) a jakékoliv smysluplnné komunity.

Ten poslední bod je asi největší zabiják. Postupem času jsem dospěl k názoru, že věc, která Selfu úplně nejvíc škodí je komunita. Ta se historicky orientovala okolo akademických konsekvencí Selfu. Objektový model, virtuální stroj. Pro většinu lidí v konferenci je Self něco intelektuálně a akademicky zajímavého, prakticky nikdo z nich, až asi na pět lidí však nemá vůbec žádnou snahu Self reálně používat.

Sere mě taky, že neprobíhá žádný oficiální vývoj. V podstatě ani nejsem schopný říct kdo je kdo a co dělá a za co zodpovídá. S většinou lidí jsem v průběhu těch dvou let mluvil na IRC, nebo si s nimi psal emaily, či na githubu. A stejně pořád nevím co vlastně dělají a jakou hrají roli. Je to jak kdyby nikdo neměl žádnou zodpovědnost, jenže zároveň dost často reagují pasivně agresivně, či rovnou negativně na návrhy ke změnám, jako kdyby zodpovědnost měli. Celé je to brutálně únavné, jak parta dětí, které nevědí co dělají a nemají vůbec tušení o tom jak fungují běžné opensource projekty o víc jak třech lidech.

Musím nechat, že Self mě donutil vyjít z komfortní zóny a dívat se na svět jinými pohledy. Jsem ale brutálně unavený a dochází mi trpělivost s tím, že kdykoliv chci cokoliv udělat, tak musím bojovat s nedostatkem dokumentace a naprostou nezralostí k adopci běžnými programátory. Chci být jen uživatel, dělat v něm aplikace, ne se stát core vývojářem a hackovat standardní knihovnu a C++ kód a Xlib a věnovat tomu roky času, abych nebyl schopný napsat jednu debilní grafickou aplikaci.

Nebo tedy alespoň .. chtěl jsem. Teď ho prostě asi odložím na vedlejší kolej a smířím se s tím, že prostě už core vývojář jsem a aplikace co chci v něm psát nebudu, místo toho do toho budu mlátit kladivem, dokud nezačne fungovat. Ach jo. Frustruje mě, když vidím současný stav a stav, v jakém by Self mohl být, kdyby se mu někdo pořádně věnoval.

Expanzionistický manifest

Přemýšlel jsem proč vlastně se Selfem trávím čas, proč se namáhám a starám. Co mě k tomu vede? Kde se to ve mě bere?

Musím se přiznat, že mám sen, nebo snad vizi. Možná dokonce touhu.

Ta touha mě žene ke snaze se oprostit od klasického konceptu používání počítače. Plyne z přesvědčení, že klasické uživatelské rozhraní a koncept operačního systému může být vážně super z jen hlediska běžného uživatele. Tak jako každý nástroj pro běžné lidi, který je přizpůsoben nejslabšímu článku řetězce, je však z principu omezen.

Nechci používat operační systém, ani programy v něm. Chci expandovat svojí mysl skrz hardware a počítačové sítě. Chci pracovat přímo s informacemi, dotýkat se svojí myslí nehmotného rozhraní stroje.

Můj sen je o software, který by mi dovolil přestat pracovat s věcmi navrženými pro masy podprůměrných uživatelů a začít si psát vlastní rozhraní do infosféry. Což dělám už teď, jen interakce se zbytkem systému je tak bolestně neohrabaná, že skoro fyzicky bolí.

Chci software, který se oprostí od dávkového režimu sálových počítačů. Proč by měl běžet každý proces samotný a nemít žádnou možnost interagovat s daty okolních procesů? Proč když pustím python script, tak z dalšího terminálu nemám přístup k jeho datům? Proč po jeho běhu data zanikají?

Proč když vezmu dataset všech mnou přečtených knih, rozparsuju ho na objekty, se kterými můžu manipulovat jak chci, které mají strukturu a nesou implicitní sémantickou informaci o obsažených datech, proč je nemůžu mít jen tak na ploše? Proč tam musím mít soubor s retardovanou textovou či bajtovou reprezentací? Nechci řešit žádné reprezentace dat, žádný JSON, XML a normálové rozložení SQL. Chci objekty až úplně dolu. Chci vzít objekt a mít ho uložený na disku takový, jaký je, v celé jeho nahotě a bez nutnosti ho někam explicitně serializovat a deserializovat.

Proč musí být všechno neustále konvertováno z jednoho formátu reprezentace dat na jiný? Soubor přenáším po síti jako proud bajtů, který je poté uložen do sektorů na disku jako rozkouskované shluky dat, o které se stará složitý plánovač a žurnálovač a defragmentátor. A pak je načten programem jako jeden celek do paměti, kde je rozparsován a ztokenizován a je mu dán smysl, aby z něj byly vytvořeny objekty, se kterými se chvíli pracuje, než jsou zahozeny při nejbližší příležitosti vypnutí programu, který si nad nimi stejně určitě udělal vlastní reprezentaci odlišnou od původních dat.

Když napíšu článek, nechci ho ukládat na disk v html a pak nahrávat na server, ať již po SSH, nebo do nějakého CMS. Chci prostě vzít objekt článku obsahující strom DOMu a poslat ho serveru jako samotný objekt bez toho, aniž by ztratil strukturu, aniž by byl po cestě pětkrát transformován tam a zpět, aby z něj server udělal nakonec něco jiného, než co jsem měl u sebe já. Chci ho vzít a hodit po serveru, který si ho uloží do mého namespace a až ho někdo bude chtít vidět, tak na něj zavolá .to_html(). Nebo .to_json(), .to_csv(), .to_txt(), či .to_rst(). Co bude třeba.

Když si na webu prohlížím galerii, chci vzít všechny fotky co v ní jsou a rozprostřít si je do prostoru před sebe. Když si čtu fórum, chci vzít všechny příspěvky, udělat z nich stromovou strukturu, hodit si jí před sebe na plochu a nechat červeně svítit nově přidané a pouštět nad nimi dotazy psané ve stejném jazyce, v jakém píšu všechno ostatní, a ne v databázovém COBOLu nad normálovým rozložením. Dotazy, které mi budou vyhledávat zajímavé věci a spamfiltrem odstraňovat nezajímavé. Nezajímá mě, jak vypadá web, jakou má reprezentaci. Chci pracovat s daty, co na něm jsou, ne s rozhraním, které zrovna přišlo moderní hipsterskému designérovi.

Je mi jasné, že je to katastrofa z hlediska bezpečnosti, nepoužitelné pro běžného uživatele a blah blah. Nic takového. Já nejsem běžný uživatel. Programování je něco co dělám každý den v práci a poté ještě doma. Je to pro mě stejně snadný a přirozený způsob vyjádření se, jako pro jiného mluvit.

Jsem svázán okovy světa uživatelů, uživatelských rozhraní a programů. A pomalu napínám svaly a zkouším ty okovy zlomit, kousek po kousku.

Proto se snažím pozvednout Self. Protože předtím, než ztratil cestu v něm byla tahle myšlenka, jejíž ozvěny se dají stále cítit v celém systému a ze všeho, co jsem kdy viděl, má k tomu co chci naprosto nejblíž. Co na tom, že je ve skoro nepoužitelném stavu a není k němu žádná dokumentace. Kousek po kousku, střípek po střípku okovy praskají.

Možná do té doby přejdu na Smalltalk, nebo něco co tuhle ideu zachycuje ještě lépe, ale dřív nebo později se tam snad dostanu.

Jednoho dne snad okovy prasknou a já budu konečně svobodný. Svobodný od vší té demence, do které byl zahnán vývoj software masou uživatelů, kteří nic nechápou a chápat nechtějí a pro které je programování sprostou urážkou.

Tohle je můj manifest expanze mysli do prostoru počítače. Pokud to vidíte podobně, pojďte se mnou. Když nás půjde víc, možná dojdeme do cíle rychleji.

Become a Patron