So anyway, I'd really appreciate some input from my CS-y friends. You may or may not know that I've been using the opportunity of Zoe starting part-time preschool to effect a significant career change. I've had regrets for a long time about going into the social sciences, and figured this was a good chance to explore other options. After taking a bunch of MOOCs, I've decided that I really like programming and would like to become a programmer of some type. (No, I don't have much more of a career goal than that at this point.)
The question is, what's the best way to do that? The MOOCs I've been taking have been much higher calibre than I imagined possible, but I'm not entirely convinced I can MOOC my way to a new career. Here are the options I've come up with.
- Try to learn everything from MOOCs. It's certainly controversial to suggest that a MOOC education could replace a university education, but Coursera and Udacity do have classes in pretty much everything in the CS curriculum. (See below for what classes I've already taken/plan to take.)
Pros: Cheap, flexible, and I know the classes are high-quality. (And hey, if jcreed is enjoying his edX class right now, I can be sure there are good classes at every level, not just introductory ones.)
Cons: I can't prove I've learned anything. How hard will it be to get a decent job with no degree? (Coursera may eventually have some sort of certification process, which may or may not be helpful.) Also, even if I can replicate the coursework, Coursera doesn't give me access to internships, which I think is an important part of CS curricula.
- Try to get a master's from a school that teaches CS to people with non-CS backgrounds. Some universities (e.g., Mills College) have programs intended for career-changers, and some (e.g., Pitt) provisionally admit non-CS people contingent on their completing the classes they haven't already.
Pros: Good compromise option: more "legit" than MOOC learning, with presumably more internship and job prospects -- but easier to get into than top-tier universities.
Cons: It would be distressing to abandon amazing, free MOOCs in favor of paid classes that aren't top-notch. I took mediocre CS classes as an undergrad, and I don't want to do that again.
- Try to get a master's from a top-notch school. CMU, Stanford and Illinois (bonus: online!) have master's programs that are at least in theory open to people without a bachelor's in CS.
Pros: Get to learn cool stuff in depth from smart people. This is definitely the most appealing option if it's plausible.
Cons: Persuading a good school to let me in based on MOOC accomplishments may be even harder than convincing a good employer to hire me based on MOOC accomplishments! Also, freaking expensive (but may pay for itself if it enables a better career).
And, if I'm working toward a grad school that requires some CS background, I have two sub-options:
- Aggressive plan: If I need to take around eight more classes before I'd be ready for master's level classes (see below), I could easily do that by fall 2014. However, that would mean spending all my available time on classes, with no time for side projects. Also, I'm uncertain of my ability to convince an admissions committee that I'm worth admitting by this Christmas.
- Leisurely plan: I could take more time and plan to apply in fall 2015, which would give me more time to work on open-source or other projects and be able to submit a portfolio instead of just a few grades. That's a lot less stressful to contemplate, but it also means not getting a real job till I'm freaking 39.
It may seem like it doesn't matter which of the above I'm aiming toward, since I should take the same next steps either way (learn C, take systems, take integral calc). However, it does affect the timing. If I go with the aggressive schedule, I have about six weeks to learn C and convince Kesden to let me take Systems this summer so that I can get a CMU grade before application season. If I go with the leisurely schedule, I'd probably take Coursera's Systems Class, which is $7500 cheaper but won't give CMU anything to evaluate me with. But which path is better depends on things I can't know, like whether grades or a portfolio are a better way to woo an admissions committee.
So, I would appreciate any thoughts my friends might have on what path you'd choose if you were me, or if nothing else what questions you'd be asking yourself to figure out what you should do. There may be other obvious options I'm not considering, too (like a master's in something other than straight CS?), so let me know if any of those come to mind.
If you want to read more about where I am so far before forming an opinion, the below catalogs the classes I've taken so far and the ones I think I still need to take.
|Relevant classes so far:||Still need to take (open for revision):|
* Intro to CS, in C++ (forever ago)
* Data Structures, in C++ (forever ago)
* Prob and Stats, crappy non-calc-based edition
* Logic and Proofs (hi Doug!)
* Differential Calculus
MOOC (no real evidence of grade)
* MIT's Intro to Programming
* UW's Programming Languages
* Princeton's Algo class (Sedgewick!) (in progress)
|* a systems class|
* a theory class
* something like OS
* integral calc (planned for this summer)
* another semester or two of calc?
* linear algebra
* calc-based prob & stats
* a bunch of applications classes
(Awkward but probably necessary background: I got A's in all the classes listed above, except I'm on track for a high B in algo. And I'm pretty sure I can rock the GREs; my scores have expired, but I have previously gotten 800 quant/800 analytical and 790 quant/6 analytical. So I think my grad school applications would look very thin on background, but what IS there should look promising.)