Идеальная раскладка клавиатуры для программирования [закрыто]
Я часто слышу жалобы на то, что языки программирования, которые интенсивно используют символы для краткости, особенно C и c++ (я не собираюсь касаться APL), трудно печатать, потому что они требуют частого использования клавиши shift. Год или два назад я сам устал от этого, скачал Microsoft Создатель Раскладки Клавиатуры, внес несколько изменений в мой макет, и ни разу не оглянулся. Разница в скорости поразительна; с этими несколькими простыми изменениями я могу ввести C++ код примерно на 30% быстрее, в зависимости от того, насколько он волосат; лучше всего, моя скорость набора текста в обычном запущенном тексте не скомпрометирована.
мои вопросы таковы: какие альтернативные раскладки клавиатуры существовали для программирования, которые приобрели популярность, есть ли они все еще в современном использовании, вы лично используете какой-либо измененный макет, и как можно дополнительно оптимизировать мой макет?
Я внес следующие изменения в стандартный макет QWERTY. (Я не использую Дворак, а есть программист Дворжак макет стоит упомянуть.)
- своп номера с символами в верхней строке, потому что длинные или повторяющиеся литеральные числа обычно заменяются именованными константами;
- поменять обратную цитату с Тильдой, потому что обратные кавычки редки во многих языках, но деструкторы распространены в C++;
- своп минус с подчеркивания, потому что подчеркивания часто встречаются в идентификаторах;
- поменять фигурные скобки с квадратными скобками, потому что блоки более распространены, чем индексы; и
- поменять двойные кавычки в одинарные кавычки потому что строки более распространены, чем символьные литералы.
Я подозреваю, что этот последний, вероятно, будет самым спорным, поскольку он больше всего мешает работе с текстом, требуя использования shift для ввода общих сокращений. Этот макет значительно увеличил скорость набора текста на C++, C, Java и Perl и несколько увеличил ее в LISP и Python.
6 ответов:
Я по-прежнему считаю, что скорость набора текста не является главным фактором времени, необходимого для завершения проекта. Если это так, есть большая проблема (недели кодирования экономит нам часы планирования).
Что касается вашего вопроса, я предпочитаю использовать стандартную раскладку, поскольку это означает, что мне не нужно тратить первые 10 минут, выглядя глупо, когда представлен стандартный макет клавиатуры.
некоторые из предложенных вами замен, например, верхняя строка со специальными символами это не имеет ни малейшего значения, поскольку внешний палец с другой стороны должен двигаться, чтобы сдвинуться одновременно.
IMHO одна вещь, которая помогает выше цепочки макетов использует только сочетания клавиш. Рекомендуется использовать Vim и Emacs. Это делает перемещение текста вокруг гораздо быстрее.
Я бы подошел к вашему вопросу следующим образом. Задача-организовать клавиатуру таким образом, чтобы свести к минимуму нажатия клавиш и движения рук для данного текста.
шаги к возможному решению. Сделайте программу, которая:
- принимает текстовый файл с исходным кодом. (Чем больше, тем лучше и из разных источников!)
- подсчитывает частоту использования каждого символа (его присутствие в тексте).
- (необязательно) на основе шага 2: программа генерирует количество ходов клавиш для каждого символа плюс как далеко рука должна идти от центрального положения. В результате вы будете иметь меру, насколько эффективна ваша раскладка клавиатуры.
теперь вручную или написав программу переопределите свой макет следующим образом. Поместите наиболее часто используемый символ в центральное положение ближе к вашей сильной руке. Второй символ идет к вашей слабой руке в центральном положении. Третий символ возвращается к вашей сильной руке...и так далее. Затем вы постепенно перемещаетесь из центрального положения рук в более "отдаленные" области клавиатуры. Когда вся клавиатура заполнена, вы продолжаете процесс назначения клавиш, но на этот раз с нажатой клавишей Shift. Другое отличие будет заключаться в том, что вы не вращаете сильную и слабую руку для каждого символа, когда сдвиг вниз. С помощью клавиши shift вниз сначала вы бы заполнить центральные позиции на клавиатуре, а затем перейти к более отдаленным позициям.
когда вы все выполните шаг 3 снова для нового макета, чтобы увидеть, как макет был улучшен.
возможно, вам придется постоянно носить с собой клавиатуру. С другой стороны, никто не будет касаться вашего компьютера. Это заставит вас выглядеть как профессионал.
наконец, не забудьте поделиться своими выводами.
в данный момент я играю с вариантом макета Colemak с большими изменениями символов:
без сдвига:
` - { } [ ] ; ( ) _ =
q w f p g j l u y */# \
а р с т в н н е и о '
z x c v b k m , . !со сдвигом:
~ 1 2 3 4 5 6 7 8 9 0 & +
Q W F P G J L U Y @ ^ $/
А Р С Т В Н Н Е И О "
Z X C V B K M %:?может быть, я восстановить / ключ...
но это не основано на каких-либо звуковых исследованиях, и я также хотел бы видеть оптимизированный макет (оптимизация, включая такие вещи, как изменение рук и т. д., а также сохранение ZXCV,...) с корпусом на основе исходного кода, потому что все эти макеты, похоже, оптимизированы только для прозы. Например, 'f' - очень распространенная буква В C (if, for).
обновление: в настоящее время я использую
` - { } [ ] @ ( ) _ =
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,. /со сдвигом:
~ 1 2 3 4 5 6 7 8 9 0 ^ +
Д Ж И К Р Г Г У Л П & ! $
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, что вызывает много трений при наборе текста во всем остальном.)