Doctors have to go to medical school and then have a residency and the AMA closely controls the total supply of physicians. Lawyers have to go to an accredited school and then pass the bar (in some states the school part is optional).
A computer science degree is the closest thing the tribe of programmers has to a professional certification. There are some organizations that have attempted to bring the tribe together but none have gained serious tracking. (asp-software.org, aitp.org, computer.org)
What's most interesting to me is that doctors and lawyers actually have legal protection. In most places it is illegal to perform medical services without a license or offer legal advice without a law degree. There is no equivalent protection for programmers. Imagine a world where an individual could be fined for writing a business app without being a certified developer. Suddenly the value of certified programmers would jump up quickly and those who couldn't meet the standards would be quickly drummed out of professional development.
Those licenses are not to protect the Doctors/Lawyers, they are to protect their clients.
Having such a system for programmers would make no since and would make the situation much worse. A college degree means a lot but you can be a very good/success programmer without one.
I would NEVER go to a doctor/lawyer who did not have the correct credentials to practice. As such you "practice" medicine and you "practice" law. Do you practice programming(in the same sense?), no you don't.
> Those licenses are not to protect the Doctors/Lawyers, they are to protect their clients.
It goes both ways, like an if-by-whiskey.
If by licenses you mean those draconic practices by which some exclusive guild is allowed to tell me which professions I am allowed to practice in order to keep their supply low and their prices high, then I am against them.
However, if by licenses you mean the protective mechanism by which government prevents uneducated hacks from performing open heart surgery on citizens, then I am for them.
Also worth noting that, at least in some places, lawyers share quite a lot of liability for their work - direct personal liability or as part of a partnership (and limited liability partnerships might not protect you as much as you would think).
If a lawyer screws up badly enough then they can have their credentials taken away and they can't do their job anymore - that's arguably the main difference between a professional and an academic qualification.
The #1 defining trait of a profession is that there are ethical obligations that supersede managerial authority. You don't have the "I was following orders" excuse if you do something wrong or unethical. You answer to the profession, not a manager. At least, that's the theory. In practice, there's a lot of variation. Law is technically a profession, but "white-shoe" law (aka biglaw) is pretty horrid, culturally speaking.
This is a benefit, in the sense that the profession goes out of its way to prevent you from being beholden to a single boss, but a drawback in the sense that if you do screw up in a bad way (or get unlucky) you can find yourself in a really bad situation when you lose your license.
I don't know how well that can be applied to technology where there are so many moving parts that 100% bug-free software is impossible.
Altough I agree with you, I still definitely think we are heading towards a future where in order for your code to ship, you will need to be a certified programmer, or have it validated by a certified programmer, at least in some industries.
Do you think it is safe, for say, a non certified (read: a guy with no CS degree) programmer to design and code software that runs on an MRI machine ? Or the one which controls airplaines ?
If airplaines start crashing because of a software fault, do you think we could and should blame the programmer for not having made the required tests ?
Software _development_ is a very young discipline, and as such has not yet been regulated. But I believe the day will come where it will.
The solution to this is testing and required design procedure. Comprehensive, detailed, expensive testing, and comprehensive, detailed, and expensive design documentation and documented procedure.
There are currently guidelines for software that goes on medical equipment and airplanes. Airplane software's testing and design procedure gets checked by the FAA. I also know there are comprehensive code coverage requirements. Replacing this with certified programmers means that the programmer WILL be personally liable if there is a fault in the design. I don't think this is a good idea.
What you just described is, put simply, to follow engineering principles. Some people would argue that Software Development is not an engineering discipline but a craftsmanship.
And anyways, it would still be a huge scandal if the FAA allowed someone, (or a team of someones) without a degree in CS, to check an airplaine's software. Does this need to be regulated as a law, and thus, recognition of the Software Development discipline as a profession ?
The way I understand it, the FAA checks to see if the software design was designed and tested according to documented procedure, which was approved beforehand. The procedure must follow some published guidelines, mainly [DO-178B](http://en.wikipedia.org/wiki/DO-178B). The FAA person probably doesn't need a CS degree to check this. They just need to be competent enough to review the documents generated during the DO-178B process, and see that they did what they said they did. The civil liability I think would come in if a company forged their documentation. And if the documentation is not good, then the software won't get approved by the FAA audit. At least that's how it's supposed to work.
Edit: There are third party or FAA technical experts involved, so I guess your point still stands. But I don't think certification can replace this kind of following engineering procedure. And yes, I consider software engineering for safety-critical applications an engineering discipline.
This is a bad idea. Those certifications are meant to be there to protect the consumers, not the practitioners. Some engineering disciplines need professional certifications because of liability reasons, and some don't. I'm an electrical engineer working in a hardware design position in a safety-critical field, and I don't have a professional certification. I'm just competent, and we do an insane amount of testing.
One of the best things about programming is its low barrier to entry. Requirements for being a successful programmer: be good at programming. Having certifications isn't necessarily bad, but I feel that requiring certifications on a legal level the same way law and medicine are required is a horrible idea.
What we need is a sort of postmodern professional structure. We can't keep people out of programming itself. Everyone should be exposed to the concepts. However, we need to inject the respect accorded a profession into software development.
A computer science degree is the closest thing the tribe of programmers has to a professional certification. There are some organizations that have attempted to bring the tribe together but none have gained serious tracking. (asp-software.org, aitp.org, computer.org)
What's most interesting to me is that doctors and lawyers actually have legal protection. In most places it is illegal to perform medical services without a license or offer legal advice without a law degree. There is no equivalent protection for programmers. Imagine a world where an individual could be fined for writing a business app without being a certified developer. Suddenly the value of certified programmers would jump up quickly and those who couldn't meet the standards would be quickly drummed out of professional development.