views:

870

answers:

10

I have a BA in liberal arts, and I'd like to go to graduate school to study computer science. My first job out of school (2 yrs) had me writing SQL and I've worked for the last 2 years writing SAS programs and some VBA and UNIX scripting, so I'm not totally clueless, but I'm not going to kid myself and am concerned that I'll be under prepared.

I guess I could put it like this: I can read Code Complete and thedailyWTF and follow the code (even if I don't know the language) and get the point/joke, but I couldn't tell you much about pointers.

What technology/terminology/languages/concepts do graduate programs generally assume their students are familiar with, and what preparation could I do to reassure an admissions board that I am a good candidate?

+12  A: 

You're probably pretty far behind in terms of the theoretical stuff you're expected to know. For reference, here is a practice computer science GRE subject exam that you would most likely have to take before applying to graduate school:

http://www.ets.org/Media/Tests/GRE/pdf/CompSci.pdf

edit: To make my answer a little more helpful, here's a handful of topics off the top of my head that you might be expected to know that are far beyond Code Complete and DailyWTF (I'm only a sophomore in CS, so there's obviously much more than this):

  • Discrete math (including graph theory, a little set theory, maybe even probability, counting, etc.)
  • Computer architecture (including low-level hardware interaction, pipelines, caches, virtual memory, etc.) and maybe even a little assembly
  • Complexity theory, big-O notation (and other related asymptotic behavior), algorithm analysis
  • Data structures
  • Algorithms

...and much more. This is far beyond what you can learn just from reading software engineering-related blogs and whatnot. With that said, it's not impossible to go from a liberal-arts education to a CS graduate program, but it's not enough to just show the admissions committee that you would love to learn CS, you have to actually have a breadth of knowledge coming in.

edit2: Sorry Steve B., I started editing my post before you posted your answer and now it looks like I basically stole your answer.

dancavallaro
+3  A: 

You'd do yourself well to browse an undergraduate CS course and see how familiar you are with the coursework.

Here, for example, are UCONN's CS undergrad requirements.

Computer Science is heavy on the math. If you only made it through calculus in undergrad you may have some issues. Especially jumping into grad-level CS, where they are likely to plunk you right into compiler design or something, you going to want to do some serious self-study before applying.

Triptych
+3  A: 

CS (graduate level no less) is worlds apart from "Code Complete", VBA and SAS. You will want to look into things like computability theory, linear algebra, graph theory, and a whole host of other topics.

For some more entertaining and useful samples look up some undergrad CS podcasts from MIT or Berkeley online.

This question is also relevant and gives some links I mentioned.

http://stackoverflow.com/questions/360542/plumber-programmers-vs-computer-scientists#360554

Tim
+2  A: 

I tried to do something like this a few years ago. My background is mostly in the arts. I have a BS in computer science and a BA in language/literature. I have a much stronger background, on paper, in the arts. I worked as a professional programmer for several years. I had a very difficult time getting into even lower-tier CS graduate (both PhD and masters-only) programs, even as I got into an Ivy-league program for literature. I'm pretty sure my difficulties came from a relatively low GPA in CS, relatively low CS GRE score, and a failure to get a perfect on the quantitative section of the regular GRE. If you look at the score distributions for middle or top-tier schools, typically the verbal scores are all toward the middle of the scale, but almost every accepted applicant gets a perfect on quantitative. There are also cutoff points for the CS GRE that should give you a good idea of what you need to score.

I think it's reasonable that you could get into a middle-tier program without a degree, provided you score very highly on the CS GRE. Frankly I think it will be almost impossible to get into a top-tier school without a BS, unless you have published journal papers beforehand. If you are shooting for a middle or lower-tier program, you should study a lot for the CS GRE and the regular GRE and try to hit those out of the park.

strongopinions
A: 

I got a BSc in Maths, and was in a similar situation. I decided to do a 1 year 'conversion course' MSc in Computing, and it was definitely useful in getting me a graduate level software engineering job. The fact that I already had IT experience seperated me from the fresh BSc graduates. This was in the UK, I don't know if it is relevant to the US.

Dean Madden
+5  A: 

I went through something (somewhat) similar - after working for a number of years programming, I took some (at first) undergrad courses, and then some graduate. No formal CS degree, Masters in an unrelated field.

Tried an undergrad Discrete math course - pitifully slow, didn't even bother to finish. Took some grad math and CS courses.

The GRE will, as others have pointed out, give you a good sense of what you're missing. Main things that aren't part of most programmer day-to-day -

  • basic discrete math should be simple enough for you to pick up on your own (certainly a semester's worth.
  • ditto for automata theory, the sipser book is particularly good
  • You're unlikely to have been exposed to assembler. I wasn't.
  • Depending on the kind of work you've been doing, some programming paradigms are likely to be unfamiliar (logic? functional?)
  • Rigorous analysis of algorithms.
  • Compiler theory

You don't really need to learn all of it, I've met plenty of CS grads who don't get all of it. (just enough to get past the GRE ;)

Steve B.
It sounds like the question "what do CS programs expect incoming students to know" is pretty much being answered "what is on the CS GRE". That sounds reasonable.Did you bother getting credit for any undergrad CS courses, or do you think a strong GRE score would suffice?
eutocius
I just took courses as an adjunct, which is all I had time for anyway (Columbia and CUNY grad center). They were pretty open about it. Didn't have undergrad courses to get credit from.
Steve B.
+3  A: 

I'm curious why you want to go to graduate school.

If you feel a great lack of fundamental CS skills, why is grad school better than taking some undergrad courses or finding a way to read and learn on your own?

If you are trying to advance your career in CS, I think you need to ask yourself if grad school is the best path ( it may or may not be depending on what aspect of the field you want to work in).

If you wan to teach - then grad school is clearly appropriate.

I'm not against grad school - but I think you need to be clear about 'which problem are you trying to solve'

I am looking at grad school because I am interested in the academic/theoretical side of CS. For example, the MIT webcast on analysis of algorithms (where I could follow, of course) thrilled me, and I would prefer teaching and doing research at a university than developing applications.
eutocius
+1  A: 

I think you should learn at least one language such as C++ or Java - as this is a basic requirement of most CS graduate studies programs. It's not that you need to be a super programmer, but many of the graduate courses have assignments that must be coded. Depending on the university you like, they will have standardized on either C++ or Java, so I'd start by taking a first level course in one of those two. (We use Java)

There are graduate programs in Information Technology that offer streams which do not require programming - sometimes in conjunction with the Business faculty, and sometimes it's the Business faculty offering an IT-centric degree. You could look at these as well. (sort of "management in Information Systems" type Master's degrees.

You should also consider distance education opportunities. There are several Universities that offer Master's degrees via distance learning (I teach for one of them) and they allow you to earn your degree while still employed.

Cheers,

-Richard

Huntrods
+1  A: 

I have a BS in Accounting. I started on my Master's in Finance, then stopped halfway. In this type of market, I found it harder and harder to land a position which would show my true potential. Originally, I wanted to be an investment analyst, but looking at the market, I came to the conclusion that I just couldn't do it because I don't have a lack of conscience that others in the investment field have. So, I started taking courses like Calculus I, II, III, IV, Discrete Mathematics, and Intro to C. I took the above courses with the realization that they're only pre-requisite classes. I've done well on my GRE's, but I found alot of negativity when I tried to apply for a Master's in Computer Science. To tell you truthfully, I think alot of the negativity comes from others' inflection of their own insecurities. It depends on what you are really going for. I've been trying to chase money since I got out of school, and I've finally realized that I wanted to do something creative and challenging for myself. I don't mind it much anymore when people continuously point their fingers in my face, and scrutinize my decision for such a drastic career transition. I've worked with people who had their Master's in Mathematics, various types of engineers, and just very smart people. I found that most of the time, I ended up teaching them a thing or two. That is not to say I'm better or smarter. But, I have prepared myself for whatever engineer or mathematician dishes out at me for embarking on their territory. In the end, it's what you want, and your dreams. Good luck to you!

It's always good to have a healthy chip on the shoulder in any profession.
temp2290
+1  A: 

If you let the negativity of others hold you back, you will never succeed. There are many self-taught programmers out there as well as graduate students with a bachelor degree that has nothing to do with science. One example is Peter Drake, the author of "Data Structures and Algorithms in Java":

Peter Drake is Assistant Professor of Computer Science at Lewis &

Clark College in Portland, Oregon. He holds a BA in English from

Willamette University, an MS in Computer Science from Oregon State

University, and a PhD in Computer Science and Cognitive Science from

Indiana University. His research involves writing programs to play

the ancient Chinese game of Go.

Victor Yan