Well, it’s now been almost exactly a year since I sat down in front of my laptop in a Wetherspoon’s in Manchester and started to learn computer programming. So much has happened since then - including probably a noticeable degradation in both my eyesight and sanity - that now seemed like a good place to take stock.
Firstly I guess is the question of what I have learned. Well, that’s relatively easy to answer. The amount of things I’ve learned this past year has gone well beyond just programming; it’s altered my daily routine, made me more confident, and perhaps as importantly as anything else, equipped me to carry on learning.
The peripheral parts of learning to program specifically for the web also give you transferable skills; when freelancing, people expect you to do designs, so onto your skills list have to go some graphic design knowledge, typography, and programs like Photoshop and InDesign. I was already a photographer, but I’ve probably learned just as much about good design (graphic, UI and UX) over the past year as I have syntax, design patterns and frameworks. You also need to get a feel for your dev environment, and for me this has meant a switch to using Ubuntu, part of a broader interest in open-source (without strings - Google Chrome, I’m looking at you) that’s seen me ditch MS Office for LibreOffice and Chrome for Firefox as well.
Starting with Codecademy last summer means exactly what you’d expect - initially a focus on JS/HTML/CSS, but with the discovery of Ruby, a slow switch in focus toward the server-side languages. Before my Ruby epiphany I made a simple PHP CMS after following Kevin Skoglund’s Lynda.com PHP course, but the shift to Ruby also spelled (I thought) the beginning of the end for learning online using services such as Treehouse, Codecademy and Lynda. After much frustration with Treehouse’s Rails course - though it should be said their introduction to Ruby course is pretty good - it was time to get back to good old fashioned books.
This is perhaps the most surprising thing; by switching to books, reading them cover-to-cover and having them around for reference, what I learned about my learning style is that online courses aren’t as effective. I find it irritating to pause and re-start videos, to listen to somebody talking and follow along. Books allow you to hack away at your own pace, sometimes quicker, sometimes slower, and the ability to quickly flick to something for reference saw the pace of my knowledge retention speed greatly. At the end of the day, I’m still a ‘wax-on, wax-off’ kind of guy, and it’s only now, having applied a lot of this theory, that I feel perfectly comfortable with it.
Especially in the HN community (and I’m a daily reader) you see a lot of stories of people learning and succeeding at an inhuman rate, which can be discouraging… but I found that with each problem I overcame, the easier it became to tell myself at the next stumble “you’ll work this out, don’t worry”. Though I didn’t really ‘get’ it when I read Zen and the Art of Motorcycle Maintenance seven years ago, I think I must have bitterly thought of the word ‘gumption’ approximately a million times this year. There’s that famous Facebook motto that goes ‘move fast and break things’; well, if you’re on terra incognita, you’re going to break everything whatever speed you go. From persistently failing RSpec tests to batteries dying after twenty minutes (hello trying to install Ubuntu on an Ultrabook), I’d say I’ve seen it all, except I know that I really haven’t seen anything yet.
The other thing that I’d say to voices in the community is that CS theory at different levels definitely does help. After swearing off online courses I ended up trying out Udacity’s CS101 and actually learned a lot from it; for a while my Python skills outpaced my Ruby skills, and the follow-up, CS262 was particularly important for drilling home regular expressions and parsing. Following that I’ve got a book list as long as my arm (which definitely includes the usual suspects like SICP) to get through in order to reinforce the more theoretical side of things, and I hope that my work life will serve to build on this foundation with experience.
TL;DR: If you take eleven months, working three days a week, you can learn the following to a job-ready standard: Ruby (on Rails), Python, JS, HTML(5), CSS(3), Git, SASS.
I now have a job as a UX Developer working with all of the above (bar Python), the first step toward my ideal role as a full-stack engineer somewhere in the future. I would promise more updates on this blog to document that, but let’s just see how it turns out.