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.
Taking Shivers' Fundies I class was mind blowing, even as a student that had been programming for several years already. They should have put him and Barzilay (who I had for PL and then later TAed under) in charge of the curriculum update.
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.
I spoke briefly with Felleisen at the end of this year, and sadly it seems the zoom recordings from the pandemic are lost to time. The course sites will likely stay up but the lectures were where it mattered
I'm going to provide a controversial take here as CS grad from a similarly-tiered program: there is a huge chasm between top-4 cs programs and everyone else. The top 4 are obvious: Stanford, MIT, CMU, Berkeley.
Then there are the cs programs of the ivy leagues, not as strong, but usually you have a rich parent or uncle who has already speed-tracked you into a hedge fund, so lets put those aside.
I didnt go to a top-4 cs program and the reality is -- there is no longer a real job market for any cs grad outside the top-4. If it were not for ZIRP it could be there never was! There is definitely not a job market for the sheer masses graduating with cs degrees, and it will take a decade to absorb the fresh graduates.
The curriculum does not matter here, so I think all this discussion is beside the point. No curriculum stasis or change will magically lead to jobs for fresh graduates.
I say this from three perspectives
1. Reality - just ask people if they found a job (ignore nepo-hires, also ignore startup founders with nepo-vc investments)
3. How people act. Foreign workers want the jobs more and are willing to do anything and learn anything to get it. My office is 95% non-us workers. They work hard.
Retired CS prof here (from a below (ok way-below) top-4 program). There is no longer a job market for CS grads outside of top-4? Is this true? I had no idea, as I understood it, CS major numbers are still rising.
GP is just making stuff up. There are plenty of jobs for CS grads still outside the top-4. Will there be some constriction in the market? Probably, code generating LLMs are getting more popular. But there are plenty of systems that are a bit too important to leave to random code generators.
Firstly, there are not "plenty of jobs for CS grads" -- if there were, you would have supply (us cs grads) matching up with demand (us tech jobs). Yet you see tons of unemployed CS grads. FAANG mostly has hiring freezes, and you have to be part of the inside club to be let in. Many cs grads go into bs jobs way under their potential (random government agencies, contractors.)
Walk into any US tech area and you wont see any Northeastern CS grads, or many non-Top-4 grads. You will either see Top-4 CS grads in leadership positions or at their own startups -- or you will see foreign grads. In some offices, 90% or more of the workers are foreign grads, not US school system grads.
Tons of job postings are fake. There was an entire HN post on this last week, companies posting fake jobs. Sometimes it is just to show a best effort before an insider is hired.
I think LLM copilots are a factor, but they are just a convenient distraction from the real problem -- a supply-demand-price mismatch. ZIRP conveniently hid the problem, but now it is out and visible.
>>> Many cs grads go into bs jobs way under their potential (random government agencies, contractors.)
> Why are those jobs deemed bs?
Because many of us went into the field bright-eyed, thinking about working on cool products, designing the latest algorithms, or being part of world-renowned teams. NOT to run the nightly batch job for the Massachusetts Depart of Family Services wage garnishment system. NOT to fix bug tickets at the local tax office's COTS implementation, while all the actual software is built elsewhere. NOT to work as a contractor without benefits.
Just look on Linked In, filter by Northeastern CS, see how many people have green semi-circles. Look at where people are landing jobs. Filter out nepo-hires, which are easily visible (e.g., jumping into leadership role straight out of school)
Sorry - little sympathy here. I acknowledge the market is much worse this year and last year.
But I started at a lame crappy job 10 years ago after college. It’s not a big deal, it gets your foot in the door and then in 2-3 years you can move up to a better company. I did this a couple times and after 10 years i’m now working at a faang adjacent company (household name but not part of faang).
That’s what normal life looks like for a typical CS grad. The fact you think getting a job at faang is expected or normal right out of the gate shows you’re in a bubble. It happens, and i’ve worked with colleagues who did it, but it’s not the norm.
and nobody is changing the world with their code, unless you’re linus torvalds or similar. best to squash that naivety earlier than later lol. It’s a job, and a passion for some (like myself). that’s it. It’s also healthy to find additional hobbies outside of the computer - something i learned the hard way.
Guess the smarties should have measured the patterns physical social reality rather than get sucked in by propaganda.
What physics demands society align with the spoken philosophy of a people? It’s kind of on the people to demand politics align with the philosophy. But go on, people; scream at your screen like gramps did at Dan Rather.
Distribution of education does not guarantee distribution of intelligence.
bad faith doomer. One thing you also forget to mention is that non-us workers are just that, not in the US, and that matters now that more places are putting an emphasis on in-person work.
I appreciate the humor but this confuses me. I also read in a biography of Thomas Jefferson that he reviled Calvinists, going so far as to say their God is not the God of the Bible. I genuinely do not understand what is so reprehensible about Calvinist doctrine. There is just so much theological noise to parse through whenever I research it. Is pre-determination the biggest issue?
Yes, the predestination. It removes from humans any agency in their own salvation, and any action of consequence in their lives. Everything is predetermined, the whole world is just a mechanical puppet show.
It's an internally consistent view of the world. But it turns all the biblical events where humans appear to have agency into just silly scripted scenes, and it also turns the passion and self-sacrifice of Christ another scripted scene (with the Gethsemane episode thrown in for sadistic melodrama, apparently).
I'd say that (strict) Calvinism is the least Christian of the various sects that have attained mainstream success. Paradoxically, it produced some very sober and ultimately successful approaches to the earthly life.
Yeah, predeterminism, along with limited atonement, and perseverance of the saints, combines to form, IMO, a theology that is toxic at best, abusive at worst.
If I can massively oversimplify, it's a theology where Jesus came to redeem only the Elect that God had already chosen to be saved while he had chosen to send everyone else to hell, so that the Elect could see His mercy (to them, not those poor bastards on the down escalator).
And, perseverance of the saints is the icing on the cake, because it came to mean that if you ever disagreed with your church or its elders, well, you obviously weren't one of the Elect at all, enjoy the hellfire.
So it's a great theology if you want to run a small, obviously better than everyone else, in-group of the Saved, vs. all the unsaved sinners God has already condemned.
To see how perverse it could become in the extremes, look at the role it played in apartheid.
Man, multiple people were ready to "go in on" Calvin which really wasn't what I intended. I was recently drafting a little ten part quick and dirty comparison of Christian denominational views on the most important/relevant theological concepts and reading about the Old Lutherans in this post really made me think about how seriously they took these things because they were literally true to them. It is either an admirable or a terrifying thing depending on your perspective.
To answer your question as well as I can from their perspective, the reformed understanding of pneumatic presence vs their understanding of the sacramental union and being forced to participate in the eucharist in that heretical way, would quite literally be grounds for leaving the continent.
I have a pet project to integrate org mode with LLMs via tags, and the hardest part has been interfacing with the base org-mode tags to provide all the functionality I want. This library is exactly the thing I need to pick it back up!
I was a student at Northeastern (where Matthias Felleisen was a professor) from 2016-2020, so I have first-hand experience with exactly this system of teaching.
The combination of the "program design" process and the simplicity of the teaching language (student Racket) made the introductory courses at Northeastern excellent. I found that students who already had lots of programming experience hated the initial courses, but those of us with limited experience really excelled. For me, it really validates that Dijkstra quote about Basic programmers being psychologically injured.
The second introductory course used Java, but it mostly covered all the same topics as the first Racket-based course, just using Java constructs. It was a much more gentle introduction to the extra complexity of "real" programming languages, but the program design process was identical.
As I understand it, Northeastern is unique in its CS pedagogy, and there's only 1 other school I know of (WPI) that uses Racket as its teaching language. I will always be grateful for my time there.
A sad development is that the current administration is attempting to strangle the curriculum Felleisen et al. have developed over the last 2+ decades in favor of returning to the "old way" of teaching he criticizes in this essay. Their motivation is in large part—though not exclusively; ideological elements also enter into the picture—a consequence of Northeastern recently snapping up various bankrupt colleges worldwide and wanting to homogenize the curriculum across these new satellite campuses. Sadly, this means homogenizing down. Apparently, training faculty in this curriculum is too much for them.
This is so sad. I got an incredible CS education at Northeastern. I’m very successful in my career, and for someone who didn’t know how to program before college, I found that the CS curriculum pioneered by Felleisen prepared me far better than graduates of other colleges. The curriculum was tough and I spent many nights banging my head against homework assignments. But, everything eventually “clicked” and I graduated feeling confident, empowered, and humbled.
Not a single CS major in my graduating class got a 4.0, and I refer to this with honor and respect. The curriculum taught us how to think, how to problem-solve, and how to design programs. It felt like the curriculum was created to foster _understanding_, not to crank out high GPAs.
I’m so disappointed that the Northeastern admin is trying to force such an excellent CS program into something more “accessible” a-la a boot camp. That’s not a knock against boot camps, which should be a low-cost way for people to get their foot in the door for this amazing profession! But, for a 4-5 year university costing $60k per year, I would expect to be challenged, learn theory, become versed in things I’ll never use on the job, and come out a well-rounded SE.
Felleisen may be a bit cantankerous, but he sure as hell knows how to approach CS education, and I can’t thank him enough for the opportunity I had to learn via his approach.
I've been advocating the use of a LISP in the feedback committee of a local CS school I'm in... Some start the course with quite strong JS/Java/C#/Python skills, and some have zero exposure to programming.
A LISP would in most cases:
* level the playing field for all pupils
* focus on learning the concepts over learning the language (I argue LISPs are almost syntax-free)
My initial thought is that's a great idea. But then I start to think about how college classes are supposed to build on what you already know. Your math department doesn't begin with addition, the English department doesn't start with picture books.
Perhaps the real issue is forcing everyone with experience to start over at the beginning.
I've been an assistant to a professor teaching introductory programming at a university. And we chose ML (later Haskell), as the first programming language, exactly because of this reason. Weaker students with no programming experience can build their knowledge on top of their mathematical knowledge from school. Whereas stronger students, with lots of programming experience, were challenged to reconsider their assumptions. Both groups did learn significantly.
> Your math department doesn't begin with addition
Well, ... actually, ... "Mathematik für Informatiker I" (mathematics for computer scientist I) did start with groups, then abelian groups, i.e. addition.
While I'd say Haskell is great (in general). I do have some reservations with using it as a intro lang, because the type system is almost a language of it's own. So you have two learn two things at the same time.
In LISPs you program the AST directly. No serious type system (usually). They are very "small" languages.
If you wanted native English speakers and second-language English speakers to be on a level playing field in a literature class, maybe you could teach the class using entirely Esperanto or Lojban translations of the works you are studying.
The language one speaks has nothing to do with literature class*, as the point is to teach reading comprehension, critical thinking, writing, and whatnot. The exposure of great works before college helps build a firm foundation on which to read and dissect more complex works.
* Obviously the works need to be readable in a language one knows. But it's not like the essence of literature classes change whether one speaks English or German or whatever. That's not the point.
I attended the University of Delaware around the same time, where the CS honors program also started with Racket.
As someone self-taught with experience in imperative languages like Obj-C, Java, and Haxe, most intro courses would have been redundant.
Racket’s functional approach, however, required a significant mindset shift. It deepened my understanding of core programming principles and fundamentally changed how I approach problem-solving.
UConn had a Racket programming course for maybe a decade up until last year. Enough people complained that it was too hard and a weed-out course and the administration dropped it. Yet another blunder by the CSE department.
"In 2016, there should not be many undergraduates that are familiar with the version of Basic that Dijkstra was referring to when he made this quote in 1975"
Dijkstra was talking about Dartmouth Basic in 1975:
- Variables: Single letter, optional digit.
- Control flow: FOR loops, GOTO for others.
- Subroutines: GOSUB line, RETURN.
- Parameters: Passed via global variables.
- Functions: 26 (FNA–FNZ), one line each.
- IF statements: One line only.
It's much worse than assembly. On all but the shittiest machines, you can store code pointers in RAM and registers, and in a subroutine call, the return address is stored somewhere you can read and change it (whether on a stack, in a register, or before the first instruction of the called subroutine). This allows you to implement object-oriented programming, switch/case, backtracking, and multithreading in assembly. You can't do that in BASIC.
Also, since the early 01960s, all but the most primitive assemblers have macros and named labels. One result is that they have an unlimited number of named functions with line number independence, as marcosdumay said. Many of them have a sufficiently powerful macro system to implement nested control structures like while loops and multiline if. Since the 01970s they've also had local labels. BASIC doesn't have any of that.
Modern assembly you give you named functions, line number independence, unlimited functions, places for carrying a value over RET... Basic had none of those.
> For me, it really validates that Dijkstra quote about Basic programmers being psychologically injured.
> I was a student at Northeastern (where Matthias Felleisen was a professor) from 2016-2020, so I have first-hand experience with exactly this system of teaching.
This maybe so, however you likely don't have first-hand experience with early, unstructured versions of basic to which Dijkstra was referring to in his quote. These early versions lacked control structures such as loops or even if-then-else functions. Later versions of basic evolved to support modularity, OOP, local variables and everything else. Dijkstra tended towards hyperbole and exaggeration IMHO.
Ha, Ha! Teamwork is vastly overrated in the Industry. Almost everything achieved by mankind is because one man put together a lot of knowledge in his own head and came up with insights. Even when they worked in Teams each man was an individual and did his own thinking.
Today "Teamwork" has come to mean playing politics, jockeying for influence, taking credit for other people's ideas and so on.
When was the last time anybody cared what HR had to say? I've never encountered an HR department whose primary role wasn't to indoctrinate or to create roadblocks for everybody else.
Hyperbole: exaggerated statements or claims not meant to be taken literally.
Do you really think these statements were meant to be taken literally?
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Or this?
"the use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense,"
I think that saying that Dijkstra was capable of making hyperbolic statements is rather kind in this case ;-)
All languages have Hyperbole to enable one to cut through noise and convey insight via forceful phrases. That is its proper use; only when it is used for mere egoistic reasons is it frowned upon.
Dijkstra was instrumental in inventing Structured Programming when Programming was literally anything goes spaghetti. This was the main reason his famous GOTO paper was such a hit. Given this background you can understand his comment about BASIC. This comment https://news.ycombinator.com/item?id=42461921 explains how bad Dartmouth BASIC was. Looked at in this light you can see how a person trying to establish structured programming might feel about that flavour of BASIC and his quote nicely captures that.
Dijkstra was also all about mathematical notation, precision and rigour. In fact the article i had linked to mentions that he was unhappy with all languages and hence taught his class at UT Austin using a language of his own design and notation. Now realize that COBOL at that time had all the unstructured faults of BASIC listed above plus an even worse handicap in that it was using Structured English rather than mathematical notation! To somebody who was all about mathematics this would be sheer torture and thus his quote.
Quote from previously linked article;
Dijkstra argued that computer programming should be taught in a radically different way. His proposal was to teach some of the elements of mathematical logic, select a small but powerful programming language, and then concentrate on the task of constructing provably correct computer programs. In his view, programs should be considered the same way as formulas, while programming should be taught as a branch of mathematics.
One should always think when reading an acknowledged great's quotes/phrases. This is not to say that they can never be wrong but this probability is generally quite low.
In a rare moment of self-awareness I realise that I'm arguing on the internet.
The only point I can make is that I'm tending towards idiocy ;-)
Let us just agree with the facts: (a) I first learned to program in BASIC at 10 years old, (b) I am indeed psychologically damaged by the stigma promoted by Djikstra and (c) it's true that I struggled with pointers in C in first year university. So hey, he was probably right - both Djikstra and the OP. Honest enough for ya? ;-)
p.s. I lost two internet points trying to be Captain Defend-the-old-BASIC-programmers. Lessons learned.
> As I understand it, Northeastern is unique in its CS pedagogy, and there's only 1 other school I know of (WPI) that uses Racket as its teaching language.
Not Racket, but Indiana University uses Scheme. Dan Friedman is a professor there and teaches a great 300-level programming languages class (in Scheme ofc)
In-state tuition to that school (and Purdue for that matter) is one of the few reasons I'd advocate for living in Indiana after growing up there haha.
> Note that def we have inserted, to define a global variable request. This is a powerful debug mechanism, but a better way to use it is a tool like [snitch](https://github.com/AbhinavOmprakash/snitch).
In my experience, this is a phenomenal way to develop.
You just replace whatever `defn` or `let` you are working on with `defn` and `let`, and interact with your app normally (click around in the UI, trigger the frontend or backend functions you are examining). Combined with a tool like portal (https://github.com/djblue/portal) you can quickly get an overview of your system while it is running!
Another perspective: shame can be good. Feel it. Shame for who you are can light a fire in you, can propel you into transformation. Shame for one's past self is normal, if one has undergone any growth, and in time one may forgive himself. But not now, not when you know yourself and you see all the ways you are lacking. Not when you are so wholly disappointed in your life that you want to end it. _Longing_ for a different life will not result in change. Shame, and deeply ruminating on it can. In time you will transform and can forgive the past self you are ashamed of, but not now in your time of desperate need.
I think it’s worth drawing a distinction between guilt, which can be positive, and shame, almost never. Guilt is feeling badly because you know you’ve done wrong. Shame is feeling badly because other people know you’ve done wrong.
I still feel shame can be noble. To try to live up to the example of others and feel ashamed that you are not anywhere near their greatness. Not guilty, because you have not done wrong, but shame, because you are not enough compared to another.
A Pi draws somewhere under 10W at peak, probably significantly under that most of the time. That’s about 87kWh per year, worst case.
Something like $8-16 dollars depending on how incompetent your power company is - well under the threshold for anyone who knows how to do this kind of work to worry about. Again, worst case; I’d bet you can do constant listening half that.
You missed the big difference between the GUI and CLI. Even if the GUI is completely unfamiliar, and you have to learn it, you can still see the different buttons, menus etc. They often have icons or text that hint at what they do, even if you don't know exactly what they mean.
With a CLI you have absolutely nothing. There is nothing to see at all, nothing to even begin to interact with to discover the capabilities.
> Even if the GUI is completely unfamiliar, and you have to learn it, you can still see the different buttons, menus etc.
Unless the GUI uses some material style nonsense. Then you have to guess where buttons are. Menus are so uncool. Every modern emacs distro starts with disabling them. Mobile apps have replaced the menubar with the hamburger button by necessity. Modern desktop GUIs have copied that despite it clearly being worse on a desktop than a menubar.
I kindly disagree :-): I would say that with the CLI you have the exact equivalent: man pages.
Just like for a GUI you have to know that by hovering the cursor about an icon you will get some text description, with a CLI you have to know that there are man pages. And just like a bad GUI may have cryptic icons without any description text, a bad CLI will have no manpage. But we should compare a good GUI to a good CLI, to be fair.
I agree. In the CLI I have a blinking cursor. If I press keys I see characters. If I press enter I get a response[0]. I do need a further invocation to get help, but that's easy enough.
[0] admittedly a holdover from the typewriter, but even presented only a keyboard and a screen I've had a kid realize that one special key makes the words go vertically instead of horizontally.
There is no reason why a better shell couldn't show tool tips over command names or flags, assuming there is support for it in a terminal emulator. Even without support from the tooltip it would be possible to show some info about the thing below the text or mouse cursor in a designated area of the cli.
Hi, I've never used a computer before and my first time will be a CLI. What is a man page? How would I discover what it is without first knowing it exists?
I believe this is a wrong assumption. People have to learn the basics even to use a GUI. Because they grow up with GUIs does not mean they have not learned they way around them.
Yes, people often have a shocking misunderstanding of historical attitudes, and attribute modern sensibilities to people way too far back in time.
They obviously also haven't read Marx, who literally argued the exact opposite. He believed Capitalism caused "alienation" in the worker, preventing him from finding meaning in his work. Prior to capitalism people were highly skilled artisans, or subsistence farmers, who almost universally found meaning in their work.
So capitalism did not "give rise to a value system that teaches us to find meaning in our work", the value system was already there. Capitalism just prevented the values from being fulfilled in the workers' lives.
Maybe. The fact that these old philosophies place so much emphasis on finding meaning in work could also (and likely, in my opinion) suggest that finding value and meaning in work does not come automatically, especially since there are physical, economic, and cultural constraints on what any one of us is able to do, and so they needed call it out specifically to engender that ethos.
Putting it differently, scapegoating capitalism for preventing people from finding meaning in work seems like a shallow analysis to me. It is not like factory workers or blakcksmiths from the past who were more interested in other things (making music, say), would agree that they were fulfilled.