Občas se potýkám s názory, že znovu vynalézat kolo, programovat projekt, jenž na trhu je, je zbytečné mrhání časem. Pravda je, že někdy to tak určitě je. Jsem ale přesvědčen, že ne vždy. Zejména u krátkodobých projektů to může být pro autora velmi přínosné.
Používat hotové řešení má určitě smysl. Je otestované, vyzkoušené, existuje k němu dokumentace a návody. Zlepšit již hotový projekt má smysl o to větší, protože to pomůže i již stávajícím uživatelům. A další uživatel, nebo dokonce vývojář je pro projekt vždy přínosem (extrémní výjimky nechme stranou). Pravdou ale je, že ne vždy je to možné, snadné, nebo dokonce ku prospěchu.
Nejčastěji se setkávám s tzv. kanónem na vrabce. Projekt je prostě obrovský, a místo nějakého jednoduchého kladiva, má před sebou člověk neuvěřitelný stroj, ve kterém lze nakonfigurovat vše, včetně vlastního operačního systému. Jeho první rozjetí znamená 3 dny intenzivního procházení dokumentace a návodů na internetu, než člověk dosáhne výsledku, kterého nechtěl. To je dle mého zásadní věc. Někdy to pravda, jinak nejde, jindy to ale jde, a to je ten moment podívat se po něčem menším, co nemusí existovat.
Programátor je od přírody egoista. Vím to moc dobře, jsem také takový. A díky tomu nemusí být snadné napsat opravu, nebo vylepšení nějaké aplikace empaticky, aby ji autor přijal. Stejně tak autor v sobě musí hrát malou bitvu, aby přiznal, že právě ten kus kódu je správný, a je třeba ho začlenit do jeho aplikace. Tak to prostě je. Občas jde oprava, nebo vylepšení jiným směrem, než by autor chtěl směřovat svůj projekt. Nejednou jsem se setkal s tím že chyba byla zamítnuta s tím, že nejde o chybu, nebo šlo o kompletní přepsání navrhovaného kódu. A vlastně to je v pořádku.
Do této kategorie by se dali zařadit i situace, které jsou jen technického rázu. K opravě, nebo vylepšení se prostě komunita projektu dostane v době, kdy už ji sama opraví. Dostalo se mi takhle omluvy, že můj překlad zapadl kdesi v propadlišti systému a někdo mě tak "předběhl" po dvou letech.
Ideologie je mrcha. Tak to bylo, je, a bude. A svět otevřeného softwaru je ideologií propletený skrz na skrz. Stačí se jen podívat na boje s licencemi. Pro někoho je GPL absolutní zlo, pro jiného svatý grál. Jindy to může být grafické prostředí. "Válka" mezi Qt a GTK+ nikdy neskončila. Prostě každé prostředí, každý grafický toolkit směřuje jinam, a vyhovuje někomu jinému. Což samozřejmě znamená, že pokud je nějaký program napsaný v Qt, logicky bude poptávka po alternativě v GTK+. Některé aplikace to řeší více verzemi pro různá grafická prostředí.
Pravda je, že občas je projekt jen mrtvý, a je třeba ho prostě převzít. Někdy domluvou, jindy "násilím".
Odštěpením, živého projektu, se ale opravdu štěpí i komunita. A konkuruje si víc, než může být zdrávo. Nejvíce to pak mate uživatele, kteří si nejsou jisti zda nepřesedlat na fork. Na druhou stranu, mnoho z Vás používá různé forky, ani to možná neví.
Zásadní "výhodou" pro vývojáře může být to, že nezačíná na zelené louce. Někdy to ale zas taková výhoda není.
V první řadě může být zaplněna díra na trhu. Ať už jde o grafické rozhraní, rychlost, jednoduchost, nebo prostě funkčnost a směr. Ne každému chutnají makové buchty, někdo rád tvarohové, někdo je nejí vůbec.
Programátor se toho může mnoho naučit. Mnoho mých projektů vzniklo vlastně jako studijní projekt. Prostě jsem si chtěl vyzkoušet nějakou novou technologii. Případně jsem se chtěl přesvědčit, jak složité, resp. snadné něco je. A učení je podle mne to, co by měl programátor dělat neustále. Rozšiřování našich znalostí nás udržuje v kondici, a posouvá nás na pomysleném trhu práce výš. Nebo nám alespoň umožňuje se nepropadat.
Tento článek vznikal a je prezentován na celé škále mého software. Nepochybuji o tom, že ani jedna moje aplikace není nejlepší na světě. A upřímně řečeno, ještě jsem takovou neviděl.
Jde o WSGI framework (konektor). Začal jsem na něm pracovat v době, kdy WSGI ani pořádně neuměl tehdy nejpoužívanější HTTP server, Apache. V té době jsem o konkurenčních frameworcích netušil, a nechci proto hodnotit, jak vypadali a kolik jich bylo.
Důležité ale je, že díky tomuto projektu, jsem se naučil o HTTP velmi mnoho a nejednou jsem ležel v RFC, abych implementoval funkcionalitu přesně tak, jak to má být. Naučil jsem se psát pro python 2.x i 3.x zároveň, settery, gettery, generátory i další triky. To vše úročím v práci každý den, a na Mapách několik let fungovala WSGI komponenta, která žádný framework nepotřebovala, prostě proto, že to nebylo potřeba.
Morias měl být lehký CMS. Když pominu komentáře a přílohy, tak lehký docela je. Dnes, bych to napsal zase trochu jinak, více lehčeji, a možná že vytvořím ještě jeden systém, který bude úplně o něčem jiném.
Nicméně, naučil jsem se pracovat z Jinjou, perfektním šablonovacím nástrojem, JQuery, byť javascriptu nehovím. Projekt se roztáhl do různých částí, které jsem musel nějak řešit. Vytvořil jsem i jednoduchý online ReStructuredText editor. Navrhoval jsem relativně rozsáhlou aplikaci, a nejednou jsem narazil na její limity, které jsem pak musel překonat. To jsou obrovské zkušenosti, které bych jinak získával mnohem déle. Navíc, z vlastních chyb se učí výrazně lépe, než z těch cizích.
Program na myšlenkové mapy psaný v jazyce Vala. Tento můj projekt, v počátcích hlavně konkurence FreeMindu, velmi solidní aplikace, zůstal v mé mysli hluboce zakořeněn. Na něm jsem se rozhodl naučit se s novým programovacím jazykem, jenž mě nadchl. Ne jen, že jsem se naučil zcela nový jazyk, ale ještě více jsem prohloubil mou znalost GTK+ resp. GObject světa. Světa, ve kterém je napsáno mnoho velkých aplikací i celých grafických prostředí.
Navíc myšlenkové mapy jsou velmi specifickým, a zároveň výkonným prostředkem. Při psaní takové aplikace však nejednou narazíte na limity technologií, které používáte. Tam teprve začíná ta pravá práce, změnit svůj postoj k technologii a naučit se ji opravdu ovládat. Tato aplikace pro mě představuje ještě mnoho výzev.
I ve Formiku vznikal tento článek. Je to software úplně z jiného soudku. Jde o GUI aplikaci psanou v GTK+. Na ní jsem si osvojil práci v Python GObjectu, což je zase něco jiného než v pyGTK. Zkoušel jsem zároveň psát aplikaci jednoduše ovladatelnou a intuitivní, která zapadne do prostředí Gnome. Jestli se mi to podařilo musí posoudit někdo jiný. Jde ale zase o neuvěřitelně cennou zkušenost. A to vše proto, že můj on-line editor mi nestačil a ReText byl v QT, a neuměl něco, co jsem chtěl. Nyní vzniká v GTK+ ještě jeden editor, ale ten umí jen MarkDown. Takže můj Formiko má na trhu stále své místo.
Mrhal jsem svým časem? Neřekl bych. Pokud se na celou věc podívám jen čistě ze studijního pohledu, naučil jsem se za těch několik let, které jsem těmto projektům věnoval, mnoho užitečných věcí. A někdy mám pocit, že daleko víc, než se naučím v mé práci, které je jinak nesmírně zajímavá a plná různých nových technologií. Podstatou mých projektů však bylo, něco se naučit. Mohly tak vzniknout minimálně zajímavé alternativy. Navíc samotný základ těchto aplikací většinou vznikl velmi rychle, takřka za pár hodin. Jen postupným zdokonalováním narostly do svých stávajících rozměrů.
Určitě je správné, podpořit oblíbený projekt, místo pouštění se do jiného. Ale pokud žádný, který by Vám vyhovoval nenajdete, nebojte se experimentovat a pojmout nový projekt jako studijní experiment. I to, že zjistíte, že pro danou úlohu se něco nehodí je správně! Můžete o tom napsat, a někomu tím možná pomůžete.
Všechny tyto projekty mě ohromně posunuli dál. A to nejen v technologických zkušenostech. Naučili mě přistupovat k různým úlohám různým způsobem. Někdy vyžadovali technickou preciznost, jindy optimalizaci. Někdy zase přehlednost. Naučili mne mé vlastní slabiny, které neustále ve svém kódu vidím, a snažím se tak překonávat zejména sám sebe. A "nadávat" sám sobě, to je důležitý boj s vlastním egem.
© 2023 Ondřej Tůma McBig. Ondřej Tůma | Based on: Morias | Twitter: mcbig_cz | RSS: články, twitter