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

87

Я часто слышу жалобы на то, что языки программирования, в которых для краткости широко используются символы, в первую очередь C и C ++ (я не собираюсь касаться APL), трудно печатать, потому что они требуют частого использования клавиши Shift. Год или два назад я сам устал от этого, загрузил Microsoft Keyboard Layout Creator , внес несколько изменений в свой макет и ни разу не оглядывался назад. Разница в скорости поразительна; с этими несколькими простыми изменениями я могу набирать код C ++ примерно на 30% быстрее, конечно, в зависимости от того, насколько он сложен; Лучше всего то, что моя скорость набора обычного текста не снижается.

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

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

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

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

Джон Парди
источник
32
Может быть, я просто слишком медленно думаю, но скорость набора текста обычно не является моим ограничивающим фактором при разработке программного обеспечения. Если бы это было так, я бы, наверное, подумал, что делаю что-то не так.
Lucero,
9
@Lucero: В целом , нет, но когда я (наконец-то!) Понял, что мне делать, чем быстрее и удобнее я смогу набрать текст, тем лучше. После того, как вы тщательно продумали все свои мысли, иногда остается только проделать много работы по переработке кода ... :-)
TJ Crowder
3
@Jon: Настоятельно рекомендую сделать это CW, прежде чем он будет закрыт как субъективный (что, в конце концов, так и есть).
TJ Crowder
20
@TJ: сделал CW. Хорошая компоновка - это вопрос не столько производительности, сколько комфорта, но комфорт очень важен для производительности.
Джон Парди,
3
Забавно, что тебя раскритиковало довольно много людей, я бы посоветовал не обращать на них внимания. Дело не только в скорости набора текста (что является фактором, если вы печатаете достаточно, чтобы «программировать так, как вы думаете»), но и эргономичность. Но скорость и эргономика идут рука об руку: движения, которые утомляют руки, выполняются медленно, усталость приводит к ошибкам и еще больше исправляет эти нагрузки. А в долгосрочной перспективе настройка раскладки клавиатуры в соответствии с вашими потребностями может стать разницей между RSI или отсутствием RSI.
просто кто-нибудь

Ответы:

30

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

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

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

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

оборота Якоби
источник
20
О, нет, скорость набора текста ни в коем случае не является узким местом, но в то же время, зачем позволять такой глупости, как клавиатура, мешать вам? У меня не было проблем с переключением между моим макетом и другими, потому что я часто использую оба; Я просто предпочитаю свой. И я должен признать, что emacs делает программирование настолько быстрым, насколько это возможно - когда мне не нужно искать последовательность клавиш.
Джон Парди,
4
Да, и одновременность движений левой и правой руки также не имеет значения: модификатор все равно должен быть нажат перед нажатием клавиши. Разница в миллисекундах, конечно, но опять же, зачем себе мешать? Программирование с раскладкой, которая вам не подходит, похоже на программирование на липкой клавиатуре.
Джон Парди,
6
Я утверждаю, что, сохраняя в памяти несколько раскладок клавиатуры, вы саботируете мышечную память и тем самым замедляете набор текста.
JesperE
1
Другая проблема с клавишей Shift - это последовательности, в которых вы чередуете, поэтому обе руки перепрыгивают с верхнего ряда на свою клавишу Shift и обратно. Я не говорю, что это достаточно распространено, чтобы беспокоиться, но такие вещи, как "(! * X)", могут рассматриваться как раздражающие.
Steve314,
1
-1: ничего не вносит в обсуждение (аргумент "глупый вид" не подкреплен даже одним фактом из опыта, это дальновидное беспокойство) и не может быть исправлен.
Евгений Сергеев
16

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

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

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

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

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

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

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

Ge Spi
источник
Мне очень нравится этот ответ: P
pjincz
13

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

без SHIFT:

`- {} []; <> () _ =
qwfpgjluy * / # \
arstdhneio '
zxcvbkm,. !

с SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 & +
QWFPGJLUY @ ^ $ |
ARSTDHNEIO "
ZXCVBKM%:?

Может восстановлю ключ / ...

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

Обновление: сейчас я использую

`- {} [] @ <> () _ =
qwkgeryulp *; #
asftdhneio '\
\ zxcvbjm,. /

с SHIFT:

~ 1 2 3 4 5 6 7 8 9 0 ^ +
QWKRGYULP &! $
ASFTDHNEIO "|
| ZXCVBJM%:?

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

янв.
источник
1
Мне нравится идея сделать символы по умолчанию вместо чисел. то есть: сдвиньте + 1, чтобы получить единицу, а нажатие 1 даст вам!
Рэй
12

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

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

Тгвизман
источник
1
Очень хороший ответ: клавиатура должна быть передана владельцу
Julien__
1
Для статистики использования клавиатуры уже есть хорошие программы, которые могут отображать тепловую
карту
[Посещение старых комментариев к сообщениям] Это действительно крутая (или горячая;]) идея. Я должен сам это проверить!
Tgwizman
9

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

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

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

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

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

Стив314
источник
Я согласен с вами по всем пунктам! Хорошее использование инструментов и идиом - это просто хорошее программирование. Но это вопрос об одной очень конкретной вещи, и эй, пятнадцать минут два года назад избавили меня от некоторого количества разочарования с тех пор.
Джон Парди,
@Jon - Я понял, но я думаю, что мои привычки набора текста уже сильно запрограммированы - изменение было бы тяжелой работой.
Steve314
-1: Не похоже, что это основано на опыте использования альтернативных раскладок клавиатуры; идет вразрез с моим опытом работы с ними. Отклоняюсь далеко за рамки темы. Не предусматривает конкретных действий. Не может быть исправлено.
Евгений Сергеев
-5

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

JesperE
источник
6
Я с радостью переключаюсь между двумя раскладками. Джон сообщает, что прошло «год или два», и у него нет проблем с поездками туда и обратно. YMMV, в основном.
TJ Crowder
4
Я считаю, что переключаться между клавиатурой и раскладкой клавиатуры так же легко / сложно, как переключаться между разговорами на разных языках - если вы их хорошо знаете, через несколько минут вы восстанавливаете полную скорость мысли.
liori
1
@liori: хорошо сказано, хотя порядок минут или секунд полностью зависит от того, насколько я устал. : P
Джон Парди
1
@liori "через несколько минут ..." Кажется, что (многонациональные) компании и нации стандартизируют языки для нескольких целей. 1) Скорость общения. 2) точность связи. Я подозреваю, что стандартизация раскладки клавиатуры дает аналогичные преимущества.
Джейсон Д.
2
@ Джейсон Д: Верные моменты, но я рад, что они не применимы ко мне ... Я редко использую чужие компьютеры.
liori