Слепая печать для программистов — это в основном про те клавиши, которые обычный курс печати пропускает: цифры, скобки, операторы и сочетания с Shift вокруг них. Программист, который печатает обычный текст со скоростью 90 WPM, может медленно набирать код, а тот, кто печатает текст на 50 WPM, — быстро. Мы заметили это, когда во время тестирования вставляли собственные исходные файлы в режим «Свой». Скорость падала на треть и больше по сравнению с режимом «Слова», тепловая карта по клавишам загоралась на цифровом ряду и под правым мизинцем, а самые медленные рывки приходились на токены со скобками.
Почему WPM на обычном тексте плохо отражает набор кода
Код отличается от текста в трёх отношениях, и тест печати, собранный из частых английских слов, не измеряет ни одного из них.
Первое — состав символов. Мы посчитали. В первых десяти статьях этого блога примерно 93 из каждых 100 непробельных символов — буквы, 5 — знаки препинания и 2 — цифры. В исходном коде командной утилиты npm на JavaScript доля букв падает примерно до 80, а символов растёт до 19. Модули json и email из Python дают от 80 до 85 букв, а один наш плотный скрипт сборки — 64, и треть его символов — спецсимволы. Получается, что в коде примерно в три–семь раз больше символов, чем в наших текстах. Большинство из них находятся в верхнем ряду или требуют Shift, а это правый мизинец и более слабые движения. Наши тесты на английских словах собраны из 1 000 самых частых слов корпуса субтитров; «{» среди них нет.
Второе — ритм. Обычный текст печатают длинными сериями. Код набирают короткими рывками между паузами на обдумывание, прокрутку и чтение. Добровольцы из исследования Дхакала и соавторов 2018 года, где проанализировали 136 миллионов нажатий клавиш и где участники переписывали предложения, в среднем делали между нажатиями паузу около 239 мс. Рабочий день программиста полон пауз в несколько секунд, и скорость рывка внутри коротких серий важнее любого среднего.
Третье — редактор. Автодополнение, сниппеты и горячие клавиши означают, что работающий программист набирает лишь часть символов, которые видны на экране. Ни один тест печати не может это измерить, и наш не делает вид, что может.
Важна ли скорость печати в программировании?
Меньше, чем принято думать, и не там, где думают. Когда спрашивают, хватит ли 60 WPM, чтобы быть программистом, ответ — да, с оговоркой: если вы смотрите на клавиатуру, чтобы найти символы и цифры, то код вы набираете вовсе не на 60 WPM. Возможность набрать строку, не теряя нить мысли, важнее сырой скорости, а теряется она как раз тогда, когда вы опускаете взгляд на клавиатуру.
Как печатать символы быстрее и почему этому никто не учит
Вопрос, который снова и снова всплывает на форумах о печати: человек вслепую печатает буквы с приличной скоростью, но стоит ему начать писать код, как он снова ищет глазами символы, цифры и даже заглавные буквы, и он хочет освоить их постепенно, так же как буквы, по нескольку клавиш за раз.
Отчасти символы трудны из-за Shift. В исходном коде npm, который мы считали, около 45% нажатий на символы приходились на символы с Shift, такие как ( ) { } : и $, — почти 9 на каждые 100 непробельных символов, ещё до подсчёта хотя бы одной заглавной буквы. Поэтому сначала исправьте привычку с Shift: нажимайте Shift той рукой, которая не печатает символ. ( и ) находятся на 9 и 0 правой руки, поэтому к ним идёт левый Shift; ! @ # $ — на левой руке, поэтому к ним идёт правый Shift. Большинство самоучек держат левый Shift для всего подряд, и для ! это требует от левого мизинца нажать две клавиши одновременно. Проверьте свою привычку: напечатайте строку с @ и $ и посмотрите, какой мизинец двигается.
Символы трудно отрабатывать отдельно, да и скучно: буквы приходят вместе со словами, скобки — вместе с кодом, а случайный код неинтересен. Наш ответ — отрабатывать символы на реальных строках кода, по одному классу за раз.
По одному классу за раз
Вот порядок, который мы бы использовали; в этом же порядке устроен курс символов, который мы делаем для страницы тренировки. Пока он не вышел, можно делать то же самое, вставляя реальный код в режим «Свой» по одному классу символов за раз и не добавляя следующий класс, пока точность на текущем не достигнет 95%:
- Цифры. Цифровой ряд, до которого пальцы тянутся вверх с основного ряда. Он идёт первым, потому что это самый используемый класс небуквенных клавиш и потому что почти у всех здесь есть вредная привычка, например указательный палец нажимает 4, 5, 6 и 7. Тест на цифры — быстрая проверка.
- Скобки парами. Сначала ( ), потом [ ], потом { }. Парами — потому что одну без другой вы почти никогда не печатаете: в том исходном коде npm ( встречается 6 195 раз, а ) — 6 194. Скорость появляется, когда движение «открыть — закрыть» тренируется как одно целое. Именно на закрывающей скобке у большинства сбивается ритм.
- Операторы. = + - * / и угловые скобки, а также составные формы (==, =>, +=, !=). Они разбросаны по цифровому ряду и клавишам пунктуации под правой рукой, а некоторые требуют Shift той же рукой — это и есть неудобная часть.
- Кавычки и пунктуация. ' " ; : , . — большую часть работы делает правый мизинец. Точки с запятой и двоеточия — то, в чём сильнее всего различаются те, кто пишет на языках семейства C, и те, кто пишет на Python, поэтому тренируйтесь на строках из своего языка.
- Командная оболочка и всё остальное. Вертикальная черта, обратная косая черта, тильда, обратный апостроф, циркумфлекс, амперсанд, решётка, доллар, «собака» и клавиша _. _ и обратный апостроф удивляют большинство: в коде в стиле snake_case _ встречается постоянно, и большинство нажимают его не тем пальцем.
На каждый класс у большинства уходит неделя-две десятиминутных занятий, так что весь курс — два-три месяца. Это медленнее, чем освоение букв, потому что клавиши символов дальше, а привычки, которые вы заменяете, старше.
Что идёт не так, судя по статистике по клавишам: человек осваивает символ правильным пальцем, а под давлением возвращается к старому, потому что пару недель старое движение быстрее. В статистике это видно как клавиша, интервал которой сильно скачет: быстро, когда вы тянетесь правильно, и медленно, когда нет. Решение — задержаться на этом классе ещё на неделю.
Парные скобки и автозакрытие
Редакторы сами закрывают скобки, и возникает резонный вопрос: зачем учиться печатать закрывающую?
По двум причинам. Автозакрытие непоследовательно: оно срабатывает в одних местах и не срабатывает в других, например в терминале или в окне чата. Тот, кто на него полагается, каждый раз колеблется, проверяя, сработало ли оно, а колебание стоит дороже нажатия. К тому же впечатать поверх автоматически закрытой скобки (нажать «)», когда редактор её уже вставил) — это тоже нажатие, так что закрывающую скобку вы печатаете в любом случае.
Когда вы вставляете код в режим «Свой» на нашем сайте, текст делится по пробельным символам, поэтому отступы исчезают, а каждый токен становится словом. Это одновременно ограничение и удобство: вам не нужно печатать четыре пробела в начале каждой строки на Python, но и тренировать их вы не будете. Полноценный режим для кода, который обрабатывает отступы и автозакрытые пары так, как это делает редактор, есть в наших планах, и он сложнее, чем кажется.
Скорость на коде и на тексте
У нас недостаточно результатов в режиме кода, чтобы публиковать процентили, и мы лучше подождём, чем будем их выдумывать. В наших собственных заездах скорость на реалистичном фрагменте кода составляла примерно от половины до двух третей скорости того же человека на обычном тексте, и это соотношение улучшается от тренировки символов сильнее, чем от тренировки вообще.
Число, которое действительно переносится, — это точность. Если программист печатает текст с точностью 97%, а код — с точностью 90%, у него проблема с символами, и тепловая карта по клавишам показывает, с какими именно. Программисту с 97% на том и другом нужно просто больше печатать код. Наша методика подсчёта объясняет, как точность учитывает исправленные ошибки.
Если нужен стандартный ориентир, то из наших обычных режимов ближе всего к коду тест с пунктуацией с включёнными цифрами. Фигурных скобок в нём не будет, но он добавляет Shift и цифровой ряд, а у большинства пробел именно там.
Какой выбор клавиатуры помогает
Советы по клавиатурам, которые получают программисты, в основном касаются переключателей и в основном не по делу.
Раскладка важнее переключателя. Dvorak поднимает скобки в цифровой ряд и переносит большую часть пунктуации. Colemak и Workman оставляют скобки там же, где они в QWERTY, но обе переносят точку с запятой туда, где в QWERTY находится P, и программисты на языках семейства C это почувствуют. Подробнее — в статье о раскладках.
Слой символов лучше большой клавиатуры. Многие раздельные и компактные клавиатуры позволяют поместить скобки и операторы под пальцы основного ряда на слое, который включается удержанием клавиши под большим пальцем. Из всех изменений в железе, о которых рассказывают программисты, это мы попробовали бы первым, потому что после этого вам больше никогда не придётся искать символ глазами.
ISO и ANSI. На ISO-клавиатурах (британских и большинстве европейских) дополнительная клавиша рядом с левым Shift и высокий Enter меняют место обратной косой черты и вертикальной черты. Если вы тренируетесь на одной, а работаете на другой, мизинец будет промахиваться. Именно поэтому наша эмуляция поставляется с обоими вариантами Colemak-DH.
Переключатели на скорость почти не влияют. Линейные, тактильные и кликающие переключатели различаются ощущением и звуком, а журнал нажатий не знает, какой из них вы нажали. Наша статья о механических клавиатурах разбирает цифры.
Звук некоторым помогает как обратная связь: звук ошибки сообщает, что символ был неверным, без взгляда на клавиатуру. Включите его, пока осваиваете символы.
Десятиминутное занятие для программиста
Что мы делали бы каждый день в течение двух-трёх месяцев, которые занимает курс символов:
- Две минуты: 30-секундный тест на словах для разминки, точность 97%.
- Шесть минут: текущий класс символов на своём тексте, вставленном из вашего собственного кода. Остановитесь при первом признаке возврата к старому пальцу.
- Две минуты: один фрагмент кода на языке, которым вы пользуетесь чаще всего. После этого смотрите на тепловую карту по клавишам, а не на WPM.
В дни, когда десяти минут нет, печатайте закрывающую скобку сами. Это самая маленькая привычка в этой статье, и обычно она окупается первой.
Частые вопросы
Какая скорость печати хороша для программиста?
Работать можно примерно от 40 WPM и выше, если вы вслепую печатаете символы и цифры. Дальше узким местом становятся мышление, чтение и владение редактором, а не скорость пальцев.
Как научиться печатать цифры вслепую?
Тренируйте цифровой ряд отдельно, пока точность не будет держаться на 95%, нажимая каждую цифру пальцем, который лежит прямо под ней на основном ряду, а затем добавляйте цифры в обычный текст.