Are Programmers Engineers?
The Llama King writes "The Houston Chronicle has an interesting story about a debate in the Texas Legislature over whether programmers are really engineers. A quote: " 'It's one of the silliest issues we're having to deal with this session, but it's also one of the most important,' said Steven Kester, legislative director of the American Electronics Association, an organization of computer companies." Are you really an engineer? Or just a code-monkey?"
No.. There is more to engineering that re-using code....
an engineer or a code monkey. I'm a journeyman ... in the best sense of the word.
"And this is my boy, Sherman. Speak, Sherman." "Hello." "Good boy."
I think there are three types of people who program.
Code-Monkeys: these guys do exactly what they are thought to do: Grind out code. Usually not innovative, usually no technical achievement. Nevertheless, they'll get the job done especially if its something that they can base off other things.
Computer Scientists: These guys use code to test new ideas and methods. This is the research side, but its not always practical research. An analogy I can make is you can't a bridge without math but advanced number theory really doesnt make better bridges.
Computer Engineers: These are the practical counterparts to somputer scientists. Usually innovative but in a sense that they comstruct useful things. What an engineer makes a code-monkey will be able to replicate soon. Just like it takes an engineer to design an engine, but Joe-mechanic can rebuild one or even "modify" it to get some use out of it.
I dont want to put a negative spin on any of these as they all serve their purpose in my mind. Perhaps you will dis/agree.
cheers
-bort
on how much forethought you put into your code.
if you plan it out, have a model, a written set of clearly understandable design goals, that you could hand to someone to do the coding for you, then you have engineered something.
if you start coding off the top of your head and midway through your coding decide the mp3 encoding software you were writing should now control your toaster instead of dealing with audio, you are not engineering.
The term "engineer" has already been besmirched by Novell and Microsoft. Lets not water it down futher. The answer is simple. Someone with a computer engineering degree from a 4 year university is an accredited engineer. Someone with an IS, IT, MIS, ITM degree is _not_ an engineer. Sorry but if you wanted to be an engineer, you should have studied engineering. Someone who drops out of college and learns VB or perl or something is not an engineer. The term engineer implies some form of accreditation. I applaud Florida who makes it illegal to expand the term "MCSE" on a resume or in a business letter unless you are an actual engineer.
Never overestimate the end user. -jeramy b. smith
I am an engineer in the traditional sense of the word. I find it abhorant that a tech support person puts the word in their title or that there are actual cases of 'sanitation engineers'. To be a legal engineer, you must have the degree, and pass the exams proving that you are capable in your field. Furthermore, you cannot claim to be capable in a related but different engineering field unless you truely are. I may be shiznit in the field of transportation engineering, a subset of civil, but can and would never put my name on anything to do with structures, because I might not have the expertise.
However in the world of IT and programming, any slackjawed yokel who can hack out 5 lines of perl can say they're a badass programmer. No engineering to that. Thats like a poseur mechanical engineer making a basic drawing and saying he 'engineered it'.
There are real software engineers - they do engineer their products, but the trend towards dilution of the term engineer seems to stem mostly from the IT field where a programmer thinks the term synonymous with engineer.
to email me: take my
All I want is a kind word, a warm bed and unlimited power.
You're all code monkeys until your job really CAN'T be done by a smart high-school kid, and you have polished the art to the point that all the OTHER engineers accept and respect you as engineers!
It should be major news that Joe Somebody's computer crashed today, an event greeted with grim commentary and TV specials.
...
In various parts of the world, an engineer has a level of professional liability and expected ethics that the software industry refuses to accept. When that's no longer the case, I'll have a good deal more sympathy.
For what it's worth, I have a high level of academic and industry experience. I design and write code for a living, which makes me a professional programmer. I EARNED the right to put "BA" after my name[1], and I EARNED some cash. I did not EARN the right to call myself a Software Engineer, any more than I EARNED the right to call myself an MD, a PhD or any other title that may give the perception of competence.
[1] My university awards BAs for all non-Masters degree courses, even science ones
DISCLAIMER: I'm not a programmer, but I am a sysadmin who dabbles in C, Perl or Python sometimes, and the occasional shell hack. It's proven a useful skill many times, and I'd like to think that I am somewhat competent at it. Oh, and I acquired these skills autodidactically (sp?).
Seriously, i don't code much, but when I do, it's either to work around some bug or patch around some unwanted behaviour, to glue a front-end to some back end thing, or I cobble something together to automate some stuff. Sure, there's not a lot of design going on, but I usually produce readable code, and somewhat decently commented (that's so I'll understand what's going on when I look at it 6 months later when it breaks), but no, I wouldn't call myself a programmer, but yes, I do program. I rather wouldn't, but hey, shit happens.
So are code mumbling sysadmins like me really programmers? I'm certainly not a code monkey, although I use _no_ form of design methodology. Hack first, ask questions later.
It's a toughy, I grant you that...
At the school I went to, it basically boils down to: Computer Science: Software (memory management, theory, design) Computer Engineering: Hardware (circuits, lower level languages, hardware design)
If garabage collecters can be "sanitation engineers" and housewives can be "domestic engineers"..
For these, being called 'engineer' is a promotion, for many programmers it would be a demotion.
Programming is a unique discipline on the intersection between engineering, art, science and mathematics. It requires much greater deal of creativity and mental dexterity in entirely novel situations than mere engineering.
I wish that they would make a qualifying exam for software engineers, so that one could get a PE in software engineering. Not so much because I care about the title but because of a few other reasons:
1) People would quit screwing with programmers, telling us we need to evolve into "software engineers." All that that ever does is add paperwork and make my job harder. A bunch of people come in, who don't know how to do our jobs, and tell us to do it differently, because it will make us engineers.
2) It would raise the level of quality within the field. If everyone was held to the same standards when they came into the field, there would be some minimum level of knowledge required to start out. Good. Now I won't have some putz without a clue telling me my code isn't up to snuff.
Why is this not going to happen any time soon:
1) Do you test their coding ability? In what language?
2) Do you test their knowledge of algorithms, or are you, in doing so stepping into the scientific discipline and away from the engineering discipline?
3) Do you test their knowledge of data structures?
4) Do you test their knowledge of UML? Most universities gloss over this, as in academia, this seems to hold little repute, yet many companies stake their claims as engineers on knowledge of UML.
That kind of licensing just means that they have to carry a bond, which is a cheap form of insurance. Most licensed professions (eg locksmith) require a bond. (FYI, you can get a $30,000 locksmith bond for $15/year & a magazine subscription.)
Seems to me that the question in Texas just boils down to whether the programmers have passed the test, done the paperwork and paid the fees.
So, what's the Software Engineering Exam in Texas like? Hard? Do they test in C or pseudocode or what?
(In other words, you license particular professions that have a potential impact on public or customer safety, not the word "Engineer". If they feel that there's some danger that people will trust me to design their buildings because I'm a software engineer, then they have to restrict the word "Engineer" to a particular profession. Just like I can't call myself a MD or police officer.)
I am a programmer with a computer engineering degree. However, that does NOT make me an engineer. Being a licensed engineer shows that you have had an education in not only your field, but also in safety, ethics, and responsibility. As an engineer, you are legally responsible for your work. Not your company, or your boss, or anyone else-- YOU. Just understanding electronics or programming does not make you an engineer.
LordBodak's journal.
If you went to a university and studied in a computer science or computer engineering curriculum (this means that you have studied at least 3 semesters of calculus, 2 or 3 semesters of physics with lab, taken a semester of algorithms, data structures, linear algebra, and a plethora of other mathematics related courses, not to mention your programming courses) then you are an Engineer. This is because a university graduate with the degree in CS/CE/EE has the background to truly apply math, physics and engineering principles AT an engineering level. Some 16 yr old from the local high school that knows how to do VB or Java doesn't even posses a thimble of the knowledge of a true engineer. That is why you see your 16 yr olds coding perl scipts for a web site form processor and your true engineer getting paid 10 times as much and busting out with apps that the 16 yr old probably couldn't even operate.
So I believe if you have your degree in CS/EE/CE or even Mathematics, and you are a developer, then you have earned the right to be called an engineer. The 16 yr old has a long ass way to go.
I got my master's in computer science from a technical university, where one by definition is an engineer when done.
;)
;)
Oh, and I code 10-16 hours a day for a living
The fun part being, I'm actually a "civil engineer". In this country it refers to the fact that I was not educated in the military, but at a civilian university. It has nothing to do with plumbing or building houses, I assure you
There can't be an Engineer in software. As Alan Cox has written on several occasions, software engineering is roughly in the alchemay stages in relation to state of the art chemical engineering.
In a real engineering, process there are things to check, verification, and known facts which can be double checked against the standing design. The design checked against the implementation.
Building a bridge is a much easier process then say writting a secure OS UNIX clone. It's easier in the sense, that it's been done so many repeatable times since the Romans. The understanding of the underlying structures of a bridge are well know. All intereactions between the people on the bridge, and the bridge are known (hard to calculate them all, but reasonable well known). Recently (in the last 50 years), we learned a new trick about bridges. That the cross sectional area, and wind can interact with forces that will tear down a bridge. Okay, that as far as I know was the last major mistake that was a complete unknown in bridge building. I believe it happened sometime in the 50s. You know right after the first couple of computers we're built. We don't know anything writting software in comparison to bridge building.
Building a Secure UNIX or UNIX clone has yet to be done once. The understanding of all the various layers of software spans when writting an GUI application all the way down to the quantum effects that happen in silicon, I believe they claim 12-15 orders of magnitude of understanding. That's a lot, possibly more then any other intellectual endeavor ever undertaken.
About the only places that can stand up and say, they follow an Engineering process are places that are SEI certified Level 5. They have a repeatable, measurable process by which they do things. That starts to sound like Engineering. Real Engineering is very hard, very tedious, and very boring. Most code jockeys I know, couldn't do it. It'd drive them nuts. You've got absolutely no right to be called an Engineer on an off the shelf software application. If you write software for a company that foists on you a horrible, gut renching process, of checks, double checks, that involves throwing away everything that doesn't meet their excating standards, now you talking about it. Where every single index is documented to not be possible to overflow the array, that's Engineering. I've never seen anybody ever do it, but if it we're Engineering, it would have to be done. Even after all that, you still have to be working in an area where what your doing is extremely well understood, and has been done lots of times before. Where all interactions between every module is well researched, and well understood. Where all the compenents have well defined qualities, that react in a statistically predictable manner in all situations.
Have you considered what solar flares would do to your software? Do you have a fault tolerant memory storage scheme to account for the bit flips that will occur because of it? Do you use an operating system, and do you understand all of interactions between the various parts? Have you documented why everything works the way it does? Do you document every single change with a full risk analysis of why it's being done, and how it only improves the reliability of the system. People in Engineering do that. People who worry about stuff like that, are Engineers. It's not that Engineer's do
-- Support Ometz le-Serev.
Speaking of that, does anyone find it
strange that a person appointed to his job
by a court of people appointed to their
jobs is going to be the deliverer of
Democracy around the world?
Context: I'm in my 4th year of Electrical and Computer Engineering at a Canadian university.
As I am getting towards the end of my degree and I'm getting ready to head out into the big world and work, we've started to be taught several ethics courses. Additionally, I have recently received my iron ring - a symbolic (and secret!) ceremony that affirms my commitment to public safety. Through this, I have been picking up the subtleties of a professional designation.
A Professional Engineer, like a Professional Doctor, Nurse, Lawyer, etc., has a deal of responsibility to the public at large. The privilege of being able to build large buildings, for example, comes at the cost of being responsible that the building doesn't fall. Accordingly, Professionals have professional bodies that they are accountable to above and beyond their responsibilities as a normal citizen. The laws are also much harsher on a professional when they don't act in a professional manner.
My main issue with software developers using the title "Engineer" is that the software development industry at large doesn't seem to adhere to the professional conduct demanded of a professional. Just take a look at the standard EULA as an example - imagine if the designers of bridges did a similar thing? While I have no qualms about the software developer "engineering" in the sense of creating, I wouldn't call a first aider a "doctor", despite the fact they do the same thing.
From my perspective, the ideal solution would be to integrate the software developing business into the Engineering profession. In addition to having a professional title, this would be a healthy step towards maturity of an industry that is plagued by antitrust, among other things. This could help bring respect and dignity to the software developer - in addition to more money - which I believe is what people really want.
Anyways, until such time as this happens, I'm not comfortable with the use of "Engineer" by software developers. In Canada, the term "Engineer" is actually copyrighted to the Canadian Council of Professional Engineers - a few years ago, there was actually a conflict with a University that provided an unaccredited course called "Software Engineering", claiming academic freedom. It resulted in a mess, including the temporary withdrawal of accreditation to the engineering programs at the university.
Which was a bit counter-productive.
-legolas
How many software engineers are willing to work as "associates" for low wages for years while the senior partners take all the credit and all the money in hopes of eventually being granted the recommendation they must have in order to get a license?
And that's precisely one of the problems with software "engineers". You have to actually go out and earn prestige and respect. You aren't handed that along with your diploma.
What do you think doctors and lawyers do after graduation?
He is a scientist. I earned my BS in comptuer science, and worked my butt of doing it. Does that give me the right to the term engineer? No, it makes me a scientist.
scientist:
n : a person with advanced knowledge of one of more sciences [syn: man of science]
I earned the right to refer to myself as a scientist. There is nothing ignoble about the term scientist. Although our discipline often overlaps with engineering disciplines (computer engineering) we are not engineers. A chemist (also a scientist obviously) may spend his life working on advanced computer models, but he does not claim to be an engineer and has no claim to the title. As computer scientist, neither do we.
The purpose of school is two fold:
1. to teach
2. to evaluate
I think the biggest failing in education as it is currently practiced is that these two things are tied too closely together. There are many highly capable people who are actively prevented from contributing to society because of this, resulting in an enormous waste of human potential. Different people learn in different ways, and even for those who do learn best in a formal way, some subjects don't lend themselves well to that.
I'd really like to see the existence and accreditation of an institution that does not teach, but only evaluates. This way, it matters not whether you studied in a classroom, or hired private tutoring, or took self-moderated self-study courses, or just read a lot out of personal curiosity, or just got your hands on and figured it out for yourself.
And I'm talking about more than just simple testing, though there would likely be some of that. For such a thing to be credible, it would have to be very rigorous and closely monitored. Personally, I think it should be so rigorous as to be of greater credibility than that of traditional degrees.
In the interest of full disclosure, I too am a high school drop out with a fairly high-tech career.
Now scientists and mathemeticians work with very complex systems all the time. However, most if not all of it is theoretical.
Engineers take that theory and his own experience to build a useful system. This system has to withstand the rigors of the real world. It also has to be done on time, on budget, and actually do its job without killing someone.
A lot of "scientific" achievments in the past century are actually engineering achievments.
Now the point I am trying to make is that programmers are always defining new things. Engineers can't responsibly design systems around parts with unknown properties.
Engineering and most programming endeavors are mutually exclusive. A good engineer can't afford to have an unknown in the process.
Look at the space shuttle. That was real software engineering. They designed the whole system, to do a specific task, within a specific set of parameters. Yes there was programming involved, but in this case the software was only a highly flexible control system in an aerodynamics problem.
Could some 14 year old given enough time and caffiene do the same thing? Probably. Would I trust that software with my life and a 4 billion dollar spacecraft? No. Odds are the kid would not have a grasp of the differential equations, Laplace transforms... ah... engineering school equations leave me now...
"Learning is not compulsory... neither is survival."
--Dr.W.Edwards Deming
Maybe if the code monkeys were personally financially liable for their (numerous and varied) screwups they'd appreciate test analysts and testers a bit more.
I would imagine programmers would be more likely to accept personal liability if management and marketing didn't force projects to go out before they were ready.
"They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety."
I don't even know why programmers care so much about being compared to engineers, it's not like I give a shit what my title is.
What does this have to do with Programmers being Engineers?
If we are on the topic though, would you care to explain how you see any correlation between the manner by which one is elected and his/her intentions? Undeniably your question implicitly claims that W because of the manner by which he took office makes him less likely to "be the deliverer of Democracy" than if he were to have won by a landslide.
Whether you like it or not, the fact is that the process of the post-election events entirely abided to the US Constitution. Furthermore, even after the court case it was clearly determined that Bush had received more votes in Florida. So what exactly are you trying to dispute? Have you heard of the US Constitution's guarantee of equal protection? Perhaps you should become informed before asking mindless questions.
Troll.
"a person appointed to his job
by a court of people appointed to their
jobs"
Um... which court was that? The US Supreme Court, as always, chose between "you go fix it" and "not our problem" (which is what they've always done since 1789 or so). The people they told to "fix it" were the democratically elected members of the Florida Supreme Court, interpreting Florida laws written and ratified by democratically elected state legislators and signed into law by a democratically elected governor. The issue in question were the election results that a democratically elected secretary of state signed off on.
And even then there was very little the US Supreme Court could have done. All they could do is say whether or not what the State of Florida was doing violated parts of the Fourteenth Amendment or not. Otherwise, the US Constitution clearly spells out that the Florida Legislature can pick its memebers of the Electoral College however it damned well pleases.
And don't forget that appointments to all federal courts have to be cleared by a democratically elected Congress, which also has the power to remove them from their bench.
It's a simple matter that in most areas, engineers are liable (criminally liable in cases) for a failure of anything they've signed off on.
Would any MCSEs be willing to be liable for problems in their code? Open to lawsuits for failures, regardless of any EULAs?
There's a reason for laws like this, and that's because of the legal responsibility and liability that comes with being an practicing engineer.
Dark Nexus
"Sanity is calming, but madness is more interesting."
Seems to me (a EE from Purdue) that the only thing that makes engineering engineering as opposed to arts or crafts is the use of metrics. That is, you're s'posed to be able to design something to fit within a certain set of constraints, and have a way to objectively measure how well you've done. It seems to me that a lot of software is built by artisans, who "just build the damn thing" without really worrying about what constraints may exist in the problem domain. That's certainly how I seem to write my code... Most of these software artisans wouldn't be able to do a comparison with another piece of software that purports to solve the same design problem without a side-by-side benchmark after the code is written. Real engineers know before build-time how well their design compares to others.
:).
I guess it's time for me to go re-read some algorithm books
engineering n The application of scientific and mathematical principles to practical ends such as the design, manufacture, and operation of efficient and economical structures, machines, processes, and systems.
By that definition, a software developer is quite frequently an "engineer".
The real debate I'm reading here is whether you need an accredited certificate to be titled an "engineer".
I feel no compunction about calling myself a "network software engineer". I perform acts of engineering daily - co-ordinating thousands of bits of data on multiple clusters of computers in a scale and scope comprising thousands or (potentially) hundreds of thousands of people.
Yet, I do not have any official-looking pieces of paper saying "engineer". So, I am not an accredited engineer, but that doesn't stop me from engineering!
I have no problem with your religion until you decide it's reason to deprive others of the truth.
This would certainly mean the end of crappy software. In fact, it would mean the end of ALL software. We can't get our employers to pay us to do it properly now -- you think that's gonna change just because your career is on the line?
Software doesn't suck because software engineers are bad. Well, okay, it does, but that's not the only reason. The primary reason that software sucks is that nobody is willing to pay us for the amount of time it actually takes to do something. When you take an 18 month schedule and compress it down to 6, remove all QA, and THEN add all sorts of additional requirements at the last minute what do you expect? I doubt if "real" engineers work that way, why should we?
Gee, Cisco used to think I was an "Software Engineer" and paid me 135k a
year and I only have a masters degree in fine art. (Performance art and Photography
and a few things in between) On the other hand when I was getting that MFA
I built a camera from billitt aluminim and a electric guitar from wood scraps.
I always thought that programming was as much an art dicipline or perhaps
an exercise in linguistics or theater ( see Brenda
Laurel )
Whether you like it or not, the fact is that the process of the post-election events entirely abided to the US Constitution
... except for the fact that disputed elections are to be decided by Congress, not the Supreme Court. This was an extreme derailment of the Constitutional doctrine.
...
Hmm
OK, so I bit the troll bait. Couldn't resist. It was such an obvious morsel
"A generation which ignores history has no past and no future." -- Robert Heinlein
Congratulations, your post has won the highest rating to bullcrap ratio I think I have seen on Slashdot yet. That is quite an achievement...
..must not feed the trolls, must not feed the trolls...
I have entertained the thought that you are a troll, and that responding to you would serve no purpose. That +5 moderation, however, shows a giant gaping void of ignorance in at least a subset of Slashdot moderators, and that, at least, should be addressed.
Now, I grew up in a household of "big engineering" so I'm a bit biased, but you are so wrong it isn't even funny.
points:
1. No mathematics in engineering? I'm speechless. Flabbergasted... Stunned. What do you think engineers use, iambic pentameter?
2. Science. Right, no science in engineering, and a whole lot of science in programming. Why, engineers never use physics, say, or chemistry. Alot less than that guy over there working on opitimizing that printer driver.
3. Art. The Eiffel Tower, the Golden Gate bride, the Hoover dam.
or
Windows ME.
Many engineers I have known have decades of programming experience, on bare metal, Fortran, and C++. Who do you think developed the field in the first place? That programming sprang fully formed from the forehead of Zues, like Athena?
Engineering applies Mathematics while Computer Science (and to some extent programming) is (the science of) mathematics.
2. Science. Right, no science in engineering, and a whole lot of science in programming. Why, engineers never use physics, say, or chemistry. Alot less than that guy over there working on opitimizing that printer driver.
Again, engineering applies science, whereas Computer Science is science. Arguably, programming is often not science in this definition, but often it is.
Many engineers I have known have decades of programming experience, on bare metal, Fortran, and C++. Who do you think developed the field in the first place?
Mathematicians, mainly.
"Many engineers I have known have decades of programming experience, on bare metal, Fortran, and C++."
Then they are not engineers, they have distinguished themselves as being much more than that, even in your mind. They are programmers, obviously a cut above their engineer peers, which include you, since you did not say "I am an engineer but I also program C, Fortran, etc.".
The reality is, John Carmack, one the finest programmers alive, has gotten further as an aerospace engineer in two years than some engineers get during an entire career.
I know an aerospace engineer whose claim to fame, the pinnacle of his career, was to design the rear lavatory on the 737.
Not every engineer designs the Eiffel tower.
Not every programmer wrote the Linux kernel...hmm...
But where the Eiffel tower was designed by one man, the Linux kernel required the labor of thousands to get where it is today.
300 people built the Eiffel tower in 2 years and yes, it is true art, useless, it does nothing but make a good backdrop for postcards.
The Linux kernel on the other hand is quite useful, required the brilliant output from thousands of esteemed programmers as opposed to 300 ignorant laborers, is elegant and much more worthy of your inspired praise.
Don't worry, this is a parody of the trolls you were hoping not to feed. It's funny, laugh.
If voting were effective, it would be illegal by now.
>> I Must be an engineer because Microsoft and Novell both say so! Take that Texas.
:)
The Microsoft certification should not give anyone the right to call himself an engineer. It just certifies that the person have learned a bunch of answers for a bunch of predefined questions (nothing personal, you may know your stuff).
There is nothing about experience, applied knowledge or responsibility stated. I know (hehe) some paper MCSE-s that do not know where is the PC power switch. Their motto is "I can learn that later in the company that is going to hire me because of my MCSE certification". I mean the people REALLY have never used a PC outside of Word/IE (they need to type their resume after all so that it looks nice
The Novell tests are probably better.
A mechanical engineer normally should pass strict tests, produce something working (diploma work) and generally prove that he knows how to do his work. When practicing, he TAKES RESPONSIBILITY for the things he created. If a plane falls down, the persons that designed it, produced it and certified it for flying are held responsible with consequences for them if an design/production/certification error was found.
If a software program crashes because of design error and I lose money or reputation because of this, usually no one cares. The software developer may just hide behind the EULA and that's it. It's a wild-wild-west.
So, enginner is a title that needs to be earned, so that the people know on who they may rely, otherwise it loses its value. It is the same as MD and PhD.
Just remember, if legislation starts declaring programmers as engineers, then the next step will be requiring programmers to get licensed. No more programming jobs w/o local union approval too. No more coding at home and making some $$$ from it.
Various unions and government agencies have been trying for years to get programmers declared engineers. That means more revenue for them if they succeed and less job enjoyment for us IMO.