sobota 19. května 2012

Produktivní rychlokodér

... aneb ovládněte základy Vašeho řemesla

Je součástí Vaší profese vytváření programového kódu? Píšete kód produktivním způsobem? Znáte a používáte nástroje, které Vám pomáhají produktivitu zvyšovat? Saháte často při psaní kódu na myš?

Stává se téměř denně, že objevím nějakou novou fintu, kterou se snažím využít pro zlepšení své produktivity. Může se jednat o novou klávesovou zkratku, nový nástroj, novou techniku, zrychlení často se opakujícího postupu, apod. Pokud chceme svoji práci dělat co nejlépe, je potřeba systematicky pracovat na zvyšování naší kodérské produktivity.

Tento příspěvek se týká aspektů rychlosti vytváření programového kódu. Rád bych shrnul elementární dovednosti, které jsou nutným základem pro práci kodéra. Příklady v textu se týkají platformy Visual Studia, kterou používám. Předpokládám však, že pro jiná IDE existují ekvivalentní nástroje.

Hbité kodérovy prsty

Kolika prsty píšete a jak rychle? Díváte se při psaní na klávesnici? Děláte často chyby a musíte se při psaní vracet o odmazávat?

Někdo nepovažuje rychlost psaní u kodéra za příliš důležitou. Sami však tušíte, že je rozdíl mezi datlováním dvěma prsty a symfonií všech deseti. Rychlost se uvádí v úhozech (keystrokes) za minutu nebo v počtu napsaných slov za minutu (WPM). Změřte si svou rychlost např. na http://10fastfingers.com. Průměr je mezi 50 a 70 wpm. Pokud se dostanete nad 100 wpm, patříte mezi 20% nejrychlejších psavců. Raději nebudu uvádět kolik jsem naměřil sobě. :)

A jak tuto dovednost zlepšovat? Zkuste se naučit hmatovou metodu, která využívá všech deseti prstů. Pořiďte si ergonomickou klávesnici, která Vám bude vyhovovat.

Můžete si také přečíst, co si o dovednostech pro psaní textu myslí respektovaný Jeff Atwood v příspěvku We Are Typists First, Programmers Second.

Učte se klávesové zkratky a nesahejte na myš

Důležitost konkrétní klávesové zkratky pochopíte v momentě, kdy se ji naučíte. Od tohoto okamžiku se bez ní neobejdete. Zkratka většinou supluje akci, kterou můžete udělat myší nebo posloupností více klávesových akcí. Obě metody jsou obvykle pomalejší než zkratka (od toho je to zkratka :). Základní sadu klávesových zkratek má vaše IDE, další dodají dodatečná rozšíření. Pro Visual Studio platí, že základ je sice ok, ale teprve s rozšířením typu CodeRush nebo ReSharper povýšíte z akumulační vrtačky na pořádnou příklepovku! Investice do kvalitních rozšíření se určitě vyplatí.

Doporučuji vytisknout cheat sheety s přehledem klávesových zkratek Vašeho IDE a rozšíření. Zdroje pro Visual Studio (Microsoft, DoFactory), CodeRush a ReSharper. Postup učení pak může být takový, že si nejprve přečtete referenční přehled zkratek, abyste dostali do podvědomí, co všechno se dá "zkracovat". Pak se snažíte před každou požadovanou akcí vzpomenout si na příslušnou zkratku. Několikrát požádáte papír o nápovědu a podle konkurenceschopnosti vaší střednědobé paměti si zkratku zapamatujete. Zkratek bývá velké množství a jsou strukturovány do menších oblastí. Zřejmě i zde platí Paretovo pravidlo, že 20% zkratek budete využívat v 80% případů. Naučte se tedy alespoň těch 20%.

Automatické doplňování a kontextový našeptávač

