<p>The one overview software engineering course is likely more than sufficient for entry level employment; most learn other topics on the job as needed.</p>
<p>Either way, it would be desirable to include algorithms, operating systems, networks, databases, and security among your CS electives to maximize coverage of concepts commonly used in industry software jobs. For specific types of jobs and applications, additional other courses can be useful (e.g. compilers can be useful if you are parsing input languages; graphics, user interfaces, physics, and art can be useful if you want to do games).</p>
<p>Those two programs aren’t very different so it’s probably safe to choose either one. However, I would personally recommend going with the computer science program and limit the amount of software engineering courses you take.</p>
<p>The reason why I feel this way is because whether you major in CS or SE, chances are, you will end up working as a software engineer, and when that happens you will end up learning all of those practical skills on the job. I also think it’s much easier to teach yourself something like “requirements engineering” than it is to teach yourself Automata theory or algorithm analysis. After all, who’s honestly going to develop algorithms and write proofs for their correctness on his own spare time?</p>
<p>There’s also a pretty good chance that you won’t use those specific software engineering skills when you start working. At my company, where I currently work as a software engineer, requirements documents are written up by the Systems Engineers (most of whom have EE backgrounds) and the T&I (Test and Integration) engineers are the ones who are in charge of testing.</p>
<p>Also, I have my doubts about the value of a “project planning and management” course for undergrad software engineers. Most software engineers won’t be in a position to plan or manage a project until they have several years of industry experience under their belts, and by then they would have learned a hell of a lot more about managing software projects on the job than they ever did in some class.</p>
<p>Finally, if you ever want to go to grad school, majoring in software engineering can be a bit of a handicap. Many schools don’t offer “Software Engineering” programs (my school doesn’t) and in order to be accepted into the computer science grad program, you’ll have to demonstrate knowledge of subjects like Automata theory in the GRE subject test (if you’re required to take it). And if you get accepted into a CS grad program, you may even be required retake those undergrad computer science courses that you missed.</p>
<p>The above two posts have basically explained why going the CS route is better than the SoftE route. Remember, software engineering is a METHODOLOGY and can be picked up on the job. Also, each employer has their own flavor of software engineering. Boeing may do it slightly different than Northrop who do it slightly different than General Dynamics who may do it slightly different than Lockheed who may do it slightly different than NSA who may do it slightly different than CIA who may do it slightly different than Booz Allen Hamilton.</p>
<p>All you really need is ONE “overall concepts” software engineering course in your undergrad program. Use the credits for the courses that UCBAlumnus mentioned. No need for separate courses for each phase of software engineering. That is a waste.</p>
<p>Software engineering is kind of a boring topic to study at school, anyway. These are the best years of your life; study something interesting, at least.</p>
<p>Exactly. Why would you choose to learn about “requirements engineering” when you can learn about something cool like 3D graphics or machine learning?</p>