Andre's Blog

Personal blog of Andre Perusse

Where is the Programmer's Keyboard?

A few years ago, I wrote about my obsession with computer keyboards. At the time, I was particularly taken with the Microsoft Ergonomic Keyboard 4000 though I really wanted a keyboard that would let me remove the numeric keypad so that the mouse could be placed closer to where my hands usually reside - in the middle of the keyboard. Well, fast forward over four years later and not much has changed. I'm still using the Microsoft 4000 keyboard both at work and at home, and I still wish the numeric keypad would take a hike.

As far as the numeric keypad goes, it turns out there are a few keyboards that either omit it completely, or, as in the case of the Microsoft Sidewinder X6 keyboard, allow you to move it to the left side. I've often wanted to try the X6, but it isn't available locally (I'd have to order it) and I've really become accustomed to the ergonomic layout of the 4000. However, recently I've become annoyed with another issue that I think deserves some mentioning.

I'm a programmer - I write code all day long. But writing code is a lot different that writing, say, a document in Word or even an email. Most keyboards are designed for writing prose - normal sentences and paragraph formatting. But code looks nothing like this. Code is on the one hand full of symbols, a LOT of symbols that require the use of the SHIFT key to type. Take for example the angle brackets used for most XML-style markup languages (like HTML, XAML, and Adobe Flex, for instance). Shift key. Do you have any idea how many angle brackets I type in the course of a day? Or C-style code-grouping "curly brackets" for classes and methods. Shift key again. Double-quotes? Shift key. Number (or hash or pound, if you prefer) sign, percent symbol, ampersand, and asterisk? All need the shift key. I've lately come to find that very irritating.

And on the other hand, the process of writing code often requires further keyboard acrobatics. For compiled languages you have to build your source code. Sure, you can use the mouse to click a "build" button or select it from a menu but that means, well, you have to lift your hand off the keyboard and use the mouse. Or, in the case of Visual Studio (VS), you can press not only the SHIFT key but also the CTRL key and then 'B' to achieve the same effect. It's really not that hard but you do have to cramp up your hand just a little bit to press the three keys at the same time. How about debugging? In VS, pressing F5 will "build and launch" your program with the debugger attached. How intuitive. F5, the universal key for "refresh" is aggravatingly re-purposed in VS. And it does absolutely no good if you have to ATTACH to a running process instead of launching it. I will also frequently paste in a few lines of code, which sometimes messes up the formatting. The acrobatics to correct this? Hold down the Ctrl key then press and release the 'K' key, then press and release the 'D' key (I call this the Kraft Dinner maneuver, since it's the only way I can remember it). And what about other common coding tasks, such as checking code out and checking it back in? VS doesn't even have default shortcut keys for that! You have to invent your own crazy key combination that hasn't already been used by one of its other five ba-jillion commands. 

Certainly, I am not the first to postulate this dilemma. A very popular thread on Stack Overflow has many suggestions for keyboards for programmers. Even the removal of the numeric keypad is mentioned! (See, I'm not completely crazy, or at least not crazy all by myself.) But, they are all still mostly general-purpose keyboards that just seem to have some characteristics that might make them more suitable for coders than other keyboards. And most of these characteristics simply have to do with tactile response of the keys - how far they travel, do they click, are they mechanical switches or cheap rubber membranes. Important characteristic, to be sure, but there is little that addresses the fact that writing code is a completely different ball-game from writing regular text, like this blog post for example.

Curiously, however, from that Stack Overflow thread is the suggestion of using the Logitech G15 gaming keyboard as a programmer's keyboard. The primary reason being the dedicated, programmable "marco" keys on the left-hand side of the keyboard. In the new G510 there are 18 such macro keys selectable in 3 banks for up to 54 macros. I'm going to do some further research on this, but it's not an ergonomic keyboard so I'm still skeptical. And I'm a little uncertain as to the proper interaction with Visual Studio.

Thus, I submit that our industry, the programmer industry, needs a keyboard made just for us. One that has common symbols a single keypress away just like regular letters and numbers. One that has dedicated keys for building, debugging, source control, finding class and member references, and a handful of other common coding tasks. Our industry is huge - surely we are big enough to viably support a special-purpose keyboard, no?