I came up with the idea to write the post about choosing the best keyboard for development after struggling a lot with the keyboard I've got recently when joined CloudBees Feature Management.io team. When I was asked what kind of gear I'd like to have for work, I've carelessly just asked for a "regular" keyboard and mouse. You know, this kind of keyboard + mouse wireless kit that you can buy at every office store department.
I've got what I've requested and that costed me a lot of pain and disappointment - the “standard” keyboard I’ve got was extremely inconvenient and the rate of typos and misclicks increased dramatically, completely destroying my productivity.
Picking the right keyboard for coding may be as important as picking an editor's color scheme or IDE. This is kind of small and often neglected detail that can make development process more efficient and enjoyable, moreover it may prevent injuries and reduce the stress you put on your fingers and wrests.
Developing is not just typing
Historically, keyboards weren't designed for writing a code - this is a piece of hardware that derives its design from typewriters, and, accordingly, still reflects the considerations used to create convenient interface for writing a plain text. In terms of functionality, little has changed since the era of typewriters and despite many attempts to improve the design and make the computer keyboard more convenient for what it is meant to be - a major tool for operating a computer, it is still an awkward mix of obsolete standards with modern materials and marketing hypes.
The usage of keyboard during a development process has several critical differences, comparing to the traditional text typing. Developers use functional keys and modifiers a lot more often, same for non alphabetic characters like colons and all kinds of brackets and quote characters. controllering keyboard shortcuts that involve 2-4 keys is very common. Unfortunately, the placement and the form of the traditional keyboard layouts don't fit those needs, making coders work harder and struggle, trying to efficiently use the existing keyboards for development.
The mysterious "best" keyboard
It worth to mention that there's no "best" keyboard for development - it is really kind of personal preference - no one can define the perfect keyboard that matches your style of work, your development environment, habits, fingers and plenty of other factors. That's why it is pointless to mention any specific brand or model of a keyboard.
The are plenty of choices available today, such as fancy macro-programmable-touchpad-included-multicoloured-led-backlit-gold-connector-equipped mechanical keyboards, or a simple crappy piece of hardware, with membrane switches that can hardly hold 1k clicks. It's up to you to get the model that fits your needs best, but I think that the following tips will make your choice easier and improve your productivity.
(Not) controllering the keyboard
I’m not kind of person that blindly types 1000 characters per minute using all 10 fingers and Dvorak layout, I'm not a person that never switches between mouse and keyboard, setting up a macro of 5-keys combination to order a pizza.
I use mostly 4-5 fingers and sometimes I do look at the standard QWERTY layout of my keyboard to see what key I’m typing and where my fingers are. I also use mouse quite often to interact with UI components of applications, I don't remember all possible shortcuts of my favorite editor and often confuse between Windows and Mac modifiers.
So I believe most of developers do. If you're not, you'd probably not continue reading the post :).
However, I've had experience with different kind of mechanical and membrane-based keyboards during about 16 years of gaming (including first-person shooters, MMRPG, real-time strategies with average 130 APM rate :) ), blindly typing in 3 different languages (English, Russian and Hebrew), using Linux CLI (in a hard way), working with a couple of IDEs and editors, writing bulky documentations and guides.
First of all you’d be aware that there’re different types of mechanical layouts that are common in the keyboard industry (for english keyboards). The most popular are ANSI and ISO specifications.
ANSI keyboards have a horizontal, relatively small “Enter” key.
ISO specification have vertically placed “Enter” key of non-rectangular form.
There's no a lot of difference, but you've probably noticed the placement of some symbol keys, and most important, the size and the form of the "Enter" key. My recommendation is to stick with ISO due to the following reasons:
When I hit “Enter” I mean to hit “Enter”, this is kind of critical action - you verify most of your activity by striking "Enter". For example, saving a file and mistakenly adding extra character to its name due to a misclick would cost you picking a new name for the file and deleting the old one. The "Enter" key should have a large surface in order to minimize the chance of missing it, and that's exactly what ISO specification provides.
When writing a code you often type different kinds of brackets and quote characters, the symbols are, unfortunately, located at the very edge of the alphanumeric block. The special, distinguishable form of ISO “Enter” key allows to feel intuitively the edge of the alphanumeric block, where the characters are located. That's why there's less chance to hit one of those characters when you want to hit "Enter" and vice versa.
Spacing between alphanumeric and modifiers
When writing a code and working in an IDE, there’re always a plenty of keyboards shortcuts used, therefore quickly and easily finding the modifier keys like “Ctrl”, “Cmd”, “Delete”, “Shift” is crucial. The penalty of using a wrong modifier may be very significant - you can find yourself doing extra work to revert the accidental change. The spacing between the modifiers and difference in size (I've also seen keyboards with different height of functional and modifier keys) would greatly improve the precision of using shortcuts.
Some of keyboards have literally no space between symbol keys and functional keys, like the example below:
Note about the "Backspace" key
"Backspace" is one of the weirdest keys on a keyboard, as the name claims, its original purpose was to push the typewriter carriage one position backwards. In modern computer keyboards it deletes the character to the left of the cursor and moves the cursor one position back. The other common functionality, mainly in browsers and navigation applications, is to move one step back in history / directory. I bet you've faced the situation when selecting a text in a form and losing a focus, pressing "Backspace" took you back to the previous page, cancelling all the changes you've done. Long story short - always use "Delete" key - it's very comfortable to locate on most keyboards and prevents such an unfortunate mistakes.
Get rid of the number pad
As I’ve mentioned above, I use mouse quite often and it becomes very annoying to switch between mouse and keyboard. For example, switching between IDE and browser window to interact with UI elements, drag and drop files, select text etc. In fact, the overall travel distance accumulated when switching between input methods is pretty impressing and may cause fatigue over time.
When using keyboards without the num pad, the distance to reach mouse is much shorter, and it becomes less annoying to switch forth and back. Additionally, how often did you find yourself typing a lot of digits or using a calculator? I'd rather prefer to sacrifice the ability to type digits faster, and have the mouse closer instead.
Of course, left-handed developers wouldn't struggle so much when switching to mouse (you have enough struggle as it is :) ).
Mechanical key switches
This is the most difficult part to describe and, probably, the most popular and agreed topic to discuss. Mechanical key switches are just simply better than membrane-based, period. If you've never tried to use mechanical key switches before, go ahead, find one and try to use the keyboard for a week. I warn you that it will be the point of no-return. There're great articles on the web describing all different kinds of switches and advantages of using them.
The most common and available options are red, blue, brown and black switches (see the full list). To sum up, the red switches need almost no pressure to be activated and require a really good precision control - if you have one, you'll type fast with almost no effort - it suits more experienced users, but is prone to more typos and misclicks, especially when using special characters and modifiers. The rest of key switches require more pressure to be activated, preventing accidental clicks, however more effort is required to reach the activation point (comparison table).
You’d also consider the amount of noise the keyboard produces, beware not to stress your colleagues with your new fancy mechanical keyboard (that's the reason I don't bring my blue-switch keyboard to work).
Curved keyboards, backlight and colorful keys
The advantages of "ergonomic" keyboards with curved form and divided alphanumeric block are arguable - asking my friends about their experience and trying to use one in past, I can conclude that it actually depends on a person's habits. The ergonomic keyboards have the same problems as a traditional rectangular (when used for writing a code), sometimes, even reducing the efficiency of development due to the extra space added between blocks of keys. I believe that the tips I've mentioned above are also relevant for ergonomic keyboards and one can find a model that is both "ergonomic" and suits well for writing code. Backlight and having functional keys painted differently can improve overall performance, however I would not categorize those features as critical - they are nice to have, but I'd rather look for a keyboard that satisfies the other requirements. Take into account that having a styled keyboard with a backlight would be more costly and replacement parts are harder to find. What it definitely does is improving the aesthetics of your workplace and making your colleagues jealous about how geeky and beautiful your gear is.
I hope that this post would help you to find the better keyboard for writing code, whatever development environment you use. I'd like to mention again that there's no ideal model that would be perfect for all kind of development activity, may be except from specialized and exotic types of keyboards that are hard to get and even more hard to get used to (you can see several examples and learn more about the trials of tuning keyboards for coding). Ah, and in case you are a mobile developer, now it's time to smash the bugs in your production environment, using the awesomeness at CloudBees Feature Management.io.