<p>As a CS grad in the software development industry, I have to disagree with you on some points, Global. My main issue is that you're making some pretty broad generalizations that don't hold.</p>
<p>For one, you say "these schools" as if that's a universal truth. Maybe I just got lucky at Rice, but I doubt the other well-ranked CS departments around the country push their students to focus on compilers, etc., as if the only CS application were theoretical, etc. My department, as a counter example, focused on how to design software, not simply "write code." There's a tremendous difference there.</p>
<p>At this point, let me provide a little more information about myself. I'm a software developer for a company that produces software used by the airline, car reservation, cruise, shipping, hotel, pipeline, manufacturing, and other big-dollar industries. Furthermore, the software we write is, in <em>part</em>, a Web-based application interfacing Java with an Oracle or SQL Server database -- exactly the combination you specified in post #3 of this thread. That said, I still have to disagree that the knowledge obtained from courses on compilers and programming languages is useless in the industry.</p>
<p>Databases and [evangelism]standards-compliant, well-designed[/evangelism] Web interfaces are excellent skills to have, and if your department offers courses in them, I'd also echo that they would be wise choices. Rice's database course was one of my favorites in the department.</p>
<p>BUT...</p>
<p>Knowing how to use UNIX/Linux (or even Windows Server) and a few database servers is not enough. Knowing how to hack out some working Java code is not enough. The knowledge provided by the theory is essential to understanding what's going on.</p>
<p>Why do we care when Oracle has such an awesome database platform, for example? Well, because if you're naive regarding what's going under the hood, you're never going to get the performance you need. Going back to my <em>job</em>, it's not just that we have a Web app that talks to a database -- our software has to return an answer to the user in times measured in milliseconds. When you have to make a scalable solution with that requirement that must also serve hundreds or thousands of users simultaneously, you need the theory to understand what you can do to squeeze out every last drop of performance.</p>
<p>Programming languages are simply tools, and a course on a particular programming language -- if that's its focus -- is rather useless. But a course on the general (or theoretical) concepts of a programming language: scope, closures, type safety, optimization... those have real-world benefits too.</p>
<p>It is not enough to be able to code, or work with a database, or both at the same time. You must be able to write good software -- well-designed software -- that is scalable under load. How well a candidate is able to do all of this is what separates an "okay" programmer from a "great" programmer -- and the theory is a part of it.</p>
<p>So, in conclusion, I agree with your recommendations of key courses, but I disagree with your statements that they're the only ones that really matter in the industry; I would emplore you to not make such broad statements as to give the younger minds a false sense of reality. Thanks for letting me rant a bit.</p>