Computer science is one of the most popular majors that students express an interest in. As students have different academic backgrounds, interests, budgets, etc, it’s great to be able to suggest an array of schools to them. There are some schools that get frequent mentions for being strong in CS, but if those schools aren’t a good fit (likelihood of admission, geography, budget, personal preferences, etc), how might people be able to assess the strength of a CS program?
In looking for other schools to suggest for CS, I (a non-expert) have often done some of the following:
Looked at the number of CS graduates in the most recent year
Looked to see if a Master’s or PhD is offered in CS (with the assumption that there would be sufficient strength in the program for someone getting their bachelor’s)
Looked to see the number of majors in math and/or engineering, as strength in those areas often seems to correlate with strength in CS
Looked to see if it’s ABET-accredited for CS. Though ABET-accreditation for CS is not necessary, I would think it would set a good minimum bar.
And my theory is that the larger the number of graduates in CS, the more electives and/or the more frequently they will offer the electives listed in their course bulletins.
As I mentioned, however, I am not an expert. What missteps or incorrect assumptions would be made with any of the steps listed above? Is there a way that lay people could suss out some potentially stronger CS programs without doing a deep dive into each individual department? And when people do get to the point of doing a deep dive in a school’s department, what are the things that they should be looking for? How do they know the depth/rigor of a particular class when the description sounds largely identical to another university’s course description?
I liked @neela1 concrete exemples here - helpful to those of us that don’t know the nitty gritty of CS.
“For example an authoritative source at UWMadison told me that they run a game development course only once every 2 years, and the capacity is only about 150 kids. The program graduates around a 1000 kids a year. So I would chalk this up to lack of breadth even though Madison is considered a well regarded program. Now I may not care about a game development course, but I may care about a course on compilers or ML/AI and they will all have capacity constraints.
Whenever I asked folks at Madison whether any course on their curriculum is available before the kid graduates, they could only say that your graduation will not be delayed for want of the requisite number of lower and upper level courses. Not that particular courses that I am interested in would be available to me, even if they were offered.
On the question of depth/rigor, the requirements are vastly different across colleges.
Even within the main Data Structures course at Princeton (taken first semester by 60% of the students majoring in CS), some 4 precepts are taught by grad students and the main instructor, and one precept is taught by Tarjan (Turing medal winning prof) — catering to kids with different needs. Kids that were in Trajan’s precept took the algorithm analysis course by hm in the second semester — this is a 400 level course normally taken in the senior year. If you did well in that you could take his grad seminar in the 3rd semester. It is hard to get this kind of flexibility in an average CS program.
In the first systems course at Princeton taken in the second semester, two person teams code an entire bash shell from scratch. Takes 40 hours per kid. I haven’t seen this yet at Rutgers— maybe it’ll come up later.”
Note, however, that many good quality CS major programs do not have ABET accreditation (e.g. CMU, Stanford, UCB). This is unlike the case for civil engineering, for example. So, while ABET accreditation can set a good minimum standard, lack of such does not necessarily mean that it is poor quality (although some can be).
ABET accreditation does require some non-CS science course work that is not otherwise necessarily required for a CS major.
An ABET accredited CS major does satisfy the degree prerequisite for the patent exam. With a non ABET accredited CS major, specific course work requirements (including some non-CS science) must be met as well.
A compilation of bad data does not a good ranking make. Those rankings highly value publishing, which may or may not transfer to undergraduate education. As a result it completely leaves off great programs like Harvey Mudd and Cal Poly that don’t offer doctoral degrees.
It probably does help narrow down based on interests.
At the end of the day, interested students need to look up curriculum paths and course catalogs.
There are many dimensions to consider, so I hope this thread gets lots of posts and ideas. So much also depends on the individual student, but I’m a fan of “the more info, the more better”, so here are few initial thoughts.
Breadth: I think breadth is valuable since CS has so many areas a student might be interested in. Many students know an area that they are interested in (our S did), buy others do not, but having choices down the road is valuable.
Depth: To me depth relates to a given focus area, not rigor. If college advertises AI in its curriculum, what does that mean? Is it introductory or does it offer 15 different classes.
Rigor: Just what it means. Are the classes challenging. Are they teaching to the top or the bottom of the class.
Opportunities: Lots to discuss here, but there is one thing that deserves mention right off the bat. IMO colleges that offer graduate degrees (PhD), offer so much to undergrads. Lot’s of posts on CC mention that some schools are more focused on graduate programs at the expense of undergrad. I don’t know if that true or false, but let me list the ways that having a graduate program help our S while at Stanford:
Ability to take graduate level classes while an undergrad allowed our son to accelerate his studies in the field he loves.
Grad student TAs helped all classes run smoother by leading discussion sessions.
Undergrad participation in research labs. With many labs, and many research teams, undergrads can get even more specialized experience. In the end our S was a credited in 3 published research papers (still on his resume today).
I recall looking at course bulletins and cross-referencing them with course schedules from the past few years. If a college’s course schedule archives lists the class capacity, then this would be a great screen for people who are doing a deep dive into a particular department. Of course, this holds true for any department or major, but something that I don’t think as many students/families realize they should be doing.
Absolutely. I just want to clarify that the various steps listed above was less of a “screen” that schools need to meet all elements of. Instead, it’s rather a mechanism of trying to determine if a school has sufficient strength. Even people with the most cursory awareness of CS at universities would know the “top” names that don’t need to bother with accreditation. But if one was considering Little Known School that’s not at the top of a USNWR ranking or plays televised athletics, if the school was ABET-accredited for CS, then I would assume it would mean something good about the program. Or am I wrong about that?
I normally go here and look at how many people it graduated most recently
This number is somewhat stale, and is for 2017 entry.
The department would have grown in the past 6 years.
I try to estimate current entry numbers based on other enrollment data at the university and growth trends.
I then count the number of tenured or tenure track faculty in CS.
I divide one number by the other.
This is my first filter as to how crowded the department is.
I am not doing this stuff anymore, but this is what I have done in the past.
I then call the placement office to figure out where the full timers got placed – names of companies, and numbers of kids at each company.
and so on …
It means that the program meets a decent minimum standard (and requires some non-CS science course work and fulfills the patent exam degree prerequisite), although the student still needs to look into whether it is a good academic fit in terms of upper level course offerings, subarea coverage, whether it has competitive secondary admission to major, etc…
I then have my older kid look through the Algos / Data Structures course syllabus (an important course amongst several for interviews etc) , textbook, assignments and exams that are available with some effort if you look online.
Was Data Structures a course in your son’s preferred area of interest or is there a reason why that class was selected rather than others that might be important in interviews?
It is the key course for most CS interviews at big tech companies.
Maybe even at small tech companies.
Friends in the industry tell me that even after 25 years of experience, if they are changing jobs, they still need to pass a DSA (Data Structures and Algorithms) interview.
My son thinks that one course in DSA, and one course in Systems is enough to answer most CS job interviews. The rest of the degree is somewhat superfluous.
Unless it is a specialized job.
Few top CS programs are ABET credited for a good reason: CS is a rapidly evolving field and it’s hopeless for ABET accreditation to keep pace.
Most decent CS programs offer foundational courses to cover each of the most basic elements in CS (data structures, systems, algorithms, theories, etc.), in addition to courses related to programming. The more rigorous programs would offer more depth in algorithms and in theories.
There’re many specialties within CS. Students who are only interested in software development jobs may not need to specialize, but others who have deep interests in certain areas or look for opportunities beyond generic software development should choose to specialize and gain more depth (schools with graduate programs would have an advantage for these students).
Some specialized subdisciplines don’t require special background/preparation, but others do, often in the form of math skills beyond, and sometimes far beyond, the basic math (calculus, linear algebra, discrete math, probabilities and statistics) required for a CS degree.
That course content is typically taught in the more advanced lower level CS core foundational courses before students branch off into different selections of upper level courses. Employers may commonly use it as the basis for technical questions because it is generally assumed that CS graduates have had to learn it and use it (e.g. in their upper level CS courses) and that it gives a good basis for additional learning in whatever needs to be learned on the job.
Doubt this is the real reason. The likely real reasons:
Many CS major programs (more commonly, those outside of engineering divisions) do not require non-CS science course work that is required for ABET accreditation.
Some departments with enough recognition and prestige on their own may not want to go through the work of ABET accreditation, even if they would otherwise meet the accreditation requirements.
The biggest issue in CS comparisons is that when you simply evaluate course catalogs you will see most schools have similar sounding courses, and they can give the perception that the education and rigor is similar.
As @neela1 suggested, the differences start becoming apparent once you start looking at the range, depth, and difficulty of the associated problem sets and exams. This is especially important for the lower division courses. An introductory course at Cal - CS 61A is way more rigorous than introductory courses at most other CS programs even if the course content is apparently equivalent. Same goes for MIT, Princeton, Harvard et al - particularly when it comes to discrete math, combinatorics, and anything that’s proof-oriented or math heavy.
For most software engineering recruiting, Data Structures and Algorithms is a sufficient class however reinforcement happens in both directions. Other lower div courses serve as solid foundation for DSA, and more complex upper div courses reinforce and complement the concepts learned in the original DSA class. As an example, understanding the entire machine stack and having a solid grounding of languages and compilers is very important even for software engineering jobs where the interview might have mainly tested data structures.
We have S22’s friends at other CS programs, including at really good ones like Waterloo and UW. They’ve repeatedly commented about Berkeley’s problem sets being much harder than what they encounter. I suspect there will be a similar pattern at other top CS programs as well.
In 2022, UMD awarded 943 Bachelor Degrees in Computer Science. Also, in 2022. there were 415 students directly admitted and enrolled in Computer Science. UMD does not report the number of students that transferred into Computer Science (I’ve looked but no luck so far). Likewise, UMD does not report the number of students who applied for Computer Science.
…but the top CS programs in engineering divisions of some universities and in STEM schools like MIT/Caltech aren’t ABET-accredited, even though the non-CS science courses you mentioned are already part of their curricula.
I have not heard of anyone mention ABET accreditation as a factor in assessing CS programs. If the employers that I am interested in (and that’s a broad set) are ok hiring from the program, then I am ok going there. ABET accredited or not.
MIT 6-2 and 6-3 are ABET accredited for computer science. Caltech probably does not bother due to reason 2 mentioned above. Reason 1 above applies to such programs like CMU, Stanford, and UCB L&S CS (UCB EECS apparently dropped ABET accreditation for reason 2).