Ivy League Computer Science Curricula Exposed
Doug Treadwell writes "Many people have wondered what the difference is between the Computer Science education given in the average public university versus one given in an Ivy League university (or a top level public university). There have also been discussions here on Slashdot about whether any Computer Science curriculum gives students the knowledge they need for the working world. As a computer science student both questions are very important to me, so I decided to answer them for myself and build a website to share what I found. I was able to find the required reading for hundreds of courses at Stanford, Princeton, Carnegie Mellon, and Berkeley; along with some other institutions. This should also help answer some of those 'What should I read?' questions."
Personally I am an Electrical Engineering student at a top-5 public university in the country. Our selection of required course materials in no way reflects the quality/content of our courses, in general.
To become a professional you do a theoretical degree to give you a toolkit and learn how to find stuff out, then you do your professional training. Works for physicians, lawyers, engineers, accountants. You end up with two or more sets of postnominal letters, one of which is vocational. Why not software designers?
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
The website provided is worthless with regards to its content and appears to be little better than poorly wrought blogspam.
"Stanford, Princeton, Carnegie Mellon, and Berkeley"... only Princeton is a member of the Ivy League. Brown, Columbia, Cornell, Dartmouth, Harvard, UPenn, and Yale are the others. I can speak from experience in the Dartmouth CS program, that while you have an excellent networking opportunity and grant money is fairly available as a result of the school's renown, more tech-minded schools have superior programs for instruction in CS. Maybe the other Ivys are different though...
This is ridiculously spammy, and I don't know how this got to the front page. This dude just went to the online course catalogs for these universities and copied the course descriptions and text books, and then put them up with amazon referral links. There is no insight, no comparison between universities, no analysis of difficulty level, no breakdown between theory and software development, and no firsthand accounts. Just lists of textbooks.
This site is nothing more than a list of recommended list of books with a pointer to them on amazon using his affiliate link!
I can't believe slashdot posted this. I like robots,
Two classes using the same book, similar assignments, and similar equipment can vary widely because of things like the professor's attitude, the lab- and teaching-assistants' attitudes, the overall attitude of the college or university to allowing and encouraging thinking beyond what is in the syllabus, and a host of other factors that are very hard to capture without actually being there.
Almost every university has at least one professor students are dying to take even if it means they will get a lower grade, they will have to work harder or longer, or they will have to wait to take his class. Everything else being equal, the more professors a university has like this, the better.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
is not the education itself, but the doors it opens (because people see the name brand), and the connections you make (by knowing lots of other people who have open doors).
That's not to say that you can't get these things in other ways. But it is easier to get it in that manner.
My education at state college didn't open many doors, but I don't think that on average, the ivy league graduate has that many legs up on me.
Hint: MIT, Stanford, and Caltech are not "Ivy League".
Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
I've met several CS grads and grad students from the Ivy League, and have to say I'm not impressed. For all the hooplah around the Ivy League, there isn't a bit a difference between them and any other CS department.
The Ivy League is just a brand, and a brand that is much more valuable in the liberal arts, not the sciences.
Same thing pretty much is tru
One of the major points that differentiate a good school from an average is the quality of teachers teaching the subjects and performing research.
Even if exact same books and syllabus is used, students will learn material differently from different teachers.
Okay -- here's the deal with Computer Science, coming from someone who is a Computer Scientist (in training if not always in profession, although at the moment I can speak as someone who teaches upper-year undergraduate courses at a moderately sized University).
I'm sure everyone has heard the mantra that University isn't intended to prepare you for the working world. To a certain extent this is true, however in order to build partnerships and gain additional sources of funding in Computer Science, this view is generally skewed in practise, with the end result that Computer Science doesn't always appear to be a scientific field of endeavour.
So here's the issue: if what you're looking to do is get a good paying high-tech programming job, should you study Computer Science?
In my opinion, no.
Thirty-plus years ago, Computer Science was generally taught as a science. It was generally about algorithms and theory, and in many cases how they can be applied to science. Courses on things like computer simulation certainly weren't unheard of.
Along the way, as corporations picked up the pace at which they adopted computers as general-purpose and problem-solving tools, and as the software industry exploded, Universities in general started getting the message that their graduates weren't well suited to software development tasks, and as such they started requiring more courses on software development methods, and "how to program" and "how to create software" -- which by-and-large, isn't really about science or the scientific method, but a problem of engineering.
Fortunately, as the field continues to mature, some Universities are starting to "see the light", and are offering programs in Software Engineering. Based on my educational and industry experience, software engineers are exactly what most corporations are looking for when it comes to low and intermediate level software developers, and the good programmes emphasize the design of software, while only giving what background is needed into the science behind it all.
This is how things should be. We don't send physicists out to build bridges, but instead use physicists to come up with the core science, and than have engineers apply it to build the bridge. Software should be no different. At the risk of being labelled a heretic, we need a lot less Computer Scientists, and a lot more Software Engineers.
Note that this isn't to say that Computer Scientists don't have a role to play; theoretical Computer Scientists still have a significant role to play in determining what is possible, and in the creation of new algorithms to solve problems in the field, and practical Computer Scientists (of which I count myself a member) are needed to design solutions to complex real-world problems, the designs of which can be passed down to software engineers for actual implementation. Plus, both types of Computer Scientist are needed to train future generations in the field, both at the University level, and as general mentors.
Unfortunately, education hasn't quite caught up with this ideal yet, but it appears to be getting there. Larger schools are starting to provide both types of program, reducing the software development courses in their core Computer Science departments and moving them to Software Engineering departments (with the courses cross-listed between departments, or at the very least allowing students in the one to take courses in the other to supplement their degrees). Smaller schools, however, continue to muddle the two topics into a single programme, which causes the type of confusion often seen here when discussion "Computer Science vs. The Working World".
So there you have it. All the other sciences have a differentiation between the "science" and the "engineering" aspects, and Computer Science is no different. Eventually I predict this separation of concerns will be the norm, and we'll be all the better for it.
The conclusion here is, if you just want to get out int
The linked site doesn't have any actual comparisons of the programs, just a list of textbooks with Amazon affiliate links. It's a scam -- this story should be deleted ASAP.
Visit the
an ivy league kid would've known to put the sight on better hardware...
1) Make simple web page linking (with your Amazon affiliate account) to CS books used by several big name schools. 2) Post story on /. making your web page sound interesting or useful even if it isn't.
3) Profit!
Agreed. I did not read a *single* book for a EECS course. In fact, I cannot think of a single CS course that even mandated any reading. I will admit though that one of the more interesting classes I took provided two or three research papers every week. Not mandatory, but they were interesting enough to warrant reading. Stuff like the Niagra papers, Supralinear Speedups using Intel Quadcores, and the Cosmic cube.
Tuition for sure :)
An ivy league kid would have known it was spelled "site"...
Maybe not
Big-Name universities have nearly a single goal in mind: Published Papers. This is what fuels their reputation. This tilts their approach toward high-risk-high-reward research. However, 99% of all graduates will need real-world skills for the here-and-now at non-R&D places, and this may be where State-U excels, or at least even.
Most State-U's generally have given up on the "research run", freeing them to focus on marketable skills. Big-name U's still struggle with this balance.
Table-ized A.I.
He also would have known it's "curricula," not "curriculums."
(Yes, the summary gets it right, but not the "sight" itself)
The OP forgot that the MIT curriculum -- the lectures themselves -- are already largely available. The course materials for nearly two thousand courses at MIT are available here:
http://ocw.mit.edu/OcwWeb/web/home/home/index.htm
So are all of the lectures from an experiment in Computer Science education that predates MIT's open courseware, http://aduni.org/ .
Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
Any time any web site claims to save you money using the word "free" in all caps, run!
What do you mean they cut the power? How can they cut the power, man? They're animals!
Really good point. Sometimes professors just assign any book and teach out of lecture notes anyway.
Beetle B.
Already been posted, but what a load of commercial, not very useful crap.
Editors, why not create a new "Commercial" category for this kind of stuff? It's not the first time we've seen commercialism slip through. Or why not let us readers vote on stories even once posted? "Duplicate", "Useful", "Commercialism", etc.
...it's the instruction. The book lists say nothing of the focuses the classes take or the background the classes give.
As an educator and an undergraduate student at UC Berkeley, many classes make ill use of the books. In fact, in CS164 last semester, NO textbook was used -- at all! In fact, for all of the CS classes I've taken so far, I have not needed to read the associated book at all.
The strong point of these institutions (or, at least, Berkeley) is the legacy of good materials and resources that instructors leave behind, and the active monetary and personal investment of all the faculty in improving things for the next generation of students.
Books are the LEAST influential element in making a good CS program. This site might be totally serious in comparing the curriculum, but it completely misses the point.
The best text book I had to read in college was, "503 Service Temporarily Unavailable." I don't remember what that one was about though...
// file: mice.h
#include "frickin_lasers.h"
I've been fortunate enough to work on most of the big problems in computer science at one time or another. CPU scheduling. Network congestion. Compiler optimization. Proof of correctness. Secure operating systems. Image processing. Mobile robotics. Game physics. I've done very well financially. I have an advanced degree from one of the big-name schools. So I can't complain personally. Going into computer science worked out very well for me.
But I'm from the previous generation of programmers. Programming today is mostly about dealing with yet another API with another thousand or so interfaces, some of which work. By the time you're dealing with the fifteenth system for putting widgets on a screen and processing incoming events, you get fed up. Especially since you can see all the ways in which the new ones got something wrong that was a solved problem a decade or two ago.
Most of the basic algorithmic problems have been solved. Not only have they been solved, the solutions have been packaged up so that you don't have to look at them. How often do you really need to open Knuth any more?
Computing is the "stationary engineering" of today. About a century ago, stationary engineering, the work of, literally, keeping the wheels of industry turning, reached this point. In 1870 or so, stationary engineering was a growth job that needed smart people who understood the details of engines, generators, and steam. The basics of the field were still being figured out. Counterflow boilers and carbon commutator brushes were hot R&D topics. Just getting the machinery to work at all was tough, and there were serious reliability problems. By 1910 or so, most of the hard problems had been solved; big steam turbines and generators were working reliably, and plant operation didn't require much innovative thinking. Today, stationary engineering is a union job that few people even realize exists.
Computing is now about where stationary engineering was in 1910. Everything pretty much works, and most of what's going on is not that innovative. We're now dealing with scaling issues, which is where electric power was in 1910.
There's interesting stuff going on in robotics, parts of AI, statistical methods, and the handling of very large databases. We need small numbers of smart people to push that forward. There are areas of software engineering that need real engineering talent, like video compression and graphics, although such narrow, well-bounded problems tend to move into hardware. But we no longer need computer scientists just to run a data center or to set up business applications and web sites. Just careful, well-trained technicians.
That's what employers want, and that's what most of the students want. Most of the schools are willing to accommodate them.
I have to disagree. What books the faculty recommends does reflect upon them. I'll expand on this more later when I'm not trying to keep my site from crashing.
Can someone please create a new site like Slashdot, except with actual editors?
What's the real difference between an Ivy League degree and a state school degree?
The Ivy League guys have a much easier time getting interviews.
At my school, for my EE, science and math courses, the books are there solely for the mandatory (graded) homework exercises. The Profs would always cover all the material in lecture, so reading the book was not necessary.
The book was useful in the event that you missed a lecture, or forgot something, and perhaps for review, but nobody actually expected you to read through the chapters. If you did, the lectures would be pointless, except for hints about what will be on the exams, and any in-class quiz's or exams.
Thus I have had several courses taught using what even the professors were forced to agree was likely the wost text in the market for the given subject. But the Profs did not care, as the books were really only about the exercises.
Stylish sheet to fix many problems in Slashdot's D3: https://gist.github.com/801524
I can't tell you how the computer science programs compare because I've only gone through one of them and that's from Yale. Having worked in the industry for a few years now, I would say that I'm glad I went to Yale and majored in CS. I don't pretend that Yale is somehow better than all the other schools out there, especially compared to the more technically oriented schools. A professor of mine even admitted this to me, "We're no MIT" but then he followed up with, "If you want to do something substantial you must pioneer a new field." So there you have it. Yale is no technical powerhouse but it does do things that are kind of new and out there.
With the overviews out of the way, here's what I really love about the Yale CS program:
1. Very academic and theory based. There is no classes for a specific language. You learned a language as part of some other course. If the professor happened to pick C, then you learned C on the side by reading K & R. The professor will tell you which chapters you will need to read but that's it. The class is about systems so you learned that.
2. Small class sizes and informal interaction with professors. It was generally encouraged to call your professors by their first name and really get to know them. You also learned a lot outside of classes and from discussions. A professor invited me to attend some discussion groups that some professor and graduate students were having because he thought I might be interested. From my experience, I wasn't just a student or a bucket but considered an active contributor.
3. Probably the most valuable lesson I learned was having the attitude to not be frightened by problems or new concepts. They like to demystify things and show you how simple everything is underneath. Wonder how something works or should work? Go read the RFCs. I think that's where point #1 really came in handy. Once you have a solid foundation in theory, it became easier to understand how the more complex systems and concepts work.
Obviously this came with some disadvantages. One Microsoft recruiter complained to my professor that Yale students seem to lack practical experience and I have to agree. Coming out of college, I probably knew less about existing APIs than others but that didn't take long to rectify. I think Yale knows this which is why they're more concerned with a solid foundation in theory than any specific APIs. Furthermore, this can be remedied with the right internships during the summer.
I'll leave you to be the judge of how the programs compare.
EvilCON - Made Famous by
I still remember the day where we had the ACM-MCPC (an qualifying round of ACM-ICPC for the Midwest section of U.S.) contest in a November weekend two years ago.
Our university happens to be a host site, and because of that, allowed to have 3 teams to compete instead of two. For most other universities, people have to qualify to appear at the competition. For us, we do not have enough people. So that, the professor assembled two teams of three people from the CS department, which happened to have the highest G.P.A. in the department (3.8+ out of 4), and opened the other team slot for public. Nobody inquired in a week. So I decide to make a run for it, even though it looks weird for an EE student to compete in the ACM-MCPC. The professor let me choose my team members. So I assembled a team, all EE students, picked from my electronic class, with G.P.A. in the low 3.x/upper 2.x range, with some knowledge in basic C++ and data structures.
The C.S. teams receive heavy coaching and training for the competition. Us? heavy "training" in Counter-Strike:Source.
At the end we happen to rank in the upper 30's (35th if I remember) out of 120 teams in the entire region. For the other two teams in the C.S. department, one of them ranked just a few place below us, and one of them ranked closed to triple-digits.
So, our training has work so well that we beat the top guys in the CS department. This story is still being talked occasionally.
"The New Age. The New Beginning."
I'd have to say there are several factors involved there.
Largely because GPA has little to do with your actual programming ability and more with your ability to solve problems in the same way the instructor expects, creative problem solving and a high GPA don't always go together. Sometimes a creative and elegant solution that would work great or more efficiently than the expected solution will take too much time, so the (irrepressibly) creative student finds themselves working toward a solution which they ultimately have to abandon to meet deadline and instead finish up a hackwork version of the expected solution. Creative students who are good at quelling their impulses to do it "right" are usually graded better.
Another point is that EE students aren't usually primarily programmers, but if they are, they learn assembly first, VHDL, etc., then higher order languages. This is particularly useful when it comes to writing extremely tight code. Add that to the heavier emphasis on boolean logic and logic reduction and you get tight minimal solutions to complicated input/output problems. I've noticed that EE majors tend to make better drivers and low level I/O and message processing stuff whereas CS students tend to be better at making very abstract reusable code. Both are survival tactics to survive their education.
For a CS student, the quality of the solution doesn't matter, just whether it solves the problem and displays whatever "design pattern du jour" their instructor favors most.
For an EE student, if you make a circuit which has 10 more gates than the optimal solution, you'd better have a damned good reason why, like reusability of the package or better heat dispersal. In electronics, everything is time critical, and silicon is time. The more you put between vdd and gnd, the less performance you usually get, the higher the power consumption, and the worse your grade.
Looking at the 2008 ACM-ICPC challenges (just a quick glance), I see that almost all of these challenges depend on some vaguely subtle maths and are stated in the form of input/output problems. These are problems that both EE and CS students should be well-trained to approach.
However, the judging criteria are somewhat weighted toward what EE students tend to be better at than CS students. Time-critical applications with precise output. It's not just requiring your output be correct, but always correctly formatted.
The land shall stone them with the bread of his son.
(We'll argue whether MIT is ivy somewhere else.) Most of the specific-knowledge courses like OS-360, PL/I, APL, LISP are in the dustbin of history. The general knowledge courses in algorithms, digital electronics, mathematics are still relevant and haven't changed a whole lot in three decades, although new software engineering techniques continue to be added.
That cache of "ivy" helps you stay in the job market, even long after many software engineers in our fifies are long put out pasture. Ironically many of the classmates I've kept in touch with switched to software after majors as diverse and geology, biology and music.
The most important component of a good engineering or computer science education is not what texts are used in the classroom, but rather, it's about who you interact with. This goes for both professors and your student colleagues. A top-notch CS program teaches you to think analytically. Interactions with faculty and the quality of lectures at these top tier institutions is what gives them their advantage. Rather than simply 'telling' students, "this is how you do such and such", top professors 'develop' these ideas with the students.
I did a computer science BSE at Princeton, and now I'm a PhD student a U of Colorado, Boulder. Forget assigned reading--Princeton and MIT, at least, have their intro CS problem sets online (anyone interested can track them down pretty easily). As for CU, I'm not going to make it too easy either (don't want our little server to get /.ed) but try searching for FractalGrading and going from there.
My experience at CU (as a TA 3 years ago; things may have changed) is that the emphasis here is on exposing students to C++ syntax, and then seeing an example of how to use it. Students end up lost, unable to think. When they're asked to turn a thought into an algorithm, they start by naming some C++ syntax, and, unsurprisingly, that's about as far as they get. At Princeton, we were given a though, shown how to build an algorithm, shown how what we knew already wasn't quite adequate (ie. taught why we might need some concept), shown the concept, taught a small amount of syntax that would let us program the concept, and then given a programming assignment in which we put it all together.
Basically, at Princeton we learned to think like programmers, whereas at CU we expose students to a large set of tools without rhyme or reason. The result is that people who come in to the CU curriculum already knowing how to program do fine, and the rest struggle and become frustrated. Since grading reflects on the teaching as much as on the students, we basically pass everyone, even though by the end of the intro course half the students wouldn't be able to understand the idea of a linked list, let alone implement one.
Of course, there is a vast difference between the intelligence of the average student here and that at Princeton. But I have seen no research comparing the method of teaching here to the method at an "average good school", and my personal experience is that it doesn't work very well.
"The biggest problem with communication is the illusion that it has taken place."