How are they different, in your mind?
How are they different, in your mind?
It's not really enforced in tech, but for me the definition is someone who at the minimum studied an engineering degree. Calling yourself an engineer when you studied Computer Science is a bit odd to me.
Really the only major difference at our university (IMO) was that they had a capstone project they did as a group and took two semesters, while mine was done individually and took one semester.
Licensing typically means professional standards set by a licensing body, continuing education requirements, insurance/liability rules, etc.
e: and yes, cf. the sibling comment, some of those courses were mandatory curricula set by The Professional Body Formerly Known As APEGBC (I forget what they're called now).
I think the issue is just university programs aren't granular enough.
I call myself an engineer and is anyone has a problem with that, I just point out that I graduated from an engineering college and am eligible to become a PE, and will, should the world ever decide that's an important credential for building software. I work with tons of Mechanical and Aeronautical engineers, none of whom seem to take any issue with my holding a title of engineer.
[1] https://www.softwareengineerinsider.com/abet/abet-computer-s...
This frustrates me because ABET degrees are required for a bunch of government jobs (and the patent bar). While it might make sense for certain fields, it’s silly to gate CS jobs on a credential that the field evidentially doesn’t take seriously.
I asked whether they could take the courses they liked (eg mix a bit of civil, mechanical and electrical) and they said in theory they could, in practice nobody does because your degree wouldn't be accredited. And no accredited degree, no job in engineering. I think for civil it made a bigger difference than the others.
I always thought that was quite sad, since the mathematicians did whatever the hell they wanted between maths, engineering, CS and physics and still ended up with a maths degree.
I am definitely against the idea of licensing or professional organizations gating who gets to call themselves something. I think it's OK for an organization to invent their OWN term and branding, but they cannot take a generic word like 'engineering' and add regulatory capture on top of it. For instance, if IEEE or ACM wanted to license programmers, they are free to come up with a process for licensing with a title like "IEEE Software Engineer". The market can decide if that bears any value. But that value has to stand on its own, and not rely on government intervention granting those organizations a monopoly over the term 'engineer'.
Real Software Engineering, Glenn Vanderburg, Lone Star Ruby 2010 https://www.youtube.com/watch?v=NP9AIUT9nos
which explains what various kinds of engineers actually do. Not at all dry and boring like it might sound! From the YouTube blurb:
Software engineering as it's taught in universities simply doesn't work. It doesn't produce software systems of high quality, and it doesn't produce them for low cost. Sometimes, even when practiced rigorously, it doesn't produce systems at all. That's odd, because in every other field, the term "engineering" is reserved for methods that work. What then, does real software engineering look like?
And lets not mention the new airport in Berlin (or the NYC tube lines) in the context of low cost.
> And lets not mention the new airport in Berlin (or the NYC tube lines) in the context of low cost.
That seems to me a low-quality comment, sorry. The lack of punctuation and the spelling mistakes made it hard to parse, and until you flesh it out more, I'm not sure precisely what point you were trying to make. And more mentioning, less "lets not mention"-ing, please.
"A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot."."
[0]https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/E... Edsger W. Dijkstra's "On the cruelty of really teaching computing science"
Engineer implies a higher level of skill WRT establishing and following processes designed to minimize risk. A software engineer, like their mechanical or civil equivalents, has a strong sense of duty WRT building things that are useful, safe, reproducible, etc.
No doubt the line is gray. But, your stereotypical web app developer (failing fast while chasing a unicorn) is not an engineer.
In the real world, I'd expect Boeing to employ many software engineers [insert 737 Max joke here]. Google and Apple would employ a mix of engineers and developers. And a company that builds CRUD apps on contract would be almost exclusively developers.
All of this ignores the licensed engineer's opinion, which is often that none of us are engineers because we don't have to pass a licensing exam. And often don't even have to pass a particularly rigorous academic program.
That could just as easily describe Google and it is full of “smart people” (tm)
Google and Apple would employ a mix of engineers and developers.
A person with degree or a person with a specific set of skills? If skills, then can you enumerate few of them?
Of course, there is no PE for software. So, within our industry, it's a lot more squishy. There's a bit of "I know it when I see it" here...
If you're building complex systems with an eye for reliability and/or safety, you might be an engineer.
If you're just building a business/consumer app, using infrastructure and tooling that somebody else built and maintains, you might not be an engineer.
With all that said, as a hiring manager, I'm not going to be hung up on what title you held at a previous job, as long as you appear capable of doing the job now. And my career has mostly been on the "just a developer" side of the line - there's nothing wrong with that. I'm simply not building software that has massive negative repercussions if I get it wrong (beyond impact on my employer's bottom line).
Also, we're not putting our licenses/careers on the line by signing off on software releases. As someone with a degree in Mechanical Engineering (but not a licensed engineer) working as a developer, I think the key difference is the accountability and incentives.
Avionics software and some medical devices do have near-Engineering cultures and practices, but a lot of software would look much different if we had real Software Engineering. Half the IoT malware magnets sold wouldn't ship if someone had to put their professional license on the line with every firmware sign-off.
Not all software would need a practicing Engineer certifying that standardized releases, just like you probably don't need a structural engineer to sign off on your patio expansion or treehouse.
Steam boiler explosions very common in the U.S. (and around the world) until we started requiring licenses to design them with serious consequences for neglecting best practices and procedures. It's one thing to bet your company's reputation and move on to somewhere else if the company fails, but quite another to set aside the corporate veil and be personally responsible.
For a look at what an Engineering-like system would look like, a good friend lives in Vienna, Austria and went to church with Joseph Mangan. [0][1] The short version of the story is that airliner air pressure control valves have three positions: (1) closed, (2) slowly bleed pressure, and (3) wide open to equalize pressure on the ground and better ventilate the cabin. Older designs used separate motors for the two different open positions. Mangan was working for an Airbus subcontractor, writing the firmware for a valve that saved weight and shifted complexity from the mechanical design to firmware by using a single motor. From the closed position, it spun the motor one way to open the valve a small amount, and spun the other way to open the valve a large amount. If the firmware were to malfunction while closing the value, it could turn the motor too far and rapidly depressurize the cabin. In order for the subcontractor to ship the product, Mangan had to sign off that a whole bunch of testing and best practices had been followed. Best practices hadn't been followed, he refused to sign off, and his manager faked his signature. (In particular, one of the required standards was that the first thing the firmware does is initialize the processor's interrupt vector to point to actual interrupt handlers. This wasn't the case.) Mangan ended up stealing a bunch of internal documents and posting them online at great personal cost in order to force the company to follow procedures. In the end, after long court battles, Mangan continued to work on certification of the valve firmware, and he eventually signed off on it once it had really met all applicable standards and he was convinced it was safe.
[0] https://en.wikipedia.org/wiki/Joseph_Mangan
[1] https://www.telegraph.co.uk/finance/2923861/Airbus-whistlebl...
Programmer: A person who writes computer programs. I would personally also imply that the programs are typically not deployment of other programs, but this is my own view and not a standard definition. (Actually all of these are not standard definitions. At least, not anymore.)
Developer: A web developer; A person who writes or deploys applications. In the web era I guess most developers have some inherent focus on the internet as a client interface.
I would also add:
Hacker: A person who likes to probe things until nothing jumps out anymore. (These days people call this a White Hat.)
Cracker: A person who likes to probe things until nothing jumps out anymore. Then they probe some more where they really should not and the police get uneasy. (These days called a Black Hat.)
For the non-tech community:
hacker = person committing computer crimes (black hat)
cracker = a tasty snack (or, if you are in the American South, a contemptuous term for a white person)
tinkerer = someone who tinkers around with stuff (what tech community traditionally called hacker as in hacker news)
The concrete definitions are:
Hacker: A programmer; someone who embodies the spirit of the programmer's way of thinking
Cracker: A programmer that commits crimes by illegally breaking in to systems.
If I build an iOS app that streams video to a webpage, am I developer or a programmer?
I've never cared what people refer to me as, and I've never seen anyone voice a preference for it among people I've interacted with.
I call myself a Software Engineer, because pretty much every job title I've had has used that term.
The only anecdotal observation I had is that people in nontech, non SV companies use the term "developer". People in SV style tech companies use the term "engineer". YMMV.
The line is blurring though, as I see the term "engineer" becoming more common in nontech companies too. Just like how leetcode interviews are spreading too.
They decided that "we would have to get serious" about this whole software production thing. Some people like C.A.R. Hoare and Edsger Dijkstra said something to the effect of "formal logic..." to which the reply was, "Hol' up, there. That's too hard." They then assumed the term "software engineering" and went off in the '70s, '80s, and '90s to develop stuff like UML and the software engineeing lifecycle requirements -> code -> testing -> acceptance V-thing.
For the cynical computer science programmery-type person such as myself, the end result seems to have been the software engineering degree, sort of a lite CS degree (just enough to be employable) with more project management and what-not. At least it's more comprehensive than information technology degrees.
Developer: codes websites and apps.
Programmer: writes computer code. Encompasses developers.
Engineer: builds bridges, rockets, cars, missiles, smart tvs, gaming consoles, computers, power stations, electric infrastructure, water treatment plants, etc.
Related: I've come across a handful of programmers that describe themselves as "contractors". So you hang drywall and install toilets?
(I'm most comfortable with "developer" because that corresponds most closely to what what I do feels like. I don't spend so much of my time actually programming, but very little in software is engineering-like)
A computer is a physical machine that runs programs which are encoded digitally on physical hardware (memory).
I could see an argument for considering a computer program to be an engineered "machine" that runs on a turing-complete computational platform. Just because a computer program is digital doesn't mean that it's not an engineered mechanism. In fact, early computer programs did run on physical hardware in a physically mechanical manner.
A doctor or lawer, on the other hand, is not building any type of machination. They are diagnosing patients and having arguments with judges. What exactly are they engineering?
That's exactly the point. Programmers write programs. They don't design engines, machines, or public works. Programmers are excluded from the very definition you're quoting.
If you want to expand the definition to include the application of scientific methods to solve a problem, so that it includes someone that creates a Javascript single page web app, there's no way to exclude those other professions. Programs are not machines by any conventional use of the term.
You can become a licensed software engineer
In any case, software engineering seems to be considered a legitimate engineering discipline.
But to come to your point, in my mind - an engineer is the one who designs the software, a programmer is the one who actually writes good code to make that design a reality, and a developer is a blanket term for someone who does both (or more) jobs.
An engineer isn't just someone who designs things... but also someone who builds and maintains them.
Wouldn't that mean that even a lowly programmer who is just simply maintaining code is also an engineer?
Engineers apply math to create systems. Without Newton and his math there wouldn't be engineers or the other way round: engineers are those who create the stuff that is only possible with Newton's math.
Since only few software needs math to that degree, rarely any software is developed by software engineers.
Software developers on the other hand are like real estate developers. They don't build walls, they don't do structural analysis. Instead they combine systems. Unlike real estate developers, they mostly do the plumbing by themselves.
Programmers are to engineers what words (Greek: grams) are to math. They focus on the language and care about expressing ideas in program code.
Then there are also software designers and architects who care about the overall system structure.
I like this analogy, because it confirms my personal biases/discomfort about web and app developing falling under the same umbrella of "engineering" as nuclear reactor design, missile guidance, and the worldwide chemical industry.
However, to advocate against my biases, in my field (ChemE), most of the fundamental work has been done. Very few BS graduates in chemical engineering will design a distillation column or a chemical reactor. Again, most of the basic science and engineering has been figured out long ago (which is why most research ChemE looks more like chemical physics, molecular/systems biology, and materials science than reactors and unit operations).
So, to an approximation, a chemical engineer won't "build" something. They'll stitch together components that were figured out a century ago. In fact, this was the entire point of "unit operations" -- black boxes that can be represented as a functional transformation on their inputs to produce outputs, and can be solved, quasi-linearly, to estimate the overall inputs and outputs of a chemical process.
In that case, by the same analogy, they wouldn't be "chemical process engineers", but "chemical process developers". Yet I wouldn't suggest a chemical engineer who pulls correlations out of Perry's isn't really an "engineer", so with critical review, it's hard for me to justify a believe that somebody who stitches together APIs for a living isn't equivalently an engineer.
[Edit: a relevant xkcd: https://xkcd.com/1988/ -- Most engineering doesn't seem to be that different]