The key thing to look at is what the CS major requires that the AI major doesn't -- in 8 semesters, you can only fit in so many classes.
The key thing to look at is what the CS major requires that the AI major doesn't -- in 8 semesters, you can only fit in so many classes.
I'm even more convinced this is for publicity (or other political reasons). There's nothing there that couldn't have been done by very slightly altering the CS requirements.
If CMU had done that instead, students would have the ability to take more AI classes, but they wouldn't be at a disadvantage if they decide (or need) to work in another field of CS.
I think you're greatly underestimating how much different the CS curriculum would become if they tore out functional programming above 15-150, OS, and Networking.
Consider the flipside: if they bent the CS degree instead of introducing a new AI degree, could higher-learning institutions continue to trust that a CMU CS undergrad had a solid foundation in functional programming, discrete mathematics, and systems theory?
I don't think a CS degree should be a trade program, but avoiding actively harming students job prospects by adding a few more electives isn't quite the same things as crafting their degrees for industry-marketability.
>they tore out functional programming above 15-150
I'm looking at the requirements for the BS in CS right now. I don't see any function programming requirements above 15-150.
>OS, and Networking
It looks like neither is required right now. Here's the relevant section.
Choose 1
15-410: Operating System Design and Implementation
15-411: Compiler Design
15-418: Parallel Computer Architecture and Programming
15-440: Distributed Systems
15-441: Computer Networks
Others as designated by the CS Undergraduate Program
> if they bent the CS degree instead of introducing a new AI degree, could higher-learning institutions continue to trust that a CMU CS undergrad had a solid foundation in functional programming, discrete mathematics, and systems theory?Looks like the functional programming, and discrete math requirements are the same.
Systems is an overloaded word, so I'm going to assume you mean software systems, since that requirement is what is removed. The systems requirement is already just chose one from above list. I don't think taking 1 network class means you have a solid foundation of systems theory.
The key difference on the deep-theory side is that CS and AI appear to swap out deep-diving into discrete math for deep-diving into statistics and statistical modeling. I'd consider those different enough to warrant separate degree tracks, personally.
(Your opinion of networking is noted but I do not share it, being somewhat familiar with what that course asks of students. It's every bit as preparatory as its sibling 15-410 class ;) ).
What discrete math classes were removed from the AI degree?
>(Your opinion of networking is noted but I do not share it, being somewhat familiar with what that course asks of students. It's every bit as preparatory as its sibling 15-410 class ;) ).
I looked over the syllabus and assignments for a section of that class. It looks like a bog standard networking class (bog standard for top tier schools that is). It's an elective. You can take an OS class, a compilers class, or a networking class. I don't think there is some intersection of knowledge/skill between those 3 classes, the absence of which would give higher-learning institutions pause.
My institution required that you take both an OS and a networking class before being admitted for graduate study. It's one thing if they require OS, and networking, and compilers. That they don't do that says to me that they don't consider them critical classes, since any given graduate could be missing any 2 of them.
We're pretty much equally happy if you hit layering in the network class or thinking about the filesystem and kernel VFS layers in the OS class - or the modular structure of a modern compiler. Tackling the idea of reliability through replication in distributed systems (via a lot of different mechanisms, but with a decent dose of Paxos), or via the Reliable Storage module in 15-410, or in DB. Getting additional hardware architecture exposure through compilers or the parallel class. Thinking about communication using a fast local interconnect (parallel), the internet (networks & DS), or IPC (OS). Compilers can be more or less of a systems course depending on who teaches it, but it's generally got such a strong architectural component that it flies.
It's much like programming languages. We don't care much if you graduate knowing a particular language -- any CMU CS graduate should be able to pick up a new language in short order. We care greatly that you've been exposed to a mix of programming styles and thinking -- imperative, functional, and logical or declarative, and can successfully use those tools to reason about code, program structure, algorithms, and data structures.
So no, we absolutely don't consider it critical that you take any specific systems course, but we do consider it critical -- for the CS major -- that you be exposed to the broad set of systems concepts we teach in them. That's why we start them in 15-213 and then reinforce them with one upper-division systems elective requirement.
I completely support this philosophy.
> Compilers can be more or less of a systems course depending on who teaches it
So what happens when it's less of a systems course? Do students taking that section lack a critical component of the CS major?
Software Foundations includes, for example, the use of type systems to ensure bug-freedom, program semantics, and more. Matt Fredrikson focuses on the intersection of formal programming languages research and security. For example, lecture 3: https://15316-cmu.github.io/lectures/03-safety.pdf
Cyber-physical is one of the hardest classes I've ever seen. Seriously - it combines very solid differential mathematics with logic and formal verification. It's a different set of skills than Semantics, but it combines a really solid dose of the same kind of logical and proof-centric thinking that advanced PL courses do. And rapidly runs into the logical underpinnings of both fields. For example, lecture 13: http://symbolaris.com/course/fcps16/13-diffchart.pdf
(In large part, this is because the course relies on identifying PL-style semantics of differential systems, and thus, students in the course end up being exposed to nearly identical proof methods as they do in the more straight-up PL semantics course, in addition to a lot of differential equations.)
After I looked over the assignments for a section of Software Foundations, I don't think that taking an AI class instead would make much of a difference when it comes to having a solid foundation in functional programming, which is what the GP was talking about.
We also felt fairly strongly that supporting students who wanted something different from their education, which still falls under the broad CS umbrella but is different in some important ways -- was important.
These things are surprisingly hard to juggle. Eight semesters, four courses per semester, juggling cross-university requirements, some amount of personal electives and fun, and an intensive set of major courses, doesn't actually leave much wiggle room, especially when you include the prerequisite dependency graph of those courses.
Hence, it's a different major, because it reflects a quite different set of skills that {employers, grad schools, whatever} can count on the graduate knowing.
(There's also value in providing a roadmap for sequencing these things, again because of the prerequisite chains, but I concur that that alone isn't a reason for a major.)
And yes, of course it's all a continuum. We call AI a separate major, alongside things like HCI and computational biology. We don't have an "operating systems" major. If you like systems a lot, you still have to take all the normal algo/PL/etc. breadth requirements.
It's all a judgement call. The feeling here is that AI/ML are starting to contain a sufficiently different set of core skills that it was worth breaking them out into their own major instead of just saying "eh, go take some electives, and try to fit in all of your interests while _still_ taking all the other CS classes." Because that's what we used to suggest, and the students rightly pointed out that it wasn't possible to do it right within the existing degree framework, at least, if you wanted to sleep.
That's just it. No radical alteration was required. You're already saying that: "AI majors will receive the same solid grounding in computer science and math courses as other computer science students." But if CMU had added a new concentration or specialization to the existing major this story wouldn't be on the front page of HN.
There is no way that at some point in the discussion "This will be a big publicity win for us" wasn't brought up by someone.
In general I think it's bad advice for undergrads to pursue hyper specialized degrees. I think it's a bad idea when engineering schools do it with things like robotics engineering, and I think it's a bad idea when CS departments do it with AI. Specialization is what grad school is for--this isn't the UK. I also think that schools that offer these degrees are doing a disservice to their students.