Už delší dobou si pohrávám s myšlenkou vývoje aplikací Unixovou metodou, kdy jeden funkcni celek se sestavi pospojovanim mensich aplikaci. Tyto aplikace slouzi vlastne zaroven jako moduly. Velice se mi to libi a reknu proc:
- Nejsem zavisly na jednom jazyku, protoze vysledkem neni knihovna, ale spustitelna aplikace. V konecnem systemu muze byt nejaky modul napsany v C, jiny v Go, jiny treba v Pythonu.
- Tim, ze nejsem zavisly na jednom jazyku, tedy i jeho ekosystemu, muzu Unix-like vyvojem dosahnout ohromne univerzalnosti, o jake se nezda zadne existujici vyvojove platforme.
- Jedna se o system, kde moduly doopravdy splnuji princip zapouzdreni. Dokud aplikace funguje tak jak ma, zajima me jen jeji API a k nemu dokumentace. Co me vadi na OOP je, ze mam nejakou knihovnu (ktera vlastne bude plnit funkci modulu) a malokdy se mi stane, ze do ni nemusim lezt a divat se, jak to tam funguje, protoze samozrejme nema jasne definovany API a tim padem ani jasnou dokumentaci, pokud nejakou vubec ma.
- Nebude dochazet ke zneuzivani Unit testu jako v v praxi v OOP, bude bohate stacit otestovat aplikaci smerem od jejiho API.
- Za velice dulezite povazuju ono konzole-like API. Tim se totiz automaticky definuje, jak ma to API vypadat, jak se ma ta aplikace pouzivat (nastaveni a dale pak input a output streamy) a jak ma k nemu vypadat dokumentace. Davat to do protikladu k OOP modulum. Ty proste maji sadu trid a balicku a to ma jakoze byt to API, jenze casto to neni zdokumentovane a je to proste bida.
- Unixova filozofie spojovani aplikaci je brutus a cool
No a v jakem kontextu me to vlastne napada. Napada me to v kontextu prave toho OOP. Prijde mi proste lepsi, ze pokud chci nejakou funkcionalitu, neporidim si knihovnu, ktera to bude umet, ale poridim si konzolovou aplikaci. Prave kvuli tomu jasne definovanemu API, ktere je potom i snadnejsi zdokumentovat. Nemusim se potom te aplikaci hrabat ve vnitrnostech, jako to casto byva u OOP knihovny.
A napada me to jeste v jednom kontextu. Strasne me sere jedna platforma, kterou zde konkretne nebudu zminovat. Budu ji rikat platforma J. Nejsem spokojen s tim, jak v J probiha vyvoj, predevsim webovych aplikaci, a jak vypadaji webove frameworky. A s par dalsima vecma. Jenze mimo jistou J je tady .NET a to je Microsoftu vec. Takze krome J a Microsoftu, pokud chce byt clovek univerzalni, znamena to, ze potrebuje neco, v cem muze rovnez na urovni delat webove aplikace. A nic takoveho tady nezbyva. Krome jedne veci a tou je Unix-like typ vyvoje.
Napada me proto, ze se preorientuju na nasleduji weapons of choice: Python + Go + C. Co rikate, da se s tim dobre uzivit?