<p>I will be attending CMU in the fall, and I will be majoring in electrical and Computer Engineering. However, since CMU has such an amazing CS program, I think it would be foolish to not take some classes from there for my electives to broaden my employment options. But I'm wondering, what classes are most important to take to make to qualify me in employer's eyes who would normally be looking for an CS major for a job posting opposed to an ECE?</p>
<p>I think Data Structures is a must. A lot of the interview questions seem to be straight out of that course. Everything else (Networks, Operating Systems, Algorithms) is good general know-how but I doubt anything would be a real requirement for a job. Very few operating systems get written from scratch! </p>
<p>If you have some opportunity to take web programming, that is a very practical skill that will surely be sought by employers. I’m not sure if they offer that at every school though?</p>
<p>
</p>
<p>It is generally a prerequisite to all upper level CS courses.</p>
<p>
</p>
<p>The concepts from the operating systems course are useful in understanding how your program interacts with the operating system, including how that affects the performance of your program.</p>
<p>Data Structures, Algorithms, OS</p>
<p>OS is important because, as a programmer, it’s good to know OS principles such as threading/scheduling and virtual memory.</p>
<p>Bump. Forgot about this thread until now. Anymore advice?</p>
<p>And there is no reason to declare a minor in CS? I should just get the classes I need?</p>
<p>Looking at the CS minor age, [CS</a> as a Secondary Concentration](<a href=“http://www.csd.cs.cmu.edu/education/bscs/second.html#minor]CS”>http://www.csd.cs.cmu.edu/education/bscs/second.html#minor), it looks like I’ll be forced into taking courses I won’t necessarily need in my circumstance. I can personalize my ECE track to incorporate Algorithms and Data Structures if I choose so.</p>
<p>UCBAlumnus touched on a key point. The reason for taking certain CS courses are:</p>
<p>Data Structures - In addition to this course being a “prereq” for just about any other upper-level CS course, one needs to know which data structure to use for a given situation in software development. Software performance and functionality ties directly to the proper data structure.</p>
<p>Operating systems - teaches you in “general” how most operating systems work and how a program and language interacts with an operating system. The knowledge of operating systems also allows one to pick up on new different operating systems in a short amount of time.</p>
<p>Programming Languages (Survey, Concepts or Theory) - teaches you in general how many languages work in “general” and the differences of each. Like operating systems, a overall understanding allows one to pick up on new languages fairly quickly.</p>
<p>Algorithms - You may get algorithms as part of your data structures course BUT if you can take an upper-level course dedicated to algorithm analysis and complexity…please take it.</p>
<p>Knowing the pros, cons, mannerisms of the combination of a certain data structure + operating system + programming language and the algorithm complexity associated with it separates the pure “I.T.” folks for the “computer scientists”. Instead of calling some vendor about some “bug”, you can figure out that the bug is related only with that data structure/operating system/language combo and you may can use a work-around until the vendor fixes it.</p>