
We’ve talked about practice and breaking it into single units of learning. Now let’s up the game a little more. Not only should that one unit be educational, you should learn it so well that you have it mastered before you move on to the next step.
If you are practicing to improve, you want to maximize its effectiveness. Tom Cruise tells the story of working on Rain Man with Dustin Hoffman. After many takes for a particular scene, Cruise demanded, “How many times do we have to do this?” Hoffman answered, “Until it’s right.” That exchange had a powerful effect on Tom Cruise’s own work ethic.
You want to do the same with your daily practice. Do it until you get it perfect. Don’t leave it until you really have it nailed. What would that look like?
Let’s say you want to get faster at touch typing. You can go to typing.com and work through a particular practice. Pick a target speed for that lesson and make sure you achieve it with no mistakes. Or to really up your game and keep yourself honest, you can go to TypeRacer.com and turn on “Instant Death Mode”. In this mode if you make a single mistake you are kicked out of the race! At first you will need to type much more slowly to make sure you don’t make a mistake. But gradually you will increase your speed and accuracy. I was always impressed when I watched someone type a long line of code effortlessly and perfectly faster than I could read it. Now, with practice, I’m getting closer to doing that myself.
Let’s take another example: you are learning a new programming language. Every language has its own unique idiomatic patterns. You don’t want your Python code to look like it was written by a Java developer. One problem with new Java developers coming from C is that they tended to write procedural programs, missing out on the benefits of Java’s object oriented language features. (In fact many programs still suffer from this problem!) How do you make sure you are following the idiomatic patterns for your chosen language? Ask Google. Get a book. Check out an open source project. Be resourceful!
But once you’ve done that, start writing programs in that language. The exercises in Bruce Tate’s “Seven Languages in Seven Weeks” books guide you through learning a new language based on the strengths of that language. If the language you want to learn is not in one of his books, you can use the exercises from a language similar to the one you want to learn. They should translate reasonable well. Work through that exercise and get it working properly. Then refactor it so that it looks like a native developer wrote it. How to do that? You need to see how a native developer writes code. Check similar solutions in that language on the Web. Have a friend who knows the language well check your code. Check on GitHub. Use searchcode.com to find existing code that solves the same problem. Don’t just write Python as a Java developer. Know it as a Python developer!
We learned earlier that 1% improvement every day results in a 37-fold improvement by the end of the year. But if you are improving every day, you need to raise the bar every day to reach 1%. Perfect one new skill every day and you will be a monster by the end of the year!

