Logic is important, but that is mostly orthogonal to any course of math instruction I've ever been exposed to. Now, if your goal is to be an academic computer scientist, then yeah, you do have to know some advanced math, just because the frontiers of research are so far out there. If you're aspiring to be a software engineer/developer, then chances are, outside of a few specialties, you may go weeks without using any math that an elementary-schooler couldn't perform.
A developer who is overly mathematically-inclined is actually a small red flag for me, because I have seen too many people who are very good at math and seem to understand theory, but absolutely cannot write code.
Anecdotally, I have seen much better results from developers who have experience in hands-on trades like mechanics, plumbing, carpentry, etc. There's an element of visualizing the entire system and how the components interact that seems to map over well to programming.
>Logic is important, but that is mostly orthogonal to any course of math instruction I've ever been exposed to.
I think that's the issue the author intends to address: computer scientists not having been exposed to a mathematical treatment of logic.
>you may go weeks without using any math that an elementary-schooler couldn't perform
If by "math" you mean "arithmetic and basic algebra," yes. If in "math" you include logic, induction, abstract algebra, graph theory, combinatorics, etc., then you're using math every time you write any code at all, whether it's ensuring you don't write any cyclic dependencies, making sure you correctly handle all return values, or making sure an algorithm doesn't require quadratic time or worse before you implement it. You need math if you want to know that your custom comparators won't cause a sort routine to blow up, to recognize certain possible sources of bugs in unsafe languages, and most of all to recognize and assess the validity of potential optimizations.
I mean, one can program with just a basic grasp of boolean logic and high-school algebra, but they'll have a hell of a time of it.
Naturally, it depends on the school, but the Software Engineering degree I have is heavy on Engineering, then progressing towards software. Lots of physics and math in the first two years, then two years mostly focused on modeling, covering compilers, relational algebra and similar core architectural subjects, progressing towards a final year focused on team management. Boundaries aren't as clear cut as I describe, but this is the progression. It is engineering, which happens to focus on software development.
I suppose that my negative reaction is mostly because, generally, calls for more math in learning a subject results in additional semesters of calculus or differential equations, which would be of doubtful use in my experience developing software.
> then you're using math every time you write any code at all, whether it's ensuring you don't write any cyclic dependencies, making sure you correctly handle all return values, or making sure an algorithm doesn't require quadratic time or worse before you implement it. You need math if you want to know that your custom comparators won't cause a sort routine to blow up, to recognize certain possible sources of bugs in unsafe languages, and most of all to recognize and assess the validity of potential optimizations.
For the most part, I view this as simple bookkeeping. Probably I've been doing this for too long and have just internalized it.
That is not the gist of the text. The text states that programming involves reasoning using abstract entities, and Mathematics, while not used directly in programming, is an excellent training ground for the ability to reason in an abstract realm.
I happen to agree a lot with the text. The best programmers, and most definitely the best system designers I know, excel at abstracting concepts.
But he doesn't really talk about how much math he thinks a CS course should have. I personally think a few weeks might be a good idea. Many months of math takes time away from other CS parts. He writes that maths helps you get better at abstract thinking, which I agree with, but he don't compare to other CS areas. For example, if studying compilers or data strcutures help you think abstract then we can perhaps have a compiler/data structure course instead of a math course. This would help students learn both abstract thinking and something directly CS related.
I think we can all agree that having only math for four years would make great abstract thinkers but probably very bad developers.
Logic is important, but that is mostly orthogonal to any course of math instruction I've ever been exposed to. Now, if your goal is to be an academic computer scientist, then yeah, you do have to know some advanced math, just because the frontiers of research are so far out there. If you're aspiring to be a software engineer/developer, then chances are, outside of a few specialties, you may go weeks without using any math that an elementary-schooler couldn't perform.
A developer who is overly mathematically-inclined is actually a small red flag for me, because I have seen too many people who are very good at math and seem to understand theory, but absolutely cannot write code.
Anecdotally, I have seen much better results from developers who have experience in hands-on trades like mechanics, plumbing, carpentry, etc. There's an element of visualizing the entire system and how the components interact that seems to map over well to programming.