Идеальный макет клавиатуры для программирования

Я часто слышу жалобы на то, что языки программирования, которые используют краткое использование символов для краткости, в первую очередь C и С++ (я не собираюсь касаться APL), трудно печатать, потому что они требуют частого использования клавиши shift. Через год или два назад я сам устал от этого, загрузил Microsoft "Конструктор макетов клавиатуры" , внес несколько изменений в мой макет и не раз оглянулся. Разница в скорости поражает; с этими несколькими простыми изменениями я могу набирать код на С++ примерно на 30% быстрее, в зависимости от того, насколько он волосистый; лучше всего, моя скорость набора текста в обычном тексте не скомпрометирована.

Мои вопросы таковы: какие альтернативные раскладки клавиатуры существуют для программирования, которые приобрели популярность, являются ли какие-либо из них все еще в современном использовании, лично ли вы используете какой-либо измененный макет и как можно оптимизировать мой макет?

Я внес следующие изменения в стандартный макет QWERTY. (Я не использую Dvorak, но есть программист Дворжак стоит упомянуть.)

  • Обмен номерами с символами в верхней строке, поскольку длинные или повторяющиеся литералы обычно заменяются именованными константами;
  • Сменить backquote с тильдой, потому что обратные кавычки встречаются редко на многих языках, но деструкторы распространены в С++;
  • Swap минус с подчеркиванием, потому что символы подчеркивания являются общими для идентификаторов;
  • Сменить фигурные скобки с квадратными скобками, поскольку блоки более распространены, чем индексы; и
  • Сменить двойную кавычку с одинарной кавычкой, потому что строки более распространены, чем символьные литералы.

Я подозреваю, что это последнее, вероятно, будет самым противоречивым, так как это мешает большинству работать с текстом, требуя использования сдвига для типизации общих сокращений. Этот макет значительно увеличил скорость ввода на С++, C, Java и Perl и несколько увеличил его в LISP и Python.

Ответ 1

Я все еще считаю, что скорость набора текста не является главным фактором времени, требуемого для завершения проекта. Если это так, возникает большая проблема (Недели кода сохраняют нам часы планирования).

Что касается вашего вопроса, я предпочитаю использовать стандартную компоновку, так как это означает, что мне не нужно тратить первые 10 минут на поиск глупых при представлении стандартной раскладки клавиатуры.

Некоторые из предложенных вами замещений, например. верхняя строка со специальными символами не делает унции разницы, так как внешний палец с другой стороны должен перемещаться в одно и то же время.

ИМХО Одна вещь, которая помогает над компоновкой цепочек, - использовать только быстрые клавиши. Vim и Emacs рекомендуются. Это делает движущийся текст намного быстрее.

Ответ 2

Я подошел бы к вашему вопросу следующим образом. Задача состоит в том, чтобы организовать клавиатуру таким образом, чтобы минимизировать нажатия клавиш и движение руки для данного текста.

Шаги к возможному решению. Сделайте программу, которая:

  • Принимает текстовый файл с исходным кодом. (Чем больше, тем лучше и из разных источников!)
  • Подсчитывает частоту использования каждого символа (его присутствие в тексте).
  • (необязательно). Основываясь на шаге 2: программа генерирует количество ключевых штрихов для каждого символа плюс, как далеко рука должна перейти из центральной позиции. В результате вы будете иметь представление о том, насколько эффективна ваша раскладка клавиатуры.

Теперь вручную или путем написания программы Переопределите макет следующим образом. Поместите наиболее часто используемый символ в центральное положение ближе к вашей сильной руке. Второй символ идет к вашей слабой руке в центральном положении. Третий символ восходит к вашей сильной руке... и так далее. Затем вы постепенно перемещаетесь из центрального положения рук в более "отдаленные" области клавиатуры. Когда вся клавиатура заполнена, вы продолжаете процесс назначения клавиш, но на этот раз нажата клавиша Shift. Другая разница заключалась бы в том, что вы не вращаете сильную и слабую руку для каждого символа, когда сдвиг вниз. При первом нажатии клавиши переключения вы заполняете центральные позиции на клавиатуре, а затем переходите в более отдаленные позиции.

Когда вы делаете все это, повторите шаг 3 для нового макета, чтобы увидеть, как макет был улучшен.

