CS friends: please give me career advice!
Mar. 25th, 2013 05:06 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Wow, it's been so long since I've LJed, I had to hunt around for the "post" link!
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.
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.
(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.)
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): |
Actual classes * 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.)
no subject
Date: 2013-03-26 12:25 am (UTC)Dunno, I wish you the best of luck :D
no subject
Date: 2013-03-26 01:17 am (UTC)At least with the two I've been taking this semester, the lectures and assignments are identical to the ones given to UW/Princeton students (except the algo ones were scaled back a little because they're done as partners exercises at Princeton). However, the exams were a lot easier because they were multiple choice. For example, one of the questions on our exam was almost identical to question 4 here (pdf link), EXCEPT ours was multiple choice while UW students have to actually write out the described function by hand. (MUPL is a tiny made-up language we wrote an interpreter for in Racket.) AND, ours was open-note and theirs wasn't. I probably would not have passed the actual final exam, at least with the amount of studying I did for the Coursera exam (namely, half an hour's worth).
no subject
Date: 2013-03-26 12:28 am (UTC)I will say that if you really like programming, that is great! My experience has been that it really speaks to some people and less so to others.
It's kind of received Silicon Valley wisdom that some people can code and some people can't. I think that it is really doubtful that this is true, but it certainly seems to me that some people love to code and others don't. It's good to know which bucket you fall in!
I guess the UW class is over now? How was it?
no subject
Date: 2013-03-26 01:35 am (UTC)I learned a ton from the UW class. My frustration, particularly early in the class, was that he tends to pick really abstract examples to make points about code. I mean, like, all the functions were called "foo" and did something silly and useless, which is fine when you're trying to just make a point -- but sometimes it meant it took me a while to try to figure out what point he was trying to get at, because there wasn't a motivating example of when this concept might be relevant.
But then, I look back at the fact that I wasn't that comfortable with recursion when I started the class, and didn't even know what functional programming was, and it makes me realize that, even if I have to scratch my head and think for a while to remember how to force a promise or what the base case in tail recursion is supposed to be or whatever, I have a much better understanding of the choices programming languages make and how they shape the way we use them than I had two months ago.
Also notable about the class was that I assume he filmed all the lectures on the same day, because he was wearing the same shirt in every single video. In the wrap-up video he finally wore a different shirt, apparently because his best friend said he should demonstrate that he does own more than one. :-)
no subject
Date: 2013-03-26 09:00 pm (UTC)yes yes yes. i used to love those things as a kid and i definitely see a similarity when it comes to arguing computers into doing my bidding. :)
i don't know that i have much useful advice. in programming especially, there's definitely a career path that doesn't actually require you take classes at all -- lots of people are self-taught and do well. the academic background arguably has its unique advantages, but there's really no reason you can't, starting RIGHT NOW, do some social coding, contribute to some open-source projects, and get a job in which you can grow your existing skills.
you can always go that route and selectively take classes to gain more in-depth knowledge (e.g. OS or systems), later. though it does depend a bit on what SORT of programming work you'd like to do -- database management? networks? security? server management? web stuff?
whatever you decide, i'd highly recommend finding some local groups to hang out with. there are often group hack sessions, pair programming events, and talks. i'd highly recommend GDI: http://www.girldevelopit.com/chapters/pittsburgh
no subject
Date: 2013-04-10 01:13 am (UTC)Part of me is like, "Yeah, I got this!" but then I look at stuff like the projects that are listed in the Gnome Outreach Program for Women and I'm like "Um I don't even know what most of these projects are about." So I'm not really sure what it takes to get from here to there. I don't even know how I go about figuring out which of the types of programming work I'd enjoy. :-p
"i'd highly recommend GDI"
I'm actually signed up for their coding night later on Thursday! :-) I've never been before, but I'm excited about it.
Sorry for the late reply -- this thread seems to have gotten away from me while I was out of town.
no subject
Date: 2013-04-11 06:37 pm (UTC)the only way to figure out what types of stuff you'd enjoy is to try a bunch of different stuff!
no subject
Date: 2013-03-26 09:04 pm (UTC)Anyway, I really like Dan, and it's good to hear he's having an influence on people!
no subject
Date: 2013-03-27 01:46 am (UTC)no subject
Date: 2013-03-26 02:25 pm (UTC)no subject
Date: 2013-03-26 05:48 pm (UTC)no subject
Date: 2013-04-11 06:38 pm (UTC)no subject
Date: 2013-03-26 02:44 pm (UTC)1. something to consider wrt the proposition of trying to learn everything from MOOCs, which i thought of when reading your comment mentioning partner exercises, is the social & collaborative aspect of it. a bunch of meta-educational stuff i've been reading & discussing lately has been about how much students teach each other - how much learning goes on outside the classroom, and the discrepancy in ability/success in the absence of that learning.
2. the biggest difference i've realized between taking first/second-year CS courses and actually being able to work as a programmer is the ability to spec out a project from the beginning & iterate on that design. courses like OS teach this by basically throwing you in the deep end - your grade depends on figuring out that process, but there's no real guidance. software engineering courses are a little more systematic about it, iiuc, but i've never actually taken one - it might be something to consider. along similar lines, it might be worth trying something like summer of code or other contributions to open source - build up a portfolio on github; do some projects start-to-finish - and whether or not that's impressive to an admissions committee, i get the sense that it's more impressive to a hiring committee than a fancy degree.
no subject
Date: 2013-03-26 08:49 pm (UTC)My biggest worry about going MOOC-only is that replicating undergrad classes is not at all the same as replicating undergrad learning. I mentioned internships above as an example of a non-classroom learning experience you get from going to a good school, but the informal learning is obviously really important, too.
I do feel somewhat lucky in that regard in that I have lots of CS friends even without making any in school. Justin and Doug are constantly challenging me to solve little puzzles and helping me work out concepts I'm struggling with in class and so on. (And it's nice to have something to talk to people about other than baby nap schedules for once.)
no subject
Date: 2013-03-26 09:08 pm (UTC)specific technologies are always evolving, there are plenty of resources out there to learn them, and my academic experience gave me pretty much nothing useful in terms of all the non-technical stuff (collaborative coding, specs, estimates, testing, etc. etc.). the one software engineering class i had was a joke (it was all UML and formal software design methods, which, while sometimes used in the real world, are not in my experience used without extensive modification based on the needs and habits of that specific environment).
i think having a CS background is extremely important in that it taught me how to think like a programmer, how to tackle problems logically and how to structure algorithmic solutions. and of course having that piece of paper is still an advantage when interviewing -- but so is a good portfolio.
in general, a CS education prepares you to go on to pursue a PhD in CS. it is not especially tailored to teach you how to make a living as a programmer.
no subject
Date: 2013-03-26 10:00 pm (UTC)Lots of people drift into software, get decent at writing code and build up a resume, but never learn the fundamentals and get filtered out by the more technical interviews. However, those people do get interviews in the first place because they've done stuff. You're gonna be in good shape to have a decent understanding of what's actually going on (and I want to say I am super impressed that you've managed to motivate yourself to learn so much online), so you need to have done stuff.
Join an open source project. Start an open source project. Start a closed source project and put it on an app store. You'll learn a crap ton about actually engineering and dealing with tools and people and other people's code. And you'll learn whether you like writing code when it's the 15th time you've solved this particular puzzle, but maybe three of the 20 pieces are just slightly different. And maybe you'll learn if you're more of a systems person or front end person or what (not that you can't be all of those things). Plus you'll have war stories. Common interview questions include, tell me a debugging horror story or how would you do this library you're familiar with differently.
GOOD LUCK!
no subject
Date: 2013-03-27 04:25 pm (UTC)War stories are important too; interviewers LOVE to ask about them and you better have an answer. So just get out there and code. I don't really have any recommendations for how to do that, though, because I am terrible at it. I've discovered I don't actually enjoy programming that much; maybe I'm just burned out. I hear there are open source projects people can contribute to?
no subject
Date: 2013-03-28 12:32 am (UTC)no subject
Date: 2013-03-28 01:25 am (UTC)no subject
Date: 2013-03-28 01:22 am (UTC)I'm definitely going to put a lot more thought into how to get more coding experience in the near future, instead of focusing solely on what classes to take next.
no subject
Date: 2013-03-28 01:20 am (UTC)The master's in CS program is, I think, after your time, so I don't think you would have met those students? I actually only heard about the program in the first place because a friend who's in Google HR remarked that she had been very pleasantly surprised by students from the program. I guess that tells me that (a) yeah, a master's only is seen as a little dodgy but (b) maybe the CMU program is good despite that.
I think what I'm hearing here makes me think I need to spend a lot more time thinking about how to get coding experience and a lot less thinking about how to take what classes.
no subject
Date: 2013-03-28 02:06 am (UTC)no subject
Date: 2013-03-28 04:02 am (UTC)http://www.etsy.com/hacker-grants
no subject
Date: 2013-04-03 05:49 pm (UTC)The trick will just be getting interviewed and getting the first job. Honestly I suspect you have more background than you realize from being seeped in CS stuff through your entire adult life. I'd be tempted to start interviewing now for SDET, support engineer, etc roles and see what the feedback is and use that to direct future learning.
no subject
Date: 2013-04-09 10:42 pm (UTC)If your goal is "get a cool programming job as soon as possible" and you're willing to move to NYC for three months, I would look hard at Hacker School. They seem like the real deal, and the only prerequisite is that you have to enjoy programming. (Edit: Oh, Akiva already mentioned this. I second him, then.)
master's programs that are at least in theory open to people without a bachelor's in CS
My understanding is that it would be very odd for a grad CS program to rule out applicants solely on the basis of them not having a bachelor's degree in CS. My school, for instance, says, "We do not require a bachelor’s degree in computer science, informatics, or a related field, but we are looking for background in key areas. For example, for computer science degrees, you should have had courses in data structures, machine organization and assembly language, and discrete structures." When you get there, people will expect you to have equivalent background to someone with a bachelor's degree, but how you actually came to have it doesn't matter.
There also exist programs like this one that are specifically intended for people without prior formal education in CS, and are furthermore designed so that you can continue working a 9-to-5 job while working on the degree (classes are held in the evening).
I will warn you, though, that in many cases, if you attend a master's program at a research university, whether it's the evening-classes kind or the classes-during-the-day kind, then a lot of people at the university are going to treat you like dirt. Master's programs bring in a lot of money for the university, so they admit (1) more students than the staff and faculty can reasonably handle, and (2) students who really aren't prepared to be there. So you're going to be dealing all the time with overworked staff and faculty who will distrust and assume the worst of you -- they will assume that you're going to plagiarize, for instance. For example, here's the mandatory introductory course for MS CS students at Northeastern. If you were taking that course, would you get the sense that the instructor trusted you at all?
Edit: Oh, one other thing:
If I need to take around eight more classes before I'd be ready for master's level classes (see below)
I only took eight CS classes total when I was in undergrad, and I was still admitted to a CS Ph.D. program. Although I guess I also took four math classes. But I never took any prob/stats, or any systems course other than OS, and I only took two semesters of calc. I strongly second Chris's recommendation to take less calc and more discrete math -- perhaps something like this.
no subject
Date: 2013-04-10 01:47 am (UTC)I've looked at the websites of lots of "programming boot camp" type things, but Hacker School is the only one that real programmers seem to tell me about. I may have to look into how I could rearrange life to make that possible sometime. The Chicago program sounds intriguing, too, but I am somewhat geographically constrained by Google office locations.
I'm sort of hoping that good schools admit sketchy master's students because they need our tuition dollars... I think it's my only real shot at a good degree. ;-)
no subject
Date: 2013-04-11 09:16 pm (UTC)For those of you who are just getting started with learning to code:
- CodeSchool is a new online repository of courses in web development, software, hardware, etc. NewCoder is a site with three tutorials on Python, designed for new coders. If you try any of those, let us know how they work for you.
- TaskRabbit engineer Zack Shapiro wrote up his own thoughts on the best ways to learn to code. Check out the associated HackerNews comments, too.
i don't know that i agree with everything he says in that post, but it's a perspective to be sure. and the HN thread might have some good stuff (i didn't read it).