You Can't Learn to Code in an Hour

I learnt to code when I was 15, by watching hours and hours of video tutorials about writing C# applications in Visual Studio, and copying code out of programming books.

Wait, no. I learnt to code when I was taught programming in Visual Basic for a year at college (high school).

Actually, I learnt to code in my first part time programming job, where I had to make a web application using Python and Java.

Scratch that, I learnt to code in my first year at university, where I was taught Java, data structures, algorithms and discrete mathematics.

I’m 22, and after 7 years of programming (the last 5 more seriously), I think I’m finally starting to get the hang of it. This isn’t just my experience, this is how many of the programmers I know have learnt. It’s not something you learn in an hour, it’s not something you learn in a year. It’s a skill that you learn over many years of challenging yourself to learn new things, and practising your existing abilities, and that’s only if you can learn to code. Some studies suggest that there are groups of people who will find it far more difficult, or impossible.

So when I found Execute iOS, I was a little annoyed. Execute follows Sam Soffes, a very experienced iOS developer, teaching Josh Long who has no previous programming experience, how to be an iOS developer in 3 days. That’s from no programming experience, to submitting an app, in just 3 days.

I’m sure the teaching is done well, Sam is a brilliant developer. And I’m sure the production quality on the whole course – book, videos, and source code – will be fantastic. I wouldn’t expect anything less from these guys. But it’s not going to teach anyone to code.

They claim that the introduction to programming takes just 1 hour, but I think this misrepresents the effort needed to actually take in the information. You can tell someone how to write a loop, or how to write conditionals in a programming language, but them realising what that means takes far longer. How does that effect the state of the machine? How does it effect the progression of the algorithm? How does that conditional actually work? These are all crucial to being able to write useful software, and all take experience and practise to learn properly.

Another issue with the course is that I think it tries to do too much. It teaches how to program, interacting with UI components, animation, data persistence, dealing with system APIs, custom controls. All of this is in Objective-C, which as much as I love it is really just a more complicated version of a language designed 40+ years ago to be fast, not one designed recently to be clear and understandable.

I found, and I’ve heard from many others, that the best way to learn is to follow the instructions for something basic, then modify it in your own way to prove to yourself that you’ve understood the example. This only works when learning in small chunks, otherwise what you’re being taught doesn’t make enough sense. It also only works when you decide what you’re going to change, and fail repeatedly doing so. I’m worried that diving into all of the topics that Execute covers, will leave readers confused, with only very basic knowledge, and a complete lack of understanding.

Finally, in the questions answered video, the ’new programmer’ Josh says he actually has experience in programming PHP, Ruby on Rails, HTML and CSS. While these last two aren’t programming languages (only markup), they at least show a certain level of technical skill. For Execute, he and Sam pretended that he was a complete beginner, but I doubt he will be asking the questions that a beginner will be asking, Execute might assume more knowledge than they think.

What actually is software? What is a programming language? What is source code? All of these, as well as a mathematical background, form the most basic level of knowledge, and one that many people don’t have. The questions answered video talks of basic programming as “views and view controllers, and table views…”. These are not the basics of programming.

I think the course will serve as a fun, and inspiring introduction to coding for non-programmers. But I doubt many people will come away with actual skills, instead just getting a taste for what will be possible when they really learn to code, and that it will take years before they will be able to create high quality software like the Execute app themselves.

If you really want to learn to code, and want to invest time that will give you real skills, rather than just inspire you and leave you with no understanding, I recommend something like Codeacademy or Treehouse. I seen Code Academy, and it looks like a pretty basic introduction, and I’ve heard from others that Treehouse is good. I first started learning with the original series on C#, which I liked because of the video tutorials with simple explanations. The first 3 videos in the new version of that series are available here.