Typing is an important part of programming. Regular keyboards are oversized and have horrible layouts. These are my thoughts about improvements regarding keyboard layout, keybindings, timings etc.
How I Type
- I do not acutally type much. And I type in bursts.
- I do not have and never had RSI.
- I did never type with 10 fingers. I have some weird typing behaviours. I jump around the keyboard with both hands and mainly use three fingers on both hands to type. With my newer GergoPlex keyboard this might change though.
- I have used the same keyboard for about 15 years (Trust KB-1800S Slimline).
- I play computer games (Strategy like Oxygen Not Included and Factorio, but also FPS like Natural Selection 2, Team Fortress 2, Left 4 Dead 1 & 2, …).
- I am of average body size (height and weight) and have no particularly broad shoulders or other attributes that might tilt my keyboard preferences to more exotic builds/layouts.
- I do not worship mechanical switches. My Trust Slimline keyboard with scissor-switches served me very well for 15 years.
- Functionality first! I do not care about the color of my keyboard, the LED lighting, typing noise, stickers, “funny” keys, brands or other irrelevant crap. I want to emphasize this once more: If it does not serve a purpose - i do NOT care! I even dislike features if they do not serve a purpose.
- I do not use many keyboard shortcust (especially not complicated ones like shift+ctrl+alt+9).
Why Standard Keyboards Are 💩
Generally, standard keyboards are too big and use keys inefficiently. E.g. programming related keys like Arrows/Pos1/End/Backspace are positioned badly. And you can’t really change the keybindings. You would have to resort to some weird linux-keybinding configuration files that are annoying to research/write/read. And they only work under linux. Also, most mechanical keys are annoying because they are too tall.
With QMK you can write firmware for your qmk-capable keyboard. Unfortunately, the project is in C and is therefore horrible to read and write. Lots of strange macros and weird namings for everything. Nevertheless, you can basically implement a program that reacts to keypresses and then sends keycodes to your computer. This gives you a lot of flexibility. You can implement any keybindings, key-combinations and key-sequences. You can control the timing too.
Gaming vs Writing
I dont think i would use the same keyboard for gaming and writing. In gaming i do not need a tactile feedback for WASD. And most other game-action keys dont need it either. Im slamming them hard anyway. For programming though, a tactile feedback could be helpful to confirm that you actually pressed the key. But if the tactile feedback makes the keypress a little slower (mechanically), I am not sure it would be worth it.
Simplifying The Keyboard
Here are some things you find on a standard keyboard that can be simplified:
- Arrow keys: As a programmer you spend maybe half the time typing text and half the time navigating in the code. Jumping between letter-keys and arrow-keys (as well as Pos1/End/Backspace/…) is annoying.
- Num-Block: Why? The only actually good reason for the Num-Block i know is, that typing numbers on it can be faster than typing the numbers on the spread-out number-row above the letters. This is actually a good reason IMO. But you do not need an extra Num-Block for that. Especially when you hardly ever use that block.
- Caps-Lock: No thanks!
- Duplicate Keys: Several keys are kinda duplicated. Numbers, Alt/Ctrl/Shift
- Weird keys: ´`^°
My Keyboard And Layout
I use the GergoPlex. I probably would like the Centromere-Mini more though. My criticism for the GergoPlex are:
- The middle key of the thumb keys takes too much space. It should be oriented like the rightmost of the thumb keys. This would make it easiert to reach the different keys with the thumb. The Centromere Mini got this correct.
- Wireless: A battery is a smaller annoyance than handling the cables. The Centromere Mini got this correct.
- The keys are a tad too light to press. And there is no tactile feedback that the key was pressed.
Here are my layers for the GergoPlex (see Github). I didnt push my newest changes though.
- 👉: Tap vs hold: When tapped, write key, when held, goto layer
- 👇: Currently pressed key
- Green background: Switch to layer when held down
- ⇧: Shift
- ⇤/⇥/↵/↹: Pos1/End/Enter/Tab
- ⌫⌦: Backspace/Del
- ❖: Windows key
- WHU/WHD: Mouse Wheel Up/Down
M1 [text navigation]
a [shortcuts like ctrl+c]
s [navigation (TODO)]
M5 [rare symbols]
What I Want And What I Am Working On
- Want: Keycaps that are not completely flat. Some keys should have a haptic marker on top so it is easy to feel when you misplaced your fingers.
- Working on: Key-specific delay and repeat speed. Arrow keys should have a low delay and high repeat speed. Characters on the other hand should have a somewhat higher delay and lower repeat speed. Typing
aaaaaaaa is usually an accident.
- Want: Smaller thumb keys that are a little closer together and have different haptic surface to distinguish them.