<p>Programmers - sticking to the BLS OOH definition - are little better than hack coders with a high-school diploma and a closet full of energy drinks. They have little or no formal education and are employed by people to crank out the code.</p>
<p>Software engineers - sticking to the BLS OOH definition - are higher-level, design and testing oriented professionals. They have formal education and training in computer science or a related field.</p>
<p>For comparison’s sake, software engineers are like architects and programmers are like carpenters. Software engineers make the decisions and programmers to the legwork, just like architects design the building and carpenters put it together. Programming isn’t growing (note that, however, the number of programming jobs will still be an order or magnitude greater than any engineering - except software - even after the decline) because it’s as unskilled as white-collar work can be. It’s cheaper to have programmers throw stuff together in India than it is to have people here do it. Software engineering is a growing field because people need more and more software, and doing software engineering well requires training and expertise, as well as understanding customers’ requirements and interfacing.</p>
<p>You don’t need a grad degree to do systems software. Bachelor’s is fine. It’s just different jobs do different things, and some pay a little different than others.</p>
<p>Looking at the electives you’ve linked to… the courses you might want to take depend on what kind of software engineering you want to do. The only courses that would immediately benefit a general-purpose SE (these jump out at me, anyway):</p>
<p>CS 4254 Network Arch Programming (3C) Prereq: CS 3204
- if you have not had experience with network programming, this is a must.</p>
<p>4574 Large-Scale Software Development for Engineering Systems (3C) Prereq: 3574 (Design Technical Elective)
- this sounds like a bona-fide software engineering class… process, quality control, etc. if you’ve not had anything in software engineering proper, this sounds like a must.</p>
<p>CS 2606 Data Structures and Object Oriented Development II (3C) Prereq: CS 2605
- if you’ve not had OOP, you need this course.</p>
<p>CS 3204 Operating Systems (3C) Prereq: ECE 2504, CS 2604 or CS 2606
- need this if you’ve not had it</p>
<p>If you have any extra time, some non-empty subset of these courses will make you more competent in your discussions with people coming from a CS background…</p>
<p>CS 4104 Data and Algorithm Analysis (3C) Prereq: CS 2604 or CS 2606, Math 3134 or Math 3034
CS 4114 Formal Languages (3C) Prereq: Math 3134 or Math 3034
CS 4124 Theory of Computation (3C) Prereq: Math 3134 or Math 3034</p>
<p>Other than all this, all I can recommend is perhaps a special topics or independent study course in software engineering. If you want to go down this road I’d be happy to discuss topics with you. Internships are always an option too.</p>