プログラマーのためのタッチタイピングとは、ほとんどの場合、普通のタイピング講座が飛ばしてしまうキーの話です。数字、括弧、演算子、そしてそれらにまつわるShiftの組み合わせです。文章を90 WPMで打つプログラマーがコードでは遅いこともあれば、文章では50 WPMの人がコードは速いこともあります。私たちがこれに気づいたのは、テスト中に自分たちのソースファイルをカスタムモードに貼り付けたときでした。単語モードと比べて速度は3分の1以上落ち、キーごとのヒートマップは数字の段と右手の小指のあたりが赤く染まり、最も遅いバーストは括弧を含むトークンで出ていました。
文章のWPMがコードの入力速度の指標として不十分な理由
コードは3つの点で文章と異なり、よく使う英単語で作られたタイピングテストはそのどれも測っていません。
1つ目は文字の構成です。実際に数えてみました。このブログの最初の10記事では、スペース以外の文字100文字のうち、約93文字が英字、5文字が句読点、2文字が数字でした。npmのコマンドラインツールのJavaScriptソースでは、英字は約80文字に減り、記号は19文字に増えます。Pythonのjsonモジュールとemailモジュールでは英字が80〜85文字、私たちの書いた密度の高いビルドスクリプトでは64文字で、文字の3分の1が記号でした。つまりコードには、私たちの文章のおよそ3〜7倍の記号が含まれています。その多くは上の段にあるかShiftが必要で、右手の小指や届きにくいキーを使うことになります。当サイトの英単語テストは字幕コーパスで最もよく使われる1,000語から作られていますが、「{」はその中に入っていません。
2つ目はリズムです。文章は長く連続して入力します。コードは、考えたり、スクロールしたり、読んだりする合間の短いバーストで入力します。1億3,600万回の打鍵を分析したDhakalらの2018年の研究で文章を書き写していたボランティアは、キーとキーの間隔が平均約239ミリ秒でした。プログラマーの1日は数秒単位の空白だらけで、どんな平均値よりも、短い連続入力の中でのバースト速度のほうが重要です。
3つ目はエディターです。自動補完、スニペット、キーボードショートカットがあるので、実際に働くプログラマーが入力するのは画面上の文字のごく一部です。それを測れるタイピングテストはありませんし、当サイトのテストも測れるふりはしていません。
プログラミングにタイピング速度は重要か?
思われているほどではなく、重要になる場所も違います。プログラマーになるのに60 WPMで足りるかと聞かれたら、答えは「はい」ですが、条件つきです。記号や数字のたびに手元を見ているなら、コードを60 WPMで打てているわけではありません。生の速度よりも、思考の流れを途切れさせずに1行を入力できることのほうが大切で、その流れを断ち切るのが、キーボードに目を落とすことなのです。
記号を速く打つ方法と、誰もそれを教えない理由
タイピングのフォーラムで何度も繰り返される質問があります。文字ならまずまずの速さでタッチタイピングできるのに、コードを書き始めたとたん記号や数字、さらには大文字まで探して打つ状態に戻ってしまう。文字を覚えたときのように、数個のキーずつ段階的に覚える方法はないか、というものです。
記号が難しい理由の一つはShiftです。私たちが数えたnpmのソースでは、記号の打鍵の約45%が( ) { } :や$のようなShiftを使う文字でした。大文字を1つも数えないうちから、スペース以外の文字100文字につき9文字近くになります。ですから、まずShiftの癖を直しましょう。Shiftは、その文字を打たないほうの手で押します。(と)は右手の9と0にあるので左Shiftを、! @ # $は左手側にあるので右Shiftを使います。独学で覚えた人の多くは何でも左Shiftで済ませていて、!を打つときには左手の小指に2つのキーを同時に押させることになります。@と$を含む1行を入力して、どちらの小指が動くかを見れば、自分の癖を確かめられます。
記号は単独で練習しにくく、練習自体も退屈です。文字には単語があり、括弧にはコードがありますが、でたらめなコードは面白くありません。私たちの答えは、実際のコードの行を使って、記号を1種類ずつ練習することです。
1種類ずつ
これが私たちの勧める順番で、練習ページ向けに作っている記号トラックの順番でもあります。公開されるまでは、実際のコードをカスタムモードに貼り付けて、記号を1種類ずつ練習すれば同じことができます。いまの種類で正確率95%に達するまでは、次の種類を加えないでください。
- 数字。数字の段を、ホームポジションの指を上に伸ばして打ちます。これを最初にするのは、文字以外で最もよく使う種類であり、人差し指で4、5、6、7を打つといった悪い癖をほとんどの人が持っているからです。数字テストで手早く確認できます。
- 括弧はペアで。まず( )、次に[ ]、それから{ }。ペアにするのは、片方だけを打つことはほとんどないからです。先ほどのnpmのソースでは、(は6,195回、)は6,194回出てきます。開いて閉じる動作を1つの単位として身につけることが、速さにつながります。多くの人のリズムが崩れるのは閉じ括弧です。
- 演算子。= + - * /と山括弧、さらに複合形(==、=>、+=、!=)です。これらは数字の段と右手側の句読点キーに散らばっていて、いくつかは同じ手でShiftが必要になります。そこが厄介なところです。
- 引用符と句読点。' " ; : , .で、ほとんどを右手の小指が担当します。セミコロンとコロンはC系の言語を書く人とPythonを書く人で最も違いが出るところなので、自分が使う言語の行で練習しましょう。
- シェル系と変わり者。パイプ、バックスラッシュ、チルダ、バッククォート、キャレット、アンパサンド、シャープ、ドル、アットマーク、そして_キーです。_とバッククォートには多くの人が驚きます。snake_caseのコードでは_を絶えず使いますが、ほとんどの人は間違った指で打っています。
1種類あたり、10分間の練習を1〜2週間続けるのが多くの人の目安なので、トラック全体では2〜3か月かかります。文字を覚えるより時間がかかるのは、記号のキーが遠く、直そうとしている癖がより古いからです。
キーごとの統計を見ていてわかる失敗のパターンがあります。正しい指で記号を覚えたのに、焦ると元に戻ってしまうのです。数週間は古い動きのほうが速いからです。統計では、打鍵間隔のばらつきが激しいキーとして現れます。正しく指を伸ばせたときは速く、そうでないときは遅いのです。対策は、その種類にもう1週間とどまることです。
括弧のペアと自動閉じ
エディターは括弧を自動で閉じてくれます。そこで当然の疑問が出てきます。なぜ閉じ括弧を打つ練習をするのか、と。
理由は2つあります。自動閉じは一貫していません。ある場所では働き、ターミナルやチャット画面のような別の場所では働きません。それに頼っている人は、働いたかどうかを確かめるために毎回ためらうことになり、そのためらいは1打鍵より高くつきます。また、自動で入った括弧の上から打つこと(エディターがすでに挿入した「)」を押すこと)自体も1打鍵なので、どちらにしても閉じ括弧は打つことになります。
当サイトのカスタムモードにコードを貼り付けると、テキストは空白で区切られるため、インデントは消え、各トークンが1つの単語になります。これは制約であると同時に便利な点でもあります。Pythonの各行の先頭で4つのスペースを打たなくて済みますが、その練習もできません。エディターと同じようにインデントや自動で閉じられるペアを扱う本格的なコードモードは予定に入っていますが、見た目より難しいものです。
コードと文章の速度の違い
パーセンタイルを公開できるほどコードモードの結果はまだ集まっておらず、でっち上げるくらいなら待つほうを選びます。私たち自身が試したところでは、現実的なスニペットでのコードの速度は、同じ人の文章の速度のおよそ半分から3分の2で、その比率は全般的な練習より記号の練習で大きく改善しました。
そのまま当てはまる数字は正確率です。文章では正確率97%、コードでは90%というプログラマーには記号の問題があり、キーごとのヒートマップを見れば、どの記号なのかがはっきりわかります。どちらも97%なら、あとはコードをたくさん打つだけです。修正したミスが正確率でどう数えられるかは、採点方法で説明しています。
標準的な目安としては、数字をオンにした句読点テストが、当サイトの通常モードの中で最もコードに近いものです。波括弧は出てきませんが、Shiftキーと数字の段が入ってくるので、ほとんどの人にとって足りない部分を補えます。
役に立つキーボード選び
プログラマーが受けるキーボードのアドバイスは、ほとんどがスイッチの話で、たいていは的外れです。
スイッチよりキー配列のほうが重要です。Dvorakは括弧を数字の段に上げ、句読点の多くを移動させます。ColemakとWorkmanは括弧をQWERTYと同じ位置に残しますが、どちらもセミコロンをQWERTYのPの位置に移すので、C系の言語を書くプログラマーはそれを実感するでしょう。詳しくはキー配列の記事をご覧ください。
大きなキーボードより記号レイヤーです。多くの分割キーボードやコンパクトキーボードでは、親指のキーで呼び出すレイヤーに括弧や演算子を置き、ホームポジションの指の下で打てるようにできます。プログラマーが語るハードウェアの変更の中で、私たちが最初に試すとしたらこれです。記号のために手元を見ることが二度となくなるからです。
ISOとANSI。ISOキーボード(英国とヨーロッパの大部分)では、左Shiftの横の追加キーと縦長のEnterキーのせいで、バックスラッシュとパイプの位置が変わります。片方で練習してもう片方で仕事をすると、小指が外します。当サイトのエミュレーションがColemak-DHの両方の版を用意しているのは、そのためです。
速度に関しては、スイッチはほとんど関係ありません。リニア、タクタイル、クリッキーの各スイッチは感触と音が違いますが、打鍵ログにはどれを押したかはわかりません。メカニカルキーボードの記事で数字を詳しく見ています。
音によるフィードバックが役立つ人もいます。ミス音が鳴れば、手元を見なくても記号を間違えたとわかります。記号を覚えているあいだはオンにしておきましょう。
プログラマー向けの10分間メニュー
記号トラックにかかる2〜3か月のあいだ、私たちなら毎日こうします。
- 2分:ウォームアップとして30秒の単語テスト。正確率97%で。
- 6分:いま取り組んでいる記号の種類を、自分のコードから貼り付けたカスタムテキストで練習。古い指に戻る兆しが見えたらすぐにやめる。
- 2分:最もよく使う言語のコードスニペットを1つ。終わったらWPMではなく、キーごとのヒートマップを見る。
10分取れない日は、閉じ括弧を自分で打ってください。この記事でいちばん小さな習慣で、たいてい最初に効果が出ます。
よくある質問
プログラマーにとって十分なタイピング速度はどれくらいですか?
記号と数字をタッチタイピングで打てるなら、約40 WPM以上あれば仕事になります。それ以上になると、ボトルネックは指の速さではなく、考えること、読むこと、そしてエディターを使いこなす力です。
数字をタッチタイピングで打てるようになるには?
各数字の真下にあるホームポジションの指を使い、正確率95%を保てるようになるまで数字の段だけを練習します。それから普通の文章に数字を混ぜていきます。