University Computer Science programs teach a lot of slop, but at the same time, the bulk of the content is still applicable. I say this as a "10x coder"/software-architect/computer-scientist who has found a lot of the theory useful, even while a lot was bunk.
For example, algorithm (O(...)) class is incredibly useful, despite the fact your primary algorithms are going to be arrays and hashmaps. As a software leader I struggle explaining to engineers that the problem is scale, that their algorithm has become O(n2), and that we need to fix that rather than the other "optimizations" they want to do. It's because they don't grasp Big-O theory.
Some classes are complete slop, though. The "UML" example below is a good example.
Software-engineering is practice, not theory. You do the modern GitHub paradigm: source control, bug tracking, continuous integration, unit/regression tests, and so on. It's a basic tradesman class rather than a theory class.
The theory they wanted to teach you, which UML comes from, is that "it's more costly to fix bugs in later stages". Design bugs are cheap to fix during the design stage, but horrendously expensive once you've shipped the product and have to rewrite large portions of the code according to a new design.
That makes sense, they can prove it with math, substantiate it with evidence from studies.
But it's bunk.
The reality is that you don't know the answers in the early stages of "requirements", "architecture", and "design" until you've shipped the code. You quickly get "decreasing marginal returns" at these stages, where any additional effort isn't worth it.
Moreover, designing things up front, especially with UML, creates brittle code that makes such design changes very expensive. If you instead take a more Agile approach recognizing the constant need for refactoring design choices and requirements, you make code that's cheap to maintain.
All that UML became a cult of bad practices. Now, "Agile" has become another cult, where people apply brittle development on top of the original concepts, but the basic principles of easily refactorable code is still valid.
The point is that the universtiy Computer Science curriculum has a lot of slop, but at the same time, I find it overall made me a better "computer scientist".
Though I am a university professor, I am critical of the value of the education we provide. And I am the fellow who published several manuals. Probably thousands of pages over the years.
I believe that
@bryan_caplan and his case against education (great book) is more right than wrong.
Formally speaking, I am often classified as a 'software engineering professor'. Let me cite Parnas, one of the most influential software engineering professors there is:
« I observe that most software developers ignore the bulk of our research. Whereas practising engineers find things of value in research publications, most software developers do not. … much of the research published in our conferences and journals is ignored by software developers because it does not address issues that concern developers or offer solutions that they can use. » (Parnas, 1998)
This has not changed since 1998.
I know that my work has influenced practice, and I am very grateful.
But let us be honest, most of the work done on campus on a topic like 'software engineering' (how we build software) falls short of what any reasonable person may expect.
To put it bluntly, the campus is NOT the best place to learn to build software. There are people like me trying to make it good, but for the most part, it is not working.
To make matters worse, it doesn't take long for people who have any sense to figure out, so that they will quickly exit once they figure out what passes for software engineering. So you won't easily be able to recruit good people even if you make a great effort.
'But Daniel, we are eager to recruit kids for these schools...'
Yeah, yeah. If a school selects the brightest high school students... people with high IQ, high fluid intelligence, and a natural talent for engineering... with an ambitious frame of mind, for sure you'll want to recruit these people.
You'll also have to invest some time to get them to unlearn some of what they have learned.
And pay attention to the fact that many employers have intense technical tests that even the students coming out of the best schools have to take. If you think that employers do that because they have time to waste, I have news for you.
'But Daniel, knowledge of computer science is useful...'
A lot of it is useful, but campuses are terrible at sorting it out. By my estimation, most schools in Quebec still teach UML as the de facto standard of software engineering.
Please, let it die already. Last year I was in an international project where we had to do design a piece of software. We wasted months on useless UML diagrams because esteemed professors insisted that we could not build anything before a full UML specification.
And, since 2024 or so, we have these AIs that are fantastic tutors. Want to learn about finite fields and cryptography? Just ask your AI.
Am I saying that you should not attend college? No. Getting into a great school could be your path to a career at Microsoft or Google. Go for it.
What is my point? My point is that we need to take professors less seriously than we do. I think that we would be collectively better off if we did.