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.
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.
> 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.
No.
Dijkstra being Dutch was famously blunt, vigorously contrarian, uncompromising perfectionist and extremely honest.
A summary of his life and works; The Man Who Carried Computer Science on His Shoulders - https://inference-review.com/article/the-man-who-carried-com...
Or what HR would call as "not a team player".
Today "Teamwork" has come to mean playing politics, jockeying for influence, taking credit for other people's ideas and so on.
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 ;-)
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.
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.
please clarify.
few know basic in 2016?
few know Dijkstra said it in 2016?
in 2016 few knew that Dijkstra made the claim at some earlier point in time?
I don't understand what you want to say.
see https://www.cs.utexas.edu/~EWD/transcriptions/EWD04xx/EWD498... for the original quote
- 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.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.
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)
* while not delving into type systems just yet!
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.
* 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.
Adition is a mandatory topic in school, so you can assume students know it when they get to the university.
Anyway one of my coworkers in the first year of the university asked 1/16 + 1/16 and after some tries from the students the best answer was 1/32.
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.
In LISPs you program the AST directly. No serious type system (usually). They are very "small" languages.
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.
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.