I dived in to learning programming in 2012. If you’re interested in doing the same I’d like to share some of my recommendations with you.
For the last year or two there’s been a lot of buzz around efforts to introduce more people to programming. We’ve seen the launch of online platforms like Coursera, Udacity and EdX, all leading their offerings with computer science courses. The Code Academy startup offers interactive coding lessons. We’ve seen changes to the UK’s secondary ICT / Computer Science curriculum to make things more about programming and less about subservient use of MS Office. Last year saw the launch of the $25 Raspberry Pi computer to encourage young people to tinker, play and experiment.
Of course, there are lots of great resources that pre-date the last couple of years. So if you want to learn to program in 2013, there are lots of places you can go. Everything I recommend below is free.
What do you want to learn?
If you’re interested in programming, you might have a specific end goal in mind. Or you might just want to get a feel for programming and computing as a whole. My desire, starting 2012, was “to be able to get computers to do useful stuff”. Over time, I’ve been able to develop a stronger understanding of what I’m interested in specifically.
My suggestion would be to learn some basic principles, gain an appreciation of the landscape and what you might want to do, and then move in that direction when you’re ready. To do that, I’d advise you to:
Start with Stanford’s cs101
This course gives a good overview of how computers work and gives a nice introduction to computer programs.
It has a great mix between listening to an expert (Stanford’s Nick Parlante) and diving in and doing interactive programming exercises yourself. The course is bite-size, and takes you on a really useful journey through the conceptual terrain. The difficulty curve is quite gentle.
The course is divided into ‘weeks’. Each of these takes about 3-5 hours in total. I found this quite easy to fit in with my schedule. The course is currently open for self-study, so you can take it at your own pace.
I had a little go at Code Academy, but it didn’t hold my interest as strongly as this course did. This course felt more holistic and profound, whilst retaining a good degree of hands-on work.
This course might sate your appetite in itself; but if you’re hungry for more afterwards, these more difficult courses will take your understanding to the next level. So your next step might be to:
Follow-up with EdX’s Cs50x
This is Harvard’s introductory computer science course.
The format is pretty much: “We videod all our lectures, and have made the specifications for problem sets available online. There’s an online discussion forum to discuss problem sets and other ideas about and beyond the course.” So the organisation of the course is a bit old-school: you’ll watch a couple of hours of video lectures each ‘week’, and then do a lengthy problem set for homework, which will take around 15-20 hours.
The difficulty curve is pretty tough, and if you went into this with no prior experience you’d have a hard time.
The course dives deeper into programming specifically, using the C language, and does a really good job of starting you off as a programmer. The course gets you thinking in algorithms and introduces the comcept of computational efficiency. “Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development.”
The course has you use the CS50 appliance – a virtual machine running on your computer, using the fedora linux distro. It’s also very good for simply increasing your confidence and literacy in using software and operating systems.
I’m over half way through this course and having a great time so far. I’ve got three problems sets, my final project, and final exam to do before April 15.
The current run-through of the course finishes on April 15. I imagine that course material will still be available after this data. If this isn’t the case, you could download all the materials in advance of this date.
Or follow-up with Udacity’s CS101
Udacity’s CS101 takes a more bite-size approach. This course is designed for online consumption. It’s all delivered in-browser, with short videos intersected with interactive questions or small programming assignments. Each topic is rounded off with a series of homework questions.
The course has no time limit, so can be taken entirely at your own pace.
This course is much more approachable than EdX’s CS50, and feels a little more abstracted, as it’s using the Python language rather than C, but you still very much get your hands dirty with coding. Over the 7 units, you create a working search engine, which is very cool. You might not feel much ownership over it, however, as you have to do as you’re told.
To make sure that you use your powers for good rather than evil, take a Human Computer Interaction Course
An HCI course will get you thinking about how to design products that are easy to use and make the world better. Coursera’s excellent HCI course is just the ticket. You can watch the videos and take the interactive quizzes, or do a version of the course that requires you to do a design project. This is a serious undertaking – I spent about 25 hours a week on this course – but is a great way to learn.
Tips for making your learning effective
- Make sure you plan enough time to fit in the learning
Think about your learning will fit in your schedule, and make honest commitments. Let friends and family know what you’re up to.
If you’re a commuter, I’ve found watching lectures on the train to and from work to be a great way to frame the working day.
- Pace yourself
There’s so much out there to learn and do, so many people to connect with, and so many experiences to have that it’s easy to overstretch and try and do too much and feel disheartened when you can’t do it all. Focus in on the things you enjoy best.
- Follow what interests and excites you
There are lots of ways to learn, and lots of different topics to learn. The internet is awash with free courses and resources. Your investment and risk in sampling each is minimal, so don’t be afraid to try and few and stick with the ones you like best.
- Learning with others can help
It can be quite lonely doing these courses, particularly if you get stuck.
Online forums can be very helpful for answering specific questions. There are some excellent people in there who will generously help you with your questions. But for all of these programming courses, I’ve found the forums too noisy to spend much time in. (Maybe I haven’t invested enough time in them?)I’ve found that forging closer connections with other learners is a powerful and motivating, way to learn. I’ve managed this in some of my online learning (eg MOOCMOOC), but not in any of these computer science courses. I’ve relied on personal friends to chat over the course in a more informal way, and to trade war stories about a challenging bit of code.
- A mentor might be very helpful
I’ve done all of these courses pretty much on my own. When things get tough, and when you’re not feeling confident, it can be hard to keep going. In the wilds of the internet, it’s very easy to be just an another anonymous consumer, and just as easy to drop off the radar. No one else is responsible for your learning, or for encouraging you along. The majority of people who sign up for a ‘massive open online courses’ drop out.It might help to find someone knowledgeable to support you in your learning. Just knowing that you can call on them to ask questions, or to help point you in the right direction might help.
- Build something
Your new skills will help you create things you wouldn’t have been able to before, and expand your mental and creative horizons. Don’t be scared to take your skills for a spin and to make something awesome!
Does anyone else have any advice to share about learning to programme? Are any of you planning to do so this year? If so, what are you going to start with, and what do you hope to learn?