How a keyboard changed what I look for in an editor
devblog.avdi.org
devblog.avdi.org
I learned on an IBM compatible 101 (now 104) keyboard. I trained my hands against the 'correct' cursor management key layout: the inverted-T and the cluster above. It's not optimal, but neither is the saxophone. That said, you don't see too many saxophone designers changing the placement of the keys or inventing new fingerings. Not so for keyboards. Most of the innovation happens because of some industrial design requirement or some designer's whim (e.g., why do we still have this insert key here? Nobody uses it! Let's get rid of it and add a larger delete key). I'm not referring to the more interesting innovation happening on behalf of heavy keyboard users, like those mentioned in the article.
It used to be somewhat difficult to find modern 101/104 keyboards. I thank the code gods often, now that we have such a rich ecosystem around conventional keyboard designs. I now have a problem where I look for an excuse to buy a new keyboard to try out for one of the spots that I program at frequently, so I can just move my laptop and plug in. My favorite so far is the Cooler Master QuickFire Tenkeyless.
This reminded me of a really fun talk from this year dealing with teaching (and internalizing) music theory using a Ruby DSL: http://confreaks.tv/videos/mwrc2015-writing-music-with-ruby-...
Surely a middle ground would be preferable. One of the biggest shortcomings of the modern keyboard is that each thumb is essentially responsible for only a single key each, while the thumb is by far the most flexible and strongest of the digits.
The reason the left thumb has so few (saxophone and flute each have one, clarinet has two, oboes have one or two, bassoon is an anomaly) is because it usually operates the register key, which has to be held down much of the time while the other fingers do most of the work (not unlike a shift key for typing capitals). Having the left thumb do this is much easier than, say, the pinky, since you lose a lot of dexterity in your ring finger if the pinky has to stay depressed.
Some less common instruments do have more thumb keys; high-end bass clarinets have an extended low register and the two additional notes are operated by the right thumb. Bass clarinet typically uses a peg or a neckstrap, so the thumb is freed up a little bit to do some work.
(For a moment I forgot the main topic of the thread was computer keyboards and thought you had very strange piano technique!)
Looking at available ergonomic mechanical keyboards, I think there must be a curse, that every kb designer must do something silly for no reason. I just bought a $200 ergo mech keyboard, and it comes with dedicated Undo/Copy/Paste keys. They actually added a key that sends CtrlZ, which is probably the easiest combo to hit, on a higher end keyboard aimed at pros. Wtf? (I'd pay hundreds for a MS Ergo 4000 with good switches.)
(I would also buy a MS Natural 4000 with decent switches. Not sure I'd pay hundreds, though, because I'd like to buy several. Additionally, the fact the 4000 is so cheap is one of the reasons it's so good.)
Especially when you see empty space on each side of the keyboard, which isn't being used for speakers or anything else.
I have an X60 and while its layout is not exactly like the standard 101-key, they did manage to fit all the keys in there including Scroll Lock/Pause Break.
However, it terrifies me to use my friends' Dell and Lenovo machines, the key placement is often perplexing. I somehow think the layout is intended to bond the user to the platform, though, and few companies apply that as succinctly than Apple.
Of course it's not really the same since the AT design hadn't been around for decades, but it's worth remembering that keyboard evolution stopped at an essentially arbitrary point rather than at some imagined pinnacle of design.
On the off chance, has anyone found a good carrying bag for the Sculpt Ergonomic keyboard?
[0] http://www.razerzone.com/licensed-and-team-peripherals/starc...
I couldn't find anything on Google to contradict that. Link?
- [1] http://forum.colemak.com/viewtopic.php?id=1467
- [2] http://touchcursor.sourceforge.netI agree that familiarity with a keyboard layout is important, as is familiarity and confidence with a given editor/IDE (frequent switching between keyboards/editors does seem to slow me down a bit), but beyond that, are you really feeling held back by the speed at which you can move characters from your brain to the computer? My own experience shows that much more time is spent just thinking about the problem at hand. Even when it comes time to write, I rarely (if ever) feel like the keyboard input part is slowing me down.
If you have to think about how to do the actions to indent, comment and reformat some code, your mind isn't on what you're actually doing at the time, which could be a very complex operation which requires your full attention.
Try to type a reply to this comment, but type it with one finger while looking at the keyboard and see how focused you are on what you want to say.
Navigation and refactoring are where efficiency becomes huge. I think most of what I type into an IDE isn't actually code, it's navigating without a mouse (Find in files, go to declaration, back/forward, search for a type, etc.). The thing is most of these operations have in common is they're working with a symbol table or an abstract syntax tree though. This is why I like (good) IDE's over text editor's like vim and emacs -- I rarely need to be super efficient writing within one file, I need a program that can understand and parse an entire project. I also don't need my keyboard shortcuts to be super efficient (I don't particularly care if they drag me off the home row or involve multiple modifiers), I just need them to have a high multiplier effect in terms of my time.
Honestly I think the most useful keyboard shortcut I use is also the most vague: alt-enter in resharper/intellij. It's basically just "show me the most obvious transforms in this particular context". So it might transform a type declaration to "auto", or convert a for-loop to a foreach or vice versa.
I'm 34, and have sadly discovered the reality of RSI over the past couple years (The author's final warning is appropriate). As a result, I've definitely modified keybindings specifically to avoid some recurring painful movements, and I think that's the reason the author discusses the topic, not speed of input.
It's not just programmers who want to be able to edit quickly, as an ops person sometimes I'm called upon to bang out and edit a lot of UNIX shell commands. Sometimes I'm doing this in tense SEV-fucking-0 situations where being able to edit and type quickly has a real benefit.
As an emacs user, my shell editing commands, editor editing commands, and text I type into GUI OSX text widgets all use the same control/meta key editing sequences. I also use a Kinesis, and use the two largest keys on the left 'thumb island' for control and meta. When I'm away from my Kinesis I use caps-lock for control and ESC-[ for meta.
Rarely, I'll be in a situation where I have to do a series of complex edits. At my old job if we were crunching, some of the people that were junior to me would look over my shoulder and see me rushing through a ton of different files to make them. I think if you're familiar with a tool/setup it's easy to do this, but it's not totally necessary.
For anyone who tries to make their code as small as possible, the idea seems absurd. But lots of other things involve typing, like interacting with a REPL or terminal, or querying data. Typing can sometimes be a limiting factor there, especially when working with tools whose verbosity you don't control.
In fact, i wrote an article on this very topic a few months ago because i find so few programmers consider tool mastery a part of programming mastery:
Things that can take 1-3 keystrokes instead take 30 seconds.
This kind of editor mastery is oft mentioned, but I've never seen it.Does anyone know of a good video demonstrating editor virtuosity? Ideally while actually coding - not synthetic examples. Any editor, any platform, any language, etc.
The latter might not get you there significantly faster but it's going to be a much smoother ride.
That beign said... typing speed is also important. I've always written a large amount of prose as part of my job (compared to most non-programmers). And not just time-wasting typing at HN, but documentation, job-related emails, etc.
One of the issues with mice us their default relative positioning. Digitizer tablets require less hand eye coordination and have a better chance of coming closer to touch typing. But it's still gorilla arms versus ten fingers.
Lately, I've realized that even when I am having to look at the keyboard to get the right key combination in Emacs, it's no worse cognitively than hand-eyeing with a mouse and because my hands are still on the keyboard it's actually physically more efficient and actually creates less context switching cognitive impedence.
If you type at 60wpm instead of 110, over the course of a career I'll bet that makes plenty enough difference to be worth addressing. (I recently started going over to typeracer.com and keybr.com on breaks, on that theory. We'll see.)
http://lifehacker.com/n-key-rollover-anti-ghosting-and-other...
There are other things that make my work on a computer productive. The macros I have setup, my specialized launcher that'll do things based on keywords. The console that's perfectly setup with the tabs / shortcuts I want/need/know, and syncs with my launcher: "console c:\projects\ {enter}" -> does things much faster than a normal person's computer usage.
All these "little" things add up. And like one of the other posters mentioned. Less time having to "worry" about how to get to program X, or switch to task Y, is more time I can dedicate to the task at hand and the flow that accompanies it.
So we definitely don't "type a lot" but we do type, and aspects of the keyboard's design can effect these bursts.
Those compile errors slow me down.
But I do know other people who really do just type immediately when they start to code. They use the keyboard and screen as part of their thought process. For them, perhaps it makes a bigger difference.
Now a nice keyboard is something you want to have but as long as it has some key travel I am good to go. I don't like mushy keys too much though.
That would be ~5 minutes of an 8 hour day typing. 8 hours each day to plan 5 minutes of typing seems... well, something is wrong and I have trouble seeing a sizable project getting done like that.
I probably spend 2-3+ a day typing (for various reasons.. not all programming). And yes, typing is very big issue for me.
While maybe not going as far as becoming proficient in whatever setup could be considered the "lowest common denominator", I prefer to use a setup that is flexible across locations and environments. There's a lot of freedom in being able to move about between workstations and locations and still be fast and capable.
Likewise I know developers that bring external keyboards like the Kinesis in their backpacks to wherever they want to hack.
Edit: that being said, you're right that it adds up. I believe the author of the article also uses a vertical mouse. That's a lot of gear to haul to Starbucks!
But in the end humans are social animals. Thus peer approval, even if we don't know them by name etc, carry mental weight.
I had my laptop pinched last week so I've been on a Mac desktop with a Mighty Mouse. The gesture control is so clumsy compared to what you can do with a trackpad.
I think much of the problem with Windows is in the Synaptics driver. On one Windows machine, I see 5-10% CPU usage whenever my finger's touching the trackpad. The trackpad on that machine works a lot better on Linux. On the other hand, some other trackpads work far better on Windows than on Linux.
One big difference between trackpad behavior on Windows and OS X is that on OS X there's always delay between when your hand touches the trackpad and when the mouse starts moving -- the first N ms are ignored. On Windows, it varies from machine to machine -- for example, on an ASUS machine I have, you need a certain threshold of movement and then the pointer catches up to what its location would be, but with others there's no delay.
Lately I've been using a chromebook with arch whenever I use a laptop ( luckily it's not too often ), and while they keyboard isn't completely awful, going from mechanicals at work and home to a chicklet keyboard is annoying at best. I've been looking for a decent portable mechanical keyboard to throw in my backpack, but so far a densely keyed (not sure if that's the right term?) tenkeyless is the best I've found, and I'm having a hard time imagining a keyboard with all the "extra" keys being almost pocket sized, unless you're bringing back JNCO ;).
Sure thing; I have photos and kits for sale at http://atreus.technomancy.us
It takes a long time to learn since it's a pretty big divergence from the conventional design. It only has 42 keys, but with the fn layer (activated with the thumb rather than an awkward pinky reach you normally see on laptops) you can still hit all the keys you need. The other upside is apart from being much smaller it also means your fingers never have very far to reach, so it's also more comfortable.
(BTW, the article did mention and link the Atreus, so you probably don't need to dance around it like that)
"Textmate? CoffeeScript? But how would you ever navigate your 900-line files without Vim?"
Disregarding the practicality or the actual use, I think it is a very interesting concept and possibility that could be explored.
For a non-anecdotal perspective, emacs users have been doing this for quite a while http://emacswiki.org/emacs/FootSwitches. go ahead and search for foot switches as well. They all look old and dated don't they? There's a reason for that.
It's not talked about much because it's difficult to learn, non-portable and the need for foot switches is mitigated by proper technique when typing.
http://i01.i.aliimg.com/wsphoto/v1/1853014535_2/Wholesale-5P...
Specially considering all the braces:
[] is done by Alt Gr and the two (consecutive) keys that come after the "p"
{} is done by Alt Gr and the two (consecutive) keys that come after the "l"
() is done by shift 8, 9
\|@#~ Are all done with Alt Gr and the º key, 1, 2, 3 and 4.
Maybe it's just being used to it, but I find it extremely practical.
You're then in a conformable position for reaching out to this keys I mention.
(Since English doesn't need any accented letters, and the only extra symbol needed is £, the brackets are accessed without modifier for [] and with shift for (), {}. The only symbol requiring AltGr is €.)
For example, use a mouse and copy, or even just to use a mouse gets to you for the proper position. A typical use of c select with a mouse, copy, move the cursor and paste, is very weird. Also something like write something with a pen and move pages up and down. A regular keyboard allows you to move right and use your left hand for right keys (cursors, etc). With the Kinesis, this is uncomfortable.
The pedal is also weird and needs a lot of adjustment.
I used it for a while, and encourage to everyone around me if they want to give it a go, but I moved back to a more regular keyboard...
In Steam Big Picture you can type with a gamepad if you go to the friends-chat-mode. Why is this limited to Steam Big Picture? This should be functionality provided by the system to be used by all applications. And applications should adapt the input layout and themselves depending on the HID that is being used.
I wish it'd be possible to use text editors with a 3D mouse or pedals and a camera, without having to invest a huge amount of time to make it work.
http://www.anandtech.com/show/7125/kinesis-advantage-review-...
In Typing tests (granted Aesop's Fables, not programming) there isn't really that much difference. Even compared to a Laptop keyboard.
In 10-key typing (entering numbers) the Kinesis Advantage is really bad.
Another feature that is quite interesting if you code with IntelliJ or Eclipse is the "Quick Access" key. Ctrl+3 on Eclipse (hint: remap this to a more convenient key NOW!) or Ctrl+Shift+A on IntelliJ (same hint applies), and all you commands can be accessed by quick typing. No need to go for Ctrl, Alt or any key combination.
With all this, any keyboard is efficient.
Now, what I'd really like to see is keyboards made with different key sizes. A 3/4 size keyboard that has proper mechanical switches would be very, very nice indeed. Hell, I actually like 15" laptops with full keyboards because that tends to mean that they've shrunk each key to fit, and it gets to right about the sweet spot in size for me.
I think the other piece of the puzzle is that a lot of people don't properly adjust their chair and/or monitor for good ergonomics either. Eye level with a monitor should be right about at the top of the screen. It takes a tiny bit of getting used to at first, but then you really start noticing how much less neck strain you have.
During this time, I also did some experimentation with voice recognition. It worked really well when coding in lisps. This was over ten years ago, and I'll bet this would work even better now.
I also have experience with the Kinesis keyboards; I used the Freestyle—not the Advantage featured in the article—following my recovery for about six or seven years. Though it looks like a medical device, the ergonomics are excellent. The Kinesis is a better typing experience by about 1000x. I have since switched to the homemade Ergodox, but still recommend the Kinesis.
The arrow key layout is actually one thing I don't like about the default Kinesis configuration (the bottom row for the left hand is backquote, backslash, left arrow, right arrow, and for the right hand it's up arrow, down arrow, left bracket, right bracket). I remap these keys to put all the arrows on the right hand (in vi order).
A modern version of the DataHand would be cool.
http://octopup.org/computer/datahand
A controller like an AlphaGrip: http://www.alphagrips.com/
Ironically it's because the startup costs are so low, and gradually ramping up production makes a lot more sense to me than exploding onto with a huge bang that requires a lot of investment without knowing how the demand will hold up in the long-term.
This practice along with evil-mode and Vimperator means I barely have to move my fingers of the home row while operating my computer.
I've been using emacs for 9 years like that without a problem. I didn't realise you were supposed to swap your Caps Lock and Ctrl keys, so I never did. (And now I know you're supposed to, I just ignore it the advice. I don't think it's especially good advice, though, as always, if it works for you, feel free to heed it.)
Also, I would like to code while lying on the bed, a keyboard I can wear like gloves would be great.
If not, a keyboard in the shape of /\ lying on desk would be a much better design.
http://www.hawking.org.uk/the-computer.html
"My main interface to the computer is through a program called EZ Keys, written by Words Plus Inc. This provides a software keyboard on the screen. A cursor automatically scans across this keyboard by row or by column. I can select a character by moving my cheek to stop the cursor. My cheek movement is detected by an infrared switch that is mounted on my spectacles. This switch is my only interface with the computer. EZ Keys includes a word prediction algorithm, so I usually only have to type the first couple of characters before I can select the whole word."
The face have twenty muscles, Hawking probably can't move all of them, but for a normal person that would mean around one million binary combinations. Or 10^20 combinations if each muscle contraction was measured on a scale 1-10.
Until such a product is released you could start practicing your facial muscles by doing waves with your eyebrows and moving your ears and nose wings etc.
M-x replace-regexp ↩ foot pedal ↩ pedal
or M-x replace-regexp ↩ foot pedal ↩ foot switch