Dactilografierea oarbă pentru programatori: simboluri, cifre și viteza care contează

Dactilografierea oarbă pentru programatori ține mai ales de tastele pe care un curs obișnuit de tastare le sare: cifre, paranteze, operatori și combinațiile cu Shift din jurul lor. Un programator care tastează proză la 90 WPM poate fi lent la cod, iar unul care tastează proză la 50 WPM poate fi rapid. Am observat asta când am lipit propriile fișiere-sursă în modul personalizat în timpul testării. Vitezele au scăzut cu o treime sau mai mult față de modul cuvinte, harta termică pe taste s-a aprins pe rândul cifrelor și pe degetul mic drept, iar cele mai lente rafale au fost la token-urile cu paranteze.

De ce WPM-ul pe proză e un indicator slab pentru scrierea de cod

Codul diferă de text în trei feluri, iar un test de tastare construit din cuvinte englezești uzuale nu măsoară niciunul dintre ele.

Primul e amestecul de caractere. Am numărat. În primele zece articole de pe acest blog, aproximativ 93 din fiecare 100 de caractere care nu sunt spații sunt litere, 5 sunt semne de punctuație și 2 sunt cifre. În sursa JavaScript a utilitarului de linie de comandă al npm, literele scad la aproximativ 80, iar simbolurile urcă la 19. Modulele json și email din Python ajung la 80–85 de litere, iar un script de build dens de-al nostru la 64, cu o treime din caractere simboluri. Așadar, codul are de aproximativ trei până la șapte ori mai multe simboluri decât proza noastră. Cele mai multe se află pe rândul de sus sau cer Shift, adică degetul mic drept și întinderile mai slabe. Testele noastre cu cuvinte în engleză sunt construite din cele mai frecvente 1.000 de cuvinte dintr-un corpus de subtitrări; „{” nu e printre ele.

Al doilea e ritmul. Proza se tastează în serii lungi. Codul se tastează în rafale scurte, între pauze pentru gândit, derulat și citit. Voluntarii din studiul lui Dhakal et al. din 2018, cu 136 de milioane de apăsări, care copiau propoziții, au avut în medie aproximativ 239 ms între taste. Ziua unui programator e plină de pauze de câteva secunde, iar viteza de rafală din seriile scurte contează mai mult decât orice medie.

Al treilea e editorul. Completarea automată, fragmentele de cod (snippets) și scurtăturile de tastatură înseamnă că un programator în plină activitate tastează doar o parte din caracterele de pe ecran. Niciun test de tastare nu poate măsura asta, iar al nostru nu se preface că o face.

Contează viteza de tastare în programare?

Mai puțin decât cred oamenii și în alt loc. Când cineva întreabă dacă 60 WPM sunt destul pentru a fi programator, răspunsul e da, cu o rezervă: dacă te uiți în jos după simboluri și cifre, nu cu 60 WPM tastezi cod. Să poți tasta o linie fără să-ți pierzi firul gândurilor contează mai mult decât viteza brută, iar privitul în jos la tastatură e ce îl rupe.

Cum tastezi simbolurile mai repede și de ce nu te învață nimeni

O întrebare care apare iar și iar pe forumurile de tastare: cineva poate tasta orb literele la o viteză decentă, dar în clipa în care începe să scrie cod se întoarce la căutatul simbolurilor, cifrelor și chiar al majusculelor și vrea o metodă treptată de a le învăța, așa cum a învățat literele, câteva taste odată.

O parte din ce face simbolurile grele e Shift. În sursa npm pe care am numărat-o, aproximativ 45% din apăsările de simboluri erau caractere cu Shift, precum ( ) { } : și $, aproape 9 din fiecare 100 de caractere care nu sunt spații, înainte să numeri vreo majusculă. Așa că repară mai întâi obiceiul cu Shift: apasă Shift cu mâna care nu tastează caracterul. ( și ) stau pe 9 și 0 ale mâinii drepte, deci se tastează cu Shift stânga; ! @ # $ stau pe mâna stângă, deci se tastează cu Shift dreapta. Cei mai mulți autodidacți țin Shift stânga pentru tot, iar pentru ! asta cere degetului mic stâng să apese două taste deodată. Verifică-ți obiceiul tastând o linie care conține @ și $ și urmărind ce deget mic se mișcă.

Simbolurile sunt greu de exersat izolat și plictisitor de exersat în general: literele vin cu cuvinte, parantezele vin cu cod, iar codul aleatoriu nu e interesant. Răspunsul nostru e să exersezi simbolurile pe linii reale de cod, câte o clasă pe rând.

Câte o clasă pe rând

Aceasta e ordinea pe care am folosi-o noi și ordinea traseului de simboluri pe care îl construim pentru pagina de exersare. Până va fi lansat, poți face același lucru lipind cod real în modul personalizat, câte o clasă de simboluri pe rând, fără să adaugi clasa următoare până când cea curentă nu ajunge la 95% precizie:

  • Cifrele. Rândul cifrelor, cu degetele de pe rândul de bază întinzându-se în sus. Vine primul pentru că e clasa de non-litere cea mai folosită și pentru că aproape toată lumea are aici un obicei prost, de pildă arătătorul care apasă 4, 5, 6 și 7. Testul cu cifre e o verificare rapidă.
  • Parantezele în perechi. Întâi ( ), apoi [ ], apoi { }. În perechi, pentru că aproape niciodată nu tastezi una fără cealaltă: în acea sursă npm, ( apare de 6.195 de ori, iar ) de 6.194 de ori. Antrenarea mișcării deschide-închide ca o singură unitate e ce o face rapidă. Paranteza de închidere e locul unde se rupe ritmul celor mai mulți oameni.
  • Operatorii. = + - * / și parantezele unghiulare, plus formele compuse (==, =>, +=, !=). Sunt răspândiți pe rândul cifrelor și pe tastele de punctuație ale mâinii drepte, iar mai mulți cer Shift pe aceeași mână, și asta e partea incomodă.
  • Ghilimelele și punctuația. ' " ; : , . cu degetul mic drept făcând cea mai mare parte a muncii. Punctul și virgula și cele două puncte sunt locul unde programatorii din familia C și cei de Python diferă cel mai mult, așa că exersează pe linii din limbajul pe care îl folosești.
  • Shell-ul și cele ciudate. Bara verticală, backslash-ul, tilda, backtick-ul, accentul circumflex, ampersandul, diezul, dolarul, arond-ul și tasta _. Tasta _ și backtick-ul îi surprind pe cei mai mulți; codul în snake_case folosește _ încontinuu, iar majoritatea o apasă cu degetul greșit.

Fiecare clasă îi ia celor mai mulți oameni una sau două săptămâni de sesiuni de zece minute, deci întregul traseu durează două-trei luni. E mai lent decât învățarea literelor, pentru că tastele simbolurilor sunt mai departe, iar obiceiurile pe care le înlocuiești sunt mai vechi.

Ce merge prost, din ce am văzut în statisticile pe taste: oamenii învață simbolul cu degetul corect și apoi revin la vechiul obicei sub presiune, pentru că mișcarea veche e mai rapidă câteva săptămâni. Statisticile arată asta ca pe o tastă al cărei interval variază enorm, rapid când întinzi corect și lent când nu. Remediul e să mai rămâi o săptămână pe acea clasă.

Perechi de paranteze și închiderea automată

Editoarele închid automat parantezele, ceea ce ridică o întrebare legitimă: de ce să înveți s-o tastezi pe cea de închidere?

Din două motive. Închiderea automată e inconsecventă: funcționează în unele locuri și în altele nu, de pildă într-un terminal sau într-o fereastră de chat. Cine se bazează pe ea ezită de fiecare dată ca să verifice dacă s-a declanșat, iar ezitarea costă mai mult decât apăsarea. În plus, tastarea peste o paranteză închisă automat (apăsarea lui „)” când editorul a inserat deja una) e tot o apăsare, deci tastezi paranteza de închidere oricum.

