To me the objective of a CS undergrad course is very simple. If the entire world lost all computers then you should be able to build one from scratch ( with the help of your electronics undergrad friend). In my undergrad CS course I learnt how to built a computer from basic logic gates, how to make it execute assembly like codes, how to design an operating system and other things like how to build the internet starting from some wires. The course is named "Computer Science and Engineering" for a reason.
For context, I’m not sure something like calculus would be a foundational math (though it could be), but something like Boolean logic would be (right?)
Specifically : Logic(Propositional and Predicate), Boolean Algebra, Proofs(Inductive, Deductive, Transformational), Set Theory, Relations, Functions, Lambda Calculus, Formal Systems.
They are all interrelated but some are foundational. Thus for example Set Theory and Logic are foundational while the others are built on top; Set Theory leads to Relations and Functions, Proofs are the process of applying Logic, Lambda Calculus is Function Abstraction taken to extreme and Formal Systems teach you how to build Symbolic Systems (Models) without reference to any specific Domain of Discourse.
For example, proof by induction is the same basic idea as terminating recursion.
Other things in computing were designed by mathematicians and kind of assume you see things a bit that way. The pointer arithmetic and "inside out" declarations of C are perfectly sensible if you think mathematically – Dennis Ritchie was a mathematician. Likewise, Stroustrup's use of 0 for the nil pointer in C++ would have been understood without explanation by the people down the corridor from him at Bell Labs. Mathematicians often use 0 to represent some distinguished element of a set that is not necessarily a set of numbers.
An example of a specific use of maths in computing is relational databases. Relations are kinds of sets.
Some results in cooperating processes and distributed computing that software engineers should know are proven mathematically. If you can't read a proof, you can't read the paper/textbook and are reduced to "remembering" the result rather than internalising it.
Just because computer science started with file systems and regexes (discrete math) doesn't mean that the systems of today or tomorow don't have very different foundations.
Thise are not abstractions over existing posix APIs or von neumann architectures, they are novel ways to do computation from a different branch of math.
Heck we don't even know if some of these are not breaking the church turing thesis by computing with true real numbers and not the computable subset that turing machines can handle.
Analog computers MIGHT.
It really depends on how quantized our universe is. If you have papers that show full quantization including tunneling probabilities e.t.c please share them! The physical existence of the reals has been a white whale of mine for some time ^^'.
I’m now wondering whether to consider both of these subjects foundational to CS or a CS degree. My gut says yes since so much relies on ML and AI is used a bunch (e.g. games and stuff).
> Computer science isn’t about Math.
Says someone who clearly doesn't understand math, computer science, or history, for that matter. Whether it's Knuth or Shannon or even Hamming, the electrical engineer's work in the field, or many others, it's math. That's where CS came from.
Garbage opinions, of which the author himself says:
> Take them or leave them.
So I think I'll leave them.