Twitter GitHub Facebook Instagram

Daniel Irvine on building software

First steps

16 April 2015

Like many things in life, programming takes practice. That’s especially true for beginners. Variables, functions, arrays, hashes, lvalues, if statements, for loops, classes and other strange constructs are not the sort of thing you can simply read about in books and then instantly know how to write. You need to practice, practice, practice.

My yoga teacher is keen on telling his students that learning handstands is easy. All we have to do is throw ourselves upside down 10,000 times until it becomes second nature. His point is that the instructions are easy, but the body needs time to take it all in.

A friend of mine confidently stated he could teach me how to juggle in just 10 minutes. When I took him up on his offer, he spent 30 seconds showing me a particular technique and said “that’s the first lesson; go and practice it until it’s perfect. Then we’ll move on to lesson 2.” He’d tricked me of course, but the point was simple: instructions can be short and concise, but becoming competent in any skill is much more difficult than simply learning off instructions.

Programming is the same. The first 100 lines of code you write probably won’t make much sense. The second 100 won’t make much sense either. By the time you get to 1,000 lines, you’re probably beginning to understand core concepts. It’ll take 10,000 lines before you’re displaying real competence, and 100,000 before you can call yourself an expert.

Some advice, then, for anyone just beginning programming. Don’t feel you need to “get it” straight away. You don’t. You will write terrible code, but keep at it. Reading books and watching online training courses will only get you so far. Practicing is the only way you’re really learn.

About the author

Daniel Irvine is a software craftsman at 8th Light, based in London. These days he prefers to code in Clojure and Ruby, despite having been a C++ and C# developer for the majority of his career.

For a longer bio please see To contact Daniel, send a tweet to @d_ir or use the comments section below.

Twitter GitHub Facebook Instagram