Nehyzděte své aplikace vyhřezlými implementačními detaily

22. 9. 2020 18:35 Daniel Novotný

Dnes bych rád mluvil o jednom neduhu, který postihuje hlavně některé open source aplikace. Na konci se ještě zmíním o neduhu jiném, malinko podobném. O co jde? O vyhřezávání implementačních detailů.

Implementačním detailem myslím nějaký mechanismus, který je nutný z technických důvodů, netýká se přímo uživatelova styku se systémem a je možno ho implementovat tak, že o něm uživatel nemusí vědět. Je špatné, pokud něco takového „vyhřezne“ na uživatele a ten je nucen se tímto zabývat.

Když udám dva konkrétní příklady, bude to jasnější: jednou jsem stáhl nějakou knihu ve formátu pro LaTex a chtěl ji přeložit a vygenerovat z ní pdf (nebo ps, už nevím) soubor. V dokumentaci bylo napsáno něco, nad čím jsem nějakou dobu nevěřícně zíral: že LaTex je nutno spustit několikrát, aby vygeneroval dobře obsah.

Vskutku jsem prvně nechápal, že se opravdu po mně chce, abych příkaz „latex soubor“ zadal několikrát za sebou. Je to implementační detail: pokud LaTex přijde na to, že některé objekty se po jednom průchodu nějakým cyklem nevygenerují správně, má to detekovat a vnitřní cyklus provést několikrát. Sám ví, co vygeneroval a co nevygeneroval, neměl by to být problém. A nenutil by uživatele znát detail o průchodech nějakým vnitřním mechanismem v rámci programu.

Druhý příklad: když se nainstaluje program „mailman“ na správu e-mailových konferencí, po svém spuštění si stěžuje „site list is missing“. Googlení odhalí, že jde o nějaký interní mailing list, který je vždy potřeba. Když jej vždycky potřebuje, proč si ho sám při instalaci nebo prvním spuštění nevytvoří?. V instalaci existuje template pro běžné nastavení tohoto listu: proč se nepoužije jako default?

Nemluvím tady o tom, že by implementační detaily neměly být přístupné. Pokročilý uživatel by naopak měl mít možnost se v těchto věcech vrtat, pokud chce nastavit něco složitějšího. Měl by však mít možnost a nikoli nutnost.

Druhým extrémem je černá skříňka, u které nejde nastavit skoro nic: ovšem nic takového „zavádět“ nechci: pokud jsou tyto věci nastavitelné, je to dobře – ale nutit uživatele po tom pátrat (když ho třeba v práci tlačí termín a má za krkem deset dalších záležitostí a nemá čas ani mysl se zbytečně hrabat v něčem, o co by se vůbec neměl být nucen zajímat) je chyba.

Mnozí lidé namítnou jako argument pro „hřeznutí“, že je nutno danou vlastnost nastavit, pokud existuje více možností a uživatel si musí zvolit. Pokud existuje více rovnocenných možností, je to třeba i snad omluvitelné – ale nikoli, pokud existuje nějaký „většinový“ default – což je druhý, související neduh, o kterém bych chtěl mluvit: nepoužívání defaultních hodnot.

Příklad: dejme tomu, že program funguje ve dvou příchutích: vanilkové a čokoládové. Když víme, že 80% uživatelů bude chtít vanilku, měl by to být default: takový uživatel pak ani nemusí vědět, že jiné volby existují.

Naopak pokud chce uživatel volbu minoritní, často si je vědom, že je minoritou a sám se pídí po tom, kde se „to“ dá nastavit.

Volání programu by tedy (například) nemělo vynucovat vždy parametr „-p“ pro příchuť a nadávat, pokud tam nebude: ale v případě vynechané příchuti automaticky dosadit vanilku.

Jiný, reálný, příklad: jsem barvoslepý a pokud je nějaká (často logická) hra, vyžadující porovnání objektů podle barvy, nemohu ji z principu hrát. Občas však v takových hrách bývá nějaký (málo používaný) switch, kterým se dá zapnout, aby byl uvnitř barev nakreslen nějaký tvar, pomocí kterého se mohu orientovat.

Měl bych mít možnost něco takového nastavit, ale uživatele, který barvoslepý není, nemusí vůbec napadnout, že u někoho je něco takového potřeba. Proto stačí dostatečně neotravující, ale existující a zdokumentovaný, switch.

Programy lavírují mezi dvěma extrémy: na jedné straně „Maloměkká chyba“: nucení „jediné správné“ cesty a nemožnost danou věc vůbec nastavit: to nechci a potom nevolám. Na opačném konci spektra je však „Nerdí chyba“: nutit uživatele nastavit i to, od čeho buď existují rozumné defaulty, nebo je to program schopen nadetekovat sám.

Přeji vám, ať mezi těmito dvěma mořskými příšerami bez ztráty života proplujete.

Sdílet