Should there be a licensing requirement for professional computer programmers, and if so:
- What kind of formal requirements would be enforced?
- What kind of quality standards would be imposed, and how would they be enforced?
- Would a licensed programmer be liable for malpractice if code they wrote was faulty?
- Would there be restrictions on the languages, tools or methodologies that could be used?
Should we discuss
ProfessionalLicensingPremises
I think different positions may be summarized along the lines ProfessionalLicensingIsPremature, professional licensing can never work (be useful), professional licensing is good we need it yesterday.
Well, just do not the current bureaucratic committees like IEEE to impose nonsense like SoftwareEngineeringBodyOfKnowledge on us. Not to mention SEI. In the end it will be unavoidable that licensing will be required in certain areas of SoftwareEngineering, but the very big problem is how to avoid the incompetence creeping into a regulatory body. This will be a political process.
The first question to be asked is whether it will be beneficial at all. Whether it will be beneficial for software engineers, for investors in the software industry and for the customers.
- As an experienced software engineer, I'd submit it would be beneficial for me, as it was well known in the bust job market after 2000 the market was clouded by the hordes of incompetent programmers. Imposing a minimum barrier of entry to this profession is arguably beneficial for those who are above the barrier.
The second question is whether it is implementable in an acceptable form: meaning can we devise a scheme such that the regulatory body who designs compliance criteria will be widely recognized and respected, free of charlatans and incompetents and noncontroversial.
- Free speech also needs to be considered. Enormously centralized engineering bodies and corporations don't realize that if you can't program a computer, you can't make serious use of it. They don't even care. Today in the WindowsWorld?, there is a large gap between users and programmers. Two very distinct classes of user, where the users can't ever be invited to join the ranks of Programmer. Even the highly usable Mac had HyperCard, so it's not like they need to be protected against their own stupidity.
IsYourCodeThatImportant? In industries where it is - avionics, health care - there are strict process and competency requirements. I'm not sure if the programmers are licensed, per se, but all code is thoroughly reviewed and if you can't prove that you know what you're doing, it never gets used.
For non-mission-critical applications, where life is not at stake, the free market is usually a better way to weed out crappy products. If you require licensing, you prevent people from making the tradeoff between quality and other factors like cost, ease of use, time to market, and feature count. All products would require a certain minimum level of quality, whether that is economically efficient or not. But as a consumer, there are times where I don't care if it crashes once a day (IMs, music, web browsers), and would much rather have cool ease-of-use features. Remember that the user doesn't care how ugly the code is; if it fills their needs, they'll buy it.
I'll go out on a limb and say that the web would not have developed as fast as it did were it not for the hordes of incompetent programmers. Because suddenly everybody - from teenage kids to local newspapers to major corporations - had a web site. They may not have been good web sites, most weren't even standards-compliant, but they worked and people use them. -- JonathanTang
Can't you just see the Ethernet Highway Patrol pulling you over to inspect your ComputerDriversPermit, searching your computer and verifying that you are not breaking a programming rule, or are not using programs illegally, and if they want to to issue a ticket asserting that you have broken one of these rules, or one made up on the spot. Or have programmed to fast, were found to have stolen someone else's code, or to have been programming while a license was suspended? Not to mention programming while drunk, working more than Forty Hours, found to have been using ExtremeProgramming, or not have title to the software on your machine and a certificate of insurance for malpractice, and outstanding warrant of non-compliance to standards and specifications, failure to deliver software(breach) on time and under budget, and other failures to numerous to mention, let alone to be understood. A ticket might also be issued for failure to submit to such controls, checks and balances which a manager has sought to employ and which programmers presently not only do not observe but also despise. 8); -- HaHaOnlySerious
Not only that, think of the licensing system that currently picks high-quality drivers; think of a similar one also picking software engineers. (This already happens in other professions: Licensing requirements are often a mere formality, a burden even, while competitive-market and litigation concerns actually drive quality.)
Actually there are different classes of driver permits. Not anyone can drive a heavy truck, nor should the market decide this matter. Markets with very high barrier of entry are known to work.
The software engineering labor market is effectively a market with very low visibility or in more theoretical terms a market with asymmetrical distribution of information. Software engineers may know their level of (in)competency, buyers of their services have very little in the way of getting a clear picture of what they're buying into. In the absence of minimum standards, buyers will de facto impose their alternatives. For example professional certifications and built up resumes, which are an extremely poor substitute for professional licensing and are detrimental to both parties involved (yes, the guy writing these lines has an impressive array of certificates), but have become an effective barrier of entry in the free SE labor market.
If the rules in accounting changed as often as the rules in computing it would not be possible to certify accountants.
Is it the rules that are changing, or just the tools? Other professions are trained to standards that apply regardless of what tools are used. How often have completely new paradigms appeared on the computing scene, and would that frequency have made certification impossible? (Granted, it's hard to say if any have appeared on the accounting scene in the last 100 years, it's been more a process of gradual evolution.)
What exactly are those non-changing standards or principles? I doubt a concensus can be found.
Licensing only provides a path for taxation, not real protection for employers. Contract law, properly applied, can do the job. The progress made in the last 3 decades could not have been achieved had programming (or any other scientific endeavor) been the constant subject of government meddling.
- That sounds like an alternative. So how would exactly contract law apply to programmers ?
- I need a job done. You need the work. We agree on the job and the payment. (You do the work; you get paid) or (You don't do the work; you don't get paid).
- Only if it was that simple. You need to be reasonably assured that I am not incompetent at getting the job done, the same thing about going to a surgeon, it serves you no purpose if the job is not getting done or if the job is being done extremely poorly and you can't tell that before handing out the money. I need to be reasonably assured that I will get paid, reason for which I might ask you for an advance payment or a pay as you go scheme -- this would be an unreasonable demand on my part if you couldn't have a reasonable assurance that I am not entirely incompetent. It is true that such requirements can be dealt with on a case by case basis, but it would be redundant and wasteful.
- You are not "entitled" to a job; I am not "entitled" to work performed. We are due only that on which we mutually agree.
- Any number of structures are possible (including salaried), it's just that the original agreement has to be well drafted.
- So do you see lots of people willing and capable of such fine drafting work ? What if most of the agents would gladly exchange the burden of crafting such complex legalese with the probabilistic assurance that once somebody is licensed under some stringent requirements than he/she is likely to be competent ?
Keep governments out of it. They have proven time and again that "to err is human, but to *really* screw things up you need to involve the government."
- Not necessarily. Licensing can be done without government intervention.
- Explain? I know of no private organization that can enable Licensing, what am I missing?
- Lawyers, doctors, etc. They are all licensed by essentially private groups. The requirement to be licensed is mandated by the government but not the licensing itself. The licensing can be entirely private based. For example, market condition can decide that the de facto standard for access to this profession is to have a CS diploma or have some other kind of licensing mandated by IEEE, ACM or some other kind of organization. Government should intervene only if they can make the case that there's a compelling public interest.
There are already literally dozens of certifications one can hold to fulfill this purpose, and none of the work worth a crap. You end up with programmers who are good on paper because they studied for a test, but have little if any practical experience. Good programmers are good programmers and licensing/certifications don't do them much good, because tons of bad programmers also have those same certifications.
- Exactly, but once a good licensing scheme providing a serious barrier to entry is available in the marketplace, good programmers will benefit a great deal to the detriment of bad programmers who are not likely to pass the test. See TheMarketForLemons? (or google for it).
Programming is art, you want a good programmer, ask for his portfolio, make him provide samples of his work, if he doesn't have any and isn't willing to write something, hire someone else.
- Programming is an engineering discipline. Most programmers do not have a portfolio, references can be made up, so a portfolio can be made up. Subjecting a programmer to the test of writing something is an expensive proposition: you either give him something minor to make it feasible (in which case you won't get much clue), or else I don't know. Asking a programmer to write something can be made part of the licensing requirements so that it is done OnceAndOnlyOnce.
Programming isn't like being a doctor or a lawyer, and certifications won't help, and the government certainly won't help, they never do. The informality of programming has been its greatest strength and is the reason the industry has progressed so far so fast, it'd be nice to keep it that way.
- Why do you think informality is its great strength ? The greatest advancements in programming have been made by the more formal people (Dijkstra, Knuth, Wirth, etc). It's not like we had revolutionary insights coming from people who'd fail a barrier of entry licensing tests because of their lack of formal training, and therefore we'd risk losing that contribution.
I disagree here; I think the greatest advancements in computing have been made by Xerox, Apple, AOL, and Mosaic. I use my mice and GUIs and web browsers and instant messengers all the time. I rarely find the need to compute the shortest path, or parse a grammar, or typeset a page, or use whatever the hell Wirth contributed (did he do anything besides dead languages?)
And yes, I realize that a lot of the apps I use wouldn't be possible without the fundamental algorithms. By the same token, the algorithms ain't very useful without the apps.
I think there's a big tendency among programmers to confuse elegance with usefulness. A lot of what is important to us is, frankly, useless to the general public. They don't care how ugly the code is: if it does what they need it to do, they'll use it. The free market's a remarkably effective way of weeding out the chaff; a lot of "failures" pointed out by engineers are really because they value different things from the public at large.
And yes, my life would be noticeably worse without software written by people who'd fail a licensing test. I'm writing this on a MicroSoft computer; I really doubt all the folks who wrote this software would pass. I use Gaim on my home computer; I'd be without instant messages. My main web project is in PHP, a language written by people who not only don't understand academic computer science, but actively disdain it. It's in that language because I want folks who wouldn't pass a licensing test to be able to maintain it, so I don't get tied down to it forever. There's a lot of shitty software that I use on a day-to-day basis, but I'd rather have a PieceOfShit? that does what I need it to do than a SoftwareMasterpiece that exhibits complete disregard for the user. -- JonathanTang
- All those advances you are talking about would be impossible without the contribution of the people I mentioned. Does your operating system make use of semaphores ?
I acknowledged that. I also stated that the contributions of the people you mentioned would be useless without those advances.
My point is more that you need both kinds of people than that we should all glorify ignorance. The thesis of this page seems to be to get rid of the UnwashedMasses and let only GrandMasterProgrammers (or some approximation thereof) into the profession. I'm saying that we'd be noticeably worse off without the UnwashedMasses that a licensing scheme would exclude. NeverUnderestimateThePowerOfStupidPeopleInLargeGroups?. -- JonathanTang
Well, I think you misunderstood the thesis of this page. The intention is not to let only GrandMasterProgrammers but rather the minimally competent programmers. I do not think that any of the other contribution you mentioned are made by people who'd fail a test for minimum competency. Plus licensing would be mandated only as a barrier of entry to the profession, it would not regulate what people do in the spare time. Nobody prevents you from playing the electrical engineer in your own backyard even though you are not licensed.
- Most EE's, at least those I work with, are not licensed. Perhaps some EE subdisciplines, such as those doing high-voltage and/or infrastructure stuff (i.e. the PowerGrid?), are licensed.
- Many engineering disciplines--chemical and civil come to mind--deal with problem areas where failure is always potentially catastrophic ("simple" projects in these domains, such as building a tool shed, often will not involve an engineer at all, only craftsmen). SW and electrical engineering both encompass numerous problem domains where the consequence of failure is a pissed-off customer, but little more. (No loss of life, no injury, no significant financial loss).
- Unlike the licensed professions, software has no body of theory to base its licensing upon, no objective measure of competence, and no neutral licensing body. The consequences of failure of an electronic or software component are often no less catastrophic than in any other discipline -- just ask the pilot of any Stealth bomber (which cannot stay in the air without its electronics and control systems).
- Some software is MissionCritical; most isn't. Disregarding the issue of licensing, there are widely different design practices used for avionics software than are used for an MP3 player; this is a matter of law in many problem domains.
- We do not have a massive, established and respected body of knowledge, but we do have some portions thereof. We should ask the same pilot how he feels if the guy programming the software is incompetent at something as basic as predicate calculus. Well, not everybody flies military or commercial jets, but I wouldn't feel very comfortable if the same kind of incompetent programmers would stay behind my bank's web application either. --Costin
- In my view, theory is distinct from knowledge. I agree that we are assembling portions of a "massive, established and respected body of knowledge". My point is that we do not, yet, have the theory that allows us to reliably assert, in an objectively defensible way, what things are necessary and what things aren't. Programming, as a discipline, is just over fifty years old. We still have heated arguments over, for example, relational versus OO models, static versus dynamic typing, and even fundamental ideas such as functional programming, identity, and representation. We programmers are, in my view, just taking our first baby-steps towards creating a true engineering discipline. This, in turn, means that we have no framework to build a certification or licensing system upon. As a result, any such system -- during your lifetime and mine -- will be much more like the "certification" programs of the big vendors, with just about as much integrity or validity. -- TomStambaugh
- Tom is dead on, because until there is some wide spread agreement on what "proper" programming practices are, any licensing scheme is doomed to failure from lack of acceptance by the masses. From everything I've seen over the last few years, we are still years away from settling any of these issues and establishing a solid baseline of knowledge, and that is why currently, programming is still in the realm of art/craft and not engineering. Do not overgeneralize, many programmers will beg to differ with respect to their individual cases.
- Well, I'll try to suggest that Tom is right in many details but wrong overall. There is nothing to suggest that we have to settle static versus dynamic typing (or any other such differences of style and approach) before we'd be able to have a licensing scheme. Licensing schemes are not designed (or rather should not be designed) to enforce a sterile uniformity, but they are designed to enforce a minimum competency level. The goal would be not to enforce a scheme that will predict the probability of success of all projects using licensed engineers (that would be impossiblle regardless of how massive amounts of knowledge we accumulate), but rather to predict with reasonable certainty that an software project will not result in catastrophic failure or will not be a useless of waste of time, money and opportunity because of basic incompetence. Also I submit that a licensed software engineer would not need to show competence in all subjects, but rather in manageable areas of knowledge about software development.
- The goal would be ... to predict with reasonable certainty that an software project will not result in catastrophic failure or will not be a useless of waste of time, money and opportunity because of basic incompetence -- it seems to me that without theory, or with whatever passes for software "theory" now and for the forseable future, such a prediction is impossible. In electrical engineering (the discipline within which I am trained), it took hundreds or thousands of years for practioners to learn that, for example, the sum of the currents leaving a junction must equal the sum of the currents entering the junction. Such theory is a basic and fundamental requirement for any valid statement about whether or not a device or design will fail. The best we might accomplish, I think, is something more akin to a master/apprentice approach.
- Master/apprentice also works but it's not all or nothing approach. The thing is we already have enough uncontroversial body of knowledge to require it as a minimum level of competence, the lack of knowledge on it can reliably predict failure. Again, licensing does not predict non-catastrophe for whatever reasons, but it is rather the opposite: lack of licensing can pretty damn well predict catastrophe 'because of incompetence. Even with licensed engineers catastrophe can occur (and has occurred in other discipline) for various other reasons.
- Oh, and speaking of MP3 players, I wouldn't feel very comfortable if the thousands (tens of thousands ?) of computer zombies that are currently used by spammer would be used to drive a serious attack on banks, email systems, financial institutions, etc. I wonder how many of them became zombie because a security flaw in Windows Media Player ?
- I wouldn't worry too much about it - if they aren't professionally a licensed virus programmer, their zombie code is probably full of flaws. . .
Geee, maybe a license would provide us all of the advantages of Professional Truck Drivers. We can eat greasy food, load up on coffee, work 16 hours straight, and have no idea what we will do next after the current job is done. Just think how much a professional license will change our work environments. CEOs will bow down before us. Young people's hearts will grow faint at the sight of a Professional Programmer! And maybe the idiot in the cube next door (who is really so much less intelligent than I) will get fired. Sign me up! Sign me up!
I'm afraid the licensing will simply not work the way some of us expect. The results depend heavily on the question who will be the decision-makers on whether to give the license to each particular person. Anyways this is to be decided by government, and the government often just do the things VeryRichPeople? consider right. I'm nearly sure that, e.g., MicroSoft will do their best to use this approach to try another time to put FreeSoftwareProgrammers? out of the business. And that will be all. -- AndreyStolyarov
Why do we need to licence? All of the benefits mentioned here, which boil down to better information for employers, and more employability for the licensed, can be achieved by a rigorous and relevant professional qualification, perhaps something like the British Engineering Charter.
A number of years ago, there was a proposal to license programmers in New Jersey. It passed one of the houses of the state legislature, but was shot down in the other house after a lobbying effort by AT&T, who said that they would leave the state if the legislation passed.
A summary of the legislation may make it clear what people would have had to cope with.
It called for establishing a licensing board, which would consist of six members. I think three of them would be appointed by the governor, and those three would then appoint the other three. The board would be responsible for defining the qualifications necessary to obtain a license, and all future appointees would have to be license holders.
Once the licensing requirements were formalized, it would be illegal to write a computer program of any kind in New Jersey without a license. It would also be illegal to sell any software in New Jersey that was not entirely developed by New Jersey license holders. So no more Microsoft products, and no freeware or open-source software of any kind.
When I say no programming, I mean no programming--for any purpose whatsoever. The only exception was that students in courses taught by New Jersey license holders would be permitted to write programs that were necessary to complete their homework assignments.
The next time someone suggests licensing programmers, you might use this as an example of the practical ramifications that almost became reality.
See also RegulatedSoftwareMonopoly, RegulatedSoftwareIndustry, ComputerDriversPermit