Возможно, вам придется постоянно носить с собой клавиатуру. С яркой стороны никто не коснется вашего компьютера. Это сделает вас похожим на Pro.

Наконец, не забудьте поделиться своими выводами.

Ответ 3

В целом, я думаю, что хороший текстовый редактор и знание того, как его использовать, лучше, чем пытаться улучшить скорость ввода. Быть способным записывать и воспроизводить макросы иногда является спасателем, а набор ярлыков, назначенных ярлыками, может быть удобен, потому что обычно существуют ограничения на язык, которые могут быть преобразованы в библиотеку.

В более общем плане, я думаю, что настоящие усилители производительности - все о знании...

  • Зная, какие инструменты и библиотеки доступны и как их использовать.
  • Зная общую структуру кода, над которым вы работаете, а не только ваш маленький бит.
  • Зная ключевые алгоритмы, шаблоны проектирования и идиомы, поэтому вам не нужно их изобретать.
  • Знание правил достаточно хорошо, чтобы вы могли быть гибкими - вы знаете, когда их нарушать.
  • Знание ваших сотрудников и их сильные стороны, слабости и т.д. - то есть знание того, когда нужно что-то выдумать, а также когда и кому спросить.

FWIW, я не претендую на то, чтобы быть сильным на всех этих. Я всегда был слишком предубежденным для решения проблем самостоятельно и со слишком сильной тенденцией к изобретательству колес и грандиозных архитектурных схем.

Во всяком случае, у меня просто есть подозрение, что время, потраченное на изменение и изучение раскладок на клавиатуре, будет отвлекать от более важных проблем.

Ответ 4

Я играю с вариантом макета Colemak на данный момент с тяжелыми изменениями символов:

без SHIFT:

`- {} []; < > () _ =
 q w f p g j l u y */#\
a r s t d h n e я o '
z x c v b k m,.!

с SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 и +
Q W F P G J L U Y @^ $|
A R S T D H N E я O "
Z X C V B K M%:?

Возможно, я верну/ключ...

Но это не основано на каких-либо исследованиях звука, и я также хотел бы, чтобы оптимизированный макет (оптимизация, включая такие вещи, как ручная перемена и т.д., также сохранение ZXCV,...) с корпусом на основе исходного кода, потому что все эти макеты, похоже, оптимизированы только для прозы. Например, "f" является очень общей буквой в C (если, для).

Обновление: в настоящее время я использую

`- {} [] @< > () _ =
q w k r g y u l p *; #
a s f t d h n e я o '\
\ z x c v b j m,./

с SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 ^ +
Q W K R G Y U L P и! $
A S F T D H N E я O "

| Z X C V B J M%:?

Это основано на частичной оптимизации с 6 ключами, взятой из Carpalx с сохранением обычной функции Cut/Copy/Paste/Отмените ярлыки и измените их, чтобы обеспечить лучший доступ к обычным символам программирования.

Ответ 5

Сделайте простой регистратор ключей, затем подсчитайте количество нажатий каждой клавиши. Запустите его в течение дня или двух, затем сохраните вывод в текстовый файл. Делайте это каждый раз и время. Неважно, какой макет вы используете, поскольку вы просто видите, какие клавиши используются больше всего.

Если вы хотите сделать хороший макет, вы не можете бояться уйти от нормы. Я бы предложил поместить верхние 11 ключей вдоль домашней строки, затем следующие верхние 11 клавиш в качестве верхней строки (оставьте 2 клавиши над ключом возврата в качестве наименее используемых ключей), затем 3-е верхние 11 клавиш в нижней строке, На данный момент осталось 4 ключа. Возьмите их и поместите в слоты - = и] \. Congrats! Теперь вы сделали отличную раскладку клавиатуры для своих целей!= D

Ответ 6

Изменение раскладки клавиатуры - это плохая идея, поскольку она (возможно) увеличит скорость ввода на одной клавиатуре, но сильно повредит вашу скорость набора текста на других клавиатурах или на компьютерах, где у вас нет специальной раскладки клавиатуры. Я обнаружил, что часто лучше приспосабливаться к значениям по умолчанию, которые должны меняться повсюду. (Лично мои пальцы сильно смещены Emacs, что приводит к большому набору трения во всем мире.)