[HN Gopher] Northeastern's redesign of the CS curriculum
___________________________________________________________________
Northeastern's redesign of the CS curriculum
Author : nickmain
Score : 145 points
Date : 2025-01-10 13:07 UTC (3 days ago)
(HTM) web link (huntnewsnu.com)
(TXT) w3m dump (huntnewsnu.com)
| jcgrillo wrote:
| The disease must have jumped the river from M.I.T.
| ycombinatrix wrote:
| i think it is coming from industry
| jcgrillo wrote:
| My geography of that region is dated, but when I worked in
| industry there I was north if M.I.T., so it's plausible
| industry could be patient zero.
| chris_wot wrote:
| It was apparently industry who told Australian Universities
| that relational algebra was not needed in databases.
| davewritescode wrote:
| I am a graduate of Khoury and find this very disappointing. I
| wasn't a huge fan of learning Scheme/Racket but after looking
| back during my career I'm grateful for the education I got there.
|
| This feels like a step backwards.
| dickfickling wrote:
| 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 wrote:
| > 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 wrote:
| 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 wrote:
| 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.
| jcgrillo wrote:
| I completely agree. The only things I consider fun are also
| "hard", "uncomfortable", and "unpleasant". Otherwise it's
| just boring.
|
| Another way to say it is "rewarding".
| asimeqi wrote:
| 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 wrote:
| "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.)
| dehrmann wrote:
| I don't know how much I buy the "leveling the playing field"
| argument. In my computer architecture class, we learned Sparc
| assembly. Very few people had encountered much assembly, and
| definitely not Sparc. At first, it was level, but people with
| more programming experience quickly adapted since it wasn't
| actually that different.
| davidalayachew wrote:
| Is it fine? How would we determine that? What's the metric?
| bmitc wrote:
| MIT, despite it thinking otherwise, is a slave to industry,
| funding, and trends.
| golly_ned wrote:
| This adds nothing other than "MIT did it so it's OK."
| lo_zamoyski wrote:
| History says otherwise.
|
| Before the current curriculum was implemented, a good portion
| of students were having difficulty finding jobs and co-ops.
| After the switch, employers were very eager to hire these
| students.
|
| The change is not a mere "switch to Python" (which itself is
| not nothing). It is the replacement of a good curriculum with
| something mediocre.
|
| Also, I don't know how MIT is doing after the switch.
| synchronousq wrote:
| I believe this is a fundamental misjudgement of the CS
| curriculums at MIT and NEU and, apologies for being blunt,
| probably the worst take on this thread.
|
| The student populations at MIT and NEU, particularly in CS, are
| fundamentally different. The majority of undergraduates at CS
| MIT participate in academic research while the vast majority of
| CS undergraduates at NEU do not (do not let NEU's exceptionally
| high computer science research output [1] confuse you - the
| undergraduate and graduate schools are very separate). MIT
| educates significantly less students than NEU. MIT's algorithms
| class (6.046) is significantly more rigorous than NEU's
| equivalent (CS3000) - just compare the publicly available
| curriculum and problem sets [2,3]. In general, MIT's CS
| curriculum caters towards the third of the student body that go
| on to do PhDs, while NEU's CS curriculum caters towards the
| vast majority of students that beeline towards industry [4,5].
| The institutional goals and educational values between MIT and
| NEU could not be more different. I know all of this to be true
| because I've spent a significant amount of time at both
| institutions.
|
| I don't know if NEU will butcher its CS curriculum. I hope not.
| I guess we'll just have to see.
|
| P.S. it's worth checking out Pyret [4], essentially a
| functional teaching programming language. The language is
| mostly written by NEU staff, so I wager NEU's future CS
| curriculum plans to phase out Racket in favor of Pyret.
|
| [1]
| https://csrankings.org/#/fromyear/2014/toyear/2024/index?all...
| [2] https://courses.csail.mit.edu/6.046/ [3]
| https://tlarock.github.io/teaching/cs3000/syllabus.html [4]
| https://facts.mit.edu/alumni/ [5]
| https://www.northeastern.edu/experiential-learning/co-op/ [6]
| https://pyret.org
| chrisaycock wrote:
| 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.
| SolarNet wrote:
| 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 wrote:
| > 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 wrote:
| 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".
| sorawee wrote:
| 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.
| Jarwain wrote:
| All of that except for working in the terminal, could
| probably be considered higher level
| AnimalMuppet wrote:
| Does anyone else question whether an undergrad is best able to
| evaluate the strengths and weaknesses of the curriculum?
| 000ooo000 wrote:
| Yeah.. Undergads leave school and are barely trusted to write
| CRUD apps.
| fn-mote wrote:
| 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
| ycombinatrix wrote:
| 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.
| ideashower wrote:
| 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 wrote:
| 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.
| InkCanon wrote:
| I'm seeing many undergrads write LLM code that they don't even
| understand. It's a travesty. Can't remember the exact saying,
| but it went like: "AI creates short development times and super
| long debugging"
| rswail wrote:
| None of what you talk about is computer _science_ , it's
| applied programming.
|
| Computer science is to programming in the same way that
| astronomy is to navigation.
|
| How can a student "understand" LLMs without the background
| knowledge of computer science?
|
| Programming courses can teach how to _use_ LLMs, in the same
| way it can teach how to use Python, Java, language-de-jour.
| graemep wrote:
| I watched the video first lecture in the MIT course on which
| Structure and Interpretation of Computer Programs is based
| and it explains "computer science is not a science and is
| only incidentally to do with computers" and goes on to
| compare the relationship between CS and programming to that
| between geometry (which means "earth measurement") and
| surveying.
| theodpHN wrote:
| Also expressing concerns about the selection of suitable
| languages for novice programming is King's College CS Prof
| Michael Kolling, 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." Kolling's recommendation? "We need a new language for
| teaching novices at secondary school and introductory university
| level," Kolling 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 Kolling 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...
| fn-mote wrote:
| 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.
| juliangamble wrote:
| 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.
| herdrick wrote:
| 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 wrote:
| (... in the style of his The Little Schemer et al. books)
| herdrick wrote:
| This is so sad.
| anonymouscaller wrote:
| Here is Felleisen's (who I should note is retiring) views on
| teaching programming at NEU, which is worth a read:
|
| https://felleisen.org/matthias/Thoughts/Developing_Developer...
| pclmulqdq wrote:
| 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).
| unethical_ban wrote:
| <specialty> for non-majors isn't radical.
|
| "Stats for business"
|
| "PE for physicists"
|
| Why isn't "programming for sciences" not a thing?
| sarchertech wrote:
| 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.
| analog31 wrote:
| "PE for physicists." Touche. ;-)
|
| Dating myself, my college had Pascal for CS majors, and
| FORTRAN for physicists. The FORTRAN class was math heavy, and
| we had a higher level course in process control as well, plus
| we all took the math class in numerical analysis.
|
| When my daughter was in college, it was Java and Python. She
| took Java. I had suggested to her that she could easily keep
| up with the CS students, which she did.
|
| I very much favor better training in programming for
| scientists. Taught by a scientist. The "intro to Matlab" that
| many students take is really too lightweight. Also, as for
| languages becoming obsolete, the disciplines that I learned
| in the 1980s are still of value today even if the languages
| have changed.
| avs733 wrote:
| >PE for physicists
|
| You meant juggling and fencing?
|
| A more pragmatic answer is who's going to teach it? Someone
| with weak skills in the discipline? Or someone with weak
| skills in computing? (This is a glib answer)
|
| Finding people at the true intersection is surprisingly hard,
| and those people tend to be busy.
|
| In grad school I took and advanced statistics course in the
| psych department. The concepts were new to me but not to the
| folks in the discipline. However the math (matrix
| multiplication) and basic coding were easy for me and very
| hard for them.
|
| There was only one person in the department who could teach
| it, other faculty did that type of work entirely as "clients"
| which just ran tools and code from others.
| mywittyname wrote:
| Who teaches the "<math specialty> for business" courses?
| IME, it was math professors.
|
| It's not unreasonable for the biology department to come up
| with the common programming use-cases for their students,
| then have the CS department build a course around those
| skills.
|
| My minor was Bioinformatics. The biology department taught
| foundational course like biology and genetics and the CS
| department taught the courses on processing data.
| thereisnospork wrote:
| "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.
| tiffanyh wrote:
| > 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.)
| klooney wrote:
| At my university, they did, I don't think it's that uncommon.
| layer8 wrote:
| Same here. The CS curriculum was theory-heavy (as it should
| be), and there were purely practical programming courses
| for the other faculties.
| SilasX wrote:
| Right, there's the longstanding joke about whether you're
| taking real geology vs "rocks for jocks".
| chris_wot wrote:
| Costs. They don't want to have two courses teaching largely
| the same concepts when one will do. Short sighted, but that's
| how they roll.
| seanmcdirmid wrote:
| At least when I went to school, intro CS was a weed out
| course for getting into the CS department in the first place,
| along with calculus based physics that potential engineer and
| physic majors also had to take.
|
| I think these days it's a bit different in that many schools
| allow high schoolers to apply directly to the CS department?
| But then it would be a matter of scale I guess, they usually
| have clinical professors run these classes because they
| demand full time attention.
| sansnomme wrote:
| They need to get rid of the concept of weed out courses.
| It's bad for learning. If you are paying 30-50K a year for
| an education, course availability should be a given. Don't
| use the bell curve as an excuse to deny students an
| education, or if you are going to use a threshold, use a
| fixed one, not one that limits by percentage of students.
| The fat cat admins and professors need to be fired. Too
| many schools take the students' money and plow it into
| research and other areas, with zero regard for
| undergraduate education. "You are in university now, it's
| sink or swim. Can't make it? Too bad." This attitude is
| especially prevalent in the state/public unis, especially
| places like Berkeley where demands exceeds supply. Your
| traditional private colleges like Dartmouth and Harvard
| don't have this problem.
| nmeofthestate wrote:
| Ideally people who can't handle the course should get
| filtered out before being accepted to the college, so
| they don't waste any money. But since it's impossible to
| filter reliable at that stage, surely it makes sense to
| also filter early on in the course. (from the perspective
| of the student. If the college wants to take more of
| their money they could still direct them to a different,
| easier/more suitable subject).
| seanmcdirmid wrote:
| A lot of schools these days weed out at the application
| level: if you have a great portfolio from middle school
| through high school, great! You have it made.
|
| I sort of like the change to redeem yourself during the
| first two years of your university if you didn't have the
| ideal secondary school experience to get into a hot
| department of a hot university. CC can do that as well, I
| guess, but it is a much harder hill to climb.
| InkCanon wrote:
| Weed out courses do have various problems. Some of it is
| regulatory - certain public or public funded universities
| don't let you eliminate large portions of your cohort.
| Graduation rate is a part of many college rankings, so
| there's also an incentive to not fail.
|
| I don't think it's completely wrong. Failing a student
| after he or she sunk a ton of money into it is really not
| ideal. IMO it seems really easy to pass prospective
| students the first few chapters of your CS
| textbook/lectures then test them as a prerequisite for
| enrollment, before they enrol. This would be close to free,
| filter out a lot of would be dropouts and just save money
| and effort all around.
| bakuninsbart wrote:
| Doing weed out courses on purpose I think is elitist and
| unnecessary, but computer science does require
| understanding of some hard topics. Linear algebra,
| theoretical computer science and the like may have very
| high failure rates, but are a necessary pre-requisite to
| become a computer scientist.
| morby wrote:
| I wouldn't say linear algebra is a necessity to being a
| computer scientist. At least, not the full linear algebra
| content. Knowing matrix math is enough.
| mywittyname wrote:
| It's not completely necessary. But I will say, as someone
| who began their career as an 18 year old "self-taught
| developer" then completed a CS degree at 30, I found
| linear algebra to be the most useful bit of knowledge
| that was missing from my kit.
| seanmcdirmid wrote:
| Two reasons:
|
| 1. Back when I was in CS, the department was much smaller
| than it was today. This was after the 80s programmer
| crash, and so they just didn't have enough professors or
| resources to teach as many students as were interested in
| being CS majors.
|
| 2. You are able to teach to a higher standard if you've
| filtered the students that enter your department. You can
| have one or two people fail OS rather than half the
| class. At some point, it is reasonable to see if the
| students are committed, and they get to prove themselves
| a couple of years after high schools, which worked better
| for people like me who weren't very accomplished until
| they get to college.
| addcommitpush wrote:
| Are there "math weed out courses"?
| zmgsabst wrote:
| Yep.
|
| At my university, after the usual calculus/diff eq/lin
| alg sequence everyone in STEM takes, we had "intro to
| advanced mathematics" that was proof based, taught in the
| spring, and a pre-req for everything higher level
| (abstract algebra, real analysis, etc). Most math
| programs have a similar "first proofs" class as their
| "weed out" class.
| addcommitpush wrote:
| In that case the weed-out course is _after_ the
| calculus/diff eq/lin alg sequence then, not the intro
| math course.
| dagw wrote:
| My university had a proof based, let's construct the
| natural numbers from axioms and prove that a+b == b+a
| type course as the first class for aspiring math majors.
| It was a "weed out" course, not in the sense that it was
| particularly hard, but more in the sense of introducing
| students to this is what 'real' math is actually about,
| and not so much the stuff you were doing in high school.
| Some students decided each year that they didn't want to
| do 'real' math and went on to focus on other things.
| pclmulqdq wrote:
| Real analysis or other similar "proofs of basic things"
| classes usually fill this role.
| seanmcdirmid wrote:
| Math isn't popular enough to have weed out courses, and
| math professors of higher division classes don't mind
| failing half the class. There isn't much of a drawback to
| letting as many people who want to major in math.
|
| But intro STEM math is used as a weed out for other
| majors. You aren't going to get far in CS if you aren't
| able to ace your basic calculus classes.
| shmorkin wrote:
| 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.
| User23 wrote:
| That uses to be called CIS. When I was at Harvard they still
| took the algorithms class. Yeah, it was the ezmode version,
| but it still covered stuff like how to build a hash table and
| a trie.
| eitally wrote:
| I live in California and I recently read an article from the
| perspective of Berkeley's CS department explaining why they
| don't take transfer credits from high schoolers who took AP
| CS or AP Stats -- they're just not "real" Computer _Science_
| , but rather applied programming.
|
| Even when I was an undergrad (1995-1999) and a grad student
| (2008-2011) everyone knew that CS was a research science
| [that happened to turn out people who lucratively employable
| skills], and not a software engineering program, which
| existed separately at both schools.
| ocschwar wrote:
| In the 90's at MIT they solved the problem by having the civil
| engineering department teach a C coding class to the non-CS
| engineers.
|
| There was no pretense that it was even remotely appropriate as
| a CS class.
| pseudocomposer wrote:
| I went to UNC Chapel Hill, and this was already done back in
| 2005 there. CS major intro classes were numbered in the 400s
| (401, 402, etc) with a focus on data structures, basics of
| big-O (later refined in algorithms), etc.
|
| CS 101, 102, etc. were the "non-major" intro CS classes and
| exactly what you describe here. They didn't count towards a CS
| major at all. Neither would non-calculus-based physics classes.
|
| Note that, at least at UNC, in every other department I know
| of, 400-series classes were generally graduate level. But UNC
| CS operated a bit differently.
|
| I loved the challenge and the knowledge I gained, but it's
| worth noting that CS at UNC was much, much harder than nearly
| any other major there (Chemistry may be the one exception).
| mnky9800n wrote:
| This is how physics is now. You teach an intro physics class
| and you have a billion engineering students all telling you
| what they actually need to know to be an engineer. But the
| truth is, it is often impossible to anticipate what a person
| needs to know for their future. The future is not an easy thing
| to predict despite recent innovations in AI and machine
| learning. And a student's current motivation is not necessarily
| the most important thing to consider when thinking about what
| they should be currently learning. People often change majors,
| career paths, etc. This is why I would rather people learn
| about topics that are fundamental to various fields, such as
| algorithms or conservation of energy or whatever, than some
| topical thing.
| jart wrote:
| Why can't they just take a class on shell scripting? The whole
| point of computer science is to automate things, because that's
| what gives you leverage. If you don't care about understanding
| computer science, at least skip to the point and enjoy the
| fruits. We've been using the UNIX shell for 50 years. It's not
| going anywhere.
| antasvara wrote:
| I majored in biology. A shell script would be a much more
| cumbersome tool for making a scatterplot, running a linear
| regression on a csv, etc.
|
| The things that people are using Python for are significantly
| easier with Python. There are libraries designed to make
| these tasks super simple, and with the right IDE you wouldn't
| ever have to touch the shell.
| HPsquared wrote:
| See also Applied Mathematics vs Pure Mathematics.
| fatnoah wrote:
| > 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.
|
| I graduated from an Engineering focused college in the late
| 1990's, and many departments offered exactly these types of
| courses in addition to the standard intro courses. They were
| typically named something [domain] [course #] for non-majors.
| bmitc wrote:
| This is a really frustrating development, and I'm not sure I have
| the energy to explain why because it _should_ be obvious and
| because the negative emotions of years of dealing with stuff like
| this.
|
| My main complaints border around: there's no art in anything
| anymore in that unless you're doing the lowest common denominator
| you are doing it wrong, companies show more and more success in
| influencing _others_ (namely universities) to be their training
| centers for them, and that universities should be about learning
| and exploration and not subservience to culture.
| deactivatedexp wrote:
| 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
| sarchertech wrote:
| 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.
| soegaard wrote:
| 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...
| ramses0 wrote:
| 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.
| fireburning wrote:
| sorry if this sounds dumb I don't have any formal education
| why is there a distinction?
|
| when i hear computer science i hear the study of computers
| that in my head means software, hardware, and theory it's
| like having doctors that study humans theoretically and
| others that do surgery
| hadlock wrote:
| Computer science is step one towards getting a phd and
| doing research and design of actual tools like compilers,
| understanding how the CPU sees and asks for data stored in
| memory, efficient algorithms to do XYZ, it's highly
| relevant for stuff like embedded computing where you're
| often working with severe hardware constraints and possibly
| with a real-time os.
|
| Software Engineering is the study of how to efficiently
| build software, typically on a medium to large team.
| kevinventullo wrote:
| I think the analogy
|
| Software Engineers : Doctors :: Computer Scientists :
| Biologists/Biomedical Scientists
|
| is perhaps reasonable.
| pavo-etc wrote:
| Computer Science as a field predates computers. Computer
| Science is the subsection of maths that answers "what is
| computable".
|
| Dijkstra line sums it up well "Computer science is no more
| about computers than astronomy is about telescopes."
| bjourne wrote:
| Analysis is the key. You write a program to multiply
| matrices. That is software engineering. You analyze the
| program to figure out how much slower it becomes as the
| matrices becomes larger, how many times it must access ddr,
| how well-utilized the caches are, etc. That is computer
| science.
| vel0city wrote:
| Computer science is designing a new video compression
| algorithm to be more efficient. Software engineering is
| taking that video compression algorithm and putting into an
| application users actually use.
| layer8 wrote:
| Possibly because that isn't computer _science_.
| seanmcdirmid wrote:
| In our pretty dynamic fast moving industry, it is more
| important to learn how to learn technologies, rather than learn
| the technologies directly. No one wants to be a specialist in
| 20 year old outdated tech late in their career. Having a strong
| foundation in how CS tech generally works allows you to move
| between different tech stacks fairly quickly.
| hadlock wrote:
| It's stunning to work with fresh out of college cs grads and...
| having to take 10 minutes to explain how git works, why we use
| source control, and then every day fielding questions about
| git, merges, and fixing merge conflicts etc as the get up to
| speed. I realize there is a learning curve as someone fresh out
| of school but also there should be some basic job training
| using free versions of tools like git and sql. The average
| student is only going to get a shadow of the relevance if
| they're learning pure theory with no context.
| lo_zamoyski wrote:
| These are tools! You don't go to university to learn how to
| use git. Besides, tools that come and go. You can pick these
| up along the way. You can make their use a part of
| coursework, but this is not what you go to university to
| study!
|
| That's the point. CS curricula are supposed to teach you deep
| skills and principles, not how to fiddle around with git.
| pavo-etc wrote:
| If your CS degree never requires you to write a program
| complex enough to warrant version control you should get
| your money back. I agree that the theory is more important
| and tools should not be focused on, but exercising the
| theory you have learnt is extremely rewarding.
| p_l wrote:
| Pretty much every class that focused on "on the job skills"
| when I went to university (2008-2014) either at my university
| or from looking at coursework available elsewhere (I might have
| considered jumping universities for non-educational reasons)
| was either outdated or useless within few years. If I were to
| redo it I'd prefer to have even more "esoteric" tech involved
| and more theory and fundamentals.
|
| And not because they were outdated and useless when the course
| started, though some did have issues. I think the least
| outdated "on the job applicable" material is Java
| _fundamentals_ , and that's because you can still write Java 6
| basic stuff in current JDK - a lot of the interesting and
| powerful stuff we learnt is no longer available in JDK though.
|
| OTOH, fundamental principles - algorithms, including set logic
| in RDBMSes, low-level programming (which to annoyance of some
| was done in SPARC assembly or random assembly designed just for
| given assignment), robotics using programming stack and parts
| that were never seen outside university, various in-depth
| studies on different _theoretical_ or _scientific_ areas - all
| of that is material I use to this day in many different jobs
| when it allows me to understand and reason in ways I couldn 't
| before I joined university - and I already "knew" how to
| program then.
|
| BTW, within the 5 years I spent at university, "javascript on
| the server" turned from niche use cases within some stacks,
| usually running Mozilla Rhino, into complete new ecosystem that
| was surviving its first big fork and was becoming used in big
| projects, Android went from one phone "who knows" to pretty
| mature platform holding half the world with 64bit CPUs, tablets
| and first wearables, similar evolution for iOS, in fact
| arguably over my entire university time we had explosion of
| "you can now make mobile apps easier" to "mobile app developer
| is lucrative" all the way to "you're probably not going to make
| much money as solo developer anymore".
| stevev wrote:
| I'm wondering if neighboring competitor schools who offer python
| classes are the reason for the change since more students would
| actually consider attending a different school due to having a
| stronger post experience and skills gained.
| shmorkin wrote:
| I don't think Northeastern is worried about attracting
| applicants, they were the 8th most applied-to school in the US
| last year, with nearly 100K applicants. And CS is one of their
| most popular programs.
|
| I think the more likely cause is pressure from their co-op
| program's partner employers to make the intro curriculum more
| 'practical' (i.e. outsourcing training from the employer to
| school). It's beneficial in the short-term but IMO a loss in
| the long-term, Northeastern is a university not a bootcamp.
| treyd wrote:
| My biggest worry is that maybe the co-op program for CS
| became a "low interest rate" phenomenon over the years from
| ~2009-2020 and now they don't want to take gambles on
| students that likely need to grow into the role. It's not
| enough, and they treat it like a regular internship program.
| mjdiloreto wrote:
| 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 wrote:
| 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.
| patrickmay wrote:
| He also wrote the best Acknowledgments section to a manual
| ever: https://scsh.net/docu/html/man.html
| theonething wrote:
| Too bad there isn't an online version that anyone can take.
| treyd wrote:
| 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.
| nonTop5CSmajor wrote:
| 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)
|
| 2. What politicians say. Both Dems and Reps have tacitly (or
| loudly) noted that local graduates do not cut it. It used to be
| subtle (https://www.fisherphillips.com/en/news-insights/biden-
| admini...), but it isnt any longer
| https://www.bbc.com/news/articles/clyv7gxp02yo
|
| 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.
| dogfishbar wrote:
| 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.
| Jtsummers wrote:
| 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.
| nonTop5CSmajor wrote:
| I respectfully disagree Jtsummers.
|
| 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.
| kcb wrote:
| > Many cs grads go into bs jobs way under their potential
| (random government agencies, contractors.)
|
| Why are those jobs deemed bs?
| nonTop5CSmajor wrote:
| >>> 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)
| nonTop5CSmajor wrote:
| You understood correctly, CS major numbers are still
| rising.
|
| CS major numbers == supply
|
| I'm speaking about jobs == demand
| kcb wrote:
| Your head is stuck in FAANG land.
| NickNaraghi wrote:
| 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.
| ben7799 wrote:
| The new curriculum might be worse but I'm not sure how a 4th year
| undergraduate should be too sure of themselves when second
| guessing the department.
|
| My undergraduate degree is from RPI, I have worked with many NU
| grads, they are often very good, but there have been many eye
| opening moments for me with them in terms of how different the
| material they learned was and what was left for graduate school
| when it comes other the core mathematical fundamentals of
| computer science. To be fair I've run into engineers from other
| schools that leave all of this to graduate school too. My first
| internship I shared a cubicle with a graduate student at Boston
| University. She was taking a graduate course on algorithm proofs
| and the course used the same book that we had used in the major
| weed out class that we had in the spring of Freshman year.
|
| "Program Design" has changed almost as often as popular
| programming languages during my career. Almost none of those core
| mathematical fundamentals have changed at all.
| treyd wrote:
| Would be interested on hearing more if you expanded on that
| point about differences in material.
| ben7799 wrote:
| Types of automata and computability
|
| Algorithm proofs around complexity, efficiency, etc..
|
| At least an introduction to the design of languages, parsers,
| and grammars
|
| Algorithms and concepts in the design of different database
| designs (not how to use specific databases)
|
| Fundamentals of operating systems and systems programming
|
| Some crossover with computer systems engineering courses. You
| must know at a basic level how logic gates are implemented,
| how an ALU is built, and how these blocks are built up to
| construct a CPU
|
| These are the actual fundamentals of CS and they change at
| glacial pace compared to languages and design patterns.
| nluken wrote:
| I can't speak to your experiences with others from my alma
| mater but pretty much all of these things are covered in
| the core CS curriculum at NU (at least the pre-redesigned
| one). Systems, PL, Algorithms, Algorithmic proofs,
| automata, ALU design were all part of required courses, and
| that's before I include the elective CS courses I took.
|
| One area where NU does fall down IMO is that they offer
| "combined majors" with CS and other subjects that eschew
| some of these courses to make room for the other half of
| the major, which will be an unrelated subject. This
| offering is a mistake because you do miss out on some key
| concepts. If you're working with a pure CS major, however,
| they were required to learn all these concepts.
| tptacek wrote:
| Teaching object-oriented design as fundamental computer science
| seems like it would have been an odd decision for 2025. I looked
| up the class syllabus, and it seems to have been taught in Java
| (fine) and makes extensive reference to design patterns (not
| fine).
| geokon wrote:
| I once asked a professor about this and the answer I got was
| interesting.
|
| Basically Java and OO and Design Patterns are taught upfront
| because it turned out this was a huge stumbling block for a lot
| of people. Bigger than for instance C and pointers. Like it
| just doesn't click for a lot of people and they end up
| struggling a lot the rest of the major
|
| So it's not that these are the most crucial concepts, but you
| want people to "fail fast" and have a sense if they'll succeed
| in the major within the first year
| tptacek wrote:
| Right, so... just don't teach Java and OO at all? They're not
| fundamental. Some of the ideas in that course are something
| closer to _discredited_.
|
| _Later_
|
| I edited "a lot of" to "some of"; I was coming on too strong.
| wbl wrote:
| If by discredited you mean incorporated into many of the
| most used languages as well as several of the hot new ones
| then yes.
|
| Furthermore part of PLT is learning the past and what
| worked and what didn't.
| dehrmann wrote:
| This makes sense. You might not immediately need to design a
| complex hierarchy, but you'll encounter them pretty early in
| a lot of languages standard libraries.
| weitendorf wrote:
| The first time I tried to learn how to program, I was 12-13
| years old and found some video from a university that started
| by covering Classes, Methods, and Objects.
|
| I watched one or two lectures and it made no sense to me, so
| I gave up. I had no idea WTF "objects are like nouns and
| methods are like verbs" was trying to teach me. I just wanted
| to make my computer do things.
|
| Around 14-15 I started playing around with my TI-84
| calculator writing simple programs. The TI-84 used a form of
| BASIC where I could write a program that took INPUT and
| plugged it into an equation and print it to OUTPUT, and it
| felt so much more approachable than the neo-neo-platonist OO
| lectures I'd watched. From there I gradually started writing
| more complicated code until I eventually started to get why
| programmers would define functions to stop repeating
| themselves, or why they might implement custom types.
|
| > So it's not that these are the most crucial concepts, but
| you want people to "fail fast" and have a sense if they'll
| succeed in the major within the first year
|
| I'd instead posit that so many people "fail fast" with OO
| because they go into their class being interested in
| programming, but have no idea wtf is even going on with
| programming and drop it, because they're forced to learn all
| this inane trivia [0] and write all this boilerplate (define
| a class, methods, observability, return by value vs ref) they
| don't understand before they can even run a program. They
| think maybe they're stupid or not a good fit for programming
| and drop it.
|
| IMO a better teaching language would be one that lets you
| opt-in to OO and functional features but also lets you write
| really simple programs like "take a number, multiply it, and
| print it". I think that's why Python is so popular these
| days. It helps that the lack of semicolons/curlies, optional
| typing, and modifiers [1] removes so many distractions and
| gotchas that stymie absolute novices.
|
| I also think most CS educators do a very poor job explaining
| CS concepts to beginners without realizing it. "Methods are
| like verbs" is absolute nonsense without a moderate to large
| amount of computer science knowledge to contextualize it.
| Some of my teachers were actually pretty good, and I also
| don't remember much acknowledgement that programming didn't
| _have_ to be this way but that the language /tool was
| designed that way because that abstraction comes in handy.
| That'd probably help a lot in retaining students who
| successfully suffered through their first semester of CS 101
| in Java but hated it so much they decided to swear off
| programming.
|
| [0] Always start your program with "public static void
| main(string[] args)" ! Don't worry, that'll make sense in a
| year, or in six years when one day on the toilet at your
| software engineering job you realize that it really was a
| static function returning void that took string[] args
|
| [1] Static and Foo& are justifiable, although static should
| arguably be implicit for a beginner language. Forcing
| students to learn about final, const, val/var,
| public/private, etc. early on is just stupid. I never
| understood why these were actually useful, or had a good
| reason to use them, until I'd already graduated.
| chris_wot wrote:
| If you are going to teach OO in Java, I fail to see why
| teaching design patterns is so awful.
| tptacek wrote:
| I mostly point it out as a reason why teaching OO as a
| fundamental is a bad idea in the first place.
| andrewstuart wrote:
| But OO _is_ a fundamental, even if it isn't longer gospel.
|
| OO is important and if I'm three years of computer science
| there's no time to teach it then you have to ask what you'd
| heck they are doing.
|
| OO is everywhere and it's an important software concept and
| is the right solution for certain classes of problem.
| tptacek wrote:
| I disagree? The point of a CS degree isn't to prepare you
| for the 20 years of stale J2EE code your first job is
| going to throw at you, and object-oriented design is
| pretty out of fashion.
| andrewstuart wrote:
| >> and object-oriented design is pretty out of fashion
|
| OO isn't debunked and its not out of fashion.
|
| All that's happened is that it's no longer gospel that
| "the only way to program is OO".
|
| I write code that has all sorts of styles and approaches
| that fit the task at hand and sometimes the right tool
| for the job is OO.
|
| I get the sense you're saying that OO has been proven to
| be hokum and no one should learn it or do it anymore and
| all that remains OO is the smoking ruin of 20 years of
| Java. That's not correct at all.
| DiggyJohnson wrote:
| You're assuming an exaggeration of their point. The
| question at hand is whether OO is so fundamental as the
| backbone of a computer science 101 course. This doesn't
| preclude much of what you said.
| jeroenhd wrote:
| OO is one of many paradigms to take while programming.
| Between functional programming, C-style subroutine
| programming, and OO, or the more recent amalgamations of
| those, you pick whatever suits your problem best. It's
| perfectly useful to teach, even if you dislike OO
| programming. I don't like writing for outdated
| programming designs like Scheme or LISP either, but that
| doesn't mean they don't have anything useful to teach.
|
| OO is out of fashion just like blockchains and NFTs are
| out of fashion, and the same way AI will fall out of
| fashion in the future. The huge hype around it will die
| and what's left covers the few useful scenarios.
| kasey_junk wrote:
| What programming job are you getting in the next few
| years that understanding oo isn't important?
|
| Inheritance, polymorphism and encapsulation inform every
| major professional programming language and framework
| (except c). Even go which in many ways is active response
| to oo uses most of those concepts extensively. One major
| challenge of people programming in go is how to adapt the
| familiar patterns to it.
|
| Now I'd probably not teach the whole GoF as an exercise
| in cataloging patterns but teaching a few of the most
| common while showing the concept of patterns (probably
| the least well understood concept in development) seems
| sensible.
| tptacek wrote:
| My argument accepts the idea that you're likely to come
| across object-oriented code in your first jobs in the
| field, the same way you're going to come across
| complicated SQL joins, which is also something a CS
| curricula is unlikely to prepare you for. I would
| advocate for delegating OO concepts to that kind of level
| of "trade knowledge" rather than elevating it to a
| "fundamental" of computer science.
|
| Rust and Go have concepts that approximate class-based
| object-oriented programming (and: if you look at NEU's OO
| syllabus, that's what they're doing), but only barely.
| You could teach someone how to use an interface without
| teaching "polymorphism" as a concept. Encapsulation as a
| language feature is an example of an OO-ism that I think
| is done and dusted. We hid implementation details in C,
| too! The notion of an abstract data type is fine to hold
| on to. The idea of "friend classes" and "protected"
| fields and other ACLs for variables, though, I don't
| think we're going to see come back.
| kasey_junk wrote:
| OO elevated encapsulation, inheritance and polymorphism
| to fundamental language features. Polymorphism especially
| has become ubiquitous in modern languages in the same way
| types have.
|
| And perhaps we've moved past inheritance hierarchies
| (though multi/parent inheritance has been interestingly
| used recently) but even then, knowing about it and its
| negatives seems as fundamental as understanding goto.
|
| Are they on the programming side of the computer science
| curriculum rather than computational math? Yes! But much
| of the normal curriculum is. Similar to how I'd expect
| the relational calculus to be taught as well as how sql
| relates to it.
|
| I think you're pretty far out on a limb here and I'd be
| very skeptical of a curriculum that didn't have a segment
| on oo early on.
| tptacek wrote:
| I'm comfortable being out on this limb! I think there
| were OO-skeptics even at the height of OO (call it the
| Ruby/Java crossover period; or, maybe, the point at which
| Norvig gave his patterns presentation, 5 years earlier)
| and I think the skeptical take looks pretty strong in
| retrospect.
|
| Whatever you want to say about the OO inspiration of how
| Rust and Go are structured, they are both clear and
| deliberate rejections of the OO orthodoxy from that
| period. They both deliberately don't have classes. They
| both deliberately eschew inheritance. They both
| deliberately have less-granular, less-configurable
| "encapsulation" rules.
|
| And: "encapsulation" is a term we only have because of
| class-based object-oriented programming. As a
| professional C programmer in the 1990s, I'd have gotten
| dinged on a message board by a C++ person if I claimed
| that I was "encapsulating" when I hid the structs for my
| timer library or my trie library behind a void pointer.
| We had abstract data types long before mainstream class-
| based OO, and then class-based OO claimed credit for the
| idea.
|
| I also think, as you've alluded to here, mainstream OO
| has a lot of bad ideas that get people in trouble. The
| obvious one is animal->mammal->cat->tabby, but there's
| also the debacles that happen when people try to unify
| storage with the same inheritance ideas used by compute.
|
| More than anything else though, I think these are the
| kinds of details you can just learn on the job. What's
| fundamental to programming? Ironically, it's a lot more
| of the stuff you get in a Scheme-based class --- and I'm
| saying this as someone who does not like Lisp. I think
| Python is a step in the right direction here.
| kasey_junk wrote:
| Go absolutely has classes, polymorphism and encapsulation
| (I don't know Rust) and many, many packages in go follow
| extremely common OO patterns.
|
| The 2 differences in go are composition being the
| mechanism for inheritance and structural typing in an
| otherwise strongly typed language. Both of those were
| available in other languages that strongly identify as
| oo.
|
| My first cs class was taught in scheme. I think that's
| the _right_ way to begin to learn. But very quickly after
| that oo and imperative ought to be introduced.
| tptacek wrote:
| I would sum my career up as C -> C++ ->
| Python/Ruby/Python -> Go -> Go/Rust, and would say my
| experience of Go (reinforced in Rust) was sharp pushback
| on class-based OO idioms, especially inheritance.
| cmiles74 wrote:
| People are still writing OO code today, they way the
| industry stands it looks like people will still be
| writing OO code for at least the next decade. Maybe the
| next 20 years, even.
|
| I understand that not every developer is a big fan of OO
| but that doesn't mean we can ignore it.
| bakuninsbart wrote:
| OOP is one of the major schools of programming, significantly
| more widespread than functional languages. The only thing
| arguably used more is "simple" procedural, but even that is
| doubtful. Sure, in the 90s people thought OOP was the be-all-
| end-all, and we've moved away from that, but it still makes
| complete sense to teach the main different styles of
| programming. C and assembly are basically covered by a course
| on computer architecture and OSs, then teaching an intro course
| on both FP and OOP gives students a broader understanding on
| how the vast majority of program design works. Follow up
| courses on algorithms can then have synergy by showing how much
| easier/safer/faster they are to implement depending on the
| style.
| tptacek wrote:
| I reject the idea that OO is a "major school of programming";
| or, if it is, that school has been largely discredited. I
| think you're on firmer ground if you claim that ideas from OO
| still inform modern programming (traits and interfaces being
| a good example).
|
| I think a lot of 2025 developers would be alarmed to think
| that a project had started from an object-oriented design
| perspective.
| criddell wrote:
| What's the problem with design patterns? At its core, a design
| pattern is just a name applied to a frequently used code
| pattern. It gives us a common language. I can tell you we are
| using a publisher-subscriber model and you know what that is
| without me having to be super specific.
| tptacek wrote:
| The concept of a design pattern is ~fine, and people have
| done good work applying the concept to specific programming
| domains (concurrency being the best example I can come up
| with), but "Gang-of-Four"-style design patterns are just
| workarounds to the limitations of the languages those authors
| were grappling with at the time, and are deeply silly in
| modern code, mostly living on today as an
| AbstractFactoryFactory joke.
| mywittyname wrote:
| There's some irony here. These courses exist because years ago,
| CS departments made a shift towards "marketability" in their
| courses at the expense of "fundamentals". So they introduced
| Java to replace C++ because that's the language companies
| hiring new grads were looking for. And now OOP and Java are not
| skills that companies are looking for in new grads. But instead
| of acknowledging the facts, the departments are lumping
| Java+OOP in with "fundamentals" and getting rid of it.
|
| I'm sure if we look back further, C++ displaced some other
| language (pascal?) for exactly the same reason. And likely the
| same for the language the proceed C++. I'm just not old enough
| to have personal experience here.
| userbinator wrote:
| I haven't seen many CS curricula start bottom-up with things like
| digital logic, yet the best programmers I've worked with all
| started around there and then went upwards --- many of them were
| self-taught, and although I realise that introduces some
| selection bias, I have also worked with others who were self-
| taught but started with some HLL instead, but they didn't have
| quite the same performance.
| Swizec wrote:
| > I haven't seen many CS curricula start bottom-up with things
| like digital logic
|
| That's how we did it in Slovenia (Uni of Ljubljana). You start
| with discrete math and bool algebra, and you learn how
| transistors work in physics, then you learn about digital
| circuits and write some assembly, after that it kinda feels
| like two parallel branches. One set of professors teaches you
| the math of it all, the other set teaches you how all that math
| works in practice.
|
| It's a really good curriculum.
|
| Yes yes you also have programming classes in parallel with the
| digital logic and the math and the assembly. Gotta make sure
| folks can get those all important part-time jobs and feel like
| they're learning something useful. It's common, or at least was
| back then, for students to have jobs in industry while they are
| studying CS. I honestly think having a job and getting to apply
| what you're learning makes it stick more ... even if it leads
| to abysmal completion rates (average 7.5 years to graduate when
| I was there).
| lo_zamoyski wrote:
| That's not "bottom-up". That's a concern for EE/CE or something
| in that general scope.
|
| As the old Dijkstra quote correctly states, physical computing
| devices have as much to do with CS as telescopes have with
| astronomy. They're eating utensils, not the main course.
| Computer science (the name in English is misleading and
| horrible) is not about physical computing devices. Devices are
| merely an instrument. Knowing how to use this instrument well
| is very useful for people in the field, but it is incidental to
| the field itself.
|
| Even the distinction between "high-level" and "low-level"
| languages is meaningless from a CS perspective, as it
| essentially presumes a target language on a target architecture
| (with the target "low-level" language) that is treated as
| normative and "real", but again, that is an implementation
| concern wrt the instrument. From the CS perspective,
| compilation is just translation from one language to another.
|
| So I dare say that a CS curriculum that starts with digital
| logic is not really a CS curriculum, but an electronics
| engineering curriculum. This is the lesson here.
| casey2 wrote:
| What kind of argument is this? Do you also think it's fine
| for an astronomy course to not teach their students how to
| use telescopes? Or a creative writing class how to perform
| the physical act of writing?
|
| If a student knows how to use a computer (a prerequisite to
| starting software project) they will demonstrably have more
| opportunities for learning than one who doesn't. And it's not
| even close.
|
| "He who seeks for methods without having a definite problem
| in mind seeks in the most part in vain."
| vel0city wrote:
| > Or a creative writing class how to perform the physical
| act of writing?
|
| A computer science class teaching how transistors work is
| more like a creative writing class teaching how pencils are
| made, and focusing on the quirks a particular language is
| like the creative writing class teaching a specific style
| of cursive.
|
| There are degrees which blend the EE and CS worlds,
| commonly referred to as computer engineering. That would be
| more along the lines of mixing the hardware/boolean logic
| idea with then software development. But that's definitely
| a different perspective compared to what computer science
| historically meant.
| User23 wrote:
| Northeastern is a major part of PLT right? What does this mean
| for the future of sch^H^H^Hracket?
| andrewstuart wrote:
| Meh. Don't agree.
|
| It's entirely reasonable to ask why students valuable learning
| budget is being wasted on Racket.
|
| If you go to university you have a reasonable expectation to
| learn relevant things.
| rgovostes wrote:
| My university's CS program was taught in Ancient C++. This was
| fine for the Comp Sci majors, but the intro-level class was
| required for all science majors. I fielded many pleas for help on
| homework assignments and saw that many struggled so much with the
| (let's be honest, incredibly unintuitive) syntax and inscrutable
| compiler errors, that they couldn't internalize the more
| fundamental concepts that the course was trying to teach.
|
| Later on, I joined the curriculum committee and argued for it to
| be taught in Python. The faculty weren't convinced at the time
| but I see now that eventually they moved the intro course to
| Python and kept the later courses in C++, which seems like a wise
| decision. Python is far more approachable and will serve science
| students well if they ever need to use Pandas etc. (The second-
| semester C++ course has you implement the STL container types,
| which is an extremely valuable exercise.)
| casey2 wrote:
| >we should not teach something just because it's a useful skill,
| we should teach our favorite dogma that we believe is totally
| more useful than a system built up through decades of practical
| experience, guys really.
|
| At least "Racket" is aptly named.
| bjourne wrote:
| > The program design skills that our current curriculum
| emphasizes are "what distinguishes a garage programmer from a
| serious software developer," in the words of the Fundies 1
| textbook.
|
| I lol:ed.
|
| > The "code swap" at the end of the semester, where students are
| required to build upon other students' code, is one of the
| assignments students struggle most with
|
| Wow, sadism may be common in academia, but that is just on a
| whole different level! A few hours of waterboarding would be
| nicer.
|
| There is exactly zero evidence indicating that Racket would be a
| better introductory language than Python, so why not go with what
| is popular? CS students are de facto expected to already know
| basic programming. So with Python you can jump straight to
| algorithms, you don't have to waste time with a foreign syntax
| and an esoteric interpreter.
| sinuhe69 wrote:
| I read the article and got curious about Pyret. It turns out to
| be a very nice language, especially for teaching! Very clear and
| easy to read syntax, no weird bracket mania :D, it even forces
| programmers to write good formatted code (space surrounding
| operator!) and encourages the use of best practices (test
| first!).
|
| I also like the fact that it is functional, invariant by default,
| and they are working on type checking.
|
| Seeing this, I can't wait to hear about the students' experiences
| with the new curriculum.
| red_admiral wrote:
| Mixed feelings here.
|
| There are two separate points. The first one, almost a bit
| hidden, seems to be a "keep the student numbers up" change: allow
| placing out with AP CS credit and so skipping the intro courses;
| making the curriculum easier; reducing the number of students who
| withdraw from some of the modules; removing the teamwork (code
| swap) exercise; rolling back on fundamentals and design
| principles. This is just the word of one TA, but it's big if
| true.
|
| The second one is about the language change. Look - if you're as
| great a TA as you say, you can teach design in any language, it
| just works a bit differently. You can teach good design in
| python, though it's a lot harder than just teaching python. You
| can teach design in Java, at some point you'll realise that half
| the design patterns book is still relevant (the other half has
| been eaten by streams and lambdas). You can teach design in
| golang, the people who wrote it at google did think of this.
| Using a Lisp brackets-style language doesn't give you magical
| powers, and I doubt the full details of macros and whatever the
| racket equivalent of call/cc is are that accessible in a beginner
| course anyway. Even SICP has a JS edition these days.
|
| Personally I think "OOP light" is where it's at: interfaces
| instead of subclassing, methods that can be called on objects,
| encapsulation and modularity, and a package-private option so you
| can unit test stuff but indicate to users that this is not part
| of the API. Immutable objects and collections are good for many
| things and need to be taught, but sometimes there's good reasons
| just to make something with internal state and a fixed set of
| methods to modify it, so you can reason inductively about its
| invariants. You can get this out of many languages and teach it
| properly if you really know what you're doing. And you need
| actual programming projects, not just exams or "write a 20 line
| program" midterms. You don't need racket for this.
| enum wrote:
| A discussion about this from faculty:
| https://bsky.app/profile/samth.bsky.social/post/3lf22654bks2...
| GeoffKnauth wrote:
| My son went to Northeastern ('19) and now designs programming
| languages and can program skillfully in ANY language. I'm glad he
| went to Northeastern before this announced change. I feel my
| money spent at Northeastern was well worth it, not because it
| made him employable (it did), but because it gave him critical
| thinking and research skills. It would be sad if too many future
| Northeastern grads were limited to programming in Python or
| whatever the mainstream language of the decade is. "Batteries
| included" Python is great for the workforce but it may weaken
| basic development skills of undergrads. I'm glad I grew up in an
| era (1970-80s) when what mattered was sitting down with a manual
| or book and picking up a language in a weekend and, working with
| your friends, mastering it in a few weeks or months. A favorite
| memory that still astonishes me: in 1983 Andy Sudduth, one of my
| roommates and soon Olympic rowing medalist, built his own
| computer (a Heathkit), and with a paper due the next day, I
| offered to lend him my Kaypro-II so he could use WordStar. He
| said, "Thanks, but I'm going to put my own operating system on it
| [which he developed in his OS course], then I'm going to use my
| own full-screen editor I wrote, and then I'm going to write my
| paper using that editor." "You're going to do all that by
| tomorrow?", I asked. "Yes." And HE DID IT.
| ashton314 wrote:
| Hey! Guessing by your handle, your son is Alex, yes? He's done
| some really cool work. I particularly love his paper "Type
| Systems as Macros" that he wrote with Stephen Chang and Ben
| Greenman (my advisor now). Super cool stuff.
| 11101010001100 wrote:
| The best thing for a student is to abandon dogma. The easiest
| thing for a teacher is to embrace it.
| randcraw wrote:
| If this strategy infects CS degree curriculums widely, employers
| looking for more than mere coders will overlook CS majors and
| instead look to engineers, which is where most computing
| professionals came from academically before about 1980.
|
| Engineering continues to demand that students learn principles
| grounded in theory (calculus and statistics and discrete math),
| rigorous analysis (pattern recognition and learning), and system
| compositionality (design using reliable components as building
| blocks). CS curricula largely jettisoned this approach after
| higher-level languages like FORTRAN and C caught on, and has
| retained only vestiges of old-school mathematical rigor (basic
| inductive proofs and algorithmic analysis (albeit dumbed down to
| O(n) only). In the past 20 years, CS has even given up teaching
| software engineering (compositionality and reliablility) as a
| requisite skill area. That speaks volumes about the difference
| that already exists between CS and engineering.
|
| With the enormous growth in college-preparation for software
| careers in the past decade, it's little wonder that most students
| prefer a less rigorous, less formal curriculum, and that colleges
| will choose to meet demand where it lives. Thereafter, if
| employers want to hires grads with math or engineering skills,
| they will turn back to engineering as they did long ago. I expect
| programs in EE and Computer Engineering will adjust their
| curricula (or add minors) to fill the intellectual void that 'CS
| For Poets' will leave.
___________________________________________________________________
(page generated 2025-01-13 23:03 UTC)