<p>Simple question. What are the best upper-level Computer Science courses a person should take? Let's say this person would like to go into Software Engineering/Development, but really doesn't care about specialization too much. </p>
<p>Here are the classes required for a CS degree at my school (Umich): </p>
<ul>
<li>EECS 203: Discrete Structures</li>
<li>EECS 280: Programming & Data Structures</li>
<li>EECS 281: Data Structures & Algorithms</li>
<li>EECS 370: Computational Organization</li>
<li>EECS 376: Foundations of Computer Science</li>
<li>Bunch of math classes</li>
</ul>
<p>Here are some of the Upper level elective classes (we have to take 5):</p>
<ul>
<li>EECS 373: Design of Microprocessor Based Systems</li>
<li>EECS 381: Object-Oriented and Advanced Programming</li>
<li>EECS 427: VLSI Design I</li>
<li>EECS 442: Computer Vision</li>
<li><p>EECS 470: Computer Architecture</p></li>
<li><p>EECS 475: Introduction to Cryptography</p></li>
<li><p>EECS 477: Introduction to Algorithms</p></li>
<li><p>EECS 478: Logic Circuit Synthesis and Optimization</p></li>
<li><p>EECS 480: Logic and Formal Verification</p></li>
<li><p>EECS 481: Software Engineering</p></li>
<li><p>EECS 482: Introduction to Operating Systems</p></li>
<li><p>EECS 483: Compiler Construction</p></li>
<li><p>EECS 484: Database Management Systems</p></li>
<li><p>EECS 485: Web Database and Information Systems</p></li>
<li><p>EECS 487: Interactive Computer Graphics</p></li>
<li><p>EECS 489: Computer Networks</p></li>
<li><p>EECS 490: Programming Languages</p></li>
<li><p>EECS 492: Introduction to Artificial Intelligence</p></li>
<li><p>EECS 493: User Interface Development</p></li>
<li><p>EECS 494: Computer Game Design and Development</p></li>
</ul>
<p>Pay no attention to the grouping. I grouped them purely based on the fact that it looked nicer grouped rather than one long list.</p>
<p>I was thinking about taking the following five courses:</p>
<ul>
<li>EECS 381: Object-Oriented and Advanced Programming</li>
<li>EECS 481: Software Engineering</li>
<li>EECS 482: Introduction to Operating Systems</li>
<li>EECS 484: Database Management Systems</li>
<li>EECS 477: Introduction to Algorithms</li>
</ul>
<p>What do you think? I picked these five because 381 & 481 seemed like valuable courses for someone going into software Engineering, obviously. I picked Algorithms because I hear it's the backbone of any Computer Scientist. And Databases and Operating Systems...I dunno, they just sound useful.</p>
<p>So what do you think? Which classes would (A) be the most helpful at getting a certain job, and (B) proving useful after getting the job? Courses outside of this list would be helpful too. I have heard some people encouraging certain math classes like combinatorics and graph theory, which sound fairly interesting.</p>
<p>Keep in mind I'm years away from actually making this decision, so your input now would likely be forgotten when it's relevant. BUT I like talking about this stuff. I like planning things out and seeing how components add up, even if I know I'll change my plan completely in the future. It's a hobby of mine; I simply enjoy discussing the details of things like this.</p>
<p>All facts, data, information anecdotes, and first-hand experiences welcomed. Even unjustified opinions are welcomed... I enjoy talking about this stuff as it helps pass the time.</p>