Google snippets aren’t helping me in my search for general principles of engineering. Any certified engineers care to share? Or someone want to ask chatGPT to confabulate some?
The core thing that I think differentiates software engineering and programming is accountability for the quality and ethics of what you design. If an engineer designs and signs off on something, they are legally accountable for if it. There is mandatory ethics training at university and people refuse to sign off on work they don’t understand or aren’t confident in. Engineering assurance and management of change processes are the opposite of “move fast and break things”.
As far as I can see there is no ethical accountability for the programmers at big tech companies. People are happy to pocket the crazy salaries and claim their managers or execs should be blamed for the damaging outcomes of their work.
As someone who has done "ethics training" as part of an engineering degree, I don't believe for a second that it has a significant impact on the choices most engineers would make in their jobs.
Sure it helps to have established bodies to hold engineers accountable and report violations to, but I certainly don't think the ethics training is a significant factor. There's no shortage of degreed engineers signing off on things far more ethically questionable than most of what big tech is doing.
This also sounds pretty optimistic as a generalisation:
> people refuse to sign off on work they don't understand or aren't confident in
So the hordes of Electrical Engineers slaving away at Apple and Intel and all the rest — these people, and not their bosses, have legal accountability for every harebrained thing they are required to implement?
The idea is drawn from things like structural engineers signing off bridges - where there's probably only one on a project, and if they won't sign off the design, neither will any other structural engineer.
I doubt it'll ever get adopted in the software industry, because we have many competent people doing good work without a software engineering degree, and degrees of low enough quality employers do whiteboard coding tests at interview, so there's not really a notion of a 'properly qualified' programmer.
Yes. If they designed something they knew was unsafe, or they were negligent in their design, or they misrepresented their competency I would expect them to be accountable for their actions as a professional electrical engineer.
I do have an engineering degree in France, but even then I think the "software engineer" title is just wrong. There is little actual engineering going on in most development jobs (most. Some do have actual engineering).
At least in France, the biggest difference between an engineering degree and someone who learned by themselves are going to be:
* the engineer should have more general knowledge about databases, algorithms etc.. and generally how things work. Someone who didn't get that training might not have as deep an understanding in those fundamental concepts (that gap is sometime very very visible when working together). That's the most important part in the day-to-day.
* the engineer will have at least a decent English level. Not an issue in English-speaking country obviously, but that's actually the number 1 reason some students don't get their degree in schools I know.
* the engineer should be able to present well his ideas, and generally be at least good in communication. There is formal training to speak in public. If you are shy by nature, this may not come easy without formal training.
That's about it. There is no special skill that someone determined cannot acquire by themselves with freely available training and experience, but when you are a teenager with little self-motivation, it helps to get all this drilled into you. On the other hand, I wouldn't hire most people coming out of my own school, so take it with a grain of salt.
If I would to meet somebody who claims to apply engineering principles or, worse, scientific method, I will make sure to be on top of their PRs at all times.
It does. We are just not used to looking at it like this.
For example, if you are changing labels or adding buttons to a web app according to detailed instructions from a manager, then I would call that "programming".
If you are implementing an OAuth flow, or designing an API for some service, and doing so according to the current state of the art, you are "engineering".
If you develop a novel algorithm to solve a specific class of problems, you are "computer sciencing".
Obviously, there is some overlap between the tasks, and people will switch between the different parts depending on the stage of the project, but I don't think the titles can be chosen randomly.
Someone who programs. Less tautologically, someone who uses a computer to do something that takes computerless humans, say, O(nx) time and completes the task in significantly less than O(nx) time.
As for who I'd want to hire? Probably just the programmers who can do it correctly faster than most. Whether they're writing Python or hacking spreadsheets, they are programming a computer, and therefore, they are a programmer.
A software engineer applies engineering principles when designing and/or implementing programs.
A computer scientist uses scientific methods and rigor when solving problems relating to computing.