
Typing Practice for Programmers - kryptos1
http://speedcoder.net/lesson
======
quotemstr
Programming is a unique field: if you're doing it right, it should never be
dull. Frustrating? Draining? Rage-inducing? Sometimes. But not mind-numbing.
Why? Because we can build our own tools. If we find ourselves doing repetitive
work, we can build a tool to automate that work. This automation is itself
likely at least somewhat interesting. What isn't repetitive and that can't be
automated should be interesting as well.

If you find yourself bottlenecked on typing while programming, it's a signal
that you should stop what you're doing and write some automation or
abstraction. Sometimes you can just structure a program so that it requires
less typing --- almost always a good thing.

In the rare cases where you need to be verbose in source code, you can use
build-time source code generation, or failing that, an editor snippet library.
I like yasnippet for that purpose.

Back at Microsoft, NT kernel style requires a big doc-comment before each
major function. (These comments are extremely helpful --- but that's beside
the point.) The doc comment's style is a bit more complex than Javadoc; there
are multiple sections (e.g., description, arguments) and specific indentation
requirements within each section.

I found it very annoying to write and format these comments. Instead of just
cursing doc comment writing all day, I took a week and solved the problem. I
taught Emacs to highlight and indent these comments. I taught M-q to reformat
paragraphs exactly as needed. I added code to automatically generate a
skeleton description from the function prototype. And after all that, I was
never bothered by the doc comment stuff again.

(Incidentally, in a big monolithic IDE, I think the barrier to this kind of
extension would have too high to bother with, and I'd have been left cursing
this code.)

~~~
chjohasbrouck
This is why no matter how much sense it makes to use something like vim or
emacs as your primary development editor, I could never justify the amount of
time it would take me to actually be totally comfortable and start seeing
benefits (beyond just using it for small quick edits at the command line).

Typing speed is never the bottleneck. You could double most developers' typing
speed when they code and it'd probably have a negligible impact on their
overall productivity.

There are benefits, but do they really outweigh the benefits of those same
hours spent studying a data structure or design pattern or trying new tech?

~~~
wallace_f
I'm just curious what code editor do you use right now?

~~~
chjohasbrouck
I use the JetBrains family of IDEs (IntelliJ IDEA, PyCharm, RubyMine,
PhpStorm, WebStorm) and I'm really happy with them.

I've also been playing around a bit with Atom lately.

------
Insanity
This test is a bit..silly to me. I am an enthusiast of mechanical keyboards,
own a few, and have enjoyed typing for as long as I can remember. On top of
that, I can type quite fast - depending on which keyboard I am using as it
does affect me a bit I reach about 720cpm on my mx blues (ducky keyboard) and
about 670cpm on my KBP keyboard with Matias Quiet Click switches, which is my
slowest board. (on the 10 fast fingers typing tests)

Which is quite a good speed for typing, and I have _never_ found that to
really help me at all when coding. Usually when coding you are still thinking
about what to write and the speed at which you write code is never actually
hindered by the typing speed that you have.

There are a few exceptions to this, as I like doing live-coding when giving
presentations it does help me write the code faster, but I already know what I
am going to write to a large degree and people seem to like the live coding.

But for day-to-day programming, I don't feel like this matters..

~~~
wapz
You should check out typera.net for in my opinion, more realistic typing
tests. I just tried the 10 fast fingers test and got 750 on my first try on a
cheap keyboard (I maxed out at a tad over 700 on typerA where it uses random
sentences albeit much more difficult generally).

~~~
Insanity
Thank you for the recommendation, I will surely check that one out! And you
got a nice score, congratz!

A more expensive keyboard does not make you type better in my opinion, but it
does improve the comfort of typing for a longer time. It also depends on what
you are used to.

Another one that is fun is typeracer, it let's you race against others by
finishing a typing test as fast as possible. These are fragments from
literature that you are typing and thus adds some difficulty as well compared
to 10-fast-fingers, as you need to keep in mind punctuation :-)

------
tabeth
In my opinion there's no better practice than playing Typing of the Dead. If
losing in a game irks you even a little you'll definitely improve your typing
speed by playing if your current speed is slow.

