Všechno to začalo v pondělí, když David Majda (@dmajda) na Twitteru napsal:
„Zajímavé, jak vývojáři na Windows stále řeší GUI klienty k verzovacím systémům. Na Unixu přitom nikomu nechybí. Hezká ukázka rozdílu kultur.“ (link)
Patrně to bylo nepřímou reakcí na mé neustálé reptání, že distribuovaným verzovacím systémům chybí kvalitní Tortoise klient a že tedy radši zůstávám u Subversion. I pokud to reakcí na mě nebylo, nezabránilo mi to v uspořádání drobného experimentu, který by rozdíl GUI versus příkazová řádka nějak lépe demonstroval (k psychologovi kvůli vztahovačnosti zajdu později :)
Dal jsem dohromady dokument, ve kterém jsem popsal, co při práci s verzovacím systémem dělám nejčastěji a jak mi v tom pomáhá TortoiseSVN. Na zastáncích příkazové řádky potom bylo popsat, jak se daný use case řeší v jejich prostředí. Největší kus práce za git udělal jeho velký příznivec Karel Minařík (@karmiq, který bude mimochodem o gitu mluvit na letošním WebExpu) a za Mercurial David Majda (@dmajda). Velký dík oběma pánům za jejich čas! (Poznámkami nebo drobnějšími úpravami se podíleli i další autoři, kteří jsou na začátku dokumentu uvedeni – i jim patří mé díky!)
Výsledek můžete vidět zde.
V dokumentu samotném jsme se snažili vyhnout subjektivním hodnocením, ale celý experiment samozřejmě probíhal právě proto, abychom si nějaký názor mohli udělat, a v tomto zápisku si můžu luxus subjektivnosti dovolit. Zde je tedy seznam postřehů, které si odnáším já:
- Celkem podle očekávání je mezi GUI a CLI propastný rozdíl v intuitivnosti. Zatímco na CLI musím znát příkaz nebo jejich sekvenci, které mi umožní daný úkol provést, v TortoiseSVN prostě „kouknu a vidím“. Asi největší problém mají CLI nástroje s úkolem typu „chci ve vizuálním porovnávacím programu vidět, co se v daném souboru změnilo“ (ať už v aktuálně upravované verze versus v commitnuté, nebo v historické verzi versus v ještě o něco starší). Bez skriptování se tady patrně CLI nástroje neobejdou (jinými slovy, tento scénář v základu vůbec nepodporují), zatímco v TortoiseSVN mi stačí jen dvojklik na vybraný soubor a tsvn už na pozadí všechnu „špinavou“ práci udělá samo.
- Jsou některé úkoly, které bude PITA dělat na příkazové řádce. Jeden příklad za všechny: mám 50 souborů, ze kterých chci commitnout nějakých třicet. V TortoiseSVN hračka, na CLI „zábava“ na dlouhé zimní večery. Nedělá se to sice moc často, ale občas to potřebuji.
- To, co v GUI považuji za samozřejmé (kontrola pravopisu, automatické doplňování jmen souborů apod.) CLI v základu buďto nepodporuje, nebo by opět bylo potřeba skriptování, nebo se k řešení úkolu musí tak jako tak uchýlit ke GUI (např. kontrolu pravopisu může zařídit externí editor, pokud je použit ke psaní commit message). Hezky to napsal @abtris: „Je videt jak jsi tim TSVN zhyckany ;-)“ (link). Co někdo považuje za zhýčkanost, já považuji za samozřejmost. Opět z mého pohledu typický rozdíl mezi GUI a CLI… Update: V komentářích @abtris doplnil, že myslel spíš TortoiseSVN vs. další GUI klienti, např. pro Eclipse nebo Netbeans. V porovnání s nimi by asi CLI vyšlo o trochu lépe (z mého pohledu).
- Celkově mě překvapilo, u kolika pro mě naprosto základních scénářů je u git/hg CLI nutno zabývat se nějakými workaroundy nebo „skriptováním“. V dokumentu najdete úryvky jako „šlo by to snadno dopsat do vestavěného webserveru“, „podporu bych musel naskriptovat způsobem…“, „případně si napsat nějaký skript na parsování“ a podobně. Nic proti, hlavně že to vůbec nějak jde, ale opět rozdíl oproti TortoiseSVN je ten, že tam podobné věci absolutně nemusím řešit – ty věci prostě fungují.
Každý, ať si udělá názor svůj, ale pokud jsem k experimentu přicházel jako skeptik, co se CLI týče, odcházím s jasným názorem, že můj čas je příliš cenný na to, abych se v současnosti DVCS bez odpovídající Tortoise zabýval. Abych byl fér, pro git i Mercurial dnes už Tortoise nástroje existují (nejsou moc kvalitní, ale řekněme 70% mých potřeb pokrývají), nicméně tento experiment byl specificky „soubojem“ GUI a příkazové řádky. Na poznámky typu „k čemu potřebuješ GUI, když máš CLI?“ vždycky koukám trochu s otevřenou pusou, protože z mého pohledu jsou výhody GUI do očí bijící.
Dovětek
Aby náhodou nebylo v tomto článku kontroverze málo :), musím se ještě podělit o zkušenosti s Google Docs, které byly použity jaké médium tohoto experimentu. Jednou větou: GDocs jsou vtip. MS Word 1.0 jsem sice nezažil, ale tak nějak si ho představuji. Kromě typických problémů s naivní implementací formátování (nekonzistentní chování stylů na základě toho, co mám právě ve výběru, divně fungující odrážky apod.) obsahují GDocs i velké množství problémů s použitelností (například nemůžu nastavit velikost písma 11pt, change tracking je skoro nepoužitelný apod.) Jen jako kyselá třešnička na dortu pak působil fakt, že funkce Download as Word document nefungovala vůbec. No prostě představa, že dokumenty své firmy postavím na GDocs (jak to Google inzeruje v Google Apps pro firmy), mi připadá úsměvná. Svět potřebuje MS Office 2010 Web Apps a Microsoft to ví :)
Díky za zábavný a zajímavý experiment.
Ale, jak už to bývá, nedá mi to:
1/ propastný rozdíl v intuitivnosti… „kouknu a vidím : Jasně, to je rozdíl mezi CLI a GUI obecně! Druhou stranou mince je: a) flexibilita a b) skriptovatelnost.
2/ mám 50 souborů, ze kterých chci commitnout nějakých třicet. V TortoiseSVN hračka, na CLI „zábava“ na dlouhé zimní večery : Ne a ne a ne :) Díky možnosti přidat najednou všechno (
git add .
) a pak selektivně odebírat (git reset HEAD app/models/photo_*.rb
) za pomoci doplňování cest přes [TAB] a wildcards to může být i několikanásobně rychlejší.3/ Z pohledu efektivity práce s nástrojem je ale GUI téměř vždy lepší, než CLI : Je tohle subjektivní názor nebo názor nárokující si obecnou platnost? Zejména s tím dovětkem o „vždy“? Pokud to druhé, pak je to absurdní, a zase to bohužel celou původně zajímavou debatu jen zamlžuje. To, že je někdo, příp. většina lidí efektivnější při práci s GUI, kde „kliknu a vidím“, neznamená přece, že někdo, kdo udělá
gia app/controllers/photo ; gico [... editace commit message] ; gibr master && git merge hotfix34; gips
není „efektivnější“… A jsme zase na začátku…