Идеальная раскладка клавиатуры для программирования [закрыто]

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

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

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

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

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

6 ответов


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

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

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

IMHO одна вещь, которая помогает выше макетов цепочки, использует только сочетания клавиш. Рекомендуется использовать Vim и Emacs. Это делает перемещение текста намного быстрее.


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

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

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

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

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

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

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


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

без SHIFT:

` - { } [ ] ; ( ) _ =
q w f p g j l u y */# \
A r s t d H n e i 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 I O"
Z X C V B K M %:?

возможно, я восстановлю / ключ...

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

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

` - { } [ ] @ ( ) _ =
q w k r g y u l p *;#
a s f t d h n e i 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 I O|/
| Z X C V B J M %:?

это основано на частичной оптимизации 6-key-swap, взятой из Carpalx С сохранением обычных ярлыков вырезать/копировать/вставить/отменить и изменить, чтобы дать лучший доступ к обычным символам программирования.


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

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


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

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

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

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

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


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