toorsdenote: (jcreed)
[personal profile] toorsdenote
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.
  • 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.)

Date: 2013-03-26 12:25 am (UTC)
From: [identity profile]
Wow, looks like you've thought this through really carefully. It does seem hard to say how things will turn out with either (a) the actual educational impact of any particular online course or (b) how much some humans in some institution will be persuaded by the completion of such courses, but then again that's always been the case to some extent with traditional education and traditional interview/admissions processes.

Dunno, I wish you the best of luck :D

Date: 2013-03-26 01:17 am (UTC)
From: [identity profile]
Yeah, I think one good thing about trying to take Systems is that it would help me calibrate whether I'm learning as much from my MOOCs as I think I am.

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).

Date: 2013-03-26 12:28 am (UTC)
From: [identity profile]
I'm not really sure about what your plan should be. I'd probably recommend trying option 3 and being willing to fall back if need be.

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?

Date: 2013-03-26 01:35 am (UTC)
From: [identity profile]
I have been enjoying programming a great deal so far. It's like super big logic puzzles!

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. :-)

Date: 2013-03-26 09:00 pm (UTC)
tak0: (^_^)
From: [personal profile] tak0
I have been enjoying programming a great deal so far. It's like super big logic puzzles!

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:

Date: 2013-04-10 01:13 am (UTC)
From: [identity profile]
"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

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.

Date: 2013-04-11 06:37 pm (UTC)
tak0: (^_^)
From: [personal profile] tak0
yeah, i have the same problem with open source, finding an entry point. i think the local usergroups / hack groups are the way to go on that one.

the only way to figure out what types of stuff you'd enjoy is to try a bunch of different stuff!

Date: 2013-03-26 09:04 pm (UTC)
From: [identity profile]
I imagine they won't refilm the lectures, so it's too bad to hear you found them sometimes confusing. Glad you learned from it, though!

Anyway, I really like Dan, and it's good to hear he's having an influence on people!

Date: 2013-03-27 01:46 am (UTC)
From: [identity profile]
Oh, I didn't mean to complain; the quality was generally excellent. That was just the only real thing that stops me from saying "Best lectures evar!"

Date: 2013-03-26 02:25 pm (UTC)
From: [personal profile] chrisamaphone
less calculus, more discrete math!

Date: 2013-03-26 05:48 pm (UTC)
From: [identity profile]
Weirdly, most of the for-credit linear algebra classes I can find require diff eq as a prereq. But OK, I will worry less about calculus.

Date: 2013-04-11 06:38 pm (UTC)
tak0: (^_^)
From: [personal profile] tak0
i never took diff eq and calculus, while required for my degree, is not something i have ever used in the real world.

Date: 2013-03-26 02:44 pm (UTC)
From: [personal profile] chrisamaphone
a couple more thoughts.

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.
Edited Date: 2013-03-26 02:45 pm (UTC)

Date: 2013-03-26 08:49 pm (UTC)
From: [identity profile]
Summer of Code is, like most cool things I've found, only open to current students. But working on some contribution to an open-source project sounds like a really good idea for building my currently-empty github portfolio.

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.)

Date: 2013-03-26 09:08 pm (UTC)
tak0: (^_^)
From: [personal profile] tak0
totally 100% agree with your second point there. with both an undergrad and masters degree under my belt, the amount of what i learned in those programs that i actually use as a professional programmer is... maybe 10%.

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.

Date: 2013-03-26 10:00 pm (UTC)
ikeepaleopard: (masque)
From: [personal profile] ikeepaleopard
I strongly strongly recommend skipping the masters from the less good school in favor of writing more code. What we're looking for is that you write good code or you're smart and trainable with a good background in the foundations. Unfortunately, to get your foot in the door for option B, without any code experience, you probably need to have gone somewhere with a good reputation. I'm not sure about the masters from the top name school. I've always been skeptical of those people because CMU had a lot of masters students come through and I heard a lot of them didn't really know anything, but in retrospect that might just have been undergrad elitism.

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.


