(originally posted oct 9, 2012)
… is NOT Engineering. It’s not really software either. It’s mostly age-old project management drivel in a shiny new wrapper.
If you examine the discipline closely, you will notice it’s not really about software. Students may take a C++ course or two, but aside from a few projects don’t delve deep into programming or programming topics like the older ‘Computer Science’ discipline. What you get instead is methodologies. Not just any methodologies, but the newest and shiniest ‘agile’ type methodologies. Any exposure to older methodologies is as ‘bad example’ object lessons. In the end, you are not being taught software, you are being taught managment. They might just as well call the program “Computer MBA”.
I took Engineering in the 80’s. Back then, there were four main disciplines: Chemical, Civil, Electrical and Mechanical. Each one had a common core for the first two years, in which everyone took the same courses. We all took Math (lots of math), Statics, Dynamics, Physics, Materials, Design and Drafting, Economics (yuk!) and options. After second year, if you passed, you went on to third and fourth year where you declared your specialty and took two years of courses specific to that discipline.
One thing was constant through all four years, no matter the discipline. You learned how to solve problems, not how to memorize or regurgiate classroom lectures. Almost every Engineering exam was open book, and most allowed you to bring in a ‘formula sheet’, not that it did much good. You were expected to take what had been discussed in the lectures and text, plus the assignment work, and extrapolate solutions to novel problems posed on the exams. Assignments were the same – adapt, derive, extrapolate, solve. Partial marks for showing your work were worth more than the correct answer. Knowing HOW to get the correct answer was as important as getting the correct answer. (In fact, if all you wrote down was the correct answer you would receive a mark of zero in some courses – showing the path to the solution was that important to some professors).
SO what does this have to do with the so-called ‘software engineering’? Lots. People enrolled in software engineering in many colleges and universities do not have to take ANY core Engineering courses. They take some computer science courses instead, but the ones with the ‘special’ appelation of “Software Engineering – xxx” in the name. Basically, they take methodology courses. While I’m sure this produces good methodology majors, it does not produce an Engineer. An Engineer solves problems. Engineers arrive at this capability by taking all those courses in their four years (especially in the first two years) that introduce Engineeing and problem solving to the students, and require them to master some of these skills to advance.
Until and unless “software engineering” programs require all students in the program to take the first two years of Engineering core before branching into the software side of things, they are emphatically NOT, in my opinion, Engineers.