Pisanie bezwzrokowe dla programistów dotyczy głównie klawiszy, które zwykły kurs pisania pomija: cyfr, nawiasów, operatorów i kombinacji z Shiftem wokół nich. Programista, który pisze zwykły tekst z szybkością 90 WPM, może wolno pisać kod, a ktoś, kto pisze tekst z szybkością 50 WPM, może pisać go szybko. Zauważyliśmy to, wklejając podczas testów nasze własne pliki źródłowe do trybu własnego tekstu. Szybkość spadała o jedną trzecią lub więcej w porównaniu z trybem słów, mapa cieplna klawiszy rozświetlała się na rzędzie cyfr i przy prawym małym palcu, a najwolniejsze zrywy przypadały na fragmenty z nawiasami.
Dlaczego WPM przy zwykłym tekście słabo przybliża pisanie kodu
Kod różni się od tekstu na trzy sposoby, a test pisania zbudowany z popularnych angielskich słów nie mierzy żadnego z nich.
Pierwszy to mieszanka znaków. Policzyliśmy. W pierwszych dziesięciu tekstach na tym blogu na każde 100 znaków innych niż spacja około 93 to litery, 5 to znaki interpunkcyjne, a 2 to cyfry. W kodzie źródłowym JavaScript narzędzia wiersza poleceń npm liter jest już około 80, a symboli 19. Moduły json i email Pythona dają od 80 do 85 liter, a jeden z naszych gęstych skryptów budujących 64, przy czym jedną trzecią jego znaków stanowią symbole. Kod ma więc mniej więcej od trzech do siedmiu razy więcej symboli niż nasza proza. Większość z nich leży w górnym rzędzie lub wymaga Shifta, czyli angażuje prawy mały palec i trudniejsze sięgnięcia. Nasze testy z angielskimi słowami są zbudowane z 1000 najczęstszych słów w korpusie napisów filmowych; „{” do nich nie należy.
Drugi to rytm. Prozę pisze się długimi ciągami. Kod pisze się krótkimi zrywami przerywanymi pauzami na myślenie, przewijanie i czytanie. Ochotnicy z badania Dhakala i współpracowników z 2018 roku, obejmującego 136 milionów naciśnięć klawiszy, którzy przepisywali zdania, robili średnio około 239 ms przerwy między klawiszami. Dzień programisty pełen jest przerw trwających po kilka sekund, a szybkość zrywu w krótkich ciągach ma większe znaczenie niż jakakolwiek średnia.
Trzeci to edytor. Autouzupełnianie, snippety i skróty klawiszowe sprawiają, że pracujący programista wpisuje tylko ułamek znaków widocznych na ekranie. Żaden test pisania nie potrafi tego zmierzyć, a nasz nie udaje, że potrafi.
Czy szybkość pisania jest ważna w programowaniu?
Mniej, niż się ludziom wydaje, i w innym miejscu. Gdy ktoś pyta, czy 60 WPM wystarczy, żeby być programistą, odpowiedź brzmi: tak, z zastrzeżeniem. Jeśli przy symbolach i cyfrach patrzysz w dół, kodu nie piszesz z szybkością 60 WPM. Możliwość wpisania linijki bez gubienia toku myślenia znaczy więcej niż sama szybkość, a tok myślenia przerywa właśnie patrzenie na klawiaturę.
Jak szybciej pisać symbole i dlaczego nikt tego nie uczy
Na forach o pisaniu wciąż wraca to samo pytanie: ktoś pisze bezwzrokowo litery w przyzwoitym tempie, ale gdy tylko zaczyna programować, znów szuka wzrokiem symboli, cyfr, a nawet wielkich liter, i chciałby nauczyć się ich stopniowo, tak jak uczył się liter, po kilka klawiszy naraz.
Symbole są trudne po części przez Shift. W policzonym przez nas kodzie npm około 45% naciśnięć symboli to znaki z Shiftem, takie jak ( ) { } : i $, czyli blisko 9 na każde 100 znaków innych niż spacja, zanim policzysz choćby jedną wielką literę. Najpierw popraw więc nawyk związany z Shiftem: naciskaj Shift ręką, która nie wpisuje danego znaku. ( i ) leżą pod prawą ręką, na 9 i 0, więc wymagają lewego Shifta; ! @ # $ leżą pod lewą ręką, więc wymagają prawego. Większość samouków do wszystkiego przytrzymuje lewy Shift, a przy ! oznacza to, że lewy mały palec musi nacisnąć dwa klawisze jednocześnie. Sprawdź swój nawyk, wpisując linijkę z @ i $ i obserwując, który mały palec się porusza.
Symbole trudno ćwiczyć w oderwaniu od reszty, a ćwiczenie ich w ogóle jest nudne: litery pojawiają się w słowach, nawiasy w kodzie, a losowy kod nie jest ciekawy. Nasza odpowiedź to ćwiczenie symboli na prawdziwych linijkach kodu, po jednej grupie naraz.
Po jednej grupie naraz
Taką kolejność byśmy zastosowali i w takiej kolejności układamy ścieżkę symboli, którą budujemy dla strony ćwiczeń. Zanim zostanie udostępniona, możesz zrobić to samo, wklejając prawdziwy kod do trybu własnego tekstu, po jednej grupie symboli naraz, i nie dodając kolejnej grupy, dopóki obecna nie osiągnie dokładności 95%:
- Cyfry. Rząd cyfr, do którego sięgają palce z rzędu podstawowego. Idą na pierwszy ogień, bo to najczęściej używana grupa znaków niebędących literami i bo prawie każdy ma tu jakiś zły nawyk, na przykład naciska 4, 5, 6 i 7 palcem wskazującym. Test cyfr to szybki sprawdzian.
- Nawiasy parami. Najpierw ( ), potem [ ], potem { }. Parami, bo prawie nigdy nie wpisuje się jednego bez drugiego: we wspomnianym kodzie npm ( pojawia się 6195 razy, a ) 6194 razy. Ćwiczenie ruchu otwarcia i zamknięcia jako jednej całości sprawia, że staje się szybki. To na nawiasie zamykającym rytm większości osób się załamuje.
- Operatory. = + - * / i nawiasy ostre oraz formy złożone (==, =>, +=, !=). Są rozrzucone po rzędzie cyfr i klawiszach interpunkcyjnych pod prawą ręką, a kilka wymaga Shifta po tej samej stronie, co jest w nich najbardziej niewygodne.
- Cudzysłowy i interpunkcja. ' " ; : , . przy czym większość pracy wykonuje prawy mały palec. Średniki i dwukropki najbardziej różnicują programistów rodziny C i Pythona, więc ćwicz na linijkach z języka, którego używasz.
- Powłoka i rzadsze znaki. Kreska pionowa, ukośnik wsteczny, tylda, grawis, daszek, ampersand, krzyżyk, dolar, małpa i klawisz _. _ i grawis zaskakują większość osób; kod w stylu snake_case używa _ bez przerwy, a większość piszących trafia w niego złym palcem.
Każda grupa zajmuje większości osób tydzień lub dwa dziesięciominutowych sesji, więc cała ścieżka to dwa do trzech miesięcy. To wolniej niż nauka liter, bo klawisze symboli są dalej, a nawyki, które zastępujesz, są starsze.
Co idzie nie tak, sądząc po statystykach poszczególnych klawiszy: ludzie uczą się symbolu właściwym palcem, a potem pod presją wracają do starego nawyku, bo stary ruch jest przez kilka tygodni szybszy. W statystykach widać to jako klawisz, którego odstęp czasowy bardzo się waha: szybki, gdy sięgasz poprawnie, i wolny, gdy nie. Rozwiązanie to zostać przy tej grupie jeszcze tydzień.
Pary nawiasów i automatyczne zamykanie
Edytory automatycznie zamykają nawiasy, co rodzi zasadne pytanie: po co uczyć się wpisywać nawias zamykający?
Z dwóch powodów. Automatyczne zamykanie jest niekonsekwentne: działa w jednych miejscach, a w innych nie, na przykład w terminalu albo w oknie czatu. Kto na nim polega, za każdym razem waha się, żeby sprawdzić, czy zadziałało, a to wahanie kosztuje więcej niż naciśnięcie klawisza. Poza tym przepisanie automatycznie wstawionego nawiasu (naciśnięcie „)”, gdy edytor już go wstawił) samo jest naciśnięciem klawisza, więc nawias zamykający i tak wpisujesz.
Gdy wklejasz tu kod do trybu własnego tekstu, tekst jest dzielony na białych znakach, więc wcięcia znikają, a każdy fragment staje się słowem. To ograniczenie i wygoda zarazem: nie wpisujesz czterech spacji na początku każdej linii Pythona, ale też ich nie ćwiczysz. Prawdziwy tryb kodu, który obsługuje wcięcia i automatycznie zamykane pary tak jak edytor, jest na naszej liście i jest trudniejszy, niż się wydaje.
Szybkość przy kodzie a przy zwykłym tekście
Nie mamy wystarczająco wielu wyników z trybu kodu, by publikować percentyle, i wolimy poczekać, niż je wymyślać. W naszych własnych próbach szybkość przy realistycznym fragmencie kodu wynosiła mniej więcej od połowy do dwóch trzecich szybkości tej samej osoby przy zwykłym tekście, a ta proporcja poprawia się bardziej dzięki ćwiczeniu symboli niż dzięki ćwiczeniom ogólnym.
Liczba, która się przenosi, to dokładność. Programista, który pisze zwykły tekst z dokładnością 97%, a kod z dokładnością 90%, ma problem z symbolami, a mapa cieplna klawiszy pokazuje dokładnie, z którymi. Programista z wynikiem 97% w obu przypadkach musi po prostu pisać więcej kodu. Nasza metodologia liczenia wyników wyjaśnia, jak dokładność uwzględnia poprawione błędy.
Jako standardowy punkt odniesienia najbliżej kodu spośród naszych zwykłych trybów jest test z interpunkcją z włączonymi liczbami. Nie ma w nim nawiasów klamrowych, ale wprowadza Shift i rząd cyfr, a dla większości osób to właśnie tam leży luka.
Wybory dotyczące klawiatury, które pomagają
Rady dotyczące klawiatury, jakie dostają programiści, dotyczą głównie przełączników i w większości mijają się z celem.
Układ ma większe znaczenie niż przełącznik. Dvorak przenosi nawiasy do rzędu cyfr i zmienia położenie większości znaków interpunkcyjnych. Colemak i Workman zostawiają nawiasy tam, gdzie ma je QWERTY, ale oba przenoszą średnik w miejsce, gdzie QWERTY ma P, co programiści rodziny C odczują. Wersję rozszerzoną zawiera artykuł o układach klawiatury.
Warstwa symboli jest lepsza niż większa klawiatura. Wiele klawiatur dzielonych i kompaktowych pozwala umieścić nawiasy i operatory pod palcami rzędu podstawowego na warstwie aktywowanej klawiszem pod kciukiem. Ze wszystkich zmian sprzętowych, o których opowiadają programiści, tę wypróbowalibyśmy jako pierwszą, bo dzięki niej już nigdy nie patrzysz w dół, szukając symbolu.
ISO a ANSI. Na klawiaturach ISO (brytyjskich i większości europejskich) dodatkowy klawisz obok lewego Shifta i wysoki Enter zmieniają położenie ukośnika wstecznego i kreski pionowej. Jeśli ćwiczysz na jednej, a pracujesz na drugiej, twój mały palec będzie chybiał. Z tego powodu nasza emulacja zawiera oba warianty Colemak-DH.
Przełączniki prawie nie wpływają na szybkość. Przełączniki liniowe, taktylne i klikające różnią się odczuciem i dźwiękiem, a zapis naciśnięć klawiszy nie wie, który z nich nacisnąłeś. Nasz artykuł o klawiaturach mechanicznych omawia liczby.
Dźwięk pomaga niektórym osobom jako informacja zwrotna: dźwięk błędu mówi ci, że symbol był zły, bez patrzenia w dół. Włącz go, gdy uczysz się symboli.
Dziesięciominutowa sesja dla programisty
Co robilibyśmy codziennie przez dwa lub trzy miesiące, które zajmuje ścieżka symboli:
- Dwie minuty: 30-sekundowy test ze słowami na rozgrzewkę, dokładność 97%.
- Sześć minut: bieżąca grupa symboli na własnym tekście wklejonym z twojego kodu. Przerwij przy pierwszym objawie powrotu do starego palca.
- Dwie minuty: jeden fragment kodu w języku, którego używasz najczęściej. Potem spójrz na mapę cieplną klawiszy, a nie na WPM.
W dni, kiedy nie masz dziesięciu minut, sam wpisuj nawias zamykający. To najmniejszy nawyk w tym artykule i zwykle pierwszy, który się opłaca.
Najczęściej zadawane pytania
Jaka szybkość pisania jest dobra dla programisty?
Wszystko od około 40 WPM wzwyż wystarcza, jeśli bezwzrokowo piszesz symbole i cyfry. Powyżej tego poziomu wąskim gardłem jest myślenie, czytanie i biegłość w edytorze, a nie szybkość palców.
Jak nauczyć się bezwzrokowo pisać cyfry?
Ćwicz sam rząd cyfr, aż dokładność utrzyma się na poziomie 95%, używając palca, który w rzędzie podstawowym leży bezpośrednio pod daną cyfrą, a potem wplataj cyfry w zwykły tekst.