TL;DR
I'm not saying it's not a good class to take, I'm saying that it's not really an essential prerequisite anymore, and can be relegated to a more advanced class at a later stage to provide deeper knowledge and context.
The first year of college I did contained a boolean algebra class that delved into formal logic, boolean algebra, Karnaugh diagrams, ... Was it very useful for the programming classes we took? Somewhat.
Learning how to refactor and simplify complex logical evaluations was definitely a good skill to have. Things like finding the negation of (a || b) && c
, or simplifying (a && b) || b
to b
are things that will definitely come in handy.
Karnaugh diagrams? Not really. Thematically, they are also about simplifying logical evaluations, but they do it in a way that is unintuitive to someone who reads the end result, which makes for bad code readability and you'd be better off with a slightly less terse but considerably more readable alternative.
That being said, in certain contexts there are cases where efficiency trumps readability, and I've whipped out a genuine Karnaugh diagram in those situations.
But my college days were 12 years ago, and it was an outdated course by contemporary standards. We were still being taught C (C++ was for year 2), and even did a week's introduction on Fortran and Cobol. In that situation, boolean algebra makes a lot of sense.
Since then, the scene has dramatically changed, and there's less stress on these oldschool logical skills. I work with people who have only just graduated, they never had any oldschool logic classes but they are IMO skilled developers (relative to their experience).
I read with interest the thread Why Computer Science students learn Digital Logic Design?, where Dr. Buffy and others argue for a programming abstraction stack that has logic at its bottom.
If you ask me to design a software development course from scratch, I will innately focus on things I was taught. I will whip out Karnaugh diagrams, and C++ pointers, and data normalization, and ...
It's natural for people to always advocate that the way they think about things is therefore a good summation of essential knowledge for new starters, but that is not always the case.
I'm not saying that these skills are completely useless, but not all of them are as relevant today as they were back in the day when the people (who today are experienced mentors) were still in school. Paradigms change, and different skills take priority.
There is a significant difference between me and the fresh graduates who are 12 years my junior (at least 50% of the course material), but they are better prepared for the 2021 development scene than I would've been when I started working, which shouldn't be surprising at all.
To summarize, while I personally very much value formal logic and still apply it in my work, I'm not as eager to claim that it is as essential to a newcomer than it was to me when I was a newcomer.
To be clear: I'm not saying it's not a good class to take. I'm saying that it's not really an essential prerequisite anymore, and can be relegated to a more advanced class at a later stage to provide deeper knowledge and context.
prerequisite for the first programming course
. I think making it a prerequisite before any programming course would make getting to the higher level courses, think critical path, such as complier design all that harder and thus would not expect to see it as a prerequisite before the first programming course. In other words such a requirement would extend the critical path for all programming classes for such a degree. $\endgroup$