För programmerare handlar tiofingersystemet mest om de tangenter som en vanlig kurs i maskinskrivning hoppar över: siffror, parenteser, operatorer och Shift-kombinationerna runt dem. En programmerare som skriver löptext i 90 WPM kan vara långsam på kod, och den som skriver löptext i 50 WPM kan vara snabb på den. Vi märkte det när vi klistrade in våra egna källfiler i läget Egen under testningen. Hastigheten föll med en tredjedel eller mer jämfört med läget Ord, värmekartan per tangent lyste upp på sifferraden och vid höger lillfinger, och de långsammaste spurterna var på ord med parenteser i.
Varför WPM för löptext säger lite om att skriva kod
Kod skiljer sig från text på tre sätt, och ett skrivtest byggt av vanliga engelska ord mäter inget av dem.
Det första är teckenblandningen. Vi räknade. I de tio första inläggen på den här bloggen är ungefär 93 av varje 100 tecken som inte är mellanslag bokstäver, 5 skiljetecken och 2 siffror. I JavaScript-källkoden till npm:s kommandoradsverktyg sjunker bokstäverna till omkring 80 och symbolerna stiger till 19. Pythons moduler json och email landar på 80 till 85 bokstäver, och ett tätt byggskript av våra på 64, där en tredjedel av tecknen är symboler. Kod har alltså ungefär tre till sju gånger så många symboler som vår löptext. De flesta av dem ligger på översta raden eller kräver Shift, vilket betyder höger lillfinger och de svagare sträckningarna. Våra engelska ordtest är byggda av de 1 000 vanligaste orden i en korpus av undertexter; "{" är inte ett av dem.
Det andra är rytmen. Löptext skrivs i långa sjok. Kod skrivs i korta spurter mellan pauser för att tänka, skrolla och läsa. Deltagarna i Dhakal med kollegors studie från 2018 av 136 miljoner tangenttryck, som skrev av meningar, hade i snitt omkring 239 ms mellan tangenterna. En programmerares dag är full av uppehåll på flera sekunder, och spurthastigheten i de korta sjoken betyder mer än något genomsnitt.
Det tredje är editorn. Autokomplettering, kodsnuttar och kortkommandon gör att en yrkesverksam programmerare bara skriver en bråkdel av tecknen på skärmen. Inget skrivtest kan mäta det, och vårt låtsas inte göra det.
Är skrivhastighet viktig för programmering?
Mindre än folk tror, och på ett annat ställe. När någon frågar om 60 WPM räcker för att bli programmerare är svaret ja, med ett förbehåll: om du tittar ned efter symboler och siffror är 60 WPM inte den hastighet du skriver kod i. Att kunna skriva en rad utan att tappa tankarna betyder mer än rå hastighet, och det är blicken ned mot tangentbordet som får dig att tappa dem.
Hur du skriver symboler snabbare, och varför ingen lär ut det
En fråga som återkommer gång på gång på forum om maskinskrivning: någon kan skriva bokstäver blint i hygglig hastighet, men så fort hen börjar koda är hen tillbaka till att leta efter symboler, siffror och till och med versaler, och hen vill ha ett gradvis sätt att lära sig dem, på samma sätt som bokstäverna, några tangenter i taget.
En del av det som gör symboler svåra är Shift. I npm-källkoden vi räknade var ungefär 45 % av symboltrycken skiftade tecken som ( ) { } : och $, nära 9 av varje 100 tecken som inte är mellanslag innan du räknat en enda versal. Rätta därför Shift-vanan först: tryck Shift med den hand som inte skriver tecknet. ( och ) ligger på högra handens 9 och 0, så de tar vänster Shift; ! @ # $ ligger på vänster hand, så de tar höger Shift. De flesta självlärda skribenter håller vänster Shift för allt, och för ! kräver det att vänster lillfinger trycker på två tangenter samtidigt. Kontrollera din egen vana genom att skriva en rad med @ och $ i och se vilket lillfinger som rör sig.
Symboler är svåra att drilla var för sig och tråkiga att drilla överhuvudtaget: bokstäver kommer med ord, parenteser kommer med kod, och slumpmässig kod är inte intressant. Vårt svar är att drilla symboler på riktiga kodrader, en klass i taget.
En klass i taget
Det här är ordningen vi skulle använda, och ordningen i det symbolspår vi bygger för övningssidan. Tills det är lanserat kan du göra samma sak genom att klistra in riktig kod i läget Egen, en klass av symboler i taget, och inte lägga till nästa klass förrän den nuvarande ligger på 95 % träffsäkerhet:
- Siffror. Sifferraden, med grundradens fingrar som sträcker sig uppåt. Den kommer först eftersom det är den mest använda klassen som inte är bokstäver och eftersom nästan alla har en dålig vana här, som att pekfingret tar 4, 5, 6 och 7. Siffertestet är en snabb kontroll.
- Parenteser som par. ( ) först, sedan [ ], sedan { }. Par, eftersom du nästan aldrig skriver den ena utan den andra: i den npm-källkoden förekommer ( 6 195 gånger och ) 6 194. Att träna öppna-stäng-rörelsen som en enhet är det som gör den snabb. Den avslutande parentesen är där de flestas rytm bryts.
- Operatorer. = + - * / och vinkelparenteserna, plus de sammansatta formerna (==, =>, +=, !=). De är utspridda över sifferraden och skiljeteckentangenterna på höger hand, och flera kräver Shift på samma hand, vilket är det besvärliga.
- Citattecken och skiljetecken. ' " ; : , . där höger lillfinger gör det mesta av arbetet. Semikolon och kolon är där skribenter av C-familjen och Python skiljer sig mest, så öva på rader från det språk du använder.
- Skalet och de udda. Lodstreck, omvänt snedstreck, tilde, bakåtfnutt, cirkumflex, et-tecken, fyrkant, dollar, snabel-a och tangenten _. Understrecket och bakåtfnutten överraskar de flesta; kod i snake_case använder _ hela tiden, och de flesta skribenter träffar det med fel finger.
Varje klass tar för de flesta en vecka eller två med pass på tio minuter, så hela spåret tar två till tre månader. Det är långsammare än att lära sig bokstäverna, eftersom symboltangenterna ligger längre bort och vanorna du ersätter är äldre.
Vad som går fel, utifrån statistiken per tangent: folk lär sig symbolen med rätt finger och faller sedan tillbaka under press, eftersom den gamla rörelsen är snabbare i några veckor. Statistiken visar det som en tangent vars intervall varierar kraftigt, snabbt när du når rätt och långsamt när du inte gör det. Lösningen är att stanna kvar vid den klassen en vecka till.
Parentespar och automatisk stängning
Editorer stänger parenteser automatiskt, vilket väcker en rimlig fråga: varför lära sig skriva den avslutande?
Två skäl. Automatisk stängning är inkonsekvent: den slår till på vissa ställen och inte på andra, som i en terminal eller ett chattfönster. Den som förlitar sig på den tvekar varje gång för att kontrollera om den slog till, och tvekan kostar mer än tangenttrycket. Och att skriva över en automatiskt stängd parentes (trycka ")" när editorn redan har infogat en) är i sig ett tangenttryck, så du skriver den avslutande parentesen i vilket fall som helst.
När du klistrar in kod i läget Egen här delas texten upp vid blanksteg, så indraget försvinner och varje kodelement blir ett ord. Det är en begränsning och en bekvämlighet på samma gång: du skriver inte fyra mellanslag i början av varje Pythonrad, och du övar inte på dem heller. Ett riktigt kodläge som hanterar indrag och automatiskt stängda par som en editor gör finns på vår lista, och det är svårare än det låter.
Hastighet på kod jämfört med löptext
Vi har inte tillräckligt många resultat i kodläge för att publicera percentiler, och vi väntar hellre än hittar på dem. I våra egna körningar har hastigheten på en realistisk kodsnutt legat någonstans kring hälften till två tredjedelar av samma persons hastighet på löptext, och kvoten förbättras mer med symbolövning än med allmän övning.
Den siffra som går att överföra är träffsäkerheten. En programmerare som skriver löptext med 97 % träffsäkerhet och kod med 90 % har ett symbolproblem, och värmekartan per tangent visar exakt vilka symboler. En programmerare med 97 % på båda behöver bara skriva mer kod. Vår metod för poängräkning förklarar hur träffsäkerheten räknar rättade fel.
Som standardmått är skiljeteckentestet med siffror påslagna det av våra vanliga lägen som ligger närmast kod. Det har inga klammerparenteser, men det tar med Shift-tangenten och sifferraden, och för de flesta är det där luckan finns.
Tangentbordsval som hjälper
De tangentbordsråd programmerare får handlar mest om brytare, och mest vid sidan av saken.
Layouten betyder mer än brytaren. Dvorak flyttar upp parenteserna till sifferraden och flyttar de flesta skiljetecknen. Colemak och Workman behåller parenteserna där QWERTY har dem, men båda flyttar semikolon dit där QWERTY har P, vilket programmerare i C-familjen kommer att märka. Artikeln om layouter har den långa versionen.
Ett symbollager slår ett större tangentbord. Många delade och kompakta tangentbord låter dig lägga parenteser och operatorer under grundradens fingrar på ett lager som hålls med en tumtangent. Av alla hårdvaruändringar programmerare beskriver är det den vi skulle prova först, eftersom den gör att du aldrig mer tittar ned efter en symbol.
ISO mot ANSI. På ISO-tangentbord (Storbritannien och större delen av Europa) ändrar extratangenten bredvid vänster Shift och den höga Enter-tangenten var omvänt snedstreck och lodstreck ligger. Om du övar på det ena och arbetar på det andra kommer lillfingret att missa. Vår emulering har båda varianterna av Colemak-DH av just det skälet.
Brytarna betyder knappt något för hastigheten. Linjära, taktila och klickande brytare skiljer sig i känsla och ljud, och tangentloggen vet inte vilken du tryckte på. Vår artikel om mekaniska tangentbord går igenom siffrorna.
Ljud hjälper en del med återkopplingen: felljudet säger att en symbol blev fel utan att du tittar ned. Slå på det medan du lär dig symboler.
Ett tiominuterspass för programmerare
Det här skulle vi göra varje dag under de två eller tre månader som symbolspåret tar:
- Två minuter: ett ordtest på 30 sekunder som uppvärmning, träffsäkerhet på 97 %.
- Sex minuter: den aktuella symbolklassen, på egen text inklistrad från din egen kod. Sluta vid första tecknet på att du faller tillbaka till det gamla fingret.
- Två minuter: en kodsnutt i det språk du använder mest. Titta på värmekartan per tangent efteråt, inte på WPM.
De dagar du inte har tio minuter, skriv den avslutande parentesen själv. Det är den minsta vanan i den här artikeln och oftast den första som lönar sig.
Vanliga frågor
Vilken skrivhastighet är bra för programmerare?
Allt från omkring 40 WPM och uppåt fungerar om du skriver symboler och siffror blint. Därutöver är flaskhalsen tänkande, läsning och vana vid editorn, inte fingrarnas hastighet.
Hur lär jag mig skriva siffror blint?
Öva sifferraden för sig tills träffsäkerheten håller på 95 %, med det finger som ligger direkt under varje siffra på grundraden, och blanda sedan in siffror i vanlig text.