Ve VS je k dispozici nástroj IntelliSense. Podle aktuálního kontextu, části zadaného jména a s využitím reflexe, Vám například nabídne rychlé vložení příslušného jména identifikátoru. Předpokládám, že není nikdo, kdo by nabízenou pomoc od IntelliSense odmítal. Ne každý však umí IntelliSense vyvolat explicitně (Ctrl + J), zobrazit si informace o metodě a jejích parametrech (Ctrl + Shift + Spacebar), apod.

Vkládání bloků kódu

Psaní kódu není psaní beletrie, ale má charakter kompozice jednoduchých opakujících se bloků kódu do složitějších celků. Nabízí se tedy s těmito bloky pracovat efektivněji. Ve většině IDE je k dispozici podpora code snippetů. Jedná se o předpřipravené kusy kódu s možností definice parametrických částí. Vložení těchto kusů kódu provedete zadáním zkratky snippetu a odesláním řídícího znaku (ve VS tabulátoru). Napište např. foreach a stiskněte tabulátor. Editor v IDE Vám doplní celý blok příkazu foreach s možností změnit názvy parametrizovatelných částí.

V základu vašeho IDE je k dispozici množina předdefinovaných snippetů. Zajímavé jsou však i snippety, které si vytvoříte sami. Pokud používáte nějakou typickou sekvenci nebo blok kódu, určitě si pro něj vytvořte snippet. VS nemá ideální podporu pro vytváření vlastních snippetů a proto musíte vzít zavděk některými externími editory. Např. Snippy nebo Snippet Editor. Doporučuji vytvořit snippety pro Váš projekt a spravovat je centrálně v repository. Budou je mít k dispozici všichni členové týmu.

Rozšíření CodeRush nabízí aparát šablon. V daném kontextu je k dispozici zkratka, která odpovídá klíčovému slovu, názvu datového typu nebo nějaké složitější sekvenci. Stačí pak zadat např. t a po stisku mezerníku bude doplněno true. Šablony jsou inteligentní a jajich použití je variabilní a uživatelsky rozšiřitelné.

Dogenerování chybějícího kódu

Poměrně často používám klávesovou zkratku Ctrl + ., která podle aktuálního kontextu doplňuje chybějící kód. Umí doplnit using pro relativně odkazovanou třídu, vygenerovat pole nebo vlastnost třídy, vytvořit kostru neexistující metody (při použití metody shora-dolů), provést implementaci rozhraní, apod. Bez této funkce (klávesové zkratky) bych se už neobešel.

Vylepšování kódu pomocí refaktorizace

Znalost refaktorizačních technik by měla být v repertoáru každého kodéra. Mezi základní techniky patří přejmenování, vyčlenění kódu do samostatné metody, práce s argumenty metody, apod. Další typy refaktorizací mohou přidat rozšíření. Refaktorizaci použijete v situaci, kdy chcete stávající kód vylepšit (zlepšit čitelnost a udržovatelnost). Pěkné příklady jsou například na sourcemaking.com.

Generování kódu

Ke generování větších a složitějších bloků kódu můžete využít podporu T4 šablony. Generovat se dá z logických DSL modelů, z databázových dotazů a dalších kolekcí. Jedná se o efektivní a dobře použitelný nástroj. Můžete mrknout na ukázku.

Navigace v kódu

Umět se rychle dostat na určité místo kódu je neméně důležité jako umět kód vytvářet. Čím je projekt rozsáhlejší, tím jsou nároky na navigaci v kódu vyšší. Pokud však ovládáte klávesové zkratky pro přechod k deklaraci, na předchozí místo v kódu, do konkrétní třídy, apod. nebude pro Vás tato činnost problém. Některé techniky, jako například Test Driven Development, vyžadují cyklické provádění stejné posloupnosti akcí. V těchto případech mohou být rozdíly v produktivitě markantní.

Důležitá je i navigace mezi částmi IDE. Např. přechod do okna s chybami kompilace, do okna s testy, do Solution Exploreru, apod. Na většinu akcí by opět měly být k dispozici klávesové zkratky. Jen se je naučit.

