Typing Practice for Programmers(typing.io) |
Typing Practice for Programmers(typing.io) |
recruiting coders?
optimizing keyboard layouts?
optimizing character usage for new language or framework development?
advertising open source projects?
You even can't put more line breaks than it is - just type, character by character. If it checked the code in general (e.g. package names typed correctly - but not line breaks and stuff) - I'd totally use it. Not now, though.
One minor thing: practice sessions are called "lessons" but nothing is actually taught.
Anyway, the cursor occasionally obscures the character and slows you down. Might be worth testing out a fish-eye effect as the cursor scrolls so you clearly know what you need to type.
Beautiful app though!
but valid point nevertheless.
http://wwwtyro.github.com/keyzen/
That being said, this also looks great. Love the idea.
Is it only typing an existing piece of source code? Wouldn't simply coding stuff then be better practice?
Bug: Caps Lock key is ignored. Feature Request: c#
And yes, those domains are pretty expensive.
This is still excellent. If these keys worked I would definitely use it.
ETA: looks fine in Chrome though, and I really like this idea :)
Other than that, this is freaking rad!
I found it funny that I'm normally a 120-150 WPM typist, but when typing special characters for regex, etc, I hit a patch of molasses.
Maybe when codeacademy students get frustrated they could spend a few minutes doing this.
Nice work!
It would be interesting to be able to pick specific coding styles for C
I'm spending too long on this, back to work...
Those guys have spaces everywhere
There's no free lunch. The OAuth providers are, on balance, pretty good at what they do and a better choice for account management at small sites. This one happened to pick Google.
Yes, either this or openid. I don't have an account at google. I don't want an account at google. While it's a lower barrier than a facebook login, it's still enough that I'll bounce off the site when I see it.
Of course there is. No sign-in at all.
My question should have been: Why do I have to sign in?
I choose Google because I didn't want to worry about email verification, salting, key derivation functions, etc.
I don't have anything more specific to add than that it seems to get worse over time.
Otherwise, awesome idea!
Please find some code that isn't laden heavy with use statements. I'd expect my editor to autocomplete these...
I am pretty sure many people do this too: whenever I type braces/brackets/parentheses/[/%$..] I type both open and close, then continue filling in the statement inside the completed pair of open/close. It is a very useful practice especially for languages with a love of open/close symbol pairs. When you try this in your app, the close gets marked as an error, and I couldn't find an easy way out.
Penalization for adding additional whitespace between identifiers in some situations: "[one,two,three]", for example, I personally like adding a space after the comma and do it automatically.
I preserved the whitespace the project authors used. I'm a little picky too regarding these details, but I want users to see code in its original form.
Thanks for the feedback
One tiny piece of criticism though: when calculating the percentage of unproductive keystrokes, divide by the number of ALL keystrokes, not just the correct ones.
edit: the more I use this, the more I find myself really hoping that you're storing all of these stats somewhere. I think that some aggregate analytics of typing accuracy across programming languages would be fascinating.
Edit: It appears that this is part of the "auto-indent" mechanism (which is intuitive for indentation). How about accepting multiple newlines, or whitespace at the beginning of a line, but not requiring it?
For some reason I can't type the ( symbol. I do have my ( and [ keys swapped but I tried both and neither has the desired effect.
Presumably they are storing that information in their back-end somewhere.
I'm a pretty fast typist (80-100WPM on TypeRacer, usually) and I really never put much thought into my typing, since it was good enough. But I recently started paying attention to the kinds of mistake I make on Typeracer, and realized that I have certain combinations of keys which I don't make using the "home row" of the keyboard, but rather, move my hands to make. Every time I hit one of these, I have a 50/50 chance of not getting back to the home row correctly, meaning I have a 50/50 chance of throwing off my typing.
And I am a heavy VIM user, by the way, which means I am very used to doing everything from the home row, including every navigation you can think of. I even have AutoHotKey scripts to give me vim-style navigation everywhere in windows, so I never have to move my hands.
Now with this program, I finished running an example and noticed 2 shocking things:
1. There are a lot of keys which I'm not used to typing from the homerow, which happen to show up a lot in regular Python code. For example, periods (.). And underscores. I was used to shifting my hand to type these characters. I don't notice this during every day work, since I'm actually programming, but I did notice this while playing a program specifically designed for typing.
2. At the end of the program, it gives you statistics, and I found out that I was only about 48% effective, meaning 52% of the keystrokes I made were accidents that had to be backspaced out. This is a lot. Part of it is "first time with this program" bias, but it still means I have a long way to go.
Anyway, I recommend running through this program, it will probably teach you a lot.
P.S. Just one bit of constructive criticism: the way the program presents mis-types is a little annoying, and hard to follow. I recommend doing the same as TypeRacer, that is, have the "mistaken" keystrokes be visible somewhere, so the typist is very clear on how many keys he needs to backspace out. This is much closer to how people type in the real world.
Thanks for pointing out typeracer. I will take a look at it and try to incorporate its error handling.
One thing I would say is that it would be nice if it showed stats while I was typing, instead of just at the end.
Fantastic product, though. I see myself using this a lot. Any chance of a C# version coming along?
Someone else has also recommended https://github.com/MarcWeber/autohotkey_viper , which seems to be more feature filled than the others, but I haven't tried it out.
I'll tell you how I'd like to use it. This may seem odd, but I'd like to be able to upload code that I'm interested in learning, and then type over it just like in these lessons - but not to speed up my typing, but rather for learning.
Writing is a unique channel for learning new things. (Reading is too, of course, but everyone knows that.) Even if you're merely reproducing keystroke-for-keystroke what someone else wrote, following in someone's footsteps helps the brain absorb new patterns and is particularly good for something one's a beginner at. If what you're copying is the work of a master, then you're absorbing really good patterns. I would totally use a tool like this for that purpose. It's a way of learning with one's hands.
But pure typing efficiency? That's hardly a way to become a better programmer, only a more prolific one, and more code is not what we need in this business.
So basically I wish I could subvert the purpose of your tool and send it off in a new direction. :)
Things I particularly liked: not making me type the indentation (because any sane editor will do that for me), allowing backspace, providing examples in numerous languages.
Things that bugged me (and which only become an issue because the example otherwise proves sufficiently realistic that any remaining differences feel awkward, like an uncanny valley for typing code): showing faded-out code I'm not expected to type and skipping it, not allowing any navigation other than backspace (I frequently "correct" errors by ignoring them until I finish typing what I wanted to type and then going back and correcting them, which means the "collaterally typed before backspacing" characters are not wasted keystrokes), not allowing copy-paste (particularly important for lines like #include or import), not showing incorrect characters I've typed.
Things you probably can't do anything about: typing a file in a more natural order than top-to-bottom (the Haskell exercise starts with a giant export list, and the Python exercise starts with an import list). Normally, you'll extend those as you go, rather than typing them all at once.
I debated whether to require typing the import/include boilerplate at the start of code. As you noted, this usually done piecemeal and often inserted by an ide. I decided to include it as it's part of the code and looked for code samples that didn't go overboard. For the Java and Scala examples, I collapsed imports into wildcards imports.
I personally would prefer a side-by-side text entry, rather than typing on top of existing code, so it's easy to see progress and mistakes (even if you don't highlight mistakes in the text).
EDIT: It looks like about 50 words per minute, maybe 55, is the max speed you can type and have the cursor actually be visible enough to be a guide of where you are in the text.
I just checked my comment history and about 50% of my comments have been related to this issue. This is the first one that is complimentary.
(even for those who think noscript browsing is not with the times any more, it's still good practice to give a decent error message / explanation instead of breaking or blanking)
Regarding indentation: I think you made a reasonable choice in excluding it across the board. Definitely better than requiring it to be typed everywhere. That said, ideally you would require the user to make the keystrokes to un-indent whenever an IDE wouldn't automatically.
Also: Something in Objective-C please. Those square brackets took me a lot of practice to get used to.
I would be very glad if there were an "ignore layout" option that dropped support for any layout difference, so I could type as in a US layout and at least finish the exercises.
This is all bringing back horrible memories of our disastrous demo actually, but very nice otherwise.
Here's a straight-up bug: I had to turn off a Chrome extension (Type Ahead Find) that I use for incremental search. It was intercepting key strokes that were supposed to go to typing.io. That hasn't happened with Ace and other canvas-based text editors. My friend also mentioned that it didn't work with his Danish keyboard.
Beyond these annoyances with the implementation, typing the C code from Redis reinforced how difficult (and frankly infuriating) it is to spontaneously conform to an unfamiliar coding convention. E.g. no spaces in "while(1)" throws me off completely because my brain is thinking "while 1" and my fingers translate that into my customary "while (1)". If you want this web app to be relevant to real-world programming, you need to let people upload their own code samples.
For even punctuation heavy, syntactically gnarly prose, I can average 140+ WPM without much effort. Typing.io put me at around 100 WPM for the first few sections of the C Redis lesson. I'd say I'm good for at least another 15-20 WPM if the environment wasn't so utterly alien.
My german keyboard didn't work :(
What do you mean "access"? Do you mean "authenticate as"? Do you mean "go screw with my email"? I seem to remember that I sometimes see specific access requested, but this one is vague. Possibly this is the result of requesting sign in with no permissions at all.
It is interesting. I wonder if I can learn to make fewer typos.
EDIT: also '_', as sp332 commented. Firefox on OS X.
I have a swiss german keyboard and I can't get past the first _'_ character. I'm using XP and Firefox. Otherwise a really neat idea.
But keeping my fingers on the home keys to type has always felt really awkward to me. I tend to position my hands differently depending on the word I'm about to type - in a way that let's me "roll" my fingers along in just the right sequence so it tends to be a series of short bursts where it would seem as if I'm actually just smashing a bunch of keys at once over and over again.
Edit: I just tried type racer and was getting 80+ wpm. /me wonders how people get 140+. :O
I was considering doing something like this in the terminal, possibly using an adaptation of gtypist. However, I the more I thought about it, I realized that I would be better off writing a module for my everyday text editor, since I would have access to completion, copy/paste, indention, macros, etc.
I don't want to 'talk down' all the work you did with this. I'm really glad you made it and I am going to use it, for sure.
Keep up the great work!
I think a great place for this to go would be if the code bounced around a bit more. Perhaps, start with what seems like the most commonly used function and write that function header and whole function; then, start writing all of the different subordinate methods you called in this primary method, and so on until the whole class is created. The way it's written write now, in particular for Java, isn't a way that I code and I imagine it's not the way that many people code.
Just my two cents. Otherwise, it's an interesting system so far.
:)
And besides improving your code-typing speed, it's also a nice way to get a hang of all different languages you might want to delve into. Alternatively, you can also polish your muscle memory on all the thousands of function, classes and method names you can find in your typical language/framework of choice.
Hey a few pieces of constructive criticism, I only did the Python lesson so I may have a skewed view though:
- your tool somehow collapses double newlines? in the example, after the import statements came a class definition, which are (as suggested in PEP8) separated by a blank line so I pressed Enter twice. But your program expected me to already type the 'c' of 'class' :(
- it skips comments. and not only comments, but also docstrings! docstrings are not just "comments that happen to be documentation" but actually proper python code and part of the program, they are not ignored like comments, but can be introspected. When I'm programming Python, I'm also typing docstrings.
- the example I got had me starting out by importing a whole load of modules that were particular to that project. for Python practice it would make more sense to practice typing imports of the standard library, or popular frameworks.
- You should try to figure out some way to incorporate the particular keyboard shortcuts, autocompletion and other typical code-editor features, because learning to use those properly gives enormous advances in efficiency. Does your program at least do auto-indenting? For other features it is more difficult since they are so different across editors.
But I'm too traumatized by nightmare memories of programmers cranking out code to take much solace in it :)
I cannot fathom how people can find the time to actually approach any particular problem at a reasonable depth if it will take them more time to type out the solution than reading and understanding the existing code and determining how to solve the problem. Sure there's code where there's boilerplate, or add a line to a bunch of files, or tons of ways that raw typing speed doesn't play much of a benefit, but when it comes time to type, having to move your hands and look to find the { is akin to a carpenter having to read every label to find the bottle of glue.
As far as you wondering what use typing speed is to a programmer:
1) if you can type faster, it takes less effort to fix cosmetic mistakes and you do so more often. you must have noticed as well when looking over the shoulder of a slow typer they seem to make more errors? or maybe it just seems more tedious because you're waiting on it. you must have also seen that a really skilled typist can make an error and have it corrected before you hardly notice it (which is because they feel their fingers slipped).
2) in a similar sense, if you type faster, it takes less effort to quickly try something out. just type it out, maybe not even immediately test it, because as you see it on the screen you can more easily reason about it and make corrections before you do. if you type slower, you're more likely to get stuck halfway writing a block of code because you're thinking "wait this isn't right" and start doing proto premature optimization (well, that's my problem, I start thinking about what is the best/most concise/pythonic/readable way to write this code halfway, before I even got the rough structure down. I find it's almost always better to first write down something that works).
3) if you type faster you spend less time writing comments on HN and can get back to programming sooner.
At the risk of painting with a wide brush, I am currently under the impression that any developer who sits down and cranks out code non-stop at their maximum typing rate is either :
a) cranking out a complete mess that will require extensive refactoring down the road
b) the protagonist of "Hackers" or "Swordfish"
For what it's worth, I am a reasonably fast typist (~115 wpm, qwerty) and can't even imagine myself ever coding as fast as I can type. I wouldn't mind for this to be the case, though :)
I need to improve my typing speed and reduce the interruption as much as possible.
The blog post[1] Steve Yegge was the one that triggered me to consider touch typing seriously.
1. http://steve-yegge.blogspot.in/2008/09/programmings-dirtiest...
Previously I've thought a lot about architecture, code, algorithms, etc. And then typed that in ~1 hour per day. However when I started doing real TDD with running tests every few dozen seconds, everything changed. Now I actualy code almost all the day - play with ideas, throw them away, implement in a multiple ways, refactor a lot. And that is a blessing when you may implement your ideas as fast as you may, so that instead of analyzing the solution, you verify it.
Other reason is I've changed my approach to application architecture. Previously I've used the standard PHP/Ruby/JS frameworks and fit my code into predefined places, generated scaffolds, etc. However then I started applying DDD, PoEAA and similar ideas. All the advanced design principles require a lot of boilerplate code - a lot of mappers, DTO transformers, domain classes, view models, etc. So I actually need to type ~3 times more code than before.
And then I've started using VIM. You better not make typos when using VIM - crazy staff happens and it breaks the flow.
I wrote a typing tutor a while ago and this is a somewhat common pitfall, to manually handle characters by pulling key codes. Instead you should let the O/S tell you which character was typed (and also check key codes, for things like backspace) which then handles different layouts / locales etc.
Edit: Ok, it works in Chrome - so it's not working for me in Firefox 14.0.1 on OS X Lion.
Now that I can use it, I love it, but I have one request - I'd like to be able to go back and see my stats, please!
KeyboardJS has a basic locales mapping: https://github.com/RobertWHurst/KeyboardJS , Unfortunately it appears to only have en_US at the momment though
This on Firefox 14, Chromium 18, Opera 12, for Linux Mint.
Otherwise, this is great!
EDIT: Does it read the key-code, instead of the character? Is it not possible to listen for the character input?
It occurs both in Chrome and Firefox.
It wasn't even enough to press the corresponding button where semicolon is placed on English layout, I had to actually switch keyboard-layout and then press the correct button to get past it.
In windows, I made my own keyboard layout in Microsoft Keyboard Layout Creator (so that I could switch the symbols to UK but also so I could add some dead keys to AltGr for various unicode symbols). I did "fix" the VK codes for the alphabethic characters, but I guess the symbols are still using whatever the key is assigned by default and I guess JS (at least in Chrome on Windows 7) checks the key code reported by the OS, rather than the value reported by the OS.
On Arch I use the GB colemak layout that came with the distro and I guess it sets all the key codes correctly to where all the symbols are...
i use vim: so please support all vim movements. and the surround plugin. and while at it: my custom templating plugin as well :D.
Well then. Time for me to get busy on one of those touch-type-training applications, that's nearly 2x what I just did.
Indeed at that speed you're sufficiently CPU bound to make that claim.
But can you crack a 2048 bit RSA code in your head within a minute while .. you know? Plus, in the later scene when he was doing the real job, he wasn't just typing at 115wpm, he was simultaneously dancing around at at least 145bpm. So there's always room for improvement.
Also, I live in the shell and typing 200 char long one liners to do something useful and if you are a fast typist very quick too. It's great for generating on the fly reports, searches etc. This is the kind of thing that would take a slow typist a lot of time. Most of slow typists I know don't bother with these things because it takes too long. As a consequence they also get rusty with their shell foo, or never get good at it to begin with.
[1] https://en.wikibooks.org/wiki/Speed_Reading#Subvocalization
Does anyone know when this feature was implemented in Word?
In the writing discipline, people will often tell you to write a first draft without correcting errors, then go back and error-correct on the second draft. But that's not about typing errors, but rather grammatic/narrative errors in your writing.
Since it's being written on purpose as a 'product spec' like doc, company standards dictate that it be written in Word (unfortunately).