Majority of software engineering courses doesn’t really teach you how to be an engineer. It’s much closer to trade school than proper engineering.
If you were being taught software engineering as an engineering discipline, these should be absolute bread and butter core components of the course.
I'm increasingly convinced that the apprenticeship program approach would yield far better, deeper results than how we're going about recruiting these days, but most business leadership is fiscally addicted to short-term hire-fire cycles instead of looking for ways to exert more control over their destinies. I suspect that recruiting model is an ingredient to systematized innovation (the "deeper" part I mentioned, which I use to denote internalized concepts, procedures, mental models, etc. necessary to fluent application and craft that I believe are absolute table stakes in innovation).
[1] https://www.glassdoor.com/Interview/mechanical-engineer-inte...
If you want computing theory without programming, you do a math degree with specialization in computing theory.
Plenty of other countries follow similar practices.
b) Algos is only a small part of it. It is not just individual bits of code, but the whole system you're designing, all the moving pieces, how they connect together, network effects, etc.
Early on our subjects had a lot of overlap - Java Programming 1, Database 1, Networking basics (TCP), etc. etc. I also had a healthy dose of Eng. Maths, and electrical eng. theory.
As the years rolled on I had subjects like Eng Ehtics, real time programming, software maintenance project, OS design, large scale system design, and I took a digital electronics minor (could have chosen game programming or OS design). Towards the end I did a final year engineering project which was a full year project with 16 team members, working for a real client, building a massive piece of software from start to finish.
So my degree was a whole lot of Eng. stuff wrapped around CS. When finished my friends could sling code and make software. I could do that, but I could also design a bunch of stuff, and had a lot more theory to back everything up.
At a very high level, I'd say Computer Science is more about "just do the work" like a welder on a bridge or a mechanic on an F1 race team. Where-as Software Engineering is people who designed/tested/validated the bridge, or the engineers who actually designed the F1 engine/chassis/aerodynamics.
I see the difference play out in the workplace all the time when CS grads (or people with no tertiary education in Software) want to get right into slinging code, and they get totally lost building so many trees until the forest is really thick. Software Engineering folks step back and actually design the forest before they build trees. This also plays out when trying to fix stuff, or even root cause analysis. Doers want to get on with doing (welding, changing spark plugs) while Engineers want to get on with understanding what needs to be done, then figuring out how best to do it.
Disclaimer: I am not a graduate of either or those UVic programs or a CS program, and I am not an engineer (I graduated from a mechanical engineering technology program), so my comments should definitely be taken with a bunch of salt.
I would say there are three main differences: Engineering specific: 1. All engineering programs share a common engineering core. Physics, chemistry, material science, math (usually these cover the material from an engineering perspective and are different than courses in the faculty of science), drafting/engineering graphics, engineering economics, and possibly some other courses. 2. An emphasis on professional responsibility and ethics. For example, what happens if a civil engineer certifies a bridge and it later falls over (there is a course where you learn this!)? What happens if a developer builds a website that leaks customer credit cards information (I genuinely don’t know)? Software specific: 3. A greater emphasis on systems and systems design, testing, projects, and few electives leading to a standardized curriculum providing a more consistent knowledge base across graduates.
Comments on engineering in Canada: Graduates of the BSEng program can become registered as a Professional Engineer (PENG) in Canada. To call yourself an engineer in Canada requires that you are licensed (PENG) or in the process of gaining your license (engineer in training / EIT). In Canada, to be “educated as an engineer” would, to a first approximation, require someone have a BEng, BSEng, or BASc degree from an accredited engineering program[3]. I am sure there other accredited engineering degrees that I am not familiar with. Only having a BSEng means you are a graduate of an accredited software engineering program in Canada, you aren’t an engineer yet.
Professional Engineering registration requires a 4 year accredited engineering degree, 4 or 5 years of work experience. Some of the work experience must be supervised by PENGs. You must pass professional exams and keep up with professional development. Additional details can be found at [4].
[1]https://www.uvic.ca/engineering/computerscience/undergraduat...
[2]https://www.uvic.ca/engineering/software/future-students/pro...
[3]https://engineerscanada.ca/accreditation/accredited-programs...
[4]https://www.egbc.ca/Registration/Individual-Registrants/How-...
It's a mixture of science and engineering, leaning towards the science. Far far away from a trade school which would teach you practical skills (java, git, web development) and try to get you into the labor force ASAP
https://engineering.csuohio.edu/eecs/master-science-software... https://mse.isri.cmu.edu/
You'll find Software Engineering degree programs are often connected to schools of EE, CS, or more generic Engineering if you dig into this more. And of course things sometimes work in a different way - I think maybe MIT folds EE, CS and SE all together into the same department, possibly even the same degree.
I believe ABET recently deprecated their accreditation of undergraduate programs, and I don't have any idea what the implications of that are for SE licensure, but there's a possibly out-of-date list of ABET-accredited SE undergrad programs here:
https://www.softwareengineerinsider.com/abet/abet-software-e...
Not the question asked, but the quality of the answer is about what I expected (based on what I suspected). Glad not to have made an upfront overinvestment taking the discussion too seriously.
https://www.nspe.org/resources/pe-magazine/may-2018/ncees-en...
My current role title is Software Engineer, but I don’t go by it outside work very often because Engineer means something outside the technobubble. I have a friend with two degrees in aeronautical engineering, and he clenches every time he hears someone refer to me as an engineer. I agree with him too, but earning that title should be about more than a degree, engineers in industry almost always have to work under a supervising engineer for a significant period of time before acceding to the title themselves.
It took years of experience that you could only gain through hands-on work, to know how to debug hardware that's why gray-beards are so valued in hardware vs in software where people talk of ageism.
When your hardware/low level software doesn't perform as expected you can't google/stack overflow yourself out of the problem, you need to grab the datasheets, the schematics, an oscilloscope, a soldering iron, hunch over patiently and devise a way to debug the issue out as no one else can help you.
Hardware engineering is now just as challenging as it was back then but due to the commodization of hardware along with the rise of China and the downfall of high-tech giants like IBM, Philips, Siemens, Motorola, Nokia, Blackberry, Nortel, Ericsson, etc most hardware jobs disappeared or moved overseas and pay went significantly downhill compared to software engineering(at least in Europe).
It gives you a great knowledge and appreciate of what goes on beneath the covers. It was a grueling, but satisfying class.