Slepo kucanje za programere se uglavnom svodi na tastere koje običan kurs kucanja preskače: cifre, zagrade, operatore i kombinacije sa tasterom Shift oko njih. Programer koji prozu kuca brzinom od 90 WPM može biti spor u kucanju koda, a neko ko prozu kuca sa 50 WPM može u tome biti brz. Primetili smo to dok smo tokom testiranja lepili sopstvene izvorne fajlove u prilagođeni režim. Brzine su pale za trećinu ili više u odnosu na režim „Reči”, toplotna mapa po tasterima zasvetlela je na redu sa brojevima i na desnom malom prstu, a najsporiji naleti bili su na tokenima sa zagradama.
Zašto je WPM na prozi loša zamena za kucanje koda
Kod se od teksta razlikuje na tri načina, a test kucanja sastavljen od čestih engleskih reči ne meri nijedan od njih.
Prvi je sastav karaktera. Prebrojali smo. U prvih deset tekstova na ovom blogu, od svakih 100 karaktera koji nisu razmak oko 93 su slova, 5 interpunkcija i 2 cifre. U JavaScript izvornom kodu npm-ovog alata za komandnu liniju slova padaju na oko 80, a simboli rastu na 19. Pythonovi moduli json i email imaju od 80 do 85 slova, a jedna naša gusta skripta za build 64, pri čemu su trećina njenih karaktera simboli. Dakle, kod ima otprilike tri do sedam puta više simbola od naše proze. Većina njih je u gornjem redu ili zahteva Shift, što znači desni mali prst i slabija posezanja. Naši testovi engleskih reči sastavljeni su od 1.000 najčešćih reči iz korpusa titlova; „{” nije među njima.
Drugi je ritam. Proza se kuca u dugim nizovima. Kod se kuca u kratkim naletima između pauza za razmišljanje, skrolovanje i čitanje. Dobrovoljci u studiji Dhakala i saradnika iz 2018. o 136 miliona pritisaka tastera, koji su prepisivali rečenice, imali su u proseku oko 239 ms između tastera. Programerov dan je pun praznina od po nekoliko sekundi, a brzina naleta unutar kratkih nizova važnija je od bilo kog proseka.
Treći je editor. Automatsko dovršavanje, isečci koda i prečice na tastaturi znače da programer na poslu kuca samo deo karaktera koji vidi na ekranu. Nijedan test kucanja to ne može da izmeri, a naš se i ne pretvara da može.
Da li je brzina kucanja važna za programiranje?
Manje nego što ljudi misle, i na drugom mestu. Kad neko pita da li je 60 WPM dovoljno za programera, odgovor je da, uz jednu ogradu: ako gledaš dole zbog simbola i brojeva, 60 WPM nije brzina kojom kucaš kod. Mogućnost da otkucaš red a da ne izgubiš nit misli važnija je od same brzine, a gledanje u tastaturu je ono što tu nit prekida.
Kako brže kucati simbole i zašto to niko ne uči
Pitanje koje se stalno ponavlja na forumima o kucanju: neko slova kuca slepo pristojnom brzinom, ali čim počne da programira, ponovo traži simbole, brojeve pa čak i velika slova, i želi postepen način da ih nauči, onako kako je naučio slova, po nekoliko tastera odjednom.
Deo onoga što simbole čini teškim je Shift. U npm kodu koji smo prebrojali oko 45% pritisaka za simbole bili su karakteri sa Shiftom, kao što su ( ) { } : i $, blizu 9 na svakih 100 karaktera koji nisu razmak, i to pre nego što prebrojiš ijedno veliko slovo. Zato prvo sredi naviku sa Shiftom: Shift pritiskaj rukom koja ne kuca sam karakter. ( i ) su na tasterima 9 i 0 desne ruke, pa idu uz levi Shift; ! @ # $ su na levoj ruci, pa idu uz desni Shift. Većina samoukih daktilografa za sve drži levi Shift, a kod ! to znači da levi mali prst pritiska dva tastera odjednom. Proveri svoju naviku tako što ćeš otkucati red sa @ i $ i pratiti koji se mali prst pomera.
Simbole je teško vežbati izdvojeno, a dosadno ih je vežbati uopšte: slova dolaze sa rečima, zagrade dolaze sa kodom, a nasumičan kod nije zanimljiv. Naš odgovor je da se simboli vežbaju na pravim redovima koda, jedna po jedna grupa.
Jedna po jedna grupa
Ovo je redosled koji bismo koristili, i redosled staze za simbole koju pravimo za stranicu za vežbu. Dok ne bude objavljena, isto možeš da postigneš tako što ćeš lepiti pravi kod u prilagođeni režim, jednu po jednu grupu simbola, i ne dodavati sledeću grupu dok trenutna ne dostigne 95% tačnosti:
- Cifre. Red sa brojevima, do kojeg prsti sa osnovnog reda posežu nagore. Ovo ide prvo jer je to najkorišćenija grupa koja nije slovo i jer skoro svako ovde ima lošu naviku, recimo da kažiprst kuca 4, 5, 6 i 7. Test brojeva je brza provera.
- Zagrade u paru. Prvo ( ), zatim [ ], pa { }. U paru, jer gotovo nikad ne kucaš jednu bez druge: u tom npm kodu ( se pojavljuje 6.195 puta, a ) 6.194 puta. Uvežbavanje pokreta otvaranja i zatvaranja kao jedne celine je ono što ga ubrzava. Zatvorena zagrada je mesto gde većini ljudi puca ritam.
- Operatori. = + - * / i uglaste zagrade, plus složeni oblici (==, =>, +=, !=). Raspoređeni su po redu sa brojevima i desnim tasterima za interpunkciju, a nekoliko njih zahteva Shift na istoj ruci, što je nezgodan deo.
- Navodnici i interpunkcija. ' " ; : , . pri čemu desni mali prst radi najveći deo posla. Tačka i zarez i dvotačka su mesto gde se oni koji pišu u jezicima iz porodice C i u Pythonu najviše razlikuju, pa vežbaj na redovima iz jezika koji koristiš.
- Shell i neobični simboli. Vertikalna crta, obrnuta kosa crta, tilda, obrnuti apostrof, kapica, ampersand, taraba, dolar, et i taster _. Donja crta i obrnuti apostrof iznenade većinu ljudi; kod u snake_case stilu stalno koristi _, a većina daktilografa ga pritiska pogrešnim prstom.
Svaka grupa većini ljudi oduzme nedelju ili dve sesija od deset minuta, pa cela staza traje dva do tri meseca. To je sporije od učenja slova, jer su tasteri sa simbolima dalje, a navike koje zamenjuješ su starije.
Šta pođe naopako, sudeći po statistici po tasterima: ljudi nauče simbol pravim prstom, a onda se pod pritiskom vrate na staro, jer je stari pokret nekoliko nedelja brži. Statistika to pokazuje kao taster čiji interval divlje varira, brz kad posegneš pravilno i spor kad ne posegneš. Lek je da ostaneš na toj grupi još nedelju dana.
Parovi zagrada i automatsko zatvaranje
Editori automatski zatvaraju zagrade, što otvara pošteno pitanje: zašto učiti kucanje zatvorene zagrade?
Dva razloga. Automatsko zatvaranje je nedosledno: na nekim mestima radi, a na drugim ne, recimo u terminalu ili prozoru za ćaskanje. Daktilograf koji se na njega oslanja svaki put okleva da proveri da li je proradilo, a to oklevanje košta više od pritiska tastera. Osim toga, kucanje preko automatski zatvorene zagrade (pritisak na „)” kad ju je editor već ubacio) je takođe pritisak tastera, pa zatvorenu zagradu kucaš u svakom slučaju.
Kad ovde nalepiš kod u prilagođeni režim, tekst se deli po belinama, pa uvlačenje nestaje i svaki token postaje reč. To je istovremeno ograničenje i pogodnost: ne kucaš četiri razmaka na početku svakog reda u Pythonu, ali ih ni ne vežbaš. Pravi režim za kod koji uvlačenje i automatski zatvorene parove obrađuje kao editor je na našoj listi, i teži je nego što zvuči.
Brzina na kodu naspram brzine na prozi
Nemamo dovoljno rezultata iz režima za kod da bismo objavili percentile, i radije ćemo sačekati nego ih izmisliti. U našim sopstvenim pokušajima brzina na realističnom isečku koda bila je negde između polovine i dve trećine brzine iste osobe na prozi, a taj odnos se više popravlja vežbanjem simbola nego opštom vežbom.
Broj koji se zaista prenosi je tačnost. Programer koji prozu kuca sa 97% tačnosti, a kod sa 90%, ima problem sa simbolima, i toplotna mapa po tasterima pokazuje tačno sa kojim. Programer sa 97% na oba treba samo da kuca više koda. Naša metodologija bodovanja objašnjava kako tačnost računa ispravljene greške.
Kao standardno merilo, test sa interpunkcijom sa uključenim brojevima je od naših uobičajenih režima najbliži kodu. Neće imati vitičaste zagrade, ali uvodi Shift i red sa brojevima, a kod većine ljudi je upravo tu jaz.
Izbor tastature koji pomaže
Saveti o tastaturama koje programeri dobijaju uglavnom se tiču prekidača i uglavnom promašuju poentu.
Raspored je važniji od prekidača. Dvorak podiže zagrade u red sa brojevima i premešta većinu interpunkcije. Colemak i Workman drže zagrade tamo gde su na QWERTY-ju, ali oba premeštaju tačku i zarez tamo gde je na QWERTY-ju P, što će programeri u jezicima iz porodice C osetiti. Tekst o rasporedima ima dužu verziju.
Sloj sa simbolima je bolji od veće tastature. Mnoge podeljene i kompaktne tastature dozvoljavaju da zagrade i operatore staviš pod prste osnovnog reda, na sloj koji se drži tasterom pod palcem. Od svih promena hardvera koje programeri opisuju, ovu bismo prvu probali, jer znači da nikad više ne gledaš dole zbog simbola.
ISO naspram ANSI. Na ISO tastaturama (Velika Britanija i veći deo Evrope) dodatni taster pored levog Shifta i visoki Enter menjaju mesto obrnute kose crte i vertikalne crte. Ako vežbaš na jednoj, a radiš na drugoj, mali prst će ti promašivati. Naša emulacija iz tog razloga ima obe varijante rasporeda Colemak-DH.
Prekidači jedva da utiču na brzinu. Linearni, taktilni i klik prekidači razlikuju se po osećaju i zvuku, a zapis pritisaka ne zna koji si pritiskao. Naš tekst o mehaničkim tastaturama prolazi kroz brojeve.
Zvuk nekim ljudima pomaže kao povratna informacija: zvuk greške ti kaže da je simbol bio pogrešan, bez gledanja dole. Uključi ga dok učiš simbole.
Programerska sesija od deset minuta
Ovo bismo radili svakog dana tokom dva ili tri meseca koliko traje staza za simbole:
- Dva minuta: test reči od 30 sekundi kao zagrevanje, sa tačnošću od 97%.
- Šest minuta: trenutna grupa simbola, na prilagođenom tekstu nalepljenom iz sopstvenog koda. Stani na prvi znak vraćanja na stari prst.
- Dva minuta: jedan isečak koda u jeziku koji najviše koristiš. Posle toga pogledaj toplotnu mapu po tasterima, ne WPM.
Danima kad nemaš deset minuta, sam otkucaj zatvorenu zagradu. To je najmanja navika u ovom tekstu i obično prva koja se isplati.
Često postavljana pitanja
Koja je dobra brzina kucanja za programere?
Sve od oko 40 WPM naviše je upotrebljivo ako simbole i brojeve kucaš slepo. Iznad toga usko grlo je razmišljanje, čitanje i veština rada u editoru, a ne brzina prstiju.
Kako da naučim da slepo kucam brojeve?
Vežbaj red sa brojevima zasebno dok se tačnost ne zadrži na 95%, koristeći prst koji je na osnovnom redu direktno ispod svake cifre, a zatim ubacuj brojeve u običan tekst.