Jak se dále zlepšovat?

  • Vyzkoušejte párové programování a pečlivě sledujte Vašeho spolukodéra. Snažte se pochytit jeho dobré návyky.
  • Sledujte blogy, které píší o používání Vašich nástrojů a zvyšování produktivity.
  • Pokud máte problém, snažte se jej vyřešit automatizací i za cenu (přiměřeně) vyšších startovních nákladů na naučení.
  • Účastněte se programátorských cvičení typu CodeRetreat.
  • Trénujte. ;)

3 komentáře:

  1. Diky za hezky clanek. Na trenink zakladu se dost casto v nasi oblasti zapomina. Mozna proto, ze programovani je jeste tak mlade remeslo.

    Pro zlepseni jsou super i "code kata". Jde o jednoducha cviceni v delce 15-30 minut. Ma oblibena kata je String Calculator - http://osherove.com/tdd-kata-1/

    Primarne slouzi pro trenink zakladu TDD, ale jde vyuzit i na vylepseni dalsi veci. Treba jiz zminovane nastaveni/pouziti editoru, snippetu, rychlosti psani, pouzivani mysi.

    Kdyz jsem si jedno takove cviceni nahral, tak jsem se pak hodne divil co vidim. :) Podivat se zpetne jak clovek dela nektere veci je k nezaplaceni, protoze bez toho externiho pohledu si spoustu veci ani neuvedomi.

    Clovek si rekne si jak hezky mu to jde (protoze je busy/ve flow) a pak kdyz se podiva zpetne na zaznam, tak vidi spoustu OMG/WTF momentu - proc jsem nevyuzil tady tu feature editoru, proc jsem udelal 4x preklep v jednom slove, proc jsem pojmenoval ten test takhle, proc jsem nenapsal jednodussi test a vytuhl jsem 2 minuty na tom slozitejsim... zaroven uvidi i spousty dobrych veci, ktere zatim mozna nedela vedome.

    Pak se muze zamerit na ty konkretni problemy a jeden po druhem je resit. Ja se treba v posledni dobe prinutil ucit se psat spravne, takze diky za odkaz na 10fastfingers.com - 100WPM je zatim v nedohlednu, takze mam co trenovat :) Skoda, ze nemam starsi zaznamy, ale tipnul bych si, ze jeste tak pred par dny/tydny jsem mel 30WPM a ted jsem na 55WPM - http://10fastfingers.com/user/109475/

    OdpovědětVymazat
    Odpovědi
    1. Děkuji Mariane za komentář plný užitečných informací!

      Je překvapující, jak velké množství dlouholetých programátorů nepoužívá většinu "urychlovátek", které IDE nabízí. Mají zažité stereotypy, které jim brání změnit své kodérské návyky. V naší firmě se věnuje málo času tréninku základních dovedností popisovaných v tomto článku. Proto jsem ho i napsal. Je to ponecháno na individuální motivaci každého zaměstnance. To bohužel není dobře a rád bych to změnil.

      Díky za odkaz na Code Katu. Dělal jsem si nějakou na TDD (bowling) a bylo to poučné. Určitě se na odkazované cvičení mrknu. Feedback z nahraného videa?! To musím vyzkoušet!

      55 WPM je hodně slušných. Používáš při tréninku psaní nějakou konkrétní metodu?

      Jdu trénovat ... ;)

      Vymazat
    2. Tak mensi follow-up po par mesicich. Mezi svatkama jsem trochu potrenoval a aktualni WPM mam pres 70 (76 max). Az to bude pres 90 tak koncim. :)

      Metoda zadna extra neni. Proste si clovek zjisti kterou klavesu mackat kterym prstem a pak uz jen psat a psat. Podle toho 10fastfingers.com jsem udelal 124 testu = 124 minut, takze to ani nezabere moc casu.

      Vymazat