Psaní všemi deseti pro programátory je hlavně o klávesách, které běžný kurz psaní vynechává: číslice, závorky, operátory a kombinace se Shiftem kolem nich. Programátor, který píše běžný text rychlostí 90 WPM, může být při psaní kódu pomalý, a pisatel s 50 WPM v textu může být v kódu rychlý. Všimli jsme si toho, když jsme při testování vkládali vlastní zdrojové soubory do režimu vlastního textu. Rychlosti klesly o třetinu i víc oproti režimu slov, tepelná mapa kláves se rozsvítila na číselné řadě a u pravého malíčku a nejpomalejší sprinty připadly na tokeny se závorkami.
Proč je WPM z běžného textu špatným ukazatelem pro psaní kódu
Kód se od textu liší ve třech ohledech a test psaní sestavený z běžných anglických slov neměří ani jeden z nich.
Prvním je skladba znaků. Spočítali jsme to. V prvních deseti článcích tohoto blogu je z každých 100 znaků kromě mezer zhruba 93 písmen, 5 interpunkčních znamének a 2 číslice. Ve zdrojovém kódu JavaScriptu nástroje příkazové řádky npm klesají písmena zhruba na 80 a symboly stoupají na 19. Moduly json a email v Pythonu vycházejí na 80 až 85 písmen a jeden náš hutný sestavovací skript na 64, přičemž třetinu jeho znaků tvoří symboly. Kód tak má zhruba třikrát až sedmkrát víc symbolů než náš text. Většina z nich leží v horní řadě nebo potřebuje Shift, což znamená pravý malíček a slabší natažení. Naše anglické testy slov jsou sestavené z 1 000 nejčastějších slov korpusu titulků; „{“ mezi nimi není.
Druhým je rytmus. Běžný text se píše v dlouhých úsecích. Kód se píše v krátkých sprintech mezi pauzami na přemýšlení, posouvání a čtení. Dobrovolníci ve studii Dhakala a kol. z roku 2018 se 136 miliony úhozů, kteří opisovali věty, měli mezi klávesami v průměru zhruba 239 ms. Programátorův den je plný mezer trvajících několik sekund a rychlost sprintu uvnitř krátkých úseků je důležitější než jakýkoli průměr.
Třetím je editor. Automatické doplňování, šablony a klávesové zkratky znamenají, že pracující programátor napíše jen zlomek znaků, které jsou na obrazovce. To žádný test psaní změřit nedokáže a ten náš nepředstírá, že to umí.
Je rychlost psaní pro programování důležitá?
Méně, než si lidé myslí, a na jiném místě. Když se někdo ptá, zda 60 WPM na programátora stačí, odpověď zní ano, s výhradou: pokud se při symbolech a číslech díváš dolů, kód rychlostí 60 WPM nepíšeš. Schopnost napsat řádek, aniž bys ztratil nit, je důležitější než hrubá rychlost, a právě pohled dolů na klávesnici ji přetrhne.
Jak psát symboly rychleji a proč to nikdo neučí
Otázka, která se na fórech o psaní objevuje pořád dokola: někdo umí psát písmena všemi deseti slušnou rychlostí, ale jakmile začne programovat, zase hledá symboly, čísla a dokonce velká písmena, a chce se je naučit postupně, stejně jako se naučil písmena, po několika klávesách.
Symboly jsou těžké zčásti kvůli Shiftu. Ve zdrojovém kódu npm, který jsme počítali, bylo zhruba 45 % úhozů na symboly znaků se Shiftem, jako ( ) { } : a $, tedy téměř 9 z každých 100 znaků kromě mezer, a to ještě před započítáním jediného velkého písmena. Nejdřív tedy oprav návyk se Shiftem: Shift tiskni rukou, která znak nepíše. ( a ) leží na 9 a 0 pravé ruky, takže berou levý Shift; ! @ # $ leží na levé ruce, takže berou pravý Shift. Většina samouků drží levý Shift na všechno, a u ! to po levém malíčku chce stisknout dvě klávesy najednou. Svůj návyk si ověříš tak, že napíšeš řádek s @ a $ a budeš sledovat, který malíček se pohne.
Symboly se špatně cvičí izolovaně a cvičit je je vůbec nudné: písmena přicházejí se slovy, závorky přicházejí s kódem a náhodný kód není zajímavý. Naše odpověď je cvičit symboly na skutečných řádcích kódu, vždy jednu skupinu.
Vždy jedna skupina
Toto je pořadí, které bychom použili, a pořadí symbolové dráhy, kterou připravujeme pro stránku tréninku. Dokud nevyjde, můžeš udělat totéž tak, že vložíš skutečný kód do režimu vlastního textu, vždy jednu skupinu symbolů, a další skupinu nepřidáš, dokud ta aktuální nebude na přesnosti 95 %:
- Číslice. Číselná řada, na kterou se prsty ze základní řady natahují nahoru. Jde jako první, protože je to nejpoužívanější skupina kromě písmen a protože tu má skoro každý zlozvyk, třeba ukazováček, který obstarává 4, 5, 6 i 7. Rychlou kontrolou je test čísel.
- Závorky v párech. Nejdřív ( ), pak [ ], pak { }. V párech, protože jednu skoro nikdy nenapíšeš bez druhé: v tom zdrojovém kódu npm se ( objevuje 6 195krát a ) 6 194krát. Rychlost přináší trénink pohybu otevřít-zavřít jako jednoho celku. Na zavírací závorce se většině lidí rytmus láme.
- Operátory. = + - * / a lomené závorky, k tomu složené tvary (==, =>, +=, !=). Jsou rozeseté po číselné řadě a interpunkčních klávesách pravé ruky a několik z nich potřebuje Shift na téže ruce, což je ta nepříjemná část.
- Uvozovky a interpunkce. ' " ; : , . a většinu práce dělá pravý malíček. Středníky a dvojtečky jsou místem, kde se pisatelé jazyků rodiny C a Pythonu liší nejvíc, takže trénuj na řádcích z jazyka, který používáš.
- Shell a ty zvláštní. Svislítko, zpětné lomítko, tilda, zpětný apostrof, stříška, ampersand, mřížka, dolar, zavináč a klávesa _. Podtržítko a zpětný apostrof překvapí většinu lidí; kód ve snake_case používá _ neustále a většina pisatelů ho tiskne špatným prstem.
Každá skupina zabere většině lidí týden nebo dva desetiminutových sezení, takže celá dráha trvá dva až tři měsíce. To je pomalejší než učení písmen, protože klávesy se symboly jsou dál a návyky, které nahrazuješ, jsou starší.
Co se pokazí, jak vidíme ze statistik po klávesách: lidé se symbol naučí správným prstem a pod tlakem se vrátí ke starému, protože starý pohyb je ještě pár týdnů rychlejší. Ve statistikách se to projeví jako klávesa, jejíž interval divoce kolísá, rychle, když sáhneš správně, a pomalu, když ne. Řešením je zůstat u té skupiny ještě týden.
Páry závorek a automatické zavírání
Editory závorky automaticky zavírají, což vyvolává oprávněnou otázku: proč se učit psát tu zavírací?
Ze dvou důvodů. Automatické zavírání je nekonzistentní: někde se spustí a jinde ne, třeba v terminálu nebo v okně chatu. Pisatel, který na něj spoléhá, pokaždé zaváhá, aby zkontroloval, jestli se spustilo, a to zaváhání stojí víc než úhoz. A přepsání automaticky zavřené závorky (stisknutí „)“, když ji editor už vložil) je samo o sobě úhoz, takže zavírací závorku napíšeš tak jako tak.
Když sem vložíš kód do režimu vlastního textu, text se rozdělí podle bílých znaků, takže odsazení zmizí a z každého tokenu se stane slovo. Je to omezení a zároveň pohodlí: nepíšeš čtyři mezery na začátku každého řádku v Pythonu, ale ani je netrénuješ. Pořádný režim kódu, který zvládá odsazení a automaticky zavírané páry tak, jak to dělá editor, máme v plánu a je to těžší, než to zní.
Rychlost v kódu a v textu
Nemáme dost výsledků z kódu, abychom zveřejnili percentily, a raději počkáme, než bychom si je vymýšleli. V našich vlastních pokusech byla rychlost kódu na realistickém úryvku někde mezi polovinou a dvěma třetinami rychlosti téhož člověka v textu a poměr se zlepšuje víc tréninkem symbolů než obecným tréninkem.
Číslo, které se přenáší, je přesnost. Programátor, který píše text s přesností 97 % a kód s 90 %, má problém se symboly a tepelná mapa kláves přesně ukáže, s kterými. Programátor s 97 % u obojího prostě potřebuje psát víc kódu. Naše metodika hodnocení vysvětluje, jak přesnost započítává opravené chyby.
Jako standardní měřítko má z našich běžných režimů ke kódu nejblíž test s interpunkcí se zapnutými čísly. Složené závorky v něm nebudou, ale zapojuje klávesu Shift a číselnou řadu, a to je pro většinu lidí právě ta mezera.
Volby klávesnice, které pomáhají
Rady ke klávesnicím, které programátoři dostávají, se většinou týkají spínačů a většinou míjejí podstatu.
Rozložení je důležitější než spínač. Dvorak přesouvá závorky nahoru do číselné řady a přemisťuje většinu interpunkce. Colemak a Workman nechávají závorky tam, kde je má QWERTY, ale oba přesouvají středník tam, kde má QWERTY P, což programátoři v jazycích rodiny C pocítí. Dlouhou verzi najdeš v článku o rozloženích.
Vrstva se symboly je lepší než větší klávesnice. Mnoho dělených a kompaktních klávesnic umožňuje dát závorky a operátory pod prsty základní řady na vrstvu, kterou držíš klávesou pod palcem. Ze všech hardwarových změn, které programátoři popisují, bychom tuhle zkusili jako první, protože díky ní se už nikdy nebudeš muset dívat dolů kvůli symbolu.
ISO versus ANSI. Na klávesnicích ISO (Velká Británie a většina Evropy) mění klávesa navíc vedle levého Shiftu a vysoký Enter umístění zpětného lomítka a svislítka. Pokud trénuješ na jedné a pracuješ na druhé, tvůj malíček bude minout. Proto naše emulace nabízí obě varianty Colemak-DH.
Spínače na rychlost téměř nemají vliv. Lineární, taktilní a klikací spínače se liší pocitem a zvukem a záznam úhozů neví, který z nich jsi stiskl. Náš článek o mechanických klávesnicích prochází čísla.
Zvuk některým lidem pomáhá se zpětnou vazbou: zvuk chyby ti řekne, že byl symbol špatně, aniž by ses díval dolů. Při učení symbolů si ho zapni.
Desetiminutové sezení pro programátora
Co bychom dělali denně po ty dva nebo tři měsíce, které symbolová dráha zabere:
- Dvě minuty: 30sekundový test slov na rozehřátí, přesnost 97 %.
- Šest minut: aktuální skupina symbolů na vlastním textu vloženém z tvého kódu. Přestaň při prvním náznaku návratu ke starému prstu.
- Dvě minuty: jeden úryvek kódu v jazyce, který používáš nejvíc. Potom se dívej na tepelnou mapu kláves, ne na WPM.
Ve dnech, kdy deset minut nemáš, piš zavírací závorku sám. Je to nejmenší návyk v tomto článku a obvykle se vyplatí jako první.
Často kladené otázky
Jaká je dobrá rychlost psaní pro programátory?
Cokoli od zhruba 40 WPM výš je použitelné, pokud píšeš symboly a čísla všemi deseti. Nad touto hranicí je úzkým hrdlem myšlení, čtení a dovednost s editorem, ne rychlost prstů.
Jak se naučit psát čísla všemi deseti?
Trénuj samotnou číselnou řadu, dokud se přesnost neudrží na 95 %, a používej prst, který leží v základní řadě přímo pod danou číslicí; potom přimíchej čísla do běžného textu.