[https://www.youtube.com/watch?v=jslf5hJMtvs](https://www.youtube.com/watch?v=jslf5hJMtvs)

~~~
rosstex
That's second to the best typing game ever made, Typer Shark Deluxe.

I wish there was a modern sequel so deeply!

[http://store.steampowered.com/app/3450/](http://store.steampowered.com/app/3450/)
[https://www.youtube.com/watch?v=4Hr6drzeFgs](https://www.youtube.com/watch?v=4Hr6drzeFgs)

~~~
BigJono
I've been toying with the idea of making a spiritual successor to this for
years, always been too busy with work though. It's one of my favourite games
of all time!

Maybe there's some artists/developers here that would want to collaborate to
reduce the time burden a bit? :P

~~~
rosstex
I used to make my babysitter play while I watched, because I was astounded she
could do so well on hard. Now I play on X-Treme and see if I can make it to
the end.

~~~
BigJono
I remember when I was a kid X-Treme seemed impossible, I thought the developer
put the difficulty in as a joke.

Nowadays I load the game up once every few months and I tend to beat X-Treme
first shot every time, unless I get unlucky with the toxic sharks. It seems
you need around 110-120wpm and decent reaction times to finish it.

~~~
rosstex
And make sure I don't hit the wrong letter to start a new fish! That always
manages to trip me up. That makes sense, my range is usually around 110. Damn
I hate those toxic sharks!

------
collyw
Coding by typing fast never seems like a great idea for me.

Isn't there a saying "weeks of programming can save hours of planning".

Plus a decent IDE will eliminate the need for this type of thing.

~~~
ktRolster
I will tell you, that if you are in a job interview with a live-coding
portion, if you don't type fast, the interviewer will probably think you are
dumb.

And if you don't know all the hot keys they know, then they will probably
think you are ignorant. It's unfair, but happens.

~~~
RhodesianHunter
Good, these are perfect indicators that I don't want to work with these people
anyway.

~~~
ktRolster
Edit: misunderstanding.

~~~
civility
> You don't want to work with people who type slowly?

Pretty sure he meant it the other way. He doesn't want to work with people who
would judge him for typing slowly.

------
emodendroket
I don't know if a programming-specific one is needed but you can save a lot of
time learning how to touch-type. [http://steve-
yegge.blogspot.com/2008/09/programmings-dirties...](http://steve-
yegge.blogspot.com/2008/09/programmings-dirtiest-little-secret.html)

~~~
sanswork
I switched to a variation on Colemak because I had used qwerty so long touch
typing with left hand and pointer/ring only on the right that it was
uncomfortable trying to learn to touch type from the home row.

~~~
emodendroket
I'm hesitant to take up any of those because not being able to use other
computers seems like too much of an impediment.

~~~
sanswork
I can still type just as fast as I could before I switched on qwerty
keyboards. I left my laptop keyboard qwerty and just switched my external
keyboard to Colemak so I swap somewhat frequently depending on if I'm at my
desk or on the couch/out of the house.

------
analog31
If I type more, I make more bugs. But my mom made me take a typing course, the
summer before high school, i.e., in 1978. It has had an unexpected benefit,
years later:

I suffer from eyestrain headaches when I stare at a computer screen for a long
time. I can type very fast, including all of the numbers and symbols, but if I
slow down just a tiny bit, then I can type quite accurately. As a result, I
can type long stretches of text or code without looking at the screen for
mistakes.

Because of that kind of eyestrain, IDE's don't really help me. Having all of
that info on the screen and requiring me to look at it, just makes it more
painful sooner. So I code in a plain text editor. Stackoverflow is my IDE. ;-)

~~~
Stratoscope
It may do you a world of good to see an optometrist and get a pair of _single
vision_ (not progressive) prescription lenses adjusted so you see clearly at
the distance to your computer screen.

If you use a laptop, bring it with you. If you use a desktop with external
monitor, measure the distance from your eyes to the screen.

But if you are currently doing something like getting up close to the display
and squinting so you can see it better, don't do that. Instead, pick a
distance that would be comfortable _if_ you could see clearly at that
distance.

For typical laptop use, this is probably around 20". Maybe a couple of inches
farther for a desktop monitor, but measure to be sure. If you use both, maybe
stick with the laptop distance since you can position your desktop monitor at
the same distance.

Don't ask for a "reading" prescription: that is typically around 16", much too
close for most computer use.

Once you know the distance, your optometrist can make a prescription adjusted
perfectly for that distance, and you can try out the prescription on the spot
with their collection of test lenses.

I avoided doing this for years. I thought I just wasn't the kind of person who
needed glasses. Turned out I was, and it was such a relief for my eyes when I
could see my screen with no strain.

~~~
analog31
Thanks. That's a good idea. I've been planning on doing it for reading sheet
music, but an additional prescription for computer reading is definitely worth
a try. Right now I wear bifocals, and the problem is that I have to tip my
head back to read stuff, which aggravates my neck. So a single vision
prescription might just be the thing.

------
Steeeve
I find this a bit silly. It wants me to type a whole bunch of things I never
actually type. I could type the python function within emacs with less than
half the strokes that were required by the exercise. And anytime I'm doing any
sort of programming that ends up being repetitive or with frequent structures
that are difficult to type I'll build something to make it a few keystrokes to
pop a template.

I think the best practice is putting your skill to use. When I play with a new
keyboard style (e.g. Dvorak / Programmer's Dvorak) or editor, I give myself a
period of acclimation where I _know_ I'll be slower, but the investment in
time will potentially pay off dividends once I get used to it. I've gone down
a few roads that didn't work out, but also a few that have. When it comes down
to plain old typing speed, short burst typing like messaging or command lines
have proven to me more productive than typing exercises that mean nothing to
me and don't apply to the things I regularly type.

Regardless, the developers here have put together a nice interface and figured
out a good way to apply it across multiple languages. If they added a few
shortcuts that are commonly present in IDEs to get real completion strokes I
think this kind of a tool might get pretty popular.

------
zeta0134
This is a really cool idea! But I found myself instinctively hitting [Tab] to
activate autocomplete on most of the longer symbols, as every IDE / Code
Editor I use supports this in some form.

~~~
CarVac
Yup, I hit tab a few times, and I also expected it to automatically convert
.'s to ->'s.

But despite that I still managed about 60 wpm and 95% accuracy on the snippets
I tried.

------
jmiserez
Nice idea. This is great for devs wanting to learn to touch type better. You
could look into adding alternative layouts (DVORAK, COLEMAK, perhaps other
language layouts such as German).

I have a new split keyboard (Kinesis Advantage) lying around that needs some
breaking in, so I'll definitely try this.

------
tambourine_man
Of course typing is not the bottleneck to any mildly interesting programming
effort. If you're doing repetitive stuff, you should have your editor do it
for you.

But the thing is that typing fast and accurately feels wonderful. Conversely,
it's incredibly frustrating to be constrained by a different layout or
hardware.

I can be reasonably fast/accurate on my preferred keyboard, but I can't touch
type very well and I envy the fluidity when I watch someone do it.

I have tried a few times to learn it, but the process is infuriating. I'd love
to find something a bit more tolerable.

~~~
wtetzner
> Of course typing is not the bottleneck to any mildly interesting programming
> effort.

I would agree with that to some degree, but I think typing faster can help the
thought process, in the sense that you can write down your ideas faster, so
that you can free them from your memory and keep moving forward with your
thoughts.

~~~
cschneid
Agreed - people in this thread are too down on typing skill. It's not the only
thing, but it is important.

Think -> decide that you need to extract a method -> using the keyboard, and
your editor, do that -> think again.

The step w/ the keyboard will involve your custom editor environment, and
typing. If you get it done, you can shorten the cycle from Think -> Decide ->
Act -> Think, and get into a smoother workflow. If your keyboard and tools
need your active thought on how to succeed, you get derailed in that Act step,
and have to restart your thinking about the real problem.

------
spdionis
Unfortunately, in the real world, typing doesn't always work like in the test.

For example I'm a heavy IDE user and I know exactly what kind of autocompletes
it will present me when I write something or what kind of shortcuts I can use,
which made this really weird to use.

For example I rarely write 'function', I write 'fun' and press enter because I
know 'function' will be the first item in the autocomplete list. When I'm
writing a variable for the second time I _feel_ the latency at which the IDE
will autocomplete me. If there are more variables with similar names I know
which characters to type to make it autocomplete the right one. If I have a
variable named weirdNamedLongAssVariableName I will write wNLA and press
Enter.

This confused me a lot on a subconscious level when I first tried the examples
on the website.

------
bostand
I type _too fast_ as it is, I would rather have something that slows me down.

If you think fast typing makes you a better programmer chances are you are a
typist and not a programmer.

------
monfrere
Is typing speed really the bottleneck when programming? For me, it's
definitely either the speed of thought or the time it takes to look up names,
interfaces, etc.

~~~
Kenji
No, what you experience is normal. Typing speed is never the bottleneck,
unless you write some boilerplate code - which, frankly, is something you
should avoid and automate anyway. As a rough estimate, I spend more than half
of my time drafting, either with pen and paper or in my head, and then half of
the remaining time researching. Only a tiny fraction of time is pure typing.

------
ambrop7
At the last character (}), I pressed Enter (as anyone would!) which actually
resulted in closing the results window before I could read them!

------
c3RlcGhlbnI_
This is really bad for getting better at typing for code in the same way all
other typing tutors are.

The problem is that programming overuses a bunch of character sequences that
rarely come up in standard english and thus in most of your typing practice,
e.g. special characters, and mid-word capitalization. If you want to improve
your typing speed for programming faster than you would just writing code
normally you have to focus on those sequences.

You would probably want to practice with something that looks more like
obfuscated code than beautifully formatted segments. Ideally you could even
generate such segments so as to work out your least performant two character
sequences while not slowing you down too much by being too random looking.
Though even just repeatedly typing "jf" then random characters using the right
pinky will be more helpful than this or [https://typing.io](https://typing.io)

------
mbrodersen
This is just silly and misguided.

A great quote from Lambert:

1\. Decide what the program should do. 2\. Decide how the program should do
it. 3\. Implement these decisions in code.

Only the last part is actually coding.

In other words, you are not paid for typing fast. You are paid to type as
little as possible to solve problems!

------
cheriot
I love the idea. typing.io's $10/month is a bit steep. Nice to see someone
else in the area. It would be really nice if I could turn off the keyboard
highlights. It's basically a strobe light when typing and gets distracting.

------
6DM
I don't feel that I need it but I thought I'd give it an honest try and follow
the instructions. I never realized it but when it comes to curly braces and
other keys in that corner "{ [ ] } \". I would take my hand off and use my
ring and middle finger. Therefore I was under utilizing my pinky. I also
noticed that I tended to use the same shift key for all the letters resulting
in weird contortions of my hand.

Doing a quick 1 minute typing test comes up at 90 wpm. However programming,
with all the mistakes from jumping around I think brings me down a lot more
than this. So I found it surprisingly useful.

~~~
randlet
I've been touch typing for 20 years at this point and 90 WPM seems crazy to
me. I first tried the speed coder site on some Python code and only managed
45wpm. After reading your comment I then went and did a 1 min test on some
general text and only managed to hit 55wpm! That said, I've _never_ felt
constrained by my typing speed while programming.

------
riffic
er, nope.

    
    
      $ curl -I https://www.speedcoder.net/
      curl: (7) Failed to connect to www.speedcoder.net port 443: Connection refused
    
      $ nmap -p 443 www.speedcoder.net
    
      Starting Nmap 7.40 ( https://nmap.org ) at 2017-01-29 17:18 PST
      Nmap scan report for www.speedcoder.net (52.36.71.201)
      Host is up (0.066s latency).
      rDNS record for 52.36.71.201: ec2-52-36-71-201.us-west-2.compute.amazonaws.com
      PORT    STATE  SERVICE
      443/tcp closed https
    
      Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds

~~~
kinghajj
Unfortunate. With Let's Encrypt, there's really not much excuse not to support
both HTTP and HTTPS.

------
micaeked
See also typing.io

I've been using it for a few months. Around ten minutes per day, five days a
week. It has a few small issues, but overall I would definitely recommend both
the site and the habit.

------
deltaprotocol
I would be careful to extensively deliver my typing pattern over a non-https
website because this is a known way to profile people online and later
identify them.

------
isaacremuant
I'm getting server error (500). This is always a cool idea, though. I learned
touch typing with [https://www.typing.com](https://www.typing.com)

It's probably much more boring but quite comprehensive for most things.

The real challenge usually comes when you're touch typing and mixing different
hot keys and autocomplete functions (vim plugins in IDEs, for example).

------
markestefanos
If I can touch type at around 80 WMP with 95% accuracy, but I'm not using the
'correct' finger arrangement, is it worth relearning?

~~~
lytol
Depends. Do you ever have to look down at the keyboard? If so, then you really
should learn to touch type. If you can fluently type without ever looking
down, it would probably be a low return on the investment. The only caveat
would be RSI-related issues, but I'm really not qualified to opine there.

------
tomyws
This highlighted my dependency on IntelliSense - which is a bit worrying!
Although mixing IDEs would be counter-productive?

~~~
Tankenstein
I wouldn't say it is. For the past couple of years i've been using heavy IDEs
(jetbrains stuff) for very verbose languages like java, and lightweight ones
for more concise languages like js or haskell. Learning multiple IDE-s can
sound stupid, but i feel that it helps me a lot.

------
dorianm
Really liked the choice of discourse for the ruby typing, it's a very very
interesting and well thought project.

But I'm still not typing with the ten fingers like recommended and this could
be of great help to change my way of typing to a more optimized one.

Thanks

------
achikin
I would rather prefer a tool that trains me to use my editor/ide more
effectively.

------
echelon
I knew what the title meant when I first read it, but for a second I hoped
this was an article or interactive tool to help engineers come up with better
names for types and better type abstractions.

------
arvinsim
I tried out the Javascript section. I tried typing the first word,
`animateToOverview`. But when I get to lowercase "t", it asks me to do the
shift. It seems that its broken.

------
msimpson
A programmer spends much more time reading code than actually typing it. This
is why we have mode-based editors, like vi(m). Encouraging speed is not really
helpful for this task.

------
Something1234
Doesn't work if vimium is active on your browser.

~~~
therealdrag0
I ran into this too. I emailed author about it.

------
kalekold
I prefer this one: [http://hackertyper.net/](http://hackertyper.net/)

------
jyriand
Only thing I'm concerned is touch typing. Rather annoying is to look away from
the monitor just to locate correct key.

------
tildedash
Who write code that way (linearly)?

~~~
gumoro
Good question. I don't type code as I type a letter. When "coding", I edit
structured text. So what's important for productivity is things like jumping
with accuracy (word, corresponding bracket, file...), cut/paste, other IDE
shortcuts to rename, refactor, etc.

------
mat3001
How about Dvorak Kebyoard support?

------
foota
Now that's one way to enforce code reviews.

(Edit: for spelling, oh, the irony)

------
ben0x539
Having to scroll the textbox right to continue is a bit of a drag.

------
zepolen
Average stats by programming language would be interesting.

------
bootload
So who here never learnt how to touch type at school?

------
du_bing
Hi, is this a Open Source Project? I love it.

------
vzaliva
Ah! You mean that "typing"!

------
Cypher
Server Error (500)

------
omarforgotpwd
typing.io is much better in my opinion

~~~
du_bing
But it's not free, I also love typing.io, it's clean and simple, but I have to
pay to upload my own code pieces.

------
mherrmann
For anybody learning to touch type, I highly recommend looking at alternative
keyboard layouts. I use QFMLWY, which reduces typing effort by 43% in
comparison to QWERTY (for some measure of "effort") [1]. It greatly reduced my
wrist pain, and just feels much "lighter" to type.

[1]:
[http://mkweb.bcgsc.ca/carpalx/?full_optimization](http://mkweb.bcgsc.ca/carpalx/?full_optimization)

~~~
pitaj
I feel like learning a non-qwerty layout would make it difficult to switch
between computers. What has your experience been? Is QFMLWY supported on
pretty much every device? How does it compare to Dvorak?

~~~
mherrmann
That's a valid point. I now can't touch type on QWERTY keyboards anymore (but
mostly because I never have to). Setting up QFMLWY requires special setup that
is more difficult than "select the layout from the System Preferences". I'm
certain it outperforms Dvorak, but I'm not sure by how much.

