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?"
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
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...
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.)
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.
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
No offense, man, but engineers take way more shit than programmers. For the record, I am not an engineer or an engineering student, I am a CS student (aka programmer some of the time).
My former roommate and good friend is an engineering student, and their program is way harder than anything I have to do. I'm not sure if you knew this or not, but in order for a University to teach (accredited) engineering, they have to have a certain (read: tough) curriculum, which is not true for CS at all.
While I'm watching TV he's up to his eyeballs in homework. Engineering not only teaches you the science of things, it teaches you to have an awesome work ethic. I would never call myself an engineer, simply because an engineer goes through a heck of a lot more than me. I have tremendous respect for people who make it through that program.
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
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
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."
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 )
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?