Should Programmers Be Certified?
An anonymous reader wrote in to send us
For Coders, a Code of Conduct (from
the NYT so free registration is required). It says that
an engineer needs a license to work on a bridge, but
programmers work unlicensed all the time. What do you
think?
What we really need in this country (USA) and others, is a software lemon law that provides customers with remedy and legal recourse against software vendors who sell buggy and un-QA'ed software that doesn't function correctly as marketed/advertised. Such a law should simply state one thing: if you sell software or licenses for software for money, then there must be a performance guarantee that the software can perform exactly as it claims to do. If it fails to do so, then full refunds are in order, as well as the possibility for civil litigation recovery of punitive and consequental damages compensation to the jilted customer, just like as with any other product sold for money. If your software is given away for free, only then can you be legally immune from such performance guarantees and the filing of lawsuits against you for non-performance of your software.
>> What other professional field allows people to
>> work without licenses?
>>
>> Architects? No.
>> Doctors? No.
>> Laywers? No.
>> Accountants? No.
>> Stock brokers? No.
>> Real estate agents? No.
Professional Athletes? Yes.
Jockeys for Horse Racing? Yes.
Sales People? Yes.
CEOs of Companies? Yes.
Chefs? Yes.
You get my point. There are just as many
unlicensed professionals as there are licensed
(in terms of fields). I believe that licensing
is a crutch used by many to show that "they
must be good - they have the license!" attitude.
They try to use the stigma of using non-licensed
professional is foolish. Now, can you imagine
any five-star restaurant having such an attitude?
Don't eat at the Palm! They're chefs are unlicensed!
The point of licensing is exclusivity. Period.
A talented software developer will be known
whether he has a license or not. If during the
course of interviewing a potential candidate
you cannot determine his/her skill level - then
maybe they need assistance in evaluating talent
for their hiring purposes.
Sorry, wandered a
bit there. Getting back to the exclusivity issue.
If the license was really based on talent, then
why do doctors and lawyers need different ones
for different states? Shouldn't the general one
(say the degree conferred by the accredited
university) suffice nation wide? Some may argue
well, the laws are different in differing states.
Fine, but then the license is just an exam to see
if you know the difference in the laws, not whether you're a talented lawyer. Also, this would not hold for a medical practice - I believe the ability to tell the symptoms of a cold are the same for all states... Thus, obtaining a license for a particular state equates to becoming a member of the good-ol boys club - exclusivity...
I firmly believe that licensing software developers will lead to such a situation - besides giving managers a means to point fingers and threaten jobs... Also, HR will then use it to
initially weed out candidates without first
reviewing the resume for relevant work experience.
If the shortage of talented software professionals is as dire as all the news agencies are reporting, then this seems like a really silly practice to me.
Finally, I firmly believe that licensing only means (and I lump certification into this category) that you were able to pass the test - it in no way conveys to me that the individual has the ability to write good software.
peace. JOe...
Licensing and certification would not solve these problems. The problem is more fundamental.
:), but I would not be comfortably with that responsibility, and could not in good conscience accept it. At least not without a hundred other programmers whom I respected reviewing my every line.
How do you verify a program as "bug-free"? Last I looked, software verification was still charitably called a black art. How do you prove that the nuclear power plant core thermal regulator software you just wrote won't fail because of some obscure overflow condition in a microcontroller you know nothing about? Or guarantee that an operating sytem will never crash?
Computers and programs are huge state machines, nondeterministic finite automata, with hundreds, thousands, millions+ of states. The larger the program, the more states and error conditions you have to check. First, prove to me that your 1,000 line program is correct. Then prove that the 10,000 lines of libraries it uses are correct. Then prove that the operating system it runs on is correct. Then prove that the underlying hardware is correct.
Programming is not bridge building. You can take your knowledge of statics, dynamics, strength of materials, etc. to compute that a bridge is sound. Point me to something comparable in computer science to will do the same for a program (at least in O(N) time).
Since we can't prove that a program is correct, then all we have left is peer review. (A bunch of people standing around and saying "Yep, that's looks right".) I suppose that is in essence what doctors do. ("According to JAMA, this is the accepted way to treat this condition"....)
I don't think licensing is the answer. While I agree that there are certainly a good number of "local music dropouts" who pass themselves as programmers, licensing/certification hardly seems the tool to seperate the wheat from the chaff. Higher standards amongst ourselves, and with our employers, certainly "feels" like a better approach.
I personally would never take a coding a assignment where the potential for loss of life was high if the program failed at some crucial time. I feel I'm a good programmer (don't we all
But hey, isn't that Open Source?
Joe
jacobson@pobox.com
Now some may object that this is isn't good enough. Well, if that's true, I'd have to ask, "Why?" Let's make it good enough. A degree in the field of computer science, computer engineering or electrical engineering should say something. If it doesn't, it needs to be fixed.
If companies are going to hire "local music dropouts," that's their problem. Don't go blaming the engineers who have an advanced degree in the field.
Furthermore, the pushing out of the older generation of programmers is only going to make things worse. IMHO, these are the people you need the most since they have the experience of getting products out the door (on time) and have a wealth of practical experience to draw on. This needs to be passed on to the younger crowd.
I've always found the whole idea of licensed programmers absurd. A combination of advanced education and on-the-job mentoring and experience is much more effective than passing a silly exam. Corporations should be responsible enough to conduct regular reviews of their employees and address any problems that crop up.
Speaking from an entirely biased viewpoint, I have no desire to see myself become any less mobile in this field because of certification restrictions.
I also have no desire to fund another bloated, useless bureaucracy.
While there are a few core skillsets that have remained constant in this field, too much changes too quickly for any of these silly tests to remain relevant.
No, No, NO!.
as what Im not sure
the question here is... who makes the test... who decides what "good programming practices" are.
I dont know about you, but I realy dont want to see a world where everyone writes code the same way... its unproductive and stifles creativity and innovation. (esp if everyone wrote code like MS:)
on the otherhand, if I had faith that it could be done right it would not be so bad...
the most important thing to remember though is that quaility of code does not come from the skill of the programmer, everyone makes mistakes (hey, even Mel had a bug in his code, what make you so special) quality code comes from a good process of design implementation and testing, including CODE REVIEWS!
I dont know about you, but I certainly wouldnt want to write code for a life support system and not have someone review my work heavily before it was put into use.
perhaps it would be better to focus on certifying companies (or project leaders) in this way... focusing on process... of course certification is only necessary for "important" progects, ie life and death... cases where liability is a serious issue (much like the engineering profession)
"In America, first you get the sugar, then you get the power, then you get the women..." -H. Simpson
First off, bridge building doesn't change all that much. The basic structure and design of the highway bridge over the creek on I-80 is more or less the same one the romans knew.
Second, certification is no measure of competence, it is simply a measure of how well they take a test. For example, simply because you pass the bar or get a license does not automatically make you a good lawyer or doctor. So- how do we know if a lawyer or doctor is qualified to continue practicing? Peer review- which (while welcomed by the open-source community) is against the fundamental principal of proprietary software. Do you really think Microsoft will open it's code simply to allow us to judge the competancy of their programmers?
Third, and most important, it's trying to solve the wrong problem. At least as many software problems are the fault of the software managers as it is the software writers. Impossible deadlines, being forced to used an unworkable technology, a constantly changing set of requirements, etc. I'd recommend a read of the book "Antipatterns" for a sample of the ways Management can screw up a project (there are also examples of how the writers can screw it up).
The solution is nowhere near as simple as this- no more than we can stop violence in our highschools by simply banning doom. Instead, a completely different approach to software is needed. One in which quality is prized above all else, in which the code is peer-reviewed and not released before it's ready (and I don't care when the salesperson promised the customer it'll ship- he shouldn't have been promising that anyways!). One like open source software.
Public - Software engineers shall act consistently with the public interest.
What nonsense. Who decides what is the public interest? Does this mean no coders could write a bulk mortgage foreclosure system? No more missile guidance software?
I've generally found that such "ideas" for professional organisations are reasonably explained by:
Those who can, do. Those who can't, administrate.
This sig left unintentionally blank.
The next Cmdr Taco duplicate will be ready soon, but subscribers can beat the rush and see it early!
If, in a free market, there is a demand for quality in software development, then surely organizations will arise that offer various certification programs.
Netware and Microsoft have been doing this for years.
So, certification would be inevitable: it's just a question of whether it matters to a particular customer.
Licensing, on the other hand is a beast of a different colour. Licensing means that you can't work without a license. This has no place in a free market, and is usually advocated by those that have a vested interest in controlling the size of the market: unions, doctors, and lawyers do this, with the necessary government 'help'.
The argument usually goes something like this: "With licensing, we can ensure the level of quality you're gonna get from someone in this profession". Of course, this is bogus, since all it guarantees is that a licensed programmer is, well, licensed. The enticement is that a potential employer or contractor does not have to evaluate skills for themselves. Who controls the licensing board, and what is in its best interest?
As with all things that depend on government force for enforcement, such a scheme is not likely to work well: good programmers that can't afford to pay the licensing fees won't get licensed, and bad programmers can lobby to keep good ones unlicensed. The production of free software might even be outlawed (much as practicing medicine without a license is).
With certification, the certifying board has to compete with other certifying boards and remove any possible question of inpropriety, lest it's reputation suffer.
Traditionally, certification has come from Universities (originally for philosophers and medical doctors), trade schools and apprentice programs, and more recently, equipment manufacturers (the guy who works on my car is "certified" by the auto maker to know what he's doing).
We have no need for licensing in this business.
In Liberty, Rene
Certification for programmers is a bit rediculeous. Is html code or data? What languages will the certification be in? Different certification for each language? What libraries? MFC? OWL? or ANSI? How about OS? What data structures? Will code formating be in it? Who will administer it?
I can just see this mess now. If certification for coder will become mendatory.. I can just see the OSS movement taking off because of all the people who love to code but may not be able to afford the rediculeous cost of geting certefied.
Ex-Nt-User
"The people who code for the radar systems in airports, for example, do you want these people to walk in with bare minimum of knowledge and write faulty code?"
Software along the lines of an airport radar controller is going to be contracted out as part of a total system design (if the contracting authority has any competence at all). Hardware, software, backup systems, performance specs, acceptance criteria, etc. are all going to be part of a single project, and the ultimate documents for that project are going to be signed off by a registered Professional Engineer (PE).
The PE can be held individually liable for his work, so he is going to need indemnification by his employer. His employer in turn will lay off that risk to an insurance company, and the insurance company will demand audits, proof of competence, demonstrated capability to carry out similar projects, etc. That's how it goes in the real world of Big Stuff.
The PE (slash project management team) probably isn't going to be able to examine every line of code, or necessarily _any_ of the code him(them)self. But you can bet he will take steps to make sure that quality and capability are there.
Even as a person on the PE track (which I am), I acknowledge that there is an element of market control / guild-ism in the process. However, before you squeeze the trigger on the flamethrower, please spend a few minutes in a good engineering library reading back issues of Scientific American from the 1870-1890 time period. Read carefully the accounts of steam boiler explosions and the death and destruction they caused for many years. Then if you have a few extra hours, scan through the "History of the ASME Boiler and Pressure Vessel Code". Those boiler explosions, and the effort that had to be undertaken to get them under control, are the direct ancestors of the PE process. And brutal, heavy-handed government regulation turned out to be the only way to bring the body count down.
Hmmm, in terms of accepting responsibility for quality of work, does that sound like any industry we know today? I am personally not advocating that the PE regulations be extended to the software world, but after rebooting Windows 95 for the 5th time today I can see why some might.
sPh
Actually it is not the qualifications of the designer that are important but the quality of the design. I really doesn't matter who produced the design, as long as it satisfies the safety standards.
For example, I can do electrical wiring in my house, but for it to be "legal" an electrical inspector has to sign it off.
Another example is in aircraft design. Many people are designing and building their own airplanes (check out http://www.eaa.org) but before they can obtain an airworthiness certificate they need to show that the airplane was built according to the standard practices, that the design was verified to be airworthy etc.
So what we need is a way to verify the quality of the code. The best way to do this today is code reviews. So open source is the way to go.
...richie - It is a good day to code.
i agree with AArthur's statements "Really, certifing programmers is a bad thing, certfing software is good.", "Reguluation is serious pain in the ass for programers, who are often free willed and libral.".
some folks here compared programmers to some other branches (building trade, ...) but i see one big problem here: i do not know what's the official definition of pragrammer but some people say it's like art too. and we can't compare pure technical branches with art. so that's why i do not agree with strict programmer' certification.
Big Red said it fine: let's certify software (i.e result of the programmer's work) ...
... and do not forget to teach little programmers basic principles of software not the latest technology gadgets.
only after doing so we can receive more good/working/correct/stable/... software.
hany
but i say that we have to certify software, not people!
hany
Having established my credentials, let me say that I have long advocated a certification process for programmers. I support it not for the benefit of employers, but for my own protection.
I have, in previous engagements, been asked to perform services that would not meet the ACM's code of ethics. From time to time, I have also needed to make project managers and sponsors aware of some unpleasant realities about their systems or proposed systems. Let me tell you, those conversations were not well received. There are still plenty of "shoot-the-messenger" organizations out there. While I felt that I was discharging my obligations as a professional, by making them aware of these potential disasters, the reaction was to ignore the situation. I was directed to continue working the planned course of action. When the inevitable train wreck occurred, the same perpetrators sought scapegoats.
If we had an accrediting body, or if I had a license, I could have taken the much stronger position: "I will not continue on this path, or I will lose my license." Would the threat of losing your license to work in your chosen field motivate you? I think it would. If you think laywers are sleazy now, imagine what they would be like without the threat of disbarrment!
I have also had the experience of working with teammates who were grossly underqualified. Unfortunately, the client did not have the capability to detect the BS artists before hiring. Thus, I would be stuck with teammates who provided a net negative to the project. If there were such a licensing program (or better still, tiered licenses: e.g., apprentice, journeyman, master) the client would have been better able to detect those who should not have been hired.
Of course, any such licensing program is perilous in many ways: technical change, anarchist revolt, enforcement, and many others. There will also be failures of the system--unqualified individuals slipping by, irregularities in the review procedure-- the same as every other professional accreditation system. By and large, however, I think we will ultimately need to adopt such a system for our own protection.
"Genius may have its limitations, but stupidity is not thus handicapped." --Elbert Hubbard (1856-1915)
If your license were at risk, would you bow to that pressure? Do you think there is no pressure to get a building up and running? Do you think that there is no pressure to get a bridge completed?
Of course, the inevitable comeback will be: "If I refuse to work the job, they'll just find some unlicensed slob to do the job." That will be true if licenses are not mandatory to work in this field. What other professional field allows people to work without licenses?
Architects? No.
Doctors? No.
Laywers? No.
Accountants? No.
Stock brokers? No.
Real estate agents? No.
All of these were once unlicensed, unregulated professions. They all banded together and instituted licesning procedures for their own protection and the protection of their chosen fields. Yes, that protection does imply protecting their own exclusivity--a necessary evil.
"Genius may have its limitations, but stupidity is not thus handicapped." --Elbert Hubbard (1856-1915)
True, technical certification is not long-lived. What we need to discuss, however, is certification of technique. You don't get certified as an OO developer or as a device-driver-writer, any more than an architect gets certified to use a cantilevered beam. You get certified as a professional who adheres to a code of ethics. You get certified as one who can judge risks, balance economic and technical concerns.
The medical profession has a credo: "First, do no harm." Have we any such guiding principles?
"Genius may have its limitations, but stupidity is not thus handicapped." --Elbert Hubbard (1856-1915)
Uhm Not quite!
I'm a practicing electronic engineer in the
computer industry. I don't have a PE, and
don't need one to pursue my career.
The poster states that passing a PE examine
GUARANTEES that the design will be fail safe.
This is demonstrably false. I can show you
any number of structural designs that have
failed, yet were designed by PE's. They didn't
fail safe either, people died.
Passing the PE examine doesn't ensure that I
am competent to do design of some nature. It
shows that I am good at taking tests on
material I only know fresh out of college.
For that matter, the PE license (and it's a
license in my state...this varies from
state to state) was only established as
a "gate-keeper" mechanism to try to ensure
some minimum level of competency. It doesn't
really achieve that either. My basic
complaint with the system is that they don't
test engineers on the fields they are going
to practice in... why does a computer design
engineer need to have a structural engineers'
understanding of statics or dynamics?
The bottom line is that this system operates
mostly because it already is an established
bureaucracy. I see no reason to extend this
system to programmers as well!
To take a different tack - a professor of
mine once defined those in the "professions"
as people who have "dangerous knowledge." I
think this is a good operating definition.
Consider - would you want me to use a knife
on you to take your appendix out - I'd be
dangerous - I don't have the requisite
training or experience to accomplish the
task. So professionals are keepers of
dangerous knowledge.
To extend this definition to the programmers'
world - are there programs that require
"dangerous knowledge." Well - there ARE
programs operating in environments that
are "life critical." There could be a
case made to extend "professional licensing"
to just these areas. Writting operating
systems to handle my game playing requirements
don't fit the requirement! Writting real-time
OS's to control a nuclear reaction might!
Even then, I don't think this is needed
or desirable because I don't think you can
test for "minimum competency." I don't think
this screening mechanism works.
Have you compiled your kernel today??
> This is akin to verifying the correctness of code > (mathematically proving that it cannot fail), an > incredably extensive and expensive process. But
> sometimes it needs to be done. An exam such as
> the Professional Engineer exam is an attempt at > making sure the people who work on these projects > that affect the public know when and how to do
> this.
If you read the license to 99% of software out thier, including free and commerical software, their is no-warrenties and guarrenttes. Most software may not be allowed to be used in Nuclear plants, and other mission critical bussiness.
Most software is licensed to you as is, and containts no warrenty what so ever.
Registration for mission critcal software is already in place, it requires special licenses between you and the company, a special certification program for any software to be certified.
Really, certifing programmers is a bad thing, certfing software is good.
Reguluation is serious pain in the ass for programers, who are often free willed and libral.
IMHO, Open Source is the only way to go to avoid large technical bugs in the future (peer presure works!)
Thanks,
AArthur
What about Hardware? Should EEs and CEs need certification? A large part of the y2k bug is hardware with not enough bits for the date. As a CE (computer engineer) I find this whole Idea a litlle disturbing. Would I have to pass both a hardware and a software test? Many people bounce from lowlevel software to hardware and back again. Do all of those people need two licences?
Auto engineers arn't required to have a licence. Neither are engineers who design medical equiptment -- however the final products from both fields must pass certain federal standards. Either product could have been designed by the mythical infinate monkey room or some gifted savant.
Would webdesigners be required to be certified? How about sys-admins? They can be responsable for very inportant data. For example the sysadmins at NSI Inc. or IRS or an Army stratigic planning system. Should they be licensed to setup a system with no holes and disabling al bugs?
I think licensing programmers 1) opens up a can of worms we don't want open (who else do we require to be licensed). 2) would eliminate free software and savant programers.
The y2k problem was caused mainly by shorted sighted management who wouldn't listen when told of problems to come. Certifying the programmers won't guarantee a better product when management still sets deadlines the programmers know can't be met without skimping on something (and that's generally testing)
development.lombardi.com
If programmers were licensed and legally responsible for the code they create, what about large scale projects? When you have several people working on an application, there is no way to say that when the pieces come together, side effects will not occur. As well, a program written for one hardware platform may have hardware specific quirks when moved to another platform (this includes moving to the next version of a chip, motherboard, etc)
I remember from my university days in my computer ethics class a discussion about this. The non-CS people in the course thought we should be licensed, but as they were shown the real uncertainty of programming and ensuring a program does what you want, they tended to back off.
Who would stake their career on a piece of software working when you cannot guarentee all other aspects of the application working as promised. Besides, can you see a company like MS getting rid of the licenses stating 'We take no responsibility for the product you are using, but we retain all rights over it.'
But I have to admit I neverer found an employer (or truthfully anybody else) who really gave a squat about the certificate, or, at my experience level (>30 years), a college degree.
Vendor-based certifications like the CNE and MCSE are just a way to bind someone to a vendor's products; after all the time and effort required to obtain and maintain such a credential, a certain unearned product loyalty emerges. Kind of like the folks who joined the WordPerfect cult back in the DOS days of PCs, or the Morse Code cult in ham radio; once you go though hell to get on the inside you develop a vested interest in it and a distorted notion of its usefulness and importance.
-=Maggie Leber=-
The distinction you make between SW architects and coders is valid, but the presumption that the field is mature enough that we can codify and teach good SW engineering is not. Sure there are a lot of best practices that we all agree should be followed, but are those practices highly conguent with the conventional wisdom of say 1989? Linus was flamed for going with a monolithic kernel, because exactly the institutional types who would oversee licensing knew that only micro kernels made any sense.
Even on more abstract points the pace of change in design methodology has been much faster than any licensing board could keep up with. Actually this is why I like the current cert exams. Nobody expects that a particular ceritification will be worth diddly in five years. They really just work to keep you moving with the field.
As a big establishment institution it is not surprising that the Times prefers to talk to officials and not people who do the work. In my experience programmers are much more quality conscious than either management or customers, who for their own good reasons are cost conscious. To certify programmers without having a "building code" to enforce higher standards would not alter the current situation, but it would remove a a lot of talent from the field. Think about it: mediocre programmers with credentials can find jobs. Lacking credentials, you won't be able to find work without some obvious talent.
I certainly wouldn't want programmers without degrees working on an important project.
Bah. A degree is a piece of paper that says 'this person shelled out a bunch of cash and occasionally sat through a class'. Absolutely nothing more. Several of the people I went to University with, (who got their degrees even,) could not program their way out of a wet paper bag that was being held open for them. They've already gone off and been given major programming jobs by people with exactly the attitude you've got, and as a result, one company went bankrupt, and another wound up losing a lot of money for the year, instead of the large profit they would have had if their programs had been done by someone with ability instead of a piece of paper. Also, the absolute best programmer I know of got pissed off with the University (both the politics involved, and the sheer volume of idiots they were churning out) and dropped out to get a job - he was doing quite well the last time I heard from him, and so were the people who hired him, without the piece of paper. What's more, his programming ability did not get improved by going to classes in University in the least. He spent the whole time bored out of his skull, playing tick-tack-toe with the rest of us who already knew the material for the day.
The ability to program isn't just suddenly aquired by sitting around near other people who have it. You've got to work at it, and actually think about what you're doing, always. Some people just can't do that, and they'll never be good programmers. One of my co-workers is a great example of this, he never bothers to check for errors along the way, he won't think about different ways of solving problems - there's only one way, and mentioning anything else gets him angry. Fortunately, I do almost all of the programming in our company. (And while I don't consider HTML to be programming, he has exactly the same problems with it as he has with C/Java/Javascript/VB/anything... and I frequently have to fix his web pages when they develop little quirks from sloppy construction.)
I see a lot of posts about MS Certification being useless, and some saying certification would expire in 5 years or so. This misses the point. When I went to school for my CS degree, most of the courses went beyond specific technology (computer languages, OS, APIs) and concentrated on a lot of theory.
...A lot of people out there are just coders, they live in their little OS or favorite computer language and hang on to it for most of their careers, others are more rounded and understand the principles no matter what the latest technology fad is currently.
Theory will not change that much (if ever). NP complete problems, finate state automata, algorithm theory, compiler theory, discrete math, general testing and engineering principles, etc. Some of this stuff could be certifiable.
But we need some method of certification just like other professional organizations do, specially for code that affects human life (radiation machines, airtraffic control, military). The certification could be based on the theory and practices of our field, not current technology. This of course would be very difficult to do (such a test), but it's worth a try if we want to advance the field.
BTW
-Flame on ! Johnny Storm, Fanstatic 4.
- sigs are for wimps.
My personal experience is that if you split programmers into three categories of compentance:
- The best
- Average
- Mediocre to bad
that you will find that #1 is dominated by self taught programmers who have a degree or diploma in something other than computer science, #2 is dominated by programmers with computer science degrees and #3 is a mixture.It's important to note that all the really good programmers that I know have a degree or diploma in SOMETHING although that something is rarely computer science. Almost all of the really good ones have taught themselves programming.
In the case of doctors or lawyers, the buyer doesn't even have the skills to make that evaluation themselves. It makes a lot of sense to license doctors or lawyers to ensure minimal competency. The cost of information in that case could be life or liberty. In other cases, society may determine that the costs of licensing are small compared to the costs of forcing everybody to evaluate professionals for themselves.
I happen to agree that for programming, we do not need licensing. But the reason is not that licensing in general is a bad idea, but that the details of the market for programming services are different. Unlike a sick person trying to find a good doctor, a manager of a software development team has both the skills and the power to evaluate candidates for programming positions.
Not every engineer needs to be a professionally licensed one. Only those whose work affects the safety of people, or is Federally funded, or has HUGE money riding on it; or those who are the final authority on the product, need to bear ultimate responsibility for their work - and these are the ones who need to be certified.
The engineers who design nuclear power plants, for example, need not be certified - because the process they are bound to follow already is - and the number of redundant checks on their work is exhaustive.
So it should be with software engineers. People whose scope has a public safety effect, great financial liability, or is tax-payer funded/government contracted, but whose work does not undergo exhaustive and redundant SQA and V&V processes; should certainly be certified.
Note: Professional engineering certification is not the same as a VBA cert, or even a CNE - though the CNE comes close. Professional certification involves sound design principles, conservative estimation methods... Much more abstract concepts than knowing the version of the tool you use.
Certification is public assurance that you are competent to bear the responsibility of the task. If the worst outcome of the failure of the task, is not "that bad" (ie no public safety compromise, no property damage, no POed taxpayers not re-electing the people that gave you the contract) than simple insurance or a disclaimer will do.
This is very hard to achieve in the software context, but I suppose that a simple analogy would be: design methodologies that include - GUARANTEED BOUNDS CHECKING, NO SIDEFFECTS, NO MEMORY LEAKS, FAILSAFE OPERATION, REDUNDANT BUT DIVERSE IMPLEMENTATION OF CRITICAL ALGORITHMS AND SYSTEMS - would qualify one for professional certification (provided these are not language specific and on the core level of the developer's understanding of his/her field).
-- What you do today will cost you a day of your life.
The License of which you speak applies to the medical and legal fields, but not engineering.
A Certification OTOH is a piece of paper that qualifies one to use a particular tool.
What we're talking about here (NYT) is a Certification of Professional Competency, not a License to practice or a Certificate of Tool Awareness, if you will.
The CN{A|E} and MSxx 'certificates' are tool awareness leaflets that mean that an employer doesn't have to worry about you not knowing how to use a particular tool. You take an MSCD and put him in a Linux environment, and you'll see what that paper is worth.
Now, the Certificate of Professional Competency is something else entirely. Any degreed engineer knows about the decomposition of forces, and can tell that a particular design simply will not stand. But a PE will have passed tests to guarantee that his/her designs will not only stand under designed load, but under a variety of additional conditions. Also, a PE's design will FAIL-SAFE, rather than in a spectaculary disastrous manner (Gallopping Girdy comes to mind).
In the context of the software industry, a Certificate of Professional Competency has nothing to do with the development tool or language. It has to do with the robustness of the conceptual design. A PSE would know implicitly what designs are suitable solutions to a particular problem. A PSE certification would give an employer the assurance that this person does good work - and is not (pardon the term) a hack.
The concept of the Professional Certification has been bastardized by companies such as Microsoft, Novel and Sun (Java Cert? PUHLEEZE!) to convince management types that the holders of these leaflets know what they're doing. All these certs mean is that someone paid, sat, and passed.
A PSE would know, through their education and certification process, why MS-Winders is rickety and why X is a monument to great design. A PSE would not ever produce code that locks the machine, leaves a gaping security hole, or shows you a blue screen of death. A PSE would do this by design, and not by a series of fixes, patches and upgrades.
A PSE would not necessarily know Java or C++ or Smalltalk, but rather OOP - inside and out. They would not necessarily know x86 or 680x0, but the crux of ASM.
PSE development, unfortunatelly, does not mesh with OSS. It requires careful review, strong-arm process and centralized development. And for some applications, this is the way to do it.
Now for the olive branch. Many developers have what it takes to be PSE (as I define it), but all PSE's would be - by definition - great developers.
Employers whose projects carry enormous responsibility, would seek out staffs of PSE's, or would put PSE's in crucial locations within the organization, as sanity-checks on the work done.
As for who is in control of the licensing board.. Well, the industry as a whole, as in all others.
-- What you do today will cost you a day of your life.
It depends on what you're hiring for. If someone is hiring a tech or an admin to run your network, then you certainly have impressive qualifications. But if someone is hiring you to design a network, or to create an entirely new networking system, then you want someone that has training and/or experience in engineering and design. There's a difference between running a system that already exists and designing a new system from the ground up without including design flaws such as the Y2K problem. Good design can be learned entirely from experience, but a good education means that you don't have to make mistakes and learn from them; you can learn from others' mistakes and avoid them entirely. Formal education isn't a complete substitute for industry experience, but it does give you a jump-start in the direction you're headed.
Your right to not believe: Americans United for Separation of Church and
Because of this fact.
It is a matter of public protection and trust in some cases. The state was getting burned on way too many projects by fly-by-night programmers.
Although it does not guarantee that licensed software engineers will "be any better," it *DOES* make them MUCH MORE ACCOUNTABLE (e.g. malpractice, etc...)!
-- Bryan "TheBS" Smith
Independent Author, Consultant and Trainer
The bridge analogy is plain daft. An engineer gets out a standard bridge, then alters it so that it is appropriate for the situation, as he was taught. The result? A lot of similar bridges, which on the whole, don't fail.
With open source, on occasion the programer can start with some standard software and modify it so that it is appropriate to the situation. This is the exception. Writing a piece of proprietry software, or software to solve as yet unexplored problems is equivalent to designing the bridge from basic principles and cannot be taught.
Teaching schemes may be able to help you get more information about making the program you write more efficient - it may give general guidelines on how to design programs. However they cannot begin to give or replace the inspiration needed to see the best way to solve a problem, to see where the design problems are or where bugs could be. Thus the scheme should fail - it is irrelevant to whether or not you are a good programmer.
Having grown up in an architect's home, I have learned first-hand that most plans are NOT drawn by licensed architects. He who holds the license draws the overall concept and interns or other junior draftsmen do the actual drawings. Which might not be a bad model - the programming manager or dept head would have to be licensed, and all the rest stay the way we like - coding.
There are different arena's one can code in. No one is going to die if their word processor crashes. In such a situation one is free to choose another word processor.
If a service is being contracted for the people from a government and human health issues are at hand then the people have a right to require that the engineer, whether he be a civil engineer or a software engineer, has proven to them that he can complete the task with safety and has the skills to show them the numbers that make it safe.
This is akin to verifying the correctness of code (mathematically proving that it cannot fail), an incredably extensive and expensive process. But sometimes it needs to be done. An exam such as the Professional Engineer exam is an attempt at making sure the people who work on these projects that affect the public know when and how to do this.
Testing code relentlessly is one thing, verifiying it's correctness is another.
They each have their arena.
Moeses
I think the bridge metaphor breaks down pretty quickly...a bridge is a physical thing that can be objectively measured. A bridge goes through several "inspections" by disinterested or hostile others. A bridge is expected to last 50 to 100 years.
:)
Anyone that ever looked at some of the theoretical implications of say proving the "correctness" of a program knows that the objective inspection is basically impossible. The others are obviously outside the realm of progrmaming. So what is the idea behind the certification/license issue?
Are we trying to prevent studip people from writing code? Then we would need to prevent all the various software warehouses from selling a copy of Visual Stupid (you pick) to any and all suits and programmer-wanna-be's. That would be a good thing for several reasons.
If the idea is to give some malcontent reason for a lawsuit, well we already have enough of them to keep the courts busy for the next several millenia.
I like the idea of the guild though...self directed, self fulfilling, able to bring along the journeyman to the level of master with a known process and a mentoring methodology...Yeah I like that idea
It seems to me there are two problems with licensing programs for software engineers, one of which is theoretical and the other practical.
... except whether or not the engineer in question can pass the exam. It says nothing about whether or not the engineer uses safe coding practices, writes programs which are reliable, or is mentally stable (and therefore won't implant dangerous easter eggs). At best, all it is going to prove is that the engineer is familiar with a particular programming idiom and/or API ... which is certainly desirable, but again, is far from sufficient --- especially when you consider that an idiom or an API, for an experienced programmer, is learnable; and it's the ability to learn that is unquantifiable, and mostly untestable.
The practical one first: what does it take to get a license? If it's just passing an examination, then that proves nothing
Then the theoretical problem: one of the things that licensing schemes _since the middle ages_ have been used for is to restrict entry into the labor market. The midieval guilds set up criteria which made it next to impossible for newcomers to get into the market without years of what was essentially slave labor, not for the purpose of protecting the midieval consumer, but for the purpose of protecting the jobs of the guild-members. The modern AMA tends to do the same thing --- schools which license too many new doctors are threatened with having their license to be schools of medicine revoked --- with officially pure motives, of course. How long would it take for a licensing scheme for software engineers, however well motivated to begin with, to degenerate in such a direction?
One of the things that is cool about the software world is that there are next to no artificial barriers: if you have sufficient skill, you can pretty much do what you want. It would not be a good thing to sacrifice that, and build up new barriers to entry into the field, even for an admittably worthwhile goal: the cure would be more of a problem than the disease was.
The main problem with software projects is not bad coders (although they are plentiful too), but bad management.
Managers have very little understanding of both how hard software development really is and the need for maintenance. Managers think in terms of "when will this software be finished". In reality, even a modest project will need probably years of maintenance to bring it to a bug free, reasonably complete state.
That's one area where free software does tend to win out - the author will often maintain it for many many years slowly ironing out the glitches. A lot of proprietry software get's slapped together. When it looks sort of like it works the coder gets shunted onto the next project. (Then he gets fed up and moves onto the next job). Meanwhile the code undergoes severe bit-rot.
As a [former] civil engineer, I am intimately acquanted with the reason that engineers are registered. This is because when a civil engineering project fails, people can get killed. This trickles down into alot of legal responsibility, but that is the heart of the matter. There should be a federal certification/registration process that identifies those capable of handling critical software applications. This would apply to safety and medical software as well as automotive, monitoring, and many others. Keep in mind that the american professional registration project does not require everyone to get registered, just the person that stamps the plans. This person can be (and usually is) employed mainly to review plans. Software kind of works this way now, with Q and A, but I would feel safer if a process was put into place for software that is responsible for my life.
This is not the greatest sig in the world, this is just a tribute.
At my school, the EEs where always whining about the use of the term "software engineer(ing)" (and it was mainly EEs, I guess because they took so many computer classes). And they also tend to have this attitude that programming is easy and anybody can do it with little education. I even heard this from managers at my old co-op job.
And guess what, at my old co-op job, the code written by engineers was abosolute crap! And the EEs that I taught were constantly whining about the workload of CS classes.
Not to pick on EEs particularly (because hey, you can't spell geek without EE!
I find the idea of requiring certification a really sad idea. I am happy to be in programming, because i enjoy doing so, and i have been doing it as a hobby since i was 9 years old (i started on a franklin ace 1000).
I came from a poor working class family, and i couldn't afford to go to college, and without that education, there are many fields that are instantly closed off to me... I would have like to have gone, but i just couldn't. I have been working as a programmer for a local company for the last 3 years. I've done embedded microcontrolled code, i've done windows UI code, i've done database coding. I have always recieved the needed training at work, (usually in the form of a textbook and some time to try stuff out).
I cringe at the idea of regulating this field, because it is one of the few remaining fields where a genuine interrest in the work (and possibly an apprenticeship) can get a job that you can support yourself and a family on. It's one of the few fields that you aren't locked out of instantly if your parents can't afford to send you to college. It's one of the few fields left where even though many people look for those with degrees, if you have enough work experience you can still have a chance.
Loosing this freedom in a blind rush to regulate would be a very sad thing.
---
Play Six Pack Man. I
Licenses and review boards, while sometimes providing necessary checks and balances, most often serve simply as 1) good old boy networks, and 2) barriers to entry. I don't believe we need either of those things in the world of software creation.
We already have certification in the "IT" industry. That's one barrier to entry, and I for one feel it has done us absolutely no good and may have even done some harm. Would things be better if coders had to pass some sort of exam to show that they knew what recusion is, how to make a flowchart, when to use global vs. local variables, and so forth before they could legally practice their craft?
How many free software projects would suffer if only licensed coders could produce publicly available software?
How many great home-brewed programs would never come to be if the people who wrote them had to first go pass the coding bar exam?
We don't need licensing in our industry. It will only serve to focus more power into the hands of large corporations, and shut down the two-guys-in-a-garage type of operations that have been pushing the frontiers for the last twenty-five years.
-Joe
The first, point, similar to that brought up by a previous poster, is that the ladder of programming difficulty/competency has many rungs, and those on lower rungs don't always realize how many rungs are still above them. It's possible to make very rapid progress learning to program, and the most visible results tend to occur at the earliest stages. So someone just learning sees that in a very short time they've learned to produce something that _looks_ 90% similar to what the pros do, and they think they've learned 90% of what there is to know about programming. They think that a license can't be worth much if they fulfilled 90% of the requirements in a few weeks, and they also have trouble accepting that there are still meaningful distinctions to be made between programmers with more experience than themselves.
;-) Basically I think this view is most commonly held by those who think they're super-studly programmers because they can hack a little JavaScript or whatever but don't do very well when real programming knowledge is required because they don't even understand what the important problems/issues in real programming are. The problem can't be with them, of course, because they're elite, so it must be that the evaluation methods are flawed. I think the real pros are more likely to accept the possibility that software engineers' levels of competence can be evaluated pretty effectively, and concentrate on different arguments against licensing or certification.
The second point is that many posters here seem to be arguing from an unstated belief that it's not possible to evaluate programmer skill in any meaningful way whatsoever. Yes, I know some are presenting arguments in different directions, but the most common seems to be "tests are meaningless". I could be polite in my response to that, but this is slashdot so why bother?
Personally, I don't much like the idea of government regulation and such, and a single written test or series of tests doesn't seem useful to evaluate someone's skills across the whole spectrum of what software engineering encompasses. However, I kind of like the idea of a "guild hall" system in which a local group of "master craftsmen" who are actually familiar with an individual's work (not just coding, but also specification, testing, scheduling, etc.) can confer journeyman status or higher, and in which the _customer_ can decide what their requirements are for involvement or engineers at some level requiring such proof of competence.
Slashdot - News for Herds. Stuff that Splatters.
In the short term, shallow view of things, certification WILL make a difference. In the long term, a certification program will only be a dreadnought of a civil program that will only impeede the progress of Computer Science, or Science and Engineering in general.
The way I see it, (And I'm just a lowly geek on the food chain) it's a pandora's box of External Govornment. And as I've illustrated in other responses to other articles, External Government tends to take away the liberties of the Individual, in order to control the individual's lack of self-government.
In otherwords. We DEFINATLY need a certification program, IF (and only IF) there is a lack of integrity in programmers, coders, etc.
Personnally, I would say no. This Y2K issue is a poor example of a lack of integrity in the Computer Science community, since it was "created" well before the PC revolution.
The article does make good points about the internal government of the individual coders, corporations, and users in it's creedo. But the enforcement of that creedo is something that does not belong in an External Sphere. It belongs in the economics of a competative environment. Good code yields good results. Bad code yields nothing, except a waste of time.
Thank you,
*Carlos gets off his soapbox, again.*
*Carlos: Exit Stage Right*
"Geeks, Where would you be without them?"
*Carlos: Exit Stage Right*
"Geeks, Where would you be without them?"
"Got Linux?"
Programming,like reading, is a SKILL; a tool to be used to get the job done. There is no reading certification to ensure that you can read/write documents properly. Programming certification is senseless. Attitude, Willingness, Learning Curve, Experience...those are some of the parameters to screen and balance in programmers.
..if ( *insert deity here* Forbid ) you should die or be maimed in such a terrible way that you could no longer keep working...could someone easily take over your work ?
I have a degree in software engineering, that doesn't automatically make me a nifty programmer, most of you could run circles around me coding...But would you get the job done?...properly?...within budgeted time and costs?
Those are the questions suits ask programmers, and that is probably WHY someone wants a certification...It's a matter of reassurance.
So...If you can convince anyone that you'll get the job done right, there's no need for certification. And if you code just for the kicks of it, stop whining, certification probably won't matter to you anyway.
I am not young enough to know everything. --Sir J.M. Barrie
Equating "coders" and construction engineers is not the right comparison. The programmer is more akin to the person pouring the concrete per a good blueprint. When I have seen software projects fail, it was traceable to ill-defined requirements, poor system engineering, or inadequate software architecture. What is needed is a better method of defining a blueprint for software.
Most schools do not teach the software lifecycle. We do not need to license people in C, C++, Java, etc. We need to train/certify people in understanding requirements and designing software that meet these requirements (instead of meeting the latest trend or technology). We also need to better define the equivalent of a blueprint for software. We should settle on a standard (e.g. UML although not necessary so o-o geared) and then train/certify people on that standard. This will not be subject to the frequent technology turnover seen for implementation. Part of training must include how to form a test plan based on the requirements. Then the output of the programmers can be "certified" against the requirements, this being the proper test for the programmer's work.
The main failure of MS Windows is to concentrate on "neat" GUI features (a "trend") instead of basic requirements like availability and reliability. There is no word-processing requirement for a help window to grow from/fade to a corner of the window.
The success of Linux starts from the focus on basic requirements. Linus starting writing what he needed, not something he thought someone might consider "neat". The last major requirement for Linux is operability, esp. ease of use for the less technical. The challenge in meeting this is that it is as not much of a requirement for the people implementing it.
Just what we need!
can we hav a cert program for garbage truck workers? "Hi I'm a certified post-consumer material hoister!" what's next? a cert program for shoveling dung? Oops I forgot, we already have a Microsoft Cert program...
Save the world! Shoot a MCSE today!
In my opinion, there are a lot of ways in which big businesses and our government is trying to exert control over what's going on in the realm of electronic communication. The reason they are doing this is that they cannot survive if they don't. They realize, on some level, that if there is an easily accessible forum for free communication, a lot of things in society won't work, at least not in the same way. They want to control the production of software. But they want to control the production of a lot of things. They need to protect the entire media. They need to maintain their hold on the methods of distributing information, so we'll keep on buying not only software, but cd's, movies, cars, houses, and everything else. If they don't have control over the media, of which digital media will soon enough be the most important form, they won't be able to tell us what to buy. What good are software companies when people are willing to write free code? But more than that, what good is the recording industry if we can all produce cd's on our computers(and there are plenty of musicians who are just as good as the ones they are forcing on us.) What if small groups of people can produce high-quality full-motion video, and publish it to the world via their websites? And they don't put ads in every ten minutes? We all know that this is the 'information age,' right? What this means is that what's most valuable is information. Look, ads are ways of turning media into money. That means that our system NEEDS media. BAD. And if the internet isn't exactly 'owned,' then things are going to change a lot. A lot of people don't want that. A lot of people do. I do want change. I don't know if you do. But there was a culture that believed that land could not be owned. I think that there is a culture which believes that the intellectual space which we have pieced together shouldn't be owned. This is why I switched away from a MS operating system. I don't want Bill Gates to define what MY intellectual space should be like. I like choices, and not between win95 and 98, either. I want to be able to run my archaic 386 if I want, and not be forced to upgrade to the newest thing just to run my OS. The abacus is still around. Ok, this has really turned into a rant, but the point is that licensing is a check on freedom of information, and I dislike that.
Here's why the bridge argument is flawed. Yes,
engineers are required to be certified to build
bridges. Are engineers required to be certified
to build cars? No.
The same type of logic applies to software
engineering. Software engineers who are
coding for life/death situations must comply
to certain standards (FDA for instance). Is
certification needed for building a word
processor? No. Of course not.
There are attempts to create a certification
at a group level (ISO 9001, CMM for instance).
These are what most places are trying to get
to. Certification at an individual level
is too difficult to build a framework for
currently. (SEI's PSP is an attempt at it,
I understand) Of course, there are large
differences between having metrics and having
skills, but these are at least steps in the
right direction.