bit wrangler, byte wrangler, computer programmers, engineers, magnetic domains, silicon life forms, software design, software designer, software engineer, software maker
I don’t like the term Software Engineer. Real engineers have licenses and certifications and prescribed educations. No such exists (currently) for software makers. It is still a new craft in our society (it goes back only to the 1950s or so), and we haven’t caught up to how complex and demanding it really is. Anyone can use the term Software Engineer, so it doesn’t have the meaning it could.
The meaning it could — really should — have is the same meaning as for Civil, Electrical, Mechanical or any other real Engineers. It should mean a prescribed area of knowledge and skill for anyone who would be that kind of Engineer. Until software education and the software profession catches up with reality, I continue to resist the term.
People who work with software are sometimes called knowledge workers, but I think that’s also poor terminology. All workers use their own knowledge as well as the business’s knowledge. Some professions require more base knowledge than others, but it is still a continuum. I think it’s a vague way to specify a profession.
I’m fine with computer programmer, actually. Maybe that’s low-brow, but I like it. I’m fine with software designer or software maker (but not software engineer).
Bit wrangler is a fanciful, fun term, although byte wrangler sounds a little more dangerous. You can’t really say you make holes in paper anymore (referring to punch cards or punched paper tape). You can still say that you “arrange magnetic domains in a useful structure.”
I like telling people I train silicon life forms.
Aishwariya Ramachandran said:
Engineers in some fields are licensed. The only engineers that typically have to get licensed are Civil Engineers from what I heard. Civil engineers are definitely the largest in that group, but it includes things like electrical or mechanical engineers working in industries like power generation/distribution or oil/gas. So essentially infrastructure work. That doesn’t mean that they’re any smarter or dumber than software engineers, mathematicians, carpenters, musicians, chefs, etc.
For industries that are regulated by the federal government, e.g. automotive or aerospace, licensure generally is not necessary. That is because the federal government cannot issue licenses (that is a power reserved to the states), and so they would have to rely on the states to handle that. The federal government doesn’t really care what the state thinks about licensure, and the individual states aren’t really interested in or empowered to regulate those industries.
Really I think the distinction is because Software is not a classical engineering discipline by virtue of not existing long enough to be classical, but also because there is not really a Software technician the way there are technicians for other disciplines. You can legitimately earn the title of software engineer through experience and on the job training rather than through formal education. If you do the same thing in, say, electrical engineering, you don’t really get an engineering title that way, you get classified as a technician (although possibly an extremely good one). I think SW will continue to be set aside from the other engineering disciplines until a similar distinction develops.
I have “Software Engineer” in my official job title, It seems like companies just think “engineer” sounds better for some reason, but I don’t consider a developer an engineer. Hell, my company even calls salespeople “Sales Engineers” – it’s just due to some perception that engineer implies a deeper skill set or more qualified individual.
Wyrd Smythe said:
“Engineers in some fields are licensed. […] That doesn’t mean that they’re any smarter or dumber than software engineers, mathematicians, carpenters, musicians, chefs, etc.”
No, of course they’re not. But sometimes — fairly often in my experience — they’re not competent within their own supposed field.
Licenses are just a part; I also mentioned “certifications and prescribed educations” and that last item may be the most important of the three. (I don’t have a great deal of faith in certification, although it depends on the certifying body.)
It boils down to being able to have some confidence that a “software engineer” has the necessary education and experience. As it stands now, the title means nothing.
As you say, the difference is due to software being such a new industry.
As you also say, “technician” in many fields has a specific meaning; often those are the very fields in which “engineer” is a meaningful title. (At my company, “scientist” was another, and that’s another field with technicians and assistants.)
When it comes to software development, there are no standards. No title means anything. (When I interviewed prospective hires, their resume and job titles were generally useless. Their actual ability was all over the map.)
“You can legitimately earn the title of software engineer through experience and on the job training rather than through formal education.”
Not in my book! 🙂
I believe the title should only come from an acknowledged certifying body that has validated the individual’s knowledge and skill level.
Bad codes — bad coders — have already killed people and cost billions. We’ve famously lost some expensive spacecraft due to fairly silly software bugs. More and more of the world depends on software. And it turns out that computer programming is hard!
Really hard. It absolutely demands expertise and a serious formal education in software development!
“It seems like companies just think “engineer” sounds better for some reason…”
The reason is trickery. Lies. Smoke and mirrors. It devalues the word and it devalues the profession.
Aishwariya Ramachandran said:
“I’m fine with computer programmer, actually. Maybe that’s low-brow, but I like it. I’m fine with software designer or software maker (but not software engineer).” – You have touched on the problem. 😀
CS != programming != engineering. They are all different skills with some overlap and usefulness depending on the software being built. The problem with the “I don’t have a degree and I’m a great programmer” camp is that often all they have is a programming hammer and can miss theory that would have let them not write code at all or miss the engineering part about building large complex and maintainable systems.
To build great software you need all three. A single person can have these or a team, but without all of them the software will fail.
At least at my university, software engineers are required to take all the engineering core requirements, including 4 semesters of calculus and 2 semesters of calculus based physics. The regular computer science degree had no such requirements. My final year research was based on semiconductors wafers quality control. In fact, I’d even argue it’s possibly the most pure form of engineering there is.
Engineering is nothing but problem solving. Yes, there’s some science stuff involved depending on what engineering discipline you’re involved in, but it’s mostly problem solving and heavily math-reliant.
That said, Software Engineers deal in problem-solving without physical, real-world limitations (most of the time). Software solutions scale on a level that no other engineering discipline can match (bridges don’t handle more than a few thousand at a time). Software’s level of abstraction let’s you focus purely on the beauty of the math and that’s absolutely amazing.
This is very idealized because someone in QA or other non-programming positions won’t really get to engineer, I mean .. Those just aren’t engineer positions, much like a physicist isn’t an aerospace engineer. There’s certainly overlap, and they very well could fill that position, but that specific position just isn’t engineering.
I’m not assigning any sort of significance of one over the other, each is definitely valuable and serves a significant purpose, but I think those fall under general CS than under its sub-category of SE.
Wyrd Smythe said:
“CS != programming != engineering.”
Absolutely! There’s a famous quote: “Computer Science is no more about computers than astronomy is about telescopes.”
I always want to add: “Which is to say, it’s a little about computers.” 🙂
“The problem with the ‘I don’t have a degree and I’m a great programmer’ camp is that often all they have is a programming hammer and can miss theory that would have let them not write code at all or miss the engineering part about building large complex and maintainable systems.”
Exactly so! Foundation and theory make vastly superior workers in any profession!
An irony is that some of the best programmers I ever knew were self-taught, whereas some of the worst had CS degrees. That has more to do with the variation in CS departments than anything else, though. In some universities, an undergrad CS degree amounts to little more than a degree in basket weaving.
That said, the autodidacts in question took it very seriously and learned those foundation and theory topics.
“At least at my university, software engineers are required to take all the engineering core requirements,…”
A good foundation! I’m such a big believer in foundation and theory. (For one thing they allowed me to change modes in a shifting world. I’ve done everything from embedded programming to web apps to databases to low-level network drivers.)
“Engineering is nothing but problem solving.”
Engineering is also design, and that’s an crucial aspect. You surely know the value of “elegance” in engineering; that’s from the design side.
Good engineering also includes awareness of how designs are applied and used. Good engineering is people-friendly. And beautiful to behold!
“Software Engineers deal in problem-solving without physical, real-world limitations (most of the time).”
What? No, they really don’t, but I think I take your meaning.
(A CS student who worked for me once told me one of her professors referred to programming as “restraint-based problem solving.” That seems overly reductive to me, but in my experience software is filled with constraints from data sizes, to architectures, to how it interacts with the real world.)
Software is like a book in that, once written, it’s almost trivially distributed to as many “readers” as desire it. The online world means physical media isn’t even required, making distribution nearly free.
It also means that defects that escape QA end up affecting lots of users.
FWIW, I’m of the opinion that the software world is as big a shift for humanity as was fire and the electron. A complete game-changer that rewrites everything. We’re in the early days of that revolution.
“Software’s level of abstraction let’s you focus purely on the beauty of the math and that’s absolutely amazing.”
There are times when that’s true, say designing your own sort or search routines, or in doing AI research, or some form of numerical analysis, or network bit-handler.
But if you’re working on software real people will use, I hope you’re also thinking about user interfaces and a lot of other non-mathematical things!
One of my complaints these days is that it seems like many developers don’t actually use their own software enough to realize how badly designed is the user interface. The design of good user interfaces is yet another vector for learning in the profession.
“This is very idealized because someone in QA or other non-programming positions won’t really get to engineer,..”
No, and I’m not suggesting they are or should be. I’m talking about those who develop software. I don’t really consider QA even a part of CS. For me, it’s part of the manufacturing disciplines. In many companies it’s done by untrained workers following scripts.
Of course, none of which is to say those positions don’t have value. That’s not the argument at all!