Cargo culting je nevyhnutelné
je nekontroverzní, že noví vývojáři nemohou pomoci, ale cargo cult.Prostě se nenaučili dost zásobníku, aby skutečně pochopili, co se děje pod kapotou a proč se věci musí dělat určitým způsobem.
například v jednom z mých prvních kurzů programování jsme se dozvěděli, že v Javě je vstupní bod do programu:
public static void main(String args)
To trvalo roky, aby se dostat do bodu, kde jsem pochopit každou část, že podpis metody.I kdyby mi to bylo tehdy vysvětleno, nepochopil bych to.Já bych měl pochopit způsob viditelnost, třída vs. metody instance, návratové typy, typy parametrů, pole (na rozdíl od seznamů/vektory), argumenty příkazového řádku (a jak jsou analyzovány pomocí shell), a různé podrobnosti o Java implementace.
a to je v pořádku.Ukázalo se, že sotva potřebujete porozumět některým z těchto věcí, abyste mohli psát příkazový řádek nebo dokonce GUI programy v Javě.
neočekáváme, že noví vývojáři budou znát vstupy a výstupy každého rozhodnutí, které učiní.Prostě nebyli programování dost dlouho, aby pochopili každý detail o každé části zásobníku.
Ani jsme věděli, že git ukládá se zavazuje v režii acyklický graf a každá větev je ukazatel na jeden uzel v grafu.Je to dost dobré, že mohou dělat git checkout
git commit
a dostat se na jejich práci.A je to dost dobré, pokud se řídí pravidlem jako „nikdy rychlé sloučení vpřed“ (nebo „vždy rychlé sloučení vpřed“).
ale i pro starší vývojáře je to nevyhnutelné.Co senior dev opravdu rozumí všem příkazům git, které musí vyhledat na přetečení zásobníku?Nebo awk
a sed
část jedné vložky, kterou včera vyhledali na Githubu?Nebo každá hlavička v HTTP odpovědi mají jejich webové aplikace API reagovat s?Nebo kdy použít HTTPS vs. SSH URL z vašeho repo Githubu?Nebo jak nejlépe nakonfigurovat místní instanci PostgreSQL?Nebo vaše Neo4j instance?Nebo jak ladit nastavení rvm / rbenv/Hruby / virtualenv, aniž byste jej odfoukli a přestavěli od nuly?
jediný způsob, jak ne cargo kult je vědět všechno.A nikdo neví všechno.
Cargo culting je dobrý
Cargo culting je dobrý při použití responsibly.It chrání nás před tím, abychom museli vědět všechno.Při použití dobře, je to akt využití těžce získaných odborných znalostí všech ostatních v oboru.Pravděpodobně pomocí jakékoli abstrakce vůbec bez pochopení toho, jak to funguje (což je celý bod abstrakce!) je cargo culting podle Lippertovy definice.
kromě toho je kultivace nákladu často dobrou volbou.“Zdá se, že tito lidé vědí, co dělají, takže se budu řídit jejich vedením,“ je dokonale racionální strategie.
ve skutečnosti programová komunita aktivně podporuje kultivaci nákladu.Když řekneme lidem :“nepoužívejte globální stát „nebo“ následujte PEP8″, říkáme jim cargo cult.Například vývojář by v ideálním případě pochopil (někdy ne tak) jemné způsoby, jak vás globální stát může kousnout, ale dokud nebude pochopení, je lepší se mu vyhnout.
některé další skvělé využití cargo culting:
- „konvence nad konfigurací“, jak je vidět v Rails( a jeho nesčetných klonů), Django, a Ember.js
- Styl průvodců a jejich nástrojů, jako Rubocop, JSLint, a Auto PEP8
- Mnoho statické analýzy nástroje, jako CodeClimate, Smraďochu, Flay, a Bičovat
- 12factor app pokyny
- Kód smrdí
Jak cargo kult zodpovědně
Samozřejmě, nákladní culting má některé zásadní nevýhody, ale teď jsme viděli, některé do-strany, příliš.Rádi bychom použili nástroje a techniky, které tuto práci zvládnou hned, aniž bychom vždy museli plně pochopit, proč fungují.Místo toho, abychom se úplně vyhnuli cultingu nákladu, jak můžeme efektivně cargo cult?
jeden velký háček: na vlastní riziko nákladní culting se, že nebudete schopni předvídat, co se pokazí, nebo dokonce třídy problémy se můžete setkat, protože si zásadně nechápu, rozhodnutí, která děláte.Bylo řečeno, Zde je několik tipů.
napište testy
můžete psát automatizované testy, abyste zajistili, že váš kód funguje podle očekávání, i když nechápete, proč kód funguje.Jednoduchým příkladem by bylo, kdybyste zkopírovali a vložili třídící algoritmus z přetečení zásobníku, můžete pro něj napsat test, abyste se ujistili, že funguje.
Buďte opatrní, i když, protože testování není tak dobrý na prokázání tam nejsou neočekávané nežádoucí účinky, nebo v krajních případech.V příkladu algoritmus třídění, nebudete vědět, který z okraje případů budete muset starat o to.
Refaktor nemilosrdně
čím čistší kód zachováte, tím snazší bude uvažovat o tom, kdy je třeba změnit rozhodnutí o vytažení nákladu.A pamatujte, že bez testů nemůžete efektivně refaktorovat.
izolujte kód vyřazeného nákladu
Pokud je to možné, izolujte kód vyřazeného nákladu do třídy nebo modulu.Čím více jej můžete izolovat, tím více omezíte jeho potenciální poškození.Čím je izolovanější, tím snazší bude nahradit nebo přepsat, jakmile o tom pochopíte více.
cargo kult v kritické části aplikace
například, pokud se vysoké souběžnosti je absolutní nutností pro vaše aplikace, budete pravděpodobně dostat pryč s kopírováním některých závitů kód z Přetečení Zásobníku.Dokonce i výběr jazyka, který neodmyslitelně zvládá souběžnost dobře (jako Elixir, Go nebo Clojure), váš problém magicky nevyřeší.Bohužel (nebo naštěstí), budete opravdu muset kopat a něco se naučit.
nenoste kult, pokud selhání vede ke špatným věcem
Pokud je bezpečnost lidí, soukromí, peníze atd. jsou v ohrožení, nemají náklad kult.Například zřejmé, že pokud někdo pace-maker se spouští určité C one-liner jste zkopírovali z Přetečení Zásobníku, sakra dobře vědět, proč se váš malý trik funguje a co v případech selhání a nežádoucí účinky jsou.
Vyhnout nákladní culting při jednání s různou vstupní
například, pokud nevíte awk super no a vstup na váš awk one-liner bude pocházet z vstup uživatele, je pravděpodobné, že se zlomit.Pokud můžete předvídat různých forem váš vstup může mít, že vám pomůže, ale měli byste mít na paměti, že je pravděpodobné, že rozbít na vstup případech nebyli schopni předvídat.
monitorujte ve výrobě
jen proto, že funguje na vašem stroji, nepředpokládejte, že bude fungovat ve výrobě, kde se prostředí liší a uživatelé dělají věci, o kterých jste nikdy neuvažovali.Monitorování chyb, výjimek, selhání tvrzení a výkonu vás může informovat, pokud je něco špatně, než si to uživatelé, klienti nebo šéf uvědomí.
kontrola kódu, programování párů, nástroje statické analýzy atd.
získejte další oči, virtuální nebo jiné, aby se podívaly na váš kód.Párové programování a kontrola kódu jsou zřejmými příklady, ale nástroje statické analýzy (např. CodeClimate) mohou být také užitečné.Kromě chytání zjevných chyb, jsou zvláště užitečné pro poukazování na kód, který nemusí vždy fungovat podle očekávání.
Přesunout do hlubší porozumění
Tím, že začíná s nákladem culting, když se rozhodnete ponořit se hluboko do tématu, budete již mít nějaké souvislosti.Cesta k hlubšímu porozumění může být samostudium, mentoring, programování párů nebo jen to udělat sami kvůli učení.
toto jsou staré zprávy
výše uvedené tipy jsou pravděpodobně všechny věci, které jste již slyšeli.To proto, že všichni pracujeme s omezenými znalostmi.Všichni nosíme kult po celou dobu a vyvinuli jsme intuici, techniky, a pokyny, abychom se mohli posunout vpřed s částečnými znalostmi a omezit škody, které můžeme udělat.Spíše než nikdy cargo cult, dobří vývojáři se učí cargo cult efektivně.