Introduction:
This is a blog for me to track my progress as I try to become a computer scientist beginning at age 26. I don't know how extensive this blog will be, but I hope that I can keep it up long enough to be meaningful to me and to whomever might read it. If things turn out ideally, perhaps reading this can be a source of pride for me and inspiration for others. If not, at best it will be interesting and at worst, embarrassing.
I might as well start with an introduction. This will be long and will probably not be worth reading unless you really want to get to know me, or my story. But I suppose it will help understand where I'm coming from. The "short version" is that at age 26, I suddenly realized I wanted to be a computer scientist. The long version is below.
Background: 1985-2007
I come from an accomplished family. My father was a MIT PhD and a professor at the Booth school of business at the University of Chicago (he passed away in 1995, when I was 10). His father is a Harvard PhD and an emeritus professor. My mother was college-educated, and is currently in graduate school at age 53. My sister is in medical school. My brother is soon to enter a biology PhD program.
As for me, well on the surface I don't seem so unaccomplished. Like my siblings, After graduating from a top private high school, I attended the University of Chicago, receiving a degree in Physics with General Honors after four years. But while I was there, I didn't really apply myself, content to work in an easy and (relatively) lucrative summer job instead of finding research positions; content to sit in a major that I knew I could do, even though it didn't excite me.
Fast forward. In the five years since I graduated, my sister has piled weighty accomplishments like post-bac degrees and Fulbright scholarships onto her resume and entered medical school (a top 10 one, and she's on a full scholarship), and my brother has been accepted into a biology PhD program, with full stipend of course. But I've been floating about like a boat in an eddy.
After Graduation: 2007-2009
Having no great love for physics, doubting my own abilities thereof (despite decent grades), and no research experience to boot, I didn't think to seek a position in a physics lab, or even at some company that could use a physics major. Instead, after graduation I somehow found myself a biology research position. Coming into the job with no experience, I managed to convince myself that I would summon both the motivation and the passion to learn what I needed to know, and succeed in a difficult research field. As it turns out, I was optimistic.
I had neither great aptitude nor great love for immunology. I learned enough to do my job (more or less), but I didn't find that spark that made me stay up late reading papers and textbooks, or plan new experiments while daydreaming at lunch. When you're in research, drive is as important as ability and knowledge - more so even - and I had little ability, less knowledge and even less drive.
After initially being hired with the possibility suggested that I might enter a PhD program after two years, when the time had elapsed, it was mutually understood that I wouldn't be working there any more. Seeing the end approaching, I dithered a bit thinking about what job I should do next, and then hit upon teaching abroad. I had studied Japanese in college, and I was always seeing those internet ads calling people to teach English. Why not? I wanted to be a teacher, I wanted to become fluent in a foreign language, I was interested in Japanese, and I needed a job. So after spending perhaps all of 15 minutes googling "teach English in Japan" and the like, I had found a company and applied for a job. A month later, I had been interviewed and accepted. Then I stopped worrying; I had a job, and that was all that mattered. Future? What future? It was all so far away anyway.
Doldrums in Japan: 2009 - 1/2012
Thus the Japan chapter of my life began, a chapter I'm still in now. I've been here for a bit over two and a half years now, teaching English. The salary is nothing amazing but it's enough, and the workload is very light - too light. In fact, you often feel completely worthless, as your job consists largely of sitting in the teacher's office pretending to be working (the job is technically an "assistant teacher" job - you're not actually responsible for a class' education). Perhaps it was this useless feeling that woke me up, but I'm more inclined to believe it was just a motivating factor. See, I had been in this job for a bit under two and a half years - until about January of this year - before everything changed. Although I had kind of a joke job, I was content with that, complacent. I had everything I needed for the time being, and I always boasted of being a non-planner; whatever happens, happens.
So what happened then? Well, to begin with, I don't have many friends here. I'm somewhat of a quiet, reserved guy, and on top of that I'm in a foreign country. So my number of close friends is quite small. Really, it's one - Noboru, a Japanese guy who's a co-guitarist in a band I'm in. Noboru and I get along famously, practically buddy-comedy levels. We hang out all the time, and there were many times when he was the only thing keeping me sane in Japan. But in January of this year, Noboru suddenly sent me a text message: "I've decided to quit my job next month." A further text: "I'm going to move to Australia and learn English." I was stunned. He had always complained about his job, a high-level position at a small instrument maker, but had never really indicated he even wanted to quit. He had been there for almost 10 years, had achieved a good deal of seniority, and made a good amount of money. Why did he want to quit? He told me he felt like he wasn't accomplishing anything, that he needed to do something that was meaningful. He said he always wanted to learn English, and at close to 30, his window of opportunity was closing. Furthermore he surprised me by telling me that he envied me; he envied that I was living abroad and learning a foreign language, that I was chasing my dream.
Except, I wasn't chasing my dream. What was my dream? I didn't have one. I just existed. I went to work, got my paycheck, went home. I never thought about the future because it was too unknown, and not the least bit exciting. In all of the emotions I felt in that time, like surprise and worry and loneliness, the biggest of them was jealousy. My best friend was going to be leaving, and even though he was older than me, though he was leaving behind a lot of money and security for an uncertain future, I felt jealous. But now I was woken up. The only thing missing was me knowing what my dream was.
Discovering What I Want To Do: 2/2012
Luckily, I didn't have to look too far. I've long been a listener of science podcasts, and on one of them, I heard someone discussing some of the cutting edge technologies that suggest what is around the corner in our scientific advancement as a species. Things like nanotechnology and genetics were interesting, but one stuck out especially: artificial intelligence. Specifically, it was the discussion of a robot built by Hod Lipson at Cornell, a robot that taught itself to walk, and could deduce equations from looking at data. It was fascinating. Hearing about it, I found myself thinking about all of the questions that I had, and lamenting that I didn't have the knowledge to better understand the research and the kind of things I was interested in. And maybe it was all timing, but that's when I realized I wanted to be a computer scientist. With my friend leaving, my life was at a crossroads. Knowing that I would soon be alone, simple routine and complacency were not an option. I had to think about what I was going to do, and this was it. I wanted to study AI.
But then the $64,000 question: now what? I need to learn. I decided that I wanted to get a PhD, but what school will accept me? I have a math background in the form of calculus from my physics education, but besides general savvy and a Scheme course in high school, I had nothing of computer science education. As a high schooler, I had flirted with the notion of learning programming, but being bored with learning to write simple functions when what I wanted to do was make video games, I never went far. Now, I was 10 years behind the curve. I contacted various professors looking for research positions, but as one might expect, my anemic resume didn't impress many of them. So, I figured I would have to go back to school. I briefly looked into various computer science master's degree programs, but my realization had come just a hair too late for the application periods of most schools. It would seem that I have at least a year to wait.
Self-Education begins: 2/2012 - Present
But at the same time, that's an opportunity. I have a brain, the internet, and a lot of free time. I have a decent job and low expenses. I can study and I can save. So now, for the first time in years, I have a plan. Study. Save money. Apply to CS master's programs late this year. Enter school in fall of 2013. Do research while getting my master's. Apply to PhD programs probably late 2014. Get my PhD 4-5 years later. Naturally, the further out I project, the foggier things get. But I don't to see the future; I just have to focus on doing the right thing now.
So, that's the story. Although I was long-winded, I left a lot of things out. What's pertinent now is what I'm doing to educate myself, and hopefully that's what the blog will focus on. I'm incredibly fortunate to be living in a time period where education, especially computer science education, is so widely available at a high level for free on the Internet. I can only hope and expect this will continue to expand as time goes on.
_________________________________________________________
Progress Overview:
So let's enumerate what I'm taking.
My first class was the Introduction to Computer Science course (6.00) on MIT's OpenCourseWare site:
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/. I began this class on February 3rd, 2012. The course is in python, which is great because it's not only a super easy language but also widely used. The course taught or touched on a lot of fundamentals, like big-O notation, recursion and dynamic programming (still a nemesis for me), object-oriented programming etc. Doing the stuff in this course made me feel confident that at the very least I could do this. I've even tried some projects of my own; python is so easy to use. I've completed up through the 10th problem set, but at this point I somewhat feel that I've accomplished most of what I need to from this class, so I've since branched out. I might return to the class at some point to finish the remaining two problem sets, but who knows.
Now, I'm taking four classes:
- Stanford's Programming Abstractions (CS106B): http://see.stanford.edu/see/courseInfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e
- Stanford's Coursera site's Design and Analysis of Algorithms 1: https://www.coursera.org/algo/lecture/index
- MIT's Linear Algebra (18.06): http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/
- Udacity's Building a Search Engine (CS101): http://www.udacity.com/overview/Course/cs101/CourseRev/feb2012
From here on I'll refer to them by shorter names. Here's the progress I've made in each:
106B: Three lectures, completed first problem of first problem set.
Algorithms: Watched three sections, completed first problem set.
Linear Algebra: three lectures
101: Watched about 4.5 units, various homework problems.
Comments on the courses thus far:
- I don't really know what to expect from 106B. I decided to take because it seemed like a logical "second programming class", and because it teaches a bit of C++, which seems like a useful language to know. Beyond getting used to the different syntax and other differences from Python, getting a C++ compiler working and with all of the libraries and whatnot was a big pain. I seem to have reached a stable state in that regard, but I continue to be wary. I can tell why Randall Munroe wrote a comic praising the simplicity of Python - it really is quite amazing, at least compared to my limited experience with C++. As for the class itself, like I said I don't really know what to expect. I hope they extensively cover data structures because I know that's a fundamental area for CS students to cover.
- The algorithms class seems interesting. The professor, Tim Roughgarden, has this somewhat CS-cool-badass attitude to him. His teaching style is clear but he speaks very fast and I often find myself having to rewind to gain a full understanding of what he's saying. Some of this has to do with my choice to take copious notes during all of these lectures (except for the udacity ones). It might seem silly to take notes on a pre-recorded class, but it's something that I've done since college and I find that if I just watch and don't write anything down, I often don't retain as much information. It's nice that videos lend themselves well to this. As for the course content, I've been able to understand everything so far and I got everything correct on the first problem set, but I wonder if things are about to get a lot more complicated. Maybe it's just the attitude of the professor that contributes to this. Not in a bad-way, but I feel like sooner or later he's going to cover some really complicated stuff and just breeze through it.
- I had settled on taking the MIT linear algebra course and bought the textbook - rather expensive, although average for a textbook. Then I found a class on Stanford's SEE site (same as the programming abstractions class) that was a more applied version, so I though to take that. But after a few lectures of that one, I determined that it was a bit over my head, so I switched back to this one. Glad that I'm not wasting the money I spent on the textbook. There are lots of math classes I plan to take - the three key ones being linear algebra, probability and statistics and differential equations. After I cover those bases, or at the very least after I finish this linear algebra class, hopefully I can return to that Stanford class and understand it all. The MIT professor Gilbert Strang is a good teacher, with some endearing mannerisms (for example whenever he's finished some thought or section, he says "OK" with a degree of finality as if to say "well you guys should understand that, so let's move on"). It's still somewhat difficult for me to conceptualize matrices - how they act on each other, what they mean - but with time and effort I expect it will get better.
- The 101 class hasn't introduced much new knowledge, but it is a lot of fun, and it's nice to have immediate practical use for what you're doing, instead of the more pedagogical feel of most of the other classes. And I'm really excited about some of the other classes coming up; I've enrolled in just about all of them so come April 16th my class load will increase a lot (but in a good way).