Computer Science courses - Only classes that apply in corporate world are...

<p>
[quote]
The computer science curriculum needs an overhaul. These schools act like there are a TON of compiler design type of jobs...NO!

[/quote]
</p>

<p>No, it depends on your school's goals and your personal goals. Learning the theoretical aspects of CS is hard and I think best learned in a classroom. Anyone with half a brain an dedication can learn how to be a DBA. In fact, if your goal is to earn money, then spending your time working in college at computer-type jobs is a much better way to boost your employment opportunities than taking any combination of CS classes. Relative to work experience a Bachelor's degree is nothing. Getting an MS is a whole 'nother ballgame.</p>

<p>Never mind the fact that what a DBA does has nothing to do with computer science. This is like saying, "Hey, if you want to be an actuary, just letting you mathematics majors know that you're never going to be using that homological algebra!" Yeah, well, duh!</p>

<p>My point was not to prove is theoretical computer science is harder. My initial post was to point out what IS more in demand in the corporate world. These forums alone prove that we put too much emphasis on "who's program is harder/higher-ranked/yadda-yadda" instead of what is practical. These schools will have you thinking that there are a ton of jobs in many of those pure CS areas. That is not the case. Most of the computer industry is I.T., not compiler design, not supercomputing but databases, networks, operating systems and a few others.</p>

<p>I also pointed out that certain CS areas are in demand by geographic location. I am in the Washington DC area, so it's all about the Intelligence/Top-Secret stuff here to support the various defense agencies here.</p>

<p>I am just here to make these new grads aware of the industry...and not get all caught up in the latest print-out of US News school rankings. A CS degree from Cornell or Carnegie Mellon (well they are more Software E.) means not a whole lot if you don't have the skill in demand.</p>

<p>I think we're agreeing but coming at this from different perspectives. My point is that IT is not computer science. Knowing how to administer a database or deploy a server has squat all to do with computer science, even if it pays well and many CS people know how to do it because of the practical demands of their field of study.</p>

<p>But this is not the fault of the schools, whose CS departments aren't there to teach people how to administer a database. They're there to teach people computer science, which is a specific (mathematical) discipline. It is theoretical. It will not teach you how to performance-tune an Oracle installation. If you want this experience get a job where you're actually doing it. A resume that says you have successfully administered databases goes much farther than one that only lists classes you've taken.</p>

<p>That said, if you're looking for a job at a place like Google, Yahoo!, Amazon, or whatever, then having theoretical CS knowledge is a definite requisite for software development positions.</p>

<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>

<p>Ok...I can agree with knowing pure CS will be needed at the Google's of the world.</p>

<p>I will also agree with what CS departments are trying to teach. </p>

<p>What I want to drive home it for the current students to take some of those "applied but not pure CS courses" because of the demand in the I.T. industry. No need putting all your eggs in one basket hoping for that Google or Silicon Valley job when a few more courses can make you more marketable.</p>

<p>At least keep some income coming in to pay those loans at those Cornells, Carnegie Mellons & Cals.</p>

<p>
[quote]
What I want to drive home it for the current students to take some of those "applied but not pure CS courses"

[/quote]
</p>

<p>Now, with that I can most certainly agree. Any department that doesn't require you to take at least a few to get your degree isn't worth its tuition, IMO.</p>

<p>Some of the courses (compilers, microprocessor assembly language) are worthwhile taking in order to provide an appropriate background to the CS student. A CS major isn't strictly applied type courses. I've found that people with a more well-rounded knowledge background of the various facets of CS are more valuable because they can understand the 'big picture' better, even if they end up never writing any more assembler code. Besides, 'real men' (and women) should be capable of assembler coding.</p>

<p>Wrpice,</p>

<p>I can agree with knowing the programming concepts of scope, closures, type safety, etc. As you probably know, Oracle performance is not totally tied to your optimized code (well maybe if the application is heavy with stored procedures). Oracle database performance is also tied to the data architecture (poor data model design = slim chance of good performance) and tuning of the instance, indexes, space management, memory and the operating system.</p>

<p>Now did I make a broad statement?...yeah. I may say don’t skip the programming languages course, but that compiler design course??...I should have just taken advanced networks instead.</p>

<p>Yes, Oracle performance is not tied to my optimized code. But you're naively assuming that Oracle is doing most of the work in my application. It's a means of storing and retrieving data; yes, it's data model design is important to prevent it from becoming a bottleneck, but our software does more than store data.</p>

<p>We have three components. The backend "worker," data storage and retrieval (database), and the UI component via the Web. You cannot optimize only one or two and expect your performance to achieve the desired results. No matter how good you are as an Oracle DBA, if you don't know how -- in our case -- the Java VM works under its hood, you'll <em>never</em> get the backend performance up to par. So, (theoretical) programming language courses and -- yes -- compiler courses, too, transform the "black box" of the runtime system into something you can understand. And once you understand it, you can exploit it.</p>

<p>I think the real tragedy is that you've never found a use for what you learned in that course.</p>

<p>Well, usage of concepts from a CS program depends of your area of emphasis. I have always been involved on the database backend side, except for the few years when I was doing PowerBuilder development when is was hot. After Powerbuilder died down, I moved over to data warehousing/data mining. It is possible to have a I.T. career path and not use much of the traditional theoretical concepts. Once again, I say pay attention to what is in demand. It is better to have to dodge recruiter phone calls than to wait for recruiter phone calls. That is my main point of a CS program...what can make you marketable.</p>

<p>Yes, go be marketable, but C.S. >> I.T.</p>