<p>At this point my main goal is to go into software engineering after I graduate. To that end, I've selected these upper division EECS courses to take:</p>
<p>EE 122 - Networks
CS 162 - Operating Systems
CS 169 - Software Engineering
CS 186 - Databases
CS 170 - Efficient Algorithms (theory)
CS 164 - Programming Languages and Compilers</p>
<p>Could I get some feedback on my selection? What might be a logical order in which to take these classes and why?</p>
<p>I think they are largely independent, but here are some thoughts:</p>
<ul>
<li>Algorithms (170) is IMHO very useful for any other class, good to take early</li>
<li>Database knowledge is probably useful for CS169, may help you to do a better project</li>
<li>Networking (122) and database (169) knowledge will be useful for OS (162). but one could easily argue the other way round, that OS knowledge well help you in database and networking classes.</li>
</ul>
<p>You’ll be exposed to the same concepts in many of these classes, which one exposes your first isn’t really important. IMHO it makes a lot more sense to arrange classes by “difficulty/workload” rather than “logical progression”.</p>
<p>If you will be taking both 172 and 164, it is a good idea to take 172 first, since it teaches the theory used in compiler front ends (lexing and parsing).</p>