Fog Creek Software
g
Discussion Board




What makes a good CS degree?

A question I've been thinking about for a while.  What makes a good computer science degree and why are some universities so highly regarded?  Is it that they teach more, or teach better or teach more advanced material? Is it the quality of the lecturers/professors, and if so how is 'quality' defined?

Why should I pay $150K for a degree from MIT. *Apart* from the reputation of the school.

Furious George
Wednesday, April 28, 2004

I think the higher the tuition and reputation the more complex the answer will be. Just a reminder, some people go to schools like MIT for free.

Li-fan Chen
Wednesday, April 28, 2004


As a non-formally educated developer, I've noticed that formally educated developers are often amazed when I admit that I have not "taken a class in data structures" or computer architectures.  This is almost pure snobbery, but it does have a valid point or two.  Though, I blow them away when I show them what I'm reading: Mythical Man-Month, various titles by Kent Beck, Martin Fowler, the Pragmatic Programmers, and other methodology books.

I think that the most important thing in *any* degree is:
* having the ability to think;
* learning how to evaluate alternatives;
* learning how to ask good/relavant questions;
* learning from mistakes (your's or others);
* knowing where/how to track down new development in your field and looking into them.


Disclaimer:  I have a BS in electrical engineering and picked up development because it works for me while I do on other things.

KC
Wednesday, April 28, 2004

Furious George, the pace of classes is usually determined by the average or slowest student, and MIT has a very high average student (and the slowest is still a genius) so I think far more gets covered in each class. When I was at MIT for example I had gone through single and multi variable calculus, and differential equations by the end of my freshman year, whereas at my state school back home just single variable calculus took an entire year.

Ron
Wednesday, April 28, 2004

The challenge in putting together a good CS curriculum is teaching students something that's relevant now, and will continue to be relevant for the next 10-20 years.  Because of that, specific languages aren't as useful (imho) as a thorough grounding in general CS principles:  data structures, algorithms, math, logic, development methodologies, etc.  Basically, they (should) try to teach students to think like a computer scientist, so that they'll be able to learn the new technologies and techniques that come up over the next 10-20 years.

I have a CS degree from CMU, and I think the biggest value is in the reputation.  Beyond that, there's considerable value in their realization that teaching you a few programming languages isn't going to help you have a career in CS.  There are (were?) also some professors doing and sharing cutting-edge research in their fields, but the real value there is in the first-hand knowledge of the research process, not of the specific research (unless you happen to be working in the same narrow field).

In practice, there's a big leap between graduating from a great CS program and being a good software developer: how to work as part of a team, how to debug, how to design complex systems, how to work on complex systems, etc.  Most students need some good industry experience to pick this stuff up, but very few realize what they're missing.

(Incidentally, Ron brings up a very good point, and I'd also add that a well-motivated student with the right desired direction can probably learn almost as much from even an inferior school.  Not that inferior reputation means inferior school.)

schmoe
Wednesday, April 28, 2004

MIT definitely has one of the best CS programs, I think that, and the usual suspects (CMU, UCB, etc.) stand quite apart from your average school. I like how MIT appears not to teach particular technology, but rather the approach to CS problems and to learning technology. I've seen too many classes on "Java" -- as opposed to those on software engineering practices, or data structures and algorithms.

GG
Wednesday, April 28, 2004

A friend of mine got his BS in CS from CMU.  I got it from a state school.  One of the assignments he had to do was:

given a program written in assembly, write the program in C that will compile to that assembly program using gcc.

Much harder than anything I had to do in state school ( went to the sister campus of UCB ).

Andrew Hurst
Wednesday, April 28, 2004

I think it's also important to point out that schools like MIT and such will all place students in pretty great jobs (assuming they get placed at all, just look at the dot bomb) so you become a part of a great old boy's club in terms of professonal networking. Not only will it help you get placed at the companies you enjoy and get you a chance to work with the people you enjoy being around, it has the opportunity of opening up new business opportunities (or aid current business endeavors). I am not saying you need to rely on anything to get the job done, but most business minded people will take any help they can get. That's why if you are a HR of a Fortune 100, you'd do well to hire someone who's from a prestigeous school if it doesn't cost twice as much to hire someone from a regular schools--and the reasons won't be because of class load.

Li-fan Chen
Wednesday, April 28, 2004

Did he have to write a program that would generate the C code when given any assembly program?  Or just hand-write the C code for a specific given assembly program?  How much time was given for that assignment?

Either way, it's still damn hard!  Now *that's* a real CS degree!

NoName
Wednesday, April 28, 2004

Except for the high-tech companies like Intel, a Fortune 100 HR dept. won't want to hire an MIT grad.  They'll think that the MIT grad will be too expensive or get bored.

NoName
Wednesday, April 28, 2004

Ron, I did my undergrad at a generic state school and we covered about the same amount of material, though we learned linear algebra instead of diff eqs, since we were using Apostol, which sticks lin. alg. in before multivariable calc.

Our CS projects weren't nearly as involved as the CS projects for 'comprable' courses at CMU, but our EE projects seemed to be more involved. There is probably some correlation between the reputation of a school and the amount of work one must accomplish to graduate, but I'd be surprised if it were very strong, or consistent across departments.

شسیب
Wednesday, April 28, 2004

Not true at all NoName, non high-tech Fortune 100 companies are always a large presence at MIT's recruitment fairs (especially Wall Street). Large, successful companies want to hire the best and brightest they can, not just people who "won't get bored."

Ron
Wednesday, April 28, 2004

But are those HR people at the recruitment fairs?  I didn't say the *companies* won't want to hire the MIT grads.  Some of the companies will have technically savvy managers that know how to evaluate and interview techies.  I was referring to the clueless HR drones.

NoName
Wednesday, April 28, 2004

Do any CS programs teach "real world" development? Prioritization, project planning, requirements management?

It seems to me that those would be things you'd want a developer to know.

As for the "write the C code to generate this assembly language" - was that in a reverse-engineering course?

Philo

Philo
Wednesday, April 28, 2004

Philo,

I took a course (CS 428) that was about the software development process.

There was a programming project, but we got to pick it as long as it met certain size criterion.

We were graded on team participation (how valuable we were to the team), scheduling, estimation, planning, and design.

Unfortunately (in my opinion), the instructor liked fat modeling like UML, so we had gannt charts and the like.  I am dismayed that they didn't do anything with agile modeling (which I didn't know existed at the time).

Walt
Wednesday, April 28, 2004

At Flamebait University (a.k.a. the university I went to) they told us from day one that we wouldn't be learning anything if we didn't do some software development outside of class.

Flamebait Sr.
Wednesday, April 28, 2004

Philo, I also had a Software Engineering course that tried to teach this stuff, or at least expose people to it.  Most of the course was pretty good - the entire class (~75 students) worked on a single 3-month project, where we had incomplete requirements, conflicting requirements, requirements negotiation, integrations between teams, integrations with legacy systems, source control, and actual customer acceptance.  (This course was my first "real-world" exposure to each of these things.)

In retrospect, it was fairly contrived, and the biggest thing it convinced me of was that a 75-person project is damn near unmanageable, but we did see leaders rise from the subteams, and we recognized and worked around people who couldn't be counted on, and several other real-world-isms.  The "product" we produced didn't actually work, but the process taught me a lot.

It was only 1 course out of 20 or so CS courses I took, but it was some very good experience...

schmoe
Wednesday, April 28, 2004

I think that with any topic this vague and broad, you'll get a hundred conflicting answers.  I specifically remember the "Submitting Job Applications in PDF format" where the guy asks the question 'Is it ok to submit my app in PDF format?'  No one managed to agree, on anything.

So this is the same.  You ask: "Are CS degrees useful?" and you get thirty developers discussing the boundary conditions ("I met a MIT grad who didn't know what a 'keyboard' was."; "My eight-year old never even went to Kindergarten, but she's already released three shareware apps written in her spare time when she's not working at the sweatshop for 16 hours a day").  And then you'll get the cool reasoning of experienced developers telling you what you already know, i.e. "It's definitely a BIG plus to be trained by the big-dog CS schools, so go for it."  This sums up a lot of the crazier discussions here, and every 'comments' page on Slashdot, ever.  And while we're at it, most of the 'talking heads' programs on your cable news network of choice, minus the 'cool reasoning' segment.

I swear, one day I'm going to write a program that self-generates an entire discussion, and have it generate an entire subthread on Slashdot.  I swear no one will know the difference.


(the resume thread I refer to above)
http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=109882&ixReplies=49

(the Slashdot link to Joel's resume article; lots of conflicting advice)
http://developers.slashdot.org/developers/04/01/26/135241.shtml?tid=133&tid=166&tid=186&tid=99

pds
Wednesday, April 28, 2004

<troll>
pds,

We wouldn't have all these conflicting opinions if Microsoft wasn't such an abusive monopoly, or if Slashdot readers could find their butts with two hands and a flashlight.
</troll>

Capn' Kirk
Wednesday, April 28, 2004

"...though we learned linear algebra instead of diff eqs"

&#1588, that's the difference. You can't take "real" EE courses until you understand basic circuits, which you can't understand until you've studied electromagnetic fields and signals, which require understanding diff eq and multivariable calculus. And if you haven't had that fundamental math until going into your junior year, you  have very little time left to cover the real stuff.

Yet I see some state schools (for example one I just pulled up online) are "teaching" basic circuits even before multivariable calculus, let alone electromagnetic fields, so something has to be fundamentally missing in their classes. They must be saying things like "the voltage goes up and down, don't ask why, just trust me that it does" instead of "here's how it oscillates, and here's why."
How can you even design a circuit if you can't analyze what it's going to do before you build it? Their labs must be more like "build this circuit and write down what it does" instead of "design and build a circuit that does X." That's probably another key difference.

Also at MIT the emphasis was not on learning technology that other people have created (you can read about that in books), but on learning the fundamental theories so you can create new technology yourself. I'm sure other research institutions like CMU, Stanford, Caltech, etc take a similar approach.

Ron
Wednesday, April 28, 2004

pds - what's your point? That we simply shouldn't bother asking questions on here?

I have a whole philosophy about asking questions online - I've learned to stop thinking of life as a game of Zork, where only one path gets you to treasure, and any other path gets you eaten by a Grue. Most of the time there is no "right" or "wrong" answer, and for the most part if you're weighing options and want advice, then either option will probably be fine.

Life goes on, and you keep living it, whichever path you take.

We ask others "should I take the job in Albany?" or "should I take course [y]?" or "should I marry this girl?" like someone else can say "Yes, you should." and that will be "the" answer. But with six billion people and 22,000 days, there never is "the" answer.

My point regarding this thread - no, there is no "the" best CS degree, and there is no "get a CS degree and prosper." You won't find that here. What you *will* find are a milieu of answers from a vast array of experience that will give you different ways of looking at the question and perhaps additional info to base your own personal decision on.

Just like the Apprentice threads - asking some of these vaguer questions here shouldn't be about the destination; it should be about the journey.

Philo

Philo
Wednesday, April 28, 2004

Heh.  I've helped people do their *homework* at CMU.  It may have a good reputation, but my friend (who hated his CE degree) and his friends never programmed their own stuff.  One of my bosses at my last job had gone to MIT and said he really liked it.    Lots of friends going to UCI (which is supposed to be a pretty good CS school); they can't stand how dumbed down it is.  I think the problem is you have a wide range of abilities in addition to a wide range of knowledge.  My friends and I had done some professional programming while we were in high school.  There were people in our CS classes who didn't know what RAM was!  It seems to me that most schools are putting their effort in into the Masters programs, and just leaving undergrad CS a mess.

vince
Wednesday, April 28, 2004

Philo,

Yeah, point taken.  I'm just irritated that I can predict half of the contents of any large thread.  I get annoyed that regarding the CS education discussions specifically, it seems like everyone has an agenda, or the answers are painfully common sense.

I guess I'm just hoping for an idealized forum where new concepts are LASERed directly into my brain.  Like they did on the Matrix, but faster, and work-safe.  Anything short of this ideal is...lacking, in some intangible way.  I'll try and remember that such a device does not yet exist, or is a carefully guarded government secret, and until such time as the brain LASER is declassified, I'll have to stick to primitive 'civilian' technologies.  Which means this forum.  And, I'll try and remember that this is a very good forum, so I will stop complaining now.


Pete

pds
Wednesday, April 28, 2004

Best comment I've seen recently about what makes a computer scientist as opposed to a programmer is:
"owning a set of Knuth books and able to open to any chapter and explain what it means"
I notice that my alma mata requires an Advanced Placement score of 4 or higher in math to qualify for US students, just how difficult is that? (to be fair their first year courses are fairly heavy on the math side)

Peter Ibbotson
Wednesday, April 28, 2004

To clarify the ASM -> C assignment, they were given a program in assembly by the professor.  They had to turn in a program written in C, than when compiled with gcc -S (-S is how you output the assembly code, right?) would *exactly* match what the professor gave them (I assume they worked on the same lab pc's).  My friend said the hardest part was when he got down to only two instructions different, which were in the reverse order from the professor's code.

This was for a compiler's course.

Regarding teaching software engineering at university, it would be nice, but it doesn't have to be the focus.  I've taken an undergrduate and graduate software engineering courses in my schooling, and while they contain some good stuff to know (mostly design patterns, basic requirements gathering, use cases, etc) its still just scratching the surface.  I've learned quite a bit as well from just reading Software Engineering books in my spare time.

This whole discussion boils down to what different people think the purpose of a CS degree is.

If you go to a research institution (MIT, CMU, UCB) you will get a degree with heavy theoretical aspect, and come out really knowing the underlying theory and algorithms below what most of computers are about.

If you go to certain state schools for the degree you will get a more practical degree, but with less emphasis on what some consider makes a well rounded software engineer.  i.e. you may be better than some of the research students at programming based on your knowledge of the language and libraries, but they could probably explain to you much better whats actually happening under the hood.

Depending on what you want out of a degree, the value of the accompanying program varies greatly.

This could be boiled down even furthur to: if you want to do AI, go to MIT, software engineering CMU and operating systems UCB.  (of course these example classifications are back of the hand, don't flame me because MIT does more than just AI etc etc)

Andrew Hurst
Wednesday, April 28, 2004

The content of the courses themselves is irrelevant. Any programmer smart enough is able to teach teach themselves everything they need to know anyway. The value of a CS degree is in the name of the school, and this matters because the top schools serve as not much more than two things:

1. As an IQ sort. It's illegal for employers to give IQ tests as a condition of application, but the top schools are very experienced at admitting students based on implied IQ(SAT, AP tests, GPA to a lesser degree). Since it's been demonstrated over time that IQ matters almost more than anything as a predictor of success in software engineering(Gates freely admits this), a degree from, say, MIT screams that this student is more intelligent than 1 in 500 of his peers. I know that this is what I look for when interviewing applicants - it's routinely proven irrelevant what their GPA or subsequent experience is, I find I can almost perfectly predict their intelligence based on where they got their degree.

2. As a place to network. I don't have to explain the importance of this.

Elitist Bastard
Wednesday, April 28, 2004

Ron: Well, if you mean the first and second order differential equations that are applicable for basic circuit stuff, then yeah, we had those, and I'm pretty sure every school covers those in the first semester. If you mean solving PDEs for arbitrairly shaped waveguides, no, we didn't do that.

>How can you even design a circuit if you can't analyze what it's going to do before you build it?

Abstraction :-)

Seriously, do you need to be familiar with, say, the Kronig-Penny model to build basic digital logic? All you really need to know is a 2x2 table.

I suppose I could ask you how you could possibly design a circuit without taking linear algebra your freshman year, since you wouldn't have been familiar with the matrix mechanical formulation of quantum mechanics, and so you wouldn't be able to *really* understand how a transistor works, but that would be silly.

&#1588;&#1587;&#1740;&#1576;
Wednesday, April 28, 2004

&#1588, I hate to tell you, but if your generic state school was teaching you diff eq "first semester" before you even had calculus 101, that wasn't diff eq!

Ron
Wednesday, April 28, 2004

Most schools teach diff eqs during the first semester, after having covered the requisite parts of calculus. I don't see how that's strange at all, unless you don't think it's differential equations unless the class covers, say, microlocal analysis.

I suppose if you were me you would say that you if your school was teaching you signals first year, before you even had real analysis and measure theory, not to mention complex analysis, you weren't really taking a signals course.

You pretty much seem to be saying that if it's not done the way it was at your school, students will have huge gaps in their background, and won't really, fundamentally, understand the material, but you ignore the fact that in order to cover certain topics your school glossed over other, fundamental, topics.

&#1588;&#1587;&#1740;&#1576;
Thursday, April 29, 2004

DiffEq is a junior-level course at my university, as well as at one other I know of.  Its prerequisite is Calculus 2, which of course requires Calculus 1.  It might even require Calculus 3, but my memory is fuzzy now that all of that is over with.


So its seems ludicrous that you would learn the same material in a Freshman-level 'DiffEq' course, but whatever.  I hated DiffEq.

pds
Thursday, April 29, 2004

&#1588, that's just a bizarre statement for someone to make ("most schools" covering differential equations in first semester? Show me ANY school that does that) and the fact that you'd claim that means you either haven't gone through the program yourself, or are just fundamentally unclear on the concept (or maybe college was a very long time ago for you and the semesters blurred together, I hope?)

But you are correct, my school (MIT) didn't do it that way -- nor does Stanford or Caltech off the top of my head -- none teach signals in first year (prior to basic electronics even?), and none teach linear algebra freshman year as a prerequisite to understanding quantum mechanics (or even require coursework in quantum mechanics for an undergraduate EE degree) yet all have an excellent engineering reputation. So if your claims are true, it sounds like your "generic state school" is maybe unaccredited or non-traditional? Or is it maybe not in the U.S. or Europe? (Do Eastern schools do it that differently?) Very odd...

Ron
Thursday, April 29, 2004

All of that is really on tangentially related to what I'm saying.

Perhaps I don't understand what you're saying.

Your claim:

You need to learn X to learn Y properly, since Y is predicated on X.

My claim: Virtually everything you learn is predicated on something that you don't learn.

Anyway, as for the diff eq. thing, I already explained that above.

&#1588;&#1587;&#1740;&#1576;
Thursday, April 29, 2004

*  Recent Topics

*  Fog Creek Home