Când lipești cod în modul personalizat aici, textul e împărțit după spațiile albe, deci indentarea dispare și fiecare token devine un cuvânt. E o limitare și o comoditate în același timp: nu tastezi patru spații la începutul fiecărei linii de Python, dar nici nu le exersezi. Un mod de cod adevărat, care tratează indentarea și perechile închise automat cum o face un editor, e pe lista noastră și e mai greu decât pare.

Viteza la cod față de viteza la proză

Nu avem destule rezultate în modul de cod ca să publicăm percentile și preferăm să așteptăm decât să le inventăm. În propriile noastre runde, viteza la cod pe un fragment realist a fost undeva între jumătate și două treimi din viteza la proză a aceleiași persoane, iar raportul se îmbunătățește mai mult prin exersarea simbolurilor decât prin exersare generală.

Numărul care se transferă e precizia. Un programator care tastează proză la 97% precizie și cod la 90% are o problemă cu simbolurile, iar harta termică pe taste arată exact care simboluri. Un programator la 97% la ambele trebuie doar să tasteze mai mult cod. Metodologia noastră de calcul explică cum contează precizia greșelile corectate.

Ca reper standard, testul cu punctuație cu cifrele activate e cel mai apropiat de cod dintre modurile noastre obișnuite. Nu are acolade, dar aduce în joc tasta Shift și rândul cifrelor, iar pentru cei mai mulți oameni acolo e golul.

