Agree that there is little need to weed anyone out. This is Cornell where even the lower third of the class is brilliant by a one else’s standard, or by any objective standard. Why should there be a need to weed them out? Cornell takes in the cream of the crop. Their mission should be to help all of them succeed. That is their responsibility.
There could be a geographic effect in terms of getting attention with “San Jose”. Actually University of Washington makes sense if the survey is including people at Microsoft or Amazon.
I just find this kind of list interesting to think about, but I also wouldn’t recommend that anyone take it seriously. Personally, I think the “best” (i.e. most selective) university you can get into will probably be the best for CS unless they really don’t have much of a department at all.
When surveys like this are adjusted for enrollment, the results change completely. I linked one such survey earlier in this thread.
Santa Clara made the survey with 5,600 undergraduate students. Stanford and CMU have about 7,000 undergraduate students. Rice has about 4,000.
Mostly, I just like posting various surveys where I can the exact same response from the same person.
I don’t mean to attribute a student’s happiness at Rice to a single course alone. I only said it may contribute to such happiness. On the other hand, relaxation of CS requirements may be indicative of looser requrements elsewhere as well, which may make majority of students happier at the expense of more uniform academic rigor.
I’m surprised that Cornell removed this course from its requirement. It’s so fundamental to the CS education.
It depends on the college. At some colleges, students generally need to take it in their first two years (some mathematically strong students may take it in their freshman year).
Not sure I agree with that. I’ve taken CS classes at multiple universities, including Stanford. Something I noticed early on was how similar all the classes were, irrespective of school.
Absolutely not fundamental. It wasn’t a part of my formal CS education. I read a book on it when I was working on a compiler/interpreter project, and thought it was so theoretical as to be impractical.
Which colleges (besides Caltech which has it as a sophomore course in the CS curriculum, and where students are assumed to be mathematically stronger and more advanced than at just about any other college)?
Both Cornell CS 4810 and Rice COMP 481 have course numbers that, in their respective schools’ course numbering schemes, suggest that they are mainly taken by upper level students in the CS major. Of course, a student who fulfills prerequisites early enough to take such a course as a lower level student can taken it then, just like at any other school.
FWIW I hated 481(0) and enjoyed 482(0).
Re: automata theory course
In college, if you take a compiler course, having had the automata theory course beforehand will make the front end part of the compiler course easier. Compiler courses include a brief version of automata theory as needed for compiler front end scanning and parsing, but having had the full version makes it more understandable.
Very few people write compilers or interpreters. It’s nice to know how they work, but delving deep into the theory is hardly necessary for CS grads to get their jobs done.
Automata theory may seem impractical, but it is the basis for understanding computability in the abstract as opposed to the things we do with electronic computers. Whether you view it as “fundamental” depends a lot on how you definite “computer science.” It is not just software development.
I would add that a deep understanding of finite state automata and context free languages will help a great deal if you really are dealing with text parsing, because a completely ad hoc approach is likely to be slower and harder to maintain than one based on converting a grammar to an automaton.
It makes me sad when I hear people dismiss the rigorous basis of computer science as “impractical.” It’s like someone saying they want to build rockets but can’t be bothered with esoteric concepts like conservation of momentum.
I don’t know … maybe compilers should be a required course for computing.
Taking 4810 without a natural extension was a bit wasteful.
Maybe not a full compiler, but something similar to a compiler front end for a moderately complex input language came up more commonly in work than I would have thought would come up while I was in college.
I am suspicious of anyone studying computer science who doesn’t at least want to know how to write a compiler or interpreter, whether they are going to do it for a living or not. A university education is not supposed to be a tech school education.
My favorite interview question when I can pick it myself basically comes down to topological sort. And that’s another case where I cannot even count the number of times I have had to write something that’s essentially a topological sort: do these things imposed by a partial ordering of dependency. It is so natural and unavoidable that I cannot understand people who find it unfamiliar. (But I would not ask an automata theory question in an interview, though I have sometimes had interesting automata theoretic answers to questions I’ve asked about text patten matching.)
In theory, any college student planning a four year schedule taking course prerequisite constraints into account will have solved this problem by hand. But some students apparently do poorly at solving this problem, resulting in taking important prerequisites late and therefore delaying graduation.
The reality is most people go to college because they want a piece of paper that says they’re qualified to join the workforce. There are so many potential topics to study in CS that it’s impossible to cover them all, so you cover the ones that matter. I’m sure there are lots of people who think it’s a shame that not everyone takes art or philosophy classes in college, but you don’t have time to study everything, so you have to pick and choose.
In over 30 years of work as a software developer, I only worked on one compiler/interpreter (mostly interpreter) project. I thought it was fascinating, and always looked for similar projects when I was on the hunt for a new job. But when I was looking for similar projects later in my career, they almost never cropped up. If they did, I’d have to move to a different part of the country. So jobs involving compilers and interpreters were/are very scarce.
I agree that it’s a specialty. Though again, college isn’t trade school. The concept of a compiled language, bootstrapping one layer of abstraction over another, is the key takeaway whether you ever really do it in your job.
Also, while I have not written compilers, I have done a lot of work that involves code generation. I find that it can put me at an advantage when it’s the right approach and other developers are reluctant to take it. There are also domain-specific languages. In my experience, these come up on a fairly steady basis, and it’s good to be able to approach them with some rigor and not reinvent the wheel.