the problem with cs curricula

Edsger Wybe Dijkstra's "On the cruelty of really teaching computing science" perfectly sums up my gripes with how Computer Science is taught at a university level (at my school, at least).

Succinctly put, my time learning computer science at my unnamed college exemplified nearly everything he (and I) believe a CS curriculum should not do:

  • Ignore the existential questions about computer programs (what are they? why do they exist? can they want? what should they be used for?)
  • Ignore the notion of program behavior, i.e. provability (this is set aside as an advanced core class, counterintuitively reserved for a third or fourth year).
  • Excessively simplify and frame new technologies with analogy, effectively instilling maladaptive thinking patterns that fail to extend to more novel problems
  • Give up on doing the inverse of the above because it is too hard for young students.

Walking out of my third year, I left with the sad realization that I got by the majority of my classes by only understanding things as they pertained to assignments and exams. And by "got by", I mean straight A's.

I always knew something was wrong with how my school taught computer science (despite it being the biggest major as of 2025). As of late, though, I realized the gargantuan amount of damage it caused to my reasoning abilities. Damage that I have to reverse by, essentially, doing everything all over again.

My competitive programming journey epitomizes this point: to this day I struggle with reasoning, argumentation, and understanding program behavior. I know how a segment tree works but can't formalize the constraints of a problem. I can do dynamic programming on trees but I can barely manipulate and work with primitive mathematical concepts such as the \(gcd\) function. I cannot think of a more useless skillset.

Nearly all of this is my fault. However, it should not be possible for this to happen in a computer science curriculum. In other words, Djikstra is right.