At the beginning of 2010 I decided that I was going to learn to code. At that point I had been working on Lenguajero.com for almost a full year (as the non-technical co-founder), and had realized that learning to code was probably the single most important thing I could do if I wanted to continue working on startups (mine or others).
I spent the rest of 2010 fumbling through various coding projects, some bigger, some smaller. By the time November had come around I’d made a decision, I was going back to school. By this time I had reached a point where I understood the fundamentals of MVC frameworks, had explored a few different languages, and realized that I was years away from becoming a great developer. Taking part-time CS courses at UBC seemed like the kick I needed to start understanding some of the more important concepts behind the languages and frameworks I was working in (and what was this O thing I kept hearing about?)
I registered for two second year courses, Intro to Software Development and Data Structures & Algorithms. My semester has now ended I am thrilled that I made this decision. In general I thought my professors were excellent and I loved attending the lectures (particularly in my Algorithms course). When I look back at what I knew 5 months ago versus what I know now the difference blows me a way. I’m still a long ways away from my goal, but I’ve definitely passed a few milestones.
However, along the way though I noticed a few things that either surprised me, bothered me, or both.
1. CS assignments are really hard. I have a science degree (BS Biochemistry), and none of the assignments I had ever came close to being as time consuming as some of the coding projects I worked on this past semester. That said, none of the assignments I did for my biochem degree ever came close to giving me as much satisfaction as writing BFS and DFS algorithms did for my first Data Strucutres & Algorithms assignment.
2. My fellow students didn’t seem to know much about web development. It’s entirely possible that I just met the wrong people, but I was genuinely shocked that I didn’t meet a single student who had written at least one basic web app. Going into the semester I’d expected my classes to be filled with people hacking away on cool ideas, if not for the web then for iPhone or Android, but that was not the case. When I was showing a couple of people Lenguajero one of them asked how I built the GUI (his words) for it.
Him: “Oh, so you wrote all the code in HTML?”
Me: “Well no, that’s just what the browser renders. The site is written in Python/Django and it’s running on the Google App Engine.”
Him: Glossy look in his eyes.
That might seem like I’m being a bit of a snob, I mean the guy is only 20 years old and in his second year of university, but it is representative of the interactions I had with most of my fellow students when I tried to discuss web development. This is obviously not the case everywhere (otherwise we wouldn’t have Facebook, Google, or hundreds of other startups that grew out of dorm rooms), so I’m not sure why that I didn’t meet more students building companies (or at least exploring the idea).
3. There were (relatively) a lot of women in my courses. Yes this is a male dominated field. Yes it will probably remain that way for quite a while, but I’d say at least 25-30% of the students in my classes were women. I’d expected the percentage to be significantly lower based on what my wife had told me about her experiences as a CS major at Waterloo (class of 2004). I’m sure I could track down some data to either prove or disprove this, but I’m just going to throw out the observation that it seems like more and more women are entering computer science.
4. We talked about the clients we were going to work with/for a lot. I found this really weird. The first couple of times a professor mentioned it I didn’t think much of it, but by the end of the semester I was beginning to wonder if I was a cog being assembled to go work at (Insert generic software consulting company here). “When you’re talking with a client you need to do this…”, “Clients will expect detailed development road maps…”, “Remember that your clients might not ever know why you did X if you don’t clearly write Pre and Post conditions.”
Why aren’t we talking in terms of when we’re building our own systems, or working with a team of developers at a startup that’s experiencing a banana shaped growth curve? Now obviously neither case will be representative of what all the students are going to do, but it seems to me that our professors should be encouraging innovation and entrepreneurship. I did not get that feeling at all and I think it’s a shame.
I’ill be starting summer courses next Monday. I’ve chosen Intro to Computer Systems and Intro to Relational Databases. My goal is to get as well rounded a CS education as I can in 2011 so if anyone has suggestions on courses that are a MUST take before the end of the year please let me know.