In a group chat the other day one of the members was surprised to overhear a number of colleagues having an impassioned discussion about programming keyboards. “Surely the keyboard isn’t the bottleneck in programming?” he lamented. This got me thinking as it’s something I’ve heard a number of people say. Normally I just nod along in agreement, but having really looked at the problem I’ve come to the conclusion that the keyboard shouldn’t be the bottleneck, but it often is.
This is far more complicated than just keyboards though. Let’s look in a bit more detail.
I’ve been lucky enough to do a lot of paired programming in my career, both with colleagues and with interviewees- we ran pair programming interviews for all hires. When pairing at my desk then it puts the other person into the strange situation of programming in an unfamiliar environment and instantly impairs productivity. When you spend as much time behind the keyboard as we do in our profession, the keyboard effectively becomes an extension of ourselves, like another limb. Keyboard shortcuts become second nature, and the familiarity of the keys becomes pivotally important. I exclusively use mac keyboards at home and work, so when I then have to swap to something else when pairing, on an unfamiliar keyboard, everything becomes a lot more laboured. I have to think about my actions and presses, which takes my mind away from the more important task of writing great code.
But it can’t just be familiarity. When personal keyboards were deemed a security risk in my office (no really!) and we had to revert to the clunky default keyboards PC makers throw in with new boxes I am certain that productivity remained poor even when I eventually became familiar with the keyboard. It’s only anecdotal evidence, but at the speed I type the amount of travel in a key and the pressure required can genuinely become a blocker. If my keyboard can’t perform as fast as my head then it means my brain has to spend time thinking about something other than code.
But in a perfect world, when everyone has their perfect keyboard and they’re exceptionally familiar with it, it can still be the blocker. Why? Because people are too lazy to become efficiently lazy, by which I mean learning the shortcuts and productivity tips of their environment.
I’m an IntelliJ nut, and I went through a phase of becoming a little bit obssesed with learning the shortcuts. I’ve had the pleasure of working with some great people who basically don’t type any actual words, but instead look like they’re playing a piano concerto. Shortcut after shortcut gets them driving their IDE to do all the grunt work for them. They have achieved the true Nirvana where the keyboard isn’t the blocker, only the time it takes their brain to get around the problem. However, these fine warriors are truely the exception to the rule, not the standard.
As mentioned, I was lucky enough to interview an absolute ton of people for Java positions. We intentionally included refactorings in the challenge which if you know what you’re doing can take a single key press. If you don’t know your IDE it means modifying and writing about 6 lines of code. Watching someone manually create a field to replace a repeated variable is painful. The simple fact was that most people didn’t know their shortcuts. They know the structure of the code they wanted to get to, but then spent an incredible amount of time moulding the code to the correct shape because they didn’t know their tools. In this case, their ability to navigate the code and their typing speed genuinely became the critical factor in their productivity.
I even had the pleasure of interviewing someone who refused to auto-generate any code (no ctrl+space allowed!) because typing everything out gave him the time “to think about the problem”. He typed everything. It was one of the most painful 2 hours of my life.
You owe it to yourself as a developer to become as efficient as you can be. Creating clean, tested code should what takes up your brains precious processing power, not struggling with a difficult keyboard or having to spend time manually copying and pasting code around a codebase to refactor. Go and print your IDE shortcut sheet now and practice one a day. And go buy yourself a new keyboard. You deserve it.