CS is such a wide field, I think that fundamental texts mean different things to different people. These are some examples of various CS verticals (from off the top of my head), and each has canonical texts:
For instance, there is a whole subset devoted to turing machines, the halting problem, finite state machines, provability, incompleteness, the set of all sets, diagonalization proofs etc
There is a whole subset devoted to programming languages: computational complexity, reducing the time spent in loops, and so on.
Then there is a whole bunch spent on best practices: git and other version control, review, commenting style.
Then there is this actual thing called programming: learning different languages, arguing when functional is better than object oriented, please build a web server in prolog as an exercise, and so on.
Then there is a bunch about operating systems, and where the hardware meets the software, and garbage collection, and parsing and all that stuff.
Then databases are their own thing: boyce-codd normal form, ACID properties, is the web a database? how do you prove the ACID properties? Distributed databases, and B-trees time for storage and retrieval.
These are just various sort of "verticals".
I myself like to think of it in terms of specializations: data science/machine learning is one, web apps are another, mobile apps are another and so on. Each specialization depends on what useful thing you are trying to achieve.
There are various verticals. But of all these verticals there are roots.
Sort of like how Set theory and Category theory make up the fundamental basis of all math, the fundamentals of computer science are encoded within your first example:
>For instance, there is a whole subset devoted to turing machines, the halting problem, finite state machines, provability, incompleteness, the set of all sets, diagonalization proofs etc
For instance, there is a whole subset devoted to turing machines, the halting problem, finite state machines, provability, incompleteness, the set of all sets, diagonalization proofs etc
There is a whole subset devoted to programming languages: computational complexity, reducing the time spent in loops, and so on.
Then there is a whole bunch spent on best practices: git and other version control, review, commenting style.
Then there is this actual thing called programming: learning different languages, arguing when functional is better than object oriented, please build a web server in prolog as an exercise, and so on.
Then there is a bunch about operating systems, and where the hardware meets the software, and garbage collection, and parsing and all that stuff.
Then databases are their own thing: boyce-codd normal form, ACID properties, is the web a database? how do you prove the ACID properties? Distributed databases, and B-trees time for storage and retrieval.
These are just various sort of "verticals".
I myself like to think of it in terms of specializations: data science/machine learning is one, web apps are another, mobile apps are another and so on. Each specialization depends on what useful thing you are trying to achieve.