Písanie všetkými desiatimi pre programátorov je hlavne o klávesoch, ktoré bežný kurz písania vynecháva: číslice, zátvorky, operátory a kombinácie so Shiftom okolo nich. Programátor, ktorý píše bežný text rýchlosťou 90 WPM, môže byť pri kóde pomalý, a pisár s 50 WPM pri texte môže byť pri ňom rýchly. Všimli sme si to, keď sme pri testovaní vkladali vlastné zdrojové súbory do režimu Vlastný. Rýchlosti klesli oproti režimu Slová o tretinu aj viac, tepelná mapa kláves sa rozsvietila na rade s číslami a pri pravom malíčku a najpomalšie šprinty boli na tokenoch so zátvorkami.
Prečo WPM pri bežnom texte zle zastupuje písanie kódu
Kód sa od textu líši v troch veciach a test písania zostavený z bežných anglických slov nemeria ani jednu z nich.
Prvou je zloženie znakov. Spočítali sme to. V prvých desiatich článkoch na tomto blogu je zo 100 znakov okrem medzier asi 93 písmen, 5 interpunkčných znamienok a 2 číslice. V zdrojovom kóde nástroja príkazového riadka npm v JavaScripte klesnú písmená asi na 80 a symboly stúpnu na 19. Moduly json a email v Pythone vychádzajú na 80 až 85 písmen a jeden náš hutný zostavovací skript na 64, pričom tretinu jeho znakov tvoria symboly. Kód má teda zhruba trikrát až sedemkrát viac symbolov ako náš text. Väčšina z nich je v hornom rade alebo vyžaduje Shift, čo znamená pravý malíček a slabšie dosahy. Naše testy s anglickými slovami sú zostavené z 1 000 najčastejších slov v korpuse titulkov; „{“ medzi nimi nie je.
Druhou je rytmus. Text sa píše v dlhých úsekoch. Kód sa píše v krátkych šprintoch medzi pauzami na premýšľanie, posúvanie a čítanie. Dobrovoľníci v štúdii Dhakala a kol. z roku 2018 so 136 miliónmi úderov, ktorí odpisovali vety, mali medzi klávesmi v priemere asi 239 ms. Deň programátora je plný niekoľkosekundových medzier a rýchlosť šprintu v krátkych úsekoch záleží viac ako akýkoľvek priemer.
Treťou je editor. Automatické dopĺňanie, úryvky a klávesové skratky znamenajú, že pracujúci programátor napíše len zlomok znakov, ktoré sú na obrazovke. To žiadny test písania zmerať nedokáže a náš ani nepredstiera, že áno.
Záleží pri programovaní na rýchlosti písania?
Menej, než si ľudia myslia, a na inom mieste. Keď sa niekto pýta, či 60 WPM stačí na programátora, odpoveď je áno, s výhradou: ak sa pri symboloch a číslach pozeráš dolu, 60 WPM nie je rýchlosť, ktorou píšeš kód. Schopnosť napísať riadok bez toho, aby si prerušil(a) myšlienku, je dôležitejšia ako hrubá rýchlosť, a práve pozeranie na klávesnicu ju preruší.
Ako písať symboly rýchlejšie a prečo to nikto neučí
Otázka, ktorá sa na fórach o písaní objavuje stále dokola: niekto vie písať všetkými desiatimi písmená slušnou rýchlosťou, ale len čo začne programovať, je späť pri hľadaní symbolov, čísel a dokonca aj veľkých písmen, a chce sa ich učiť postupne, tak ako sa učil písmená, po niekoľkých klávesoch.
Symboly sú ťažké čiastočne kvôli Shiftu. V zdrojovom kóde npm, ktorý sme spočítali, tvorili asi 45 % úderov na symboly znaky so Shiftom ako ( ) { } : a $, takmer 9 zo 100 znakov okrem medzier ešte predtým, ako započítaš jediné veľké písmeno. Preto najprv oprav zvyk so Shiftom: stláčaj Shift rukou, ktorá daný znak nepíše. ( a ) sú na deviatke a nule pravej ruky, takže patrí k nim ľavý Shift; ! @ # $ sú na ľavej ruke, takže patrí k nim pravý Shift. Väčšina samoukov drží na všetko ľavý Shift a pri ! to znamená, že ľavý malíček musí stlačiť dve klávesy naraz. Svoj zvyk si over tak, že napíšeš riadok s @ a $ a budeš sledovať, ktorý malíček sa pohne.
Symboly sa ťažko cvičia osamote a cvičiť ich je vôbec nudné: písmená prichádzajú so slovami, zátvorky s kódom a náhodný kód nie je zaujímavý. Naša odpoveď je cvičiť symboly na skutočných riadkoch kódu, po jednej skupine.
Po jednej skupine
Toto je poradie, ktoré by sme použili, a poradie symbolovej trate, ktorú pripravujeme pre stránku Tréning. Kým ju nespustíme, môžeš robiť to isté tak, že vložíš skutočný kód do režimu Vlastný, vždy jednu skupinu symbolov, a ďalšiu pridáš až vtedy, keď je aktuálna na presnosti 95 %:
- Číslice. Rad s číslami, ku ktorému sa prsty zo základného radu naťahujú hore. Ide prvý, pretože je to najpoužívanejšia skupina mimo písmen a pretože takmer každý tu má zlý zvyk, napríklad ukazovák, ktorý píše 4, 5, 6 aj 7. Test s číslami je rýchla kontrola.
- Zátvorky v pároch. Najprv ( ), potom [ ], potom { }. V pároch preto, lebo jednu takmer nikdy nenapíšeš bez druhej: v tom zdrojovom kóde npm sa ( vyskytuje 6 195-krát a ) 6 194-krát. Rýchlosť dáva práve nacvičenie pohybu otvorenie–zatvorenie ako jedného celku. Zatváracia zátvorka je miesto, kde sa väčšine ľudí rozpadne rytmus.
- Operátory. = + - * / a lomené zátvorky plus zložené tvary (==, =>, +=, !=). Sú rozložené po rade s číslami a interpunkčných klávesoch pravej ruky a niekoľko z nich potrebuje Shift na tej istej ruke, čo je tá nepohodlná časť.
- Úvodzovky a interpunkcia. ' " ; : , . pričom väčšinu práce robí pravý malíček. Bodkočiarky a dvojbodky sú miesto, kde sa pisári jazykov z rodiny C a Pythonu líšia najviac, preto trénuj na riadkoch z jazyka, ktorý používaš.
- Shell a čudáci. Zvislá čiara, spätná lomka, tilda, spätný apostrof, strieška, ampersand, mriežka, dolár, zavináč a klávesa _. Podčiarkovník a spätný apostrof prekvapia väčšinu ľudí; kód v snake_case používa _ neustále a väčšina pisárov ho stláča nesprávnym prstom.
Každá skupina zaberie väčšine ľudí týždeň alebo dva s desaťminútovými tréningami, takže celá trať trvá dva až tri mesiace. To je pomalšie ako učenie písmen, pretože klávesy so symbolmi sú ďalej a zvyky, ktoré nahrádzaš, sú staršie.
Čo sa pokazí, podľa sledovania štatistík po klávesoch: ľudia sa naučia symbol správnym prstom a pod tlakom sa vrátia k starému, pretože starý pohyb je ešte niekoľko týždňov rýchlejší. Štatistiky to ukazujú ako klávesu, ktorej interval divoko kolíše: rýchly, keď siahneš správne, a pomalý, keď nie. Riešením je zostať pri tej skupine ďalší týždeň.
Páry zátvoriek a automatické zatváranie
Editory zátvorky automaticky zatvárajú, čo vyvoláva oprávnenú otázku: prečo sa učiť písať tú zatváraciu?
Z dvoch dôvodov. Automatické zatváranie je nekonzistentné: niekde sa spustí a inde nie, napríklad v termináli alebo v okne chatu. Pisár, ktorý sa naň spolieha, zakaždým zaváha, aby skontroloval, či sa spustilo, a to zaváhanie stojí viac ako úder. A prepísanie automaticky zatvorenej zátvorky (stlačenie „)“, keď ju editor už vložil) je samo osebe úder, takže zatváraciu zátvorku napíšeš tak či tak.
Keď sem vložíš kód do režimu Vlastný, text sa rozdelí podľa medzier, takže odsadenie zmizne a každý token sa stane slovom. Je to obmedzenie a zároveň pohodlie: nepíšeš štyri medzery na začiatku každého riadka v Pythone, ale ani ich necvičíš. Poriadny režim pre kód, ktorý zaobchádza s odsadením a automaticky zatvorenými pármi tak ako editor, máme na zozname a je ťažší, než sa zdá.
Rýchlosť pri kóde verzus pri texte
Nemáme dosť výsledkov z režimu kódu, aby sme mohli zverejniť percentily, a radšej počkáme, než by sme si ich vymysleli. V našich vlastných behoch bola rýchlosť pri realistickom úryvku kódu niekde medzi polovicou a dvoma tretinami rýchlosti toho istého človeka pri texte a tento pomer sa zlepšuje viac tréningom symbolov ako všeobecným tréningom.
Číslo, ktoré sa naozaj prenáša, je presnosť. Programátor, ktorý píše text s presnosťou 97 % a kód s 90 %, má problém so symbolmi a tepelná mapa kláves presne ukáže, s ktorými. Programátor s 97 % v oboch potrebuje len písať viac kódu. Naša metodika hodnotenia vysvetľuje, ako presnosť započítava opravené chyby.
Ako štandardné meradlo je z našich bežných režimov najbližšie ku kódu test s interpunkciou so zapnutými číslami. Zložené zátvorky v ňom nebudú, ale prinesie klávesu Shift a rad s číslami, a pre väčšinu ľudí je medzera práve tam.
Voľby klávesnice, ktoré pomáhajú
Rady o klávesniciach, ktoré programátori dostávajú, sú väčšinou o spínačoch a väčšinou mimo.
Rozloženie záleží viac ako spínač. Dvorak presúva zátvorky hore do radu s číslami a premiestňuje väčšinu interpunkcie. Colemak a Workman nechávajú zátvorky tam, kde ich má QWERTY, ale oba presúvajú bodkočiarku tam, kde má QWERTY P, čo programátori v jazykoch z rodiny C pocítia. Článok o rozloženiach má dlhú verziu.
Vrstva so symbolmi je lepšia ako väčšia klávesnica. Mnohé delené a kompaktné klávesnice umožňujú dať zátvorky a operátory pod prsty na základnom rade na vrstvu, ktorú držíš klávesou pod palcom. Zo všetkých hardvérových zmien, ktoré programátori opisujú, je toto tá, ktorú by sme vyskúšali ako prvú, pretože znamená, že sa už nikdy nepozrieš dolu kvôli symbolu.
ISO verzus ANSI. Na klávesniciach ISO (Spojené kráľovstvo a väčšina Európy) menia extra klávesa vedľa ľavého Shiftu a vysoký Enter miesto, kde je spätná lomka a zvislá čiara. Ak trénuješ na jednej a pracuješ na druhej, tvoj malíček bude chybovať. Naša emulácia preto ponúka obe varianty Colemak-DH.
Na spínačoch pri rýchlosti sotva záleží. Lineárne, taktilné a cvakajúce spínače sa líšia pocitom a zvukom a záznam úderov nevie, ktoré si stlačil(a). Náš článok o mechanických klávesniciach prechádza čísla.
Zvuk niektorým ľuďom pomáha so spätnou väzbou: zvuk chyby ti povie, že symbol bol nesprávny, bez pozerania dolu. Zapni si ho, kým sa učíš symboly.
Desaťminútový tréning programátora
Čo by sme robili každý deň počas tých dvoch či troch mesiacov, ktoré trvá symbolová trať:
- Dve minúty: 30-sekundový test so slovami ako rozcvička, presnosť na 97 %.
- Šesť minút: aktuálna skupina symbolov na vlastnom texte vloženom z tvojho kódu. Zastav pri prvom náznaku návratu k starému prstu.
- Dve minúty: jeden úryvok kódu v jazyku, ktorý používaš najčastejšie. Potom sa pozri na tepelnú mapu kláves, nie na WPM.
V dňoch, keď nemáš desať minút, napíš zatváraciu zátvorku vlastnoručne. Je to najmenší zvyk v tomto článku a zvyčajne sa vyplatí ako prvý.
Často kladené otázky
Aká rýchlosť písania je dobrá pre programátorov?
Čokoľvek od približne 40 WPM vyššie je použiteľné, ak píšeš symboly a čísla všetkými desiatimi. Ďalej je úzkym hrdlom premýšľanie, čítanie a zručnosť v editore, nie rýchlosť prstov.
Ako sa naučiť písať čísla všetkými desiatimi?
Trénuj rad s číslami samostatne, kým presnosť nevydrží na 95 %, a použi pritom prst, ktorý je na základnom rade priamo pod danou číslicou; potom primiešaj čísla do bežného textu.