Professional Engineer (P.E.) is an engineer licensed to offer engineering services to the public. In the US, the P.E. process is controlled by state licensing boards. P.E. got it's start from a number of high-profile civil & structural engineering failures (i.e., Bridges). If you want to build a house with strange custom trusses, you can expect the county building department to require a P.E. structural engineer's stamp on the plans. Generally, requirements are:
- Earn a BS degree in an engineering discipline from an AbEt accredited school.
- Pass the EIT (Engineer In Training) test. EIT is a general review of engineering principles (statics, dynamics, electrical, etc').
- Spend 4 years at EIT status, working under the guidance of a ProfessionalEngineer.
- After 4 years, take the final test which includes a discipline specific section.
To date there are no up and running software PE options at any US state. A couple of states (VT ??? & TX ???) have been looking into a SoftwareEngineering
In many states companies that have the term engineer/engineering in their title or offer engineering service to the public are required to have a P.E. on staff. (Is this limited to companies, in particular sole proprietorships or partnerships, whose job it is to offer engineering services to the public? I can think of quite a few companies whose business it is to design, manufacture, market, and sell various products, and who don't offer engineering services to the public, which do contain "Engineering" in the name.) It is quite proper for a non-P.E. engineer to offer electronic "design services" or programming services to the public.
There is also quite a controversy in Canada about the use of the name "engineer" with respect to software and other computing disciplines. Various ProfessionalEngineer associations are trying to force the computing industry to stop using such terms as "SoftwareEngineer" on the grounds that only licensed ProfessionalEngineers can use the name "engineer". Needless to say, the computing industry types aren't complying.
I haven't heard of anyone taking action against "software engineers" for use of the term; at least not here in the UnitedStates
. I have heard of engineering boards going against the occasional janitor who calls themselves a "custodial engineer", which is just plain silly. Nobody confuses custodial work with engineering, after all. (And what about railroad and ship's engineers, whose job it is to operate and maintain engines
? That's the original meaning of the term "engineer". It's we PencilNeckedGeeks?
who have hijacked the word, after all...) -- ScottJohnson
While you can find many opinions on this wiki against the ProfessionalEngineer
process I would argue that there are solid reasons for developing a software P.E. It is hard to find a life/safety critical product that does not involve software: buildings are built from CAD drawings, fire alarm systems have MicroProcessors?
, even a purely mechanical product such as a ladder is built from parts that are tracked by an inventory system. While software engineering is still evolving, the implications of software failure can extend far beyond the boundaries of software. Having properly trained and licensed engineers in position to understand the implications of a failure is vital to delivering safe products. It is one thing for a programmer to deliver a broken MP3 player because they failed to anticipate a change in FLASH interface, it is quite another to deliver a radiation therapy system that kills patients because the programmer failed to anticipate unusual key press combination from the keyboard. Engineering is not just about the technical details of your speciality, it is also about taking a broader responsibility for your work. If watch a structural engineer, they will design a part so that it can possibly fail and then they will design the rest of they system to handle when that part fails. Even an inventory system could kill. If the wrong grade aluminum stock were delivered to an assembly line it could produce a faulty ladder. For all of these reasons, SoftwareEngineer
s need a fully broad engineering education and the support of a professional license. Not every programmer needs to be a P.E., even in civil engineering shops not everyone ha their P.E. -- ScottElliott
I don't think anyone believes it would be a bad thing to have a real P.E. for software. There is real disagreement as to whether or not that is actually possible with today's state of understanding. Some people believe that having a half-baked P.E. today is worse than none at all...
I cannot estimate if the license of an Engineer implies safety and correctness of a building or a bridge. Unfortunately I can absolutely assure you that a scientific degree of a programmer (like Bachelor, Master or Ph.D in Computer Science) has absolutely no relationship to safety and correctness of the source code. At least this is the situation in Germany and I strongly doubt it's different in other countries.
I met a lot of people, spoke with them about software, concepts and development; their own experience and observations. I also gathered a lot of 'data' on my own. All the gathered insights unambiguously show that the higher the scientific degree of a programmer, the higher the probability he has no skills in programming.
The situation is even worse than this. Take a skilled programmer and let her write a program taking as much time as she thinks she needs and using all the tools she thinks she needs. You think you are safe using a device with such a program? Wrong. A skilled programmer can write a good source code -- a source code that has high internal quality -- but there is no way the programmer can ensure her program is safe and correct in all kinds of situations.
Think of a building or a bridge. You cannot turn it upside down, you cannot exchange the ground below it, you cannot change the laws of the nature around it. But you can do all this to the software! And most people (users) actually do. Not just users, there are special jobs in the industry to 'optimize' the gain-cost rate of a newly developed device. Some 'clever' person (typically with Ph.D degree and double to triple salary compared to the programmer) takes such a newly developed device, looks into the price list and checks other vendors. Unsurprisingly enough she finds a vendor who offers technically 'the same' hardware for half the price. So the device components are replaced by cheaper ones and fulfill 'the same' technical requirements. Conclusion: the unchanged program will perform in 'the same' way on the 'optimized' hardware, so the device is released on the market. Are any of you still wondering why some seemingly simple devices in your household don't quite do what they are supposed to do?
This is why the science about software quality assurance exists (if you are not familiar with QualityAssurance
, you can read some long texts about it, but I actually mean the original meaning of these words not the term associated with it). However all these fancy theories go, it is not the programmer who ensures the safety and correctness of a program, it is the tester (even if programmers occasionally forced to be a tester). This is probably why we use the term software development instead of software programming.
And there is one more issue about the software. If you build a building or a bridge using waste materials, if the bridge falls together, or if it is not connected to the streets, people will notice it and complain. Furthermore they will not pay the money and they will force the architect to stay below it when the legion crosses the bridge for the first time. It is totally different in the software world. You can use waste materials, deliver the broken program and even not care about the infrastructure. Your customers will not notice it.
"But wait" - you will say - "the moment a device kills or hurts a human, we've got the evidence! The device is not safe and/or not correct". Theoretically Yes, practically No. Because lawyers come up with arguments like "How do you define safety and correctness in the first place?" And there are a lot of other tricks and measures that are totally legal and suitable enough to absolve the device and the programmer.
"But at least we take the device from the market" - you say. Yes, if you're lucky enough. If the device is profitable enough, you won't even be able to take it down after it evidently kills or hurts people.
"But at least we take the unprofitable devices from market" - you hope? Not even so. In German there are a lot of jokes about how to ride a dead horse, but unfortunately they seem not to be widespread in English.
One more funny aspect is the antipathy of the software towards the laws of economy. If you buy a bridge or a building and notice it is broken or just bad, you will look for another vendor or at least another model/type of a building next time you need one. If you buy a bridge or a building and notice it is quite good and well working, you will ask the same vendor (probably for the same model/type) next time you need a bridge or a building. See the bridge building history of New York.
However, when it comes to the software human's sense of estimation sucks. If you buy a program (any kind of software actually) and notice it is broken or just bad, you will go to the same vendor and buy more of it: in form of updates (bug fixes), service packs and maintenance. If you buy a program and notice it is quite good and well working, you will never visit the vendor again and buy the program again. Really, why should you? You can copy the program or just use it multiple times on different places and for different purposes. If it works, it works.
"But wait" - you want to say - "the maintenance costs and further development costs are carried by the company that has released the program. So they cannot make profit out of it. And eventually the safe and correct programs will win and the companies producing safe and correct programs will prevail." Well, if you have managed to read the previous sentences without even smirking, there is something wrong with you. I suggest you visit a doctor for your own good. Seriously, everybody who works occasionally on PC made already the experience that the bad programs are the real predators in the software universe. Not yet convinced? What is the best program that you have ever used? Now think of two or three more programs that you found good. How often do you use these? How much did you pay? How often did you buy another copy of these? Now think of a worst program you have ever used. Think of two or three more bad programs. How often do you use these? How much did you pay and how often do you buy 'yet-another-copy' of these? By 'you' I not only mean you as the person, but also you as 'your company', 'your employer' and other 'payers'. Do you still disagree, if I say "bad programs prevail"?
Well it was quit a long chain of arguments, but I hope you see the significant difference between bridges and programs.
I do not care if someone tries to establish an official quality/qualifying seal for a Programmer that can be used as a license. I strongly believe such an intent is damned to fail big way for the same reasons people cannot distinguish between good and bad program/software. You do not need a license as P.E. or Architect or whatever to see whether the bridge is broken or not. But you must be a skilled programmer to understand whether the source code fulfills particular quality requirements or not, whether the programming concepts are properly carried out or not (some of these called design patterns similar to the design patterns of bridge building). And there is no skill to determine whether the program is broken or not. Once the device explodes for no reason, you got a hint there is something wrong, but you have no real chances to ensure your program/software won't make the device explode. And I skip the topic about viruses and industrial sabotage on this place.
Yes, there is Software QualityAssurance
. Yes, there are Model-*** theories and approaches. Yes, there are several kinds of Formal Verification. But it's all nothing but a painkillers that don't treat the symptoms.
In addition to all the mess, the high education system totally fails to ensure any kind of quality. I can definitely speak only about computer science education in Germany, but as far as I have looked into other disciplines and as much as I have heard from professors and students, it is all the same wherever you look. -- SergejPauls