Recently, I have started interviewing interns in their final semester for an internship and to my surprise I frequently encounter a lack in what I would call foundational computer science knowledge. I don't mean data structures and algorithms, but for example
* Database Systems (relational algebra, SQL)
* Concurrent Programming
* Network Programming
It seems most are exposed to them partially through project work but without the base knowledge.
Is this typical for CS undergraduate degrees because you get to pick your own classes?
People/companies commonly treating both the same is IMHO one of the major problems of the current industry.
None of the topic you mentioned are fundamental to CS.
They are fundamentals of software development.
Wrt. to computer science they are at most specializations and even then what you might do in a science context of them might differ largely to what you would need to use them for production focused software development. Through they do contain some fundamentals like, e.g. set theory in relational databases and graph theory in network programming and concurrent programming.
You can (rightfully) have a master of computer sience _without having ever written a single line of code_. And going back ~20years that wasn't even that uncommon.
Now today a lot of universities have realized that this mismatch causes problems and are also teaching the fundamentals of software developments additionally to the fundamentals of computer science. Additionally of lot of computer science today requires the use of tooling which requires some programming and SQL.
Still what the "fundamentals of software development" are is a much less clear topic then the "fundamentals of computer science" (and even there people disagree all the time). And for example "relational databases/SQL" is one of the thing people can strongly disagree on weather its foundational to software development or not (anymore).