Kargokultické programování

Kargokultické programování (cargo cult programming) je označení pro styl programování charakterizovaný „rituálním“ začleněním převzatých vzorů kódu nebo algoritmů, bez jasného pochopení proč jsou použity; tento styl je příznačný pro programátora, který nerozumí problému či chybě, které se pokouší vyřešit. Jako příklad je možné uvést zkopírování kusu kódu z jednoho místa na druhé s minimálním pochopením toho, jak funguje, nebo zda je to opravdu nutné.[1]

Za kargokultické programování je také možné označit použití návrhového vzoru nebo stylu kódování bez pochopení důvodů pro jeho použití. Příkladem může být přidání zbytečných komentářů k samovysvětlujícímu kódu, přílišné dodržování konvencí programovacího paradigmatu nebo volání dealokačních rutin pro objekty, které maže garbage collector.

Dalším znakem kargokultického programování může být obsedantní a nadbytečná kontrola nulových hodnot nebo testování, zda jsou pole či kolekce prázdná před průchodem jejích hodnot ve smyčce. Zbytné řádky kódu zhoršují jeho čitelnost a často ztěžují pochopení významu chybových zpráv nebo zakrývají skutečnou příčinu nefukčnosti algoritmu či programu.

Původ editovat

 
Příklad kargokultu na ostrově Tanna, Vanuatu

Termín kargokult (cargo cult) je idiom, odkazující se na domorodá náboženství, která vyrostla v jižním Pacifiku po druhé světové válce. Praxe těchto skupin se soustředily na primitivní napodobování letištních a dalších staveb, objektů a postupů v naději, že tak budou přivolány „božské“ letouny, které během války přinesly úžasný náklad. Použití termínu v počítačovém programování pravděpodobně pochází převzetím termínu od Richarda Feynmana, který nazval používání určitých praktik či postupů jako kargokultickou vědu.[2][3]

Příklady editovat

sudo editovat

Používání sudo před dalšími příkazy je užitečné, pokud tyto příkazy vyžadují ke své činnosti administrátorská práva (root).

Jinak je přidávání sudo ke každému příkazu zbytečné, a v některých případech dokonce nebezpečné.

Rust editovat

Následující program napsaný v Rustu má vytvořit náhodné číslo, a zobrazit buď čaj (pokud je toto číslo sudé), nebo káva (pokud je liché).

Tento kód má v sobě nepotřebnou podobu deklarace externí knihovny (od roku 2018 stačí ve většině případů použít use)[4], zbytečné if (které nutí počítač postupně ozkoušet pravdivost každého stavu), a přebytečnou proměnnou rnd:

extern crate rand; // 0.8.5
use rand::Rng;

fn main() {
    let rnd:i32 = rand::thread_rng().gen();
    if rnd%2==0{
      println!("čaj")
   } else {
      println!("káva")
   }
}

Po zjednodušení vypadá zmíněný kód takto:

use rand::Rng; // 0.8.5 (informace pro vývojáře - verze knihovny)

fn main() {
    println!("{}", ["čaj", "káva"][rand::thread_rng().gen_range(0..2) as usize]);
}

Po vyřešení závislostí výchozím správcem balíčků Cargo[5], a překladu do strojového jazyka se zobrazí tento výsledek.

Kargokultické softwarové inženýrství editovat

V softwarovém inženýrství se používá příbuzný termín kargokultické softwarové inženýrství, vytvořený Stevem McConnellem.[6]

McConnell popisuje softwarové firmy či organizace, které se pokoušejí napodobit úspěšnější konkurenty buď otrockým následováním jejich vývojových procesů, aniž by pochopily důvody, které za nimi jsou, nebo požadují po zaměstnancích, aby pracovali v rámci neplacených přesčasů – bez pochopení, že v úspěšných organizacích je většinou tato praxe důsledkem vysoké motivace zaměstnanců, než aby byla příčinou úspěchu dané společnosti.

McConnell tvrdí, že pro úspěch projektu je rozhodující kompetence řešitelského týmu bez ohledu na použitý vývojový přístup; dále tvrdí, že nekompetentní „podvodné organizace“ (které pouze napodobují formu úspěšných organizací pro vývoj softwaru) se ve skutečnosti zabývají tím, co nazývá kargokultickým softwarovým inženýrstvím.

Reference editovat

V tomto článku byl použit překlad textu z článku Cargo cult programming na anglické Wikipedii.

  1. MALÝ, Martin. Antipatterny, smradlavý kód a Peterův princip v IT [online]. 2011-06-23 [cit. 2022-07-29]. Dostupné online. 
  2. jargon, node: cargo cult programming. www.jargon.net [online]. [cit. 2022-07-29]. Dostupné online. 
  3. NYGREN, Natalie. Cargo Cult Software Engineering. Steve McConnell [online]. 2017-08-06 [cit. 2022-07-29]. Dostupné online. (anglicky) 
  4. Path and module system changes - The Edition Guide. doc.rust-lang.org [online]. [cit. 2022-09-18]. Dostupné online. 
  5. Introduction - The Cargo Book. doc.rust-lang.org [online]. [cit. 2022-09-18]. Dostupné online. 
  6. MCCONNELL, Steve. Professional software development. [s.l.]: [s.n.] Dostupné online. ISBN 978-0-321-19367-4. 

Související články editovat