Realizations: How I got started with programming

_Joshua Comeau is a student participating in the March cohort of the [Web Development Immersive](http://bitmakerlabs.com/web-development/) program. This article was originally posted on [his blog](https://medium.com/@joshuawcomeau)._ My first real experience with programming— not counting an ill-fated attempt to learn C from an 800-page reference manual when I was 13 — happened a couple years ago. I’ve been using pre-written JavaScript and PHP for many years, but I wanted to develop a deeper understanding of what I was using. There was something of a consensus around Python being a great beginner language, so I downloaded the environment and got started. ## Realization #1: Programming is awesome. After learning the fundamentals of strings, arrays, ‘if’ statements, ‘while’ loops, objects and classes, I started experimenting. I made what I dubbed “Mean Pong”, which was a variant on classic Atari Pong designed to be punishingly unfair; your paddle would shrink to a few pixels, the ball would move erratically or smash right through your paddle, and so on. Overall the game was pretty underwhelming, but I was having the time of my life; the satisfaction of creating something is addictive, and the bugs and problem-solving just add to the sense of fulfillment when you get it working. ## Realization #2: It’s Creative. Seriously. Creativity is a funny thing. For some things, it’s easy to identify. With painting, for example, you have this blank canvas and it’s up to your creativity to figure out what to add to it. It’s all open to you, and no two blank canvases turn out the same way. What about programming? Is it like math, where there is a single right answer and it’s a streamlined process with no creative input necessary? I think most people would say it is, and while it can’t be denied that math is at the core of programming, how you use that math is up to each developer’s creativity. It’s more like composing music, where you have the science of sound and harmony at its core: there are 12 notes per octave, and typically only 7 notes within a given key, but _how you use those notes_ is an extremely creative process. The best example of this that I’ve seen is [Project Euler](http://www.projecteuler.net/). Project Euler is a set of math-heavy programming challenges. Once you’ve solved a problem, you can view other people’s solutions. I have yet to see two identical solutions. Everyone has their own personal style, and it’s amazing to see how many different ways there are to solve the same problem. This creativity is a massive part of what makes programming fun. ## Realization #3: There’s SO MUCH to learn. Programming is one of those things where the more you learn, the more aware you become of how much there is to learn (and how little of it you know). Brian Han gave a talk a few weeks ago where he compared JavaScript and its frameworks to a whale: There’s the base language, there’s [jQuery](http://jquery.com/), there’s [Backbone](http://backbonejs.org/), there’s [Node](http://nodejs.org/), there’s [Ember](http://emberjs.com/), there’s [Angular](http://angularjs.org/)… Within Angular there are things like Gulp and Grunt… Don’t ask me, I have no idea.
![](https://d262ilb51hltx0.cloudfront.net/fit/c/700/700/1*2HKvfit0eg28bAMQdBDA0g.jpeg)
The point is, you could spend a lifetime studying this stuff and never learn more than a sliver of what’s out there.
Discouraging? Nah. The optimist in me is excited by the prospect of never-ending learning. I _love_ learning, and my favorite hobbies have been the ones that seemed near-impossible to master. More importantly, you _don’t need_ to learn everything. Mastering the fundamental concepts is the important bit, because then you can quickly and effectively develop the skills to work within whatever language or framework you need to. ## Realization #4: Formal Education Isn’t For Me. When confronted with a pool of knowledge that’s as wide as it is deep, most non-cynics will consider formal education as a way to try and stuff all of that information into their brains. Two years ago I did some investigating into my education options, and came away thoroughly unsatisfied with my choices. ### University. For 3 weeks I secretly audited Computer Science at McMaster University. There was something exciting about slinking around campus like a spy, sitting among peers who had no idea I had no right to be there, stealing education and trying not to leave too significant a paper trail of fake names and bogus student ID’s. I sat in on first and second-year courses, and I learned a fair bit about algorithms, logic gates and system architecture, but absolutely no programming. This isn’t uncommon: it’s called Computer _Science_ for a reason. This isn’t a diss on university, it’s just not what I wanted. I like getting my hands dirty, throwing myself into mountainous blocks of code and problem-solving. CS is all theory, learning _about_ languages but not how to use them. Interesting stuff, but not for me. ### College. There exists a few trade schools and colleges that offer a more hands-on approach. I got accepted into Mohawk and Seneca, and was seriously considering attending Seneca’s 4-year [Software Development degree program](http://www.senecac.on.ca/fulltime/BSD.html). At least, I was seriously considering it until I looked at [the curriculum](http://www.senecac.on.ca/fulltime/BSD.html#layer13). The first problem I saw was all the fluff. Courses like “_Canadian Business Environment”, “Law, Ethics and Social Responsibility”, _and the Liberal Studies Electives peppered throughout. There’s a bigger problem, though. I looked at this curriculum _two years ago _and as far as I can tell, it hasn’t changed at all. Who knows how many years before that it was established? The course curriculum reads like it was written in 1998. The way we interact with technology is changing extremely rapidly. Wearable technology like [Google Glass](https://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CC0QFjAA&url=http%3A%2F%2Fwww.google.com%2Fglass%2Fstart%2F&ei=mAw8U4i3Lee-2gX26YHoCw&usg=AFQjCNE_1rxbVEu695SrYg52nMIjyaitUw&sig2=b9zVuwN2ZAkAX3Yh5qOO3A&bvm=bv.63934634,d.b2I) and Toronto’s own [Kiwi Wearables](http://kiwiwearables.com/) are becoming more mainstream, people are moving from the desktop to tablets and phones and watches, all of our appliances are becoming ‘smart’. Stuff changes blindingly fast, and schools should be updating their curriculums as much as they can to compensate. In the end, I became disillusioned with my education options, and went back to experimenting and learning on my own. ### Bootcamps **Fast forward almost two years. **I was sitting on Steam chatting idly to a friend when he mentioned he knew someone who went through this rigorous development bootcamp called [Bitmaker Labs](http://www.bitmakerlabs.com/). I googled it, and had a “holy shit” moment. I started dusting off that closeted ambition of becoming a developer, seeing that this was a real opportunity to learn something I love and I could actually find work doing this kind of thing. I went to an open house, loved it, and applied. It’s a totally different methodology from ‘formal education’ institutions like universities and colleges. Short, intensive, and _focused_, with an ever-evolving curriculum that’s modeled after the real world. You won’t learn everything in 9 weeks, but you’ll learn the important fundamentals and you’ll leave with the ability to specialize in whatever areas interest you most.
[caption id="" align="aligncenter" width="700"]![](https://d262ilb51hltx0.cloudfront.net/max/2371/1*AOmEUZbnzyJWUdQnp4QMow.jpeg) Some of my Bitmaker colleagues pretending to solve a hard problem.[/caption]
We’re a week and a half in now, and it’s incredible. I couldn’t have dreamed up a more suitable opportunity for learning to develop web applications, and I’m having a blast. There’s a lot I could say about this experience so far, but I’ll save that for another time!
### The Plan. I started [this blog](https://medium.com/@joshuawcomeau) for a few reasons. One was to chronicle my experiences at Bitmaker Labs as a way of preserving memories. I also really like the idea of sharing neat coding tricks and tidbits as I learn them. If this kinda stuff interests you, stay tuned =) _By Joshua Comeau ([@JoshuaWComeau](https://twitter.com/JoshuaWComeau))_