Northeastern's redesign of the Khoury curriculum abandons the fundamentals of CS
49 comments
·January 10, 2025pclmulqdq
tiffanyh
> There is a tension here that is being understated which is that people of every major now take the intro-level CS class because programming is integral to everything.
Why doesn’t the CS department have a different intro class for CS majors and non-CS majors.
That’s a common practice in the mathematics, physics, etc. departments.
(To have harder intro classes for the students majoring in your department vs those who don’t.)
shmorkin
This exists already at Northeastern. They have a data science major and minor with a much more 'practical' intro sequence that teaches in Python. I actually TA'd for it, and many of the students were business or life sciences majors going for a data science minor. It even came with a 1-credit practicum geared towards specific domains, which students could choose from.
thereisnospork
"Practical python" is undoubtedly useful to a biologist, but I wouldnt understate the utility of an intro to algorithms for technical but non CS majors.
'Algorithmic thinking' more or less doesn't exist in a lot of the classical disciplines with any degree of rigor, so a CS class is the only place a biologist is going to be exposed.
Specifically for utility, there is a very tight mapping between 'how do I search these strings' and 'how do I [most efficiently] design a set of experiments [searching for a a result]'. Both in the literal algorithms as well as the logical framework necessary to extend past trivial examples.
unethical_ban
<specialty> for non-majors isn't radical.
"Stats for business"
"PE for physicists"
Why isn't "programming for sciences" not a thing?
sarchertech
It is. When I was in school we had a matlab class for grad students in other departments.
I don’t know why you’d try to throw CS majors and Biology majors looking to cobble together scripts into the same class.
mjdiloreto
The end of an era. This is nothing less than a travesty honestly. The current (now former) curriculum at NEU was uniquely exceptional, and now it will be conformingly adequate. Anyone who complained about the difficulty or lack of "job-market applicability" of the Fundies classes entirely missed the forest for the trees. The point is the design _process_, and using Racket forced this. It also demonstrated the magic that is possible with computer science. The Dr. Racket editor has features that do not exist in any other editor (e.g. visually tracing references, and so much more). The teaching language just got out of the way and let professors teach the essentials of program design, without the burden of language idiosyncrasies. My mind was honestly blown when Olin Shivers coded the Y combinator directly and showed us how to add recursion to a language. It felt like having occult knowledge, and it made me an acolyte to computer science. I mourn the loss of this curriculum for future students, especially considering the premium price tag they now pay.
awscherb
I always enjoy seeing Olin Shivers name come up in threads about Northeastern. I had him for Fundies and have many fond memories of his lectures, I was truly inspired. It's no exaggeration to say that class and those lectures helped me find a passion and a career I enjoy. It's a shame they're phasing out Fundies, hopefully whatever they come up with will still be able to have that same impact on young students.
ideashower
It's funny, my friends and I all entered CS around the same time (2010-2013) and I remember thinking it was weird for NEU to be using Racket. Clearly it's successful, and has proven itself to be a great place to start a CS career.
I always advocated a C based language, like C or C++. That's where my program (not NEU) began and I hated it but am grateful. We eventually moved onto Java. Later courses through my 3rd year allowed me briefly work with functional programming. We never touched Python or web frameworks until our Junior and Senior year projects, and even then it was generally voluntary and depended on the project we had proposed for our databases or algorithms classes.
What I do think CS programs should be evolving for are LLMs. Python + ChatGPT are powerful without the user knowing too much of the logic off-hand. That's a problem for new CS students who need to learn the fundamentals of logic, reasoning and programming. I don't know what languages work "less-better" with modern LLMs, all I know is that ChatGPT and Claude work exceptionally well with Python.
I suppose, as long as we keep paper exams, all hope is not lost. Maybe just a little, in my opinion.
thot_experiment
Agreed, LLMs mean that it's MORE useful and important to learn Racket and C, the LLM will help you much more with knowing the specifics of python/js/go/java or whatever human-focused language you end up working with for your job. If you want to be a stellar developer in 2025 you want to learn the things the LLM ISN'T good at, understanding the fundamentals of computer science is way more useful now than it was 5 years ago because the baseline for being good at a language is so much lower with an LLM aiding you.
juliangamble
The University that hosted "The Little Schemer" and all its derivatives. Those books were a delight and taught me to think about programming in a way that other languages had not. (Even if I didn't go to that University). https://prl.khoury.northeastern.edu/teaching.html
I had been to a Scheme conference in Washington, adjunct to the Clojure Conference one year, and it was attended by many undergraduates from Northeastern, (and the authors of those books that I got a photo with.)
I have to feel sympathy for those undergraduates I spoke to. They gave a strong feeling, even then (8 years ago), that it was time for the University to move on in language choice.
I had a similar experience in the late 90s when the world was picking up Java, and our University insisted on teaching in Eiffel.
fn-mote
I fourth-year undergraduate argues against the change like a professor. Honestly, this shows the strength of NEU's current (former) curriculum.
Without knowing the new curriculum, I guarantee you that one of the biggest daily complaints about the old curriculum was the requirements that they write unit tests ("check-expects"). Do you think that's going away? Hahahaha. The laugh will be on students who think they're getting something different because the label on the can changed.
herdrick
Matthias Felleisen, architect (I think) of the current curriculum, explains to a hypothetical skeptical university administrator the virtues of it: https://felleisen.org/matthias/Thoughts/py.html
herdrick
(... in the style of his The Little Schemer et al. books)
asimeqi
15 years after MIT made the same switch from Scheme to Python. Since CS at MIT seems to be fine, so will CS at NEU.
fn-mote
"Everything will be OK" - people will succeed in any system. Nobody will ever compare the outputs of the two systems, so nobody will ever know.
Let me instead suggest that one question we should ask is: What kind of students will be successful in the new system? What kinds of students will not?
One interesting thing aspect of the former curriculum is that (IMO) it provides an entry for students who are not entering with a lot of pre-existing knowledge. One of the criticisms of "old school" computer science teaching is that it privileges students who already have exposure to the material... The former curriculum is not the only way to level the playing field, but it certainly does provide a more level playing field for students who might not even be sure about the major.
I will stop with the suggestion that (IMO) pre-existing experience is definitely not the best indicator of future developer quality, so I value a curriculum that does not select for this.
(Caveats: never saw the new curriculum, it could be just fine, there are lots of other ways to accomplish this goal, but still... I am concerned.)
davidalayachew
Is it fine? How would we determine that? What's the metric?
bmitc
MIT, despite it thinking otherwise, is a slave to industry, funding, and trends.
dickfickling
I attended Northeastern from 2010-2013. Fundies (the freshman-level functional programming courses) was fundamental (ha) to my growth as a software developer. It taught me how to reason about data and how to design programs (the literal name of the textbook).
I know a lot of students hated it—frankly those were mostly the students that it seemed were only doing computer science programs because they’d heard they could make a lot of money in the field. The “real nerds” all seemed to love it, and now nearly 15 years later those are the engineers in my network who have built the most impressive systems and products.
I guess I’ll have to update my default instructions for recruiters from “automatically interview anyone with a degree from Northeastern” to add “if they graduated before 2025”
jcgrillo
> I know a lot of students hated it
That's a good thing. I don't know whether your assertion about the breakdown between "real nerds" and the other camp is accurate or not, but I think this point stands on its own regardless--learning is hard. It's uncomfortable. It's unpleasant. If it isn't, you're not being pushed hard enough. So what's the point of asking students how they feel about it? Why make strategic decisions based on those data?
I'm genuinely curious, not trolling or anything. It seems completely baffling to me that educators behave this way, and I'd really love to understand why.
hitekker
My take: if a given task is not fun, then it is work. People on average do not enjoy work. They do not like doing work, let alone doing it well. Training kids to do work well, without any pleasure, necessitates heavy accountability enforced by management, which brings a slew of its own requirements and complexities.
Schools already handle many cross-competing concerns across stakeholders (PTA, Taxpayers, Town Government, State Government), so I suspect they would want to reduce their enforcement & oversight load. They'll choose a teaching style that makes everyone happy or at least complacent, even if they know "fun is not learning".
robrenaud
My best learning was difficult, whole mind encompassing, and incredibly fun.
If you can get college students idle brains curiously contemplating the how and why of the subject, that's when the tuition is really worth it.
NickNaraghi
Exciting to see this on HN! As a ‘15 NU alum that took the CS program & third time founder, I support the change.
Fundies 1 and 2 were great, but I have always felt that the amount of delayed gratification in NU’s CS program was much too long and incongruent with the university’s focus on experiential learning. I wanted to get my hands dirty and build something and the whole curriculum felt too academic.
Northeastern CS is world class at compilers and programming language research, so I always understood that the undergrad program would tend to be academic as a trickle down effect.
It’s a spectrum with tradeoffs, so I think balance is key. But happy to see the pendulum swing a bit and think it will be good for new grads, especially as more coding work becomes automated.
theodpHN
Also expressing concerns about the selection of suitable languages for novice programming is King's College CS Prof Michael Kölling, who explains, "One of the drivers is the perceived usefulness of the language in a real-world context. Students (and their parents) often have opinions which language is 'better' to learn. In forming these opinions, the definition of 'better' can often be vague and driven by limited insight. One strong aspect commonly cited is the perceived usefulness of a language in the 'real world.' If a language is widely used in industry, it is more likely to be seen as a useful language to learn." Kölling's recommendation? "We need a new language for teaching novices at secondary school and introductory university level," Kölling concludes. "This language should be designed explicitly for teaching [...] Maintenance and adaptation of this language should be driven by pedagogical considerations, not by industry needs."
While noble in intent, one suspects Kaplan and Kölling may be on a quixotic quest in a money wins world, outgunned by the demands, resources, and influence of tech giants like Amazon — the top employer of Northeastern MSCS program grads — who pushed back against NSF advice to deemphasize Java in high school CS and dropped $15 million to have tech-backed nonprofit Code.org develop and push a new Java-based, powered-by-AWS CS curriculum into high schools with the support of a consortium of politicians, educators, and tech companies. Echoing Northeastern, an Amazon press release argued the new Java-based curriculum "best prepares students for the next step in their education and careers."
Links at: Should First-Year Programming Students Be Taught With Python and Java? https://developers.slashdot.org/story/25/01/05/1853210/shoul...
deactivatedexp
i'm a dropout just do horrible coding for fun can anyone explain why CS programs are adamant about not teaching on the job skills? like databases, web, embedded, security plus theory
soegaard
Most Computer Science programs teach principles.
The ideas behind a database is more important than the the concrete database used. If the ideas are taught, then the students can adapt when the fashion changes.
So instead of teaching something that you can use on your first job, they teach principles you can use your entire career. And times does change.
Remember the good old languages Fortran, Algol 60 etc. That's where the jobs were...
sarchertech
That heavily depends on the school. But I’ll add many years later, I appreciate the theoretical classes much more because the knowledge I gained there has aged much better.
ramses0
I graduated with a degree in CS. Checking back with my university they'd added a degree in Software Engineering.
CS (traditionally) is more about algorithms, limits, growth. There's a bunch of complexity in even just understanding and calculating what a computer can do.
The Software Engineering degree makes so much sense if you're studying about how libraries can be tied together, upgraded, unit/integration testing, container and source code management, etc.
They are truly different disciplines at this point.
layer8
Possibly because that isn’t computer science.
chrisaycock
This op-ed was written by an undergrad and complains that Northeastern's switch to Python (from Racket) for its introductory classes will prevent students from learning fundamentals of computer science.
But that complaint can be made about any language! "This dynamically typed language won't allow students to understand type safety." "This high-level language won't allow students to learn pointers and systems programming." Etc.
I believe that an intro course should get students coding since the first major hurdle is learning how to construct any kind of program at all. The switch to a more "employable" language isn't going to make education worse.
ycombinatrix
How about you focus on the argument instead of making ad hominem attacks?
>Racket was chosen because it has “teaching languages” that can gradually introduce features as students are taught the relevant design principles.
So no, that complaint can't be made about any language.
AnimalMuppet
Does anyone else question whether an undergrad is best able to evaluate the strengths and weaknesses of the curriculum?
fn-mote
In this case, you can find the same criticisms in published articles and books. I expect this student heard them straight from the source (author of the articles or books). That does not lessen their impact or correctness in my opinion.
Also, see SolarNet's comment. https://news.ycombinator.com/item?id=42677918
000ooo000
Yeah.. Undergads leave school and are barely trusted to write CRUD apps.
SolarNet
Tell me you haven't read the article (or used racket) without telling me.
> I believe that an intro course should get students coding since the first major hurdle is learning how to construct any kind of program at all. The switch to a more "employable" language isn't going to make education worse.
None of this is the issue at hand. The switch to python is because industry uses it. The article correctly makes the point that racket was intentionally designed to get students coding as easily and quickly as possible. It has multiple steps of teaching languages for exactly that purpose, introducing concepts in ways that let students grapple with them one at a time in an interactive environment.
Meanwhile in python complex topics like duck typing, object oriented methods, exceptions, the distinction between iterables and lists, how to use a command line/terminal or how to configure an IDE, and so on must be covered before people can start writing code for the exercises. Racket is streamlined for beginners.
lazyasciiart
> Meanwhile in python complex topics like duck typing, object oriented methods, exceptions, the distinction between iterables and lists, how to use a command line/terminal or how to configure an IDE, and so on must be covered before people can start writing code for the exercises.
No, they dont have to be at all. You might as well suggest you need to learn the JVM before writing a line of Java.
wombatpm
Python supports imperative, OO and functional programming paradigms. And to start you can use any text editor, an IDE is not required. In fact you can start working in the REPL right away, in which case you need a terminal and the command “Python”.
Jarwain
All of that except for working in the terminal, could probably be considered higher level
sorawee
To quote the above person: "tell me you haven't read the article without telling me".
You thought that supporting multiple "programming paradigms" is a nice thing, but it's the opposite for teaching beginning student. Experienced programmers want expressivity/customization/choices to do whatever they want. That's not what newbies need when they get stuck on an assignment.
null
I went to Caltech when they were contemplating similar things in the CS curriculum, although the normal curriculum was less radical than Northeastern's seems to be.
There is a tension here that is being understated which is that people of every major now take the intro-level CS class because programming is integral to everything. Teaching algorithm design in that class is not particularly useful to a biologist who just wants to be able to cobble something together to analyze some data (usually in Python). As a result, the non-computer-scientists and non-software-engineers at the school would rather have a curriculum that is more "practical" and directly applies to research (or later class projects) the students might be doing.
Some time not far in the future, we are going to accept that this is not the same thing at all as computer science and give the computer scientists a curriculum that is a lot heavier on math and theory while adding elective or core courses for non-major students on programming. That will end the compromised state that intro CS courses currently sit in. Right now, there isn't enough teaching talent to run those non-core courses (because that talent is earning the big bucks doing something else).