Alegeri de tastatură care ajută

Sfaturile despre tastaturi pe care le primesc programatorii țin mai ales de switch-uri și sunt în mare parte pe lângă subiect.

Aranjamentul contează mai mult decât switch-ul. Dvorak mută parantezele sus, pe rândul cifrelor, și relochează majoritatea semnelor de punctuație. Colemak și Workman țin parantezele unde le are QWERTY, dar ambele mută punctul și virgula acolo unde QWERTY are P, ceea ce programatorii din familia C vor simți. Articolul despre aranjamente are versiunea lungă.

Un strat de simboluri e mai bun decât o tastatură mai mare. Multe tastaturi divizate și compacte îți permit să pui parantezele și operatorii sub degetele de pe rândul de bază, pe un strat activat ținând apăsată o tastă de deget mare. Dintre toate schimbările de hardware pe care le descriu programatorii, aceasta e cea pe care am încerca-o prima, pentru că înseamnă că nu te mai uiți niciodată în jos după un simbol.

ISO sau ANSI. Pe tastaturile ISO (Regatul Unit și cea mai mare parte a Europei), tasta în plus de lângă Shift stânga și tasta Enter înaltă schimbă locul backslash-ului și al barei verticale. Dacă exersezi pe una și lucrezi pe cealaltă, degetul mic va rata. Din acest motiv, emularea noastră include ambele variante ale Colemak-DH.

Switch-urile abia dacă contează pentru viteză. Switch-urile liniare, tactile și cu clic diferă ca senzație și sunet, iar jurnalul de apăsări nu știe pe care l-ai apăsat. Articolul nostru despre tastaturile mecanice trece prin cifre.

Sunetul îi ajută pe unii cu feedbackul: sunetul de eroare îți spune că un simbol a fost greșit fără să te uiți în jos. Pornește-l cât timp înveți simbolurile.

O sesiune de zece minute pentru programatori

Ce am face zilnic în cele două-trei luni cât durează traseul de simboluri:

  • Două minute: un test de cuvinte de 30 de secunde ca încălzire, cu precizie de 97%.
  • Șase minute: clasa de simboluri curentă, pe text personalizat lipit din propriul cod. Oprește-te la primul semn de revenire la degetul vechi.
  • Două minute: un fragment de cod în limbajul pe care îl folosești cel mai des. Uită-te apoi la harta termică pe taste, nu la WPM.

În zilele în care nu ai zece minute, tastează singur paranteza de închidere. E cel mai mic obicei din acest articol și, de obicei, primul care dă roade.

Întrebări frecvente

Care e o viteză de tastare bună pentru programatori?

Orice de la aproximativ 40 WPM în sus e suficient dacă tastezi orb simbolurile și cifrele. Peste atât, blocajul e gândirea, cititul și stăpânirea editorului, nu viteza degetelor.

Cum învăț să tastez orb cifrele?

Exersează rândul cifrelor separat până când precizia se menține la 95%, folosind degetul aflat pe rândul de bază direct sub fiecare cifră, apoi amestecă cifrele în text normal.

Surse