Date: 2013-03-27 04:25 pm (UTC)
From: [identity profile]
I was a master's student in software engineering at CMU and I can tell you with perfect confidence that a lot of them didn't really know anything. Personally I am kind of disdainful of the need for a master's at all. Akiva is right: the biggest thing you need is experience, not book learning. I got my first few jobs purely on the strength of my internships and undergrad work, not because of master's level classes.

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?

Date: 2013-03-28 12:32 am (UTC)
From: [identity profile]
[*cough*]Ludum Dare jam collaboration with Justin and Zoe[*cough*]

Date: 2013-03-28 01:25 am (UTC)
From: [identity profile]
Zoe only just figured out how to make the fish on the computer vision table get bigger and smaller, I'm not sure she's much of a game designer yet. ;-)

Date: 2013-03-28 01:22 am (UTC)
From: [identity profile]
Your software engineering experience has certainly been at the forefront of my mind. The master's in CS is supposed to be quite different, but I don't know. Anyway, maybe a program for people who didn't know anything isn't a bad idea for me, since I don't know anything. ;-)

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.

Date: 2013-03-28 01:20 am (UTC)
From: [identity profile]
That's a really useful piece of feedback. I mentioned my dilemma to another friend today and he said almost exactly the same thing about the option A/option B thing.

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.

Date: 2013-03-28 02:06 am (UTC)
ikeepaleopard: (Default)
From: [personal profile] ikeepaleopard
There was a new CS master's program when I was there but it was very research focused and only for people who were CMU undergrads. Obviously I have no idea if that has changed.

Date: 2013-03-28 04:02 am (UTC)
ikeepaleopard: (masque)
From: [personal profile] ikeepaleopard
Also, I'm not sure how the geographical logistics would work out for you, but you might be interested in this:

Date: 2013-04-03 05:49 pm (UTC)
From: [identity profile]
Something like a hacker school or working on open source code is where I'd put my energy. We hire people without formal CS backgrounds fairly often into trial type positions... and they tend to quickly move out of those and into tech lead positions.

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.

Date: 2013-04-09 10:42 pm (UTC)
lindseykuper: A figure, wearing a pink shirt decorated with a heart, looks upward from between dark shapes that suggest buildings. (lebenslust)
From: [personal profile] lindseykuper
Hi, I'm Lindsey! We seem to have a lot of friends in common. Whirlwind background: I went to undergrad at a liberal arts college not knowing what I'd do, became a music major, took intro CS in my sophomore year on a whim, loved it, ended up double-majoring in CS and music, worked in bottom-rung programmer jobs for a few years, then decided to go to grad school and am now in the fifth year of a CS Ph.D. program, specializing in programming languages. Married, no kids yet. Whew.

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.
Edited Date: 2013-04-10 01:40 am (UTC)

Date: 2013-04-10 01:47 am (UTC)
From: [identity profile]
Hi! Thanks for replying! I've seen your comments and tweets a lot; we do seem to know a lot of the same people. (I met most of our mutual friends through Jess Mink, who I knew through CMU-Q.) My whirlwind background is that I studied international relations at a liberal arts college; I took a few programming classes and enjoyed them, but was too busy with my planned career in singlehandedly saving the world from poverty and injustice to consider a career in mere gadgetry. After spending the intervening 14 years editing a newspaper, getting an MSW, being a therapist, and running CMU-Q's tutoring center, I'm realizing that I haven't made much of a dent in poverty and injustice and there might in fact be some upsides to considering a career I enjoy instead of one I feel morally compelled to pursue. My husband is a Googler with a Ph.D. in robotics (and was a CS major/music minor, coincientally). My daughter is 2.5 and wants to be an elephant when she grows up, although I'm not ruling out hipster trumpeter or mad scientist.

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. ;-)

Date: 2013-04-11 09:16 pm (UTC)
tak0: (^_^)
From: [personal profile] tak0
i just received this from GDI, maybe useful, maybe not:

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).


toorsdenote: (Default)

January 2017

123 456 7
891011 121314
1516 1718192021

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 21st, 2017 10:08 am
Powered by Dreamwidth Studios