Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Unlike other professions (such as Accounting, Law, Medicine, etc.), there is no profession-wide certification for Software Engineering.

I am well aware of the multitude of technology and methodology specific certifications that aim to serve as proof of specialisation and experience, but there is no public Software Engineering society / governing body that sets (and has the power to legally assess) generally accepted professional standards.

I understand that software is a dynamic beast - that is part art, part science - but I'm wondering whether Software Engineering has the potential to become a formal profession.

What needs to change for this to happen, and would it even be a good thing?

(If anybody knows of formal research into this topic I'd greatly appreciate references)



Update

I agree with many of the good points raised below regarding the current level of certification in Software Engineering. I also find it very interesting that some countries treat Software Engineering as a profession whilst others don't.

There does however seem to be a bit of shroud surrounding the term "formal profession", and how it would apply to Software Engineering. I think the key issue with Software Engineering - and the primary reason it is not a full-blown profession - is that if you're a certified Software Engineer, and - for example - some software you wrote for an elevator malfunctions and kills people, your certification and / or membership to a formal professional body won't get revoked.

Sure, your company might get sued for millions, and you personally might lose your job and earn a bad reference, but generally speaking, you personally are protected by the shield of limited liability as a result of being employed by said company. In other words, and as far as I know, there is no legal assessment / enforcement in place (unlike other formal professions and their governing societies) which have the mandate to officially bar you from trading once you've made a colossal stuff-up.

I quite liked the answer that touched on the fact that Software Engineering - as it stands - is a meritocracy, which doesn't need to be a formal profession, and that this is a good thing that shouldn't change. At the same time, I think we need to make a clear distinction between Software Engineers of mission-critical software versus developers of miscellaneous / non-critical software.

To those of you who work / have worked on mission-critical software - is there any personal liability? Surely there is a need for formal repercussions in the event of the Software Engineer making a costly mistake?

share|improve this question
3  
What are the advantages of becoming a formal profession? –  Pieter B May 2 '13 at 12:11
1  
Very localized. Here in Quebec, you need to be part of the engineer order to be able to be called an engineer. Same rules apply for Software Engineer. Comes with the code of ethic, rules, responsability insurance, etc.. –  Jean-François Côté May 2 '13 at 13:15
5  
Lab coats, obviously. With ties. –  Ben Brocka May 2 '13 at 13:16
2  
@Pieter B: How would you feel about seeing a doctor if there was no formal profession that guarantees some standard every doctor must fulfil? –  Giorgio May 2 '13 at 17:30
1  
I've voted to reopen this question. It's not a duplicate of "Can Software Engineers become certified Professional Engineers?": that question asks about career choices given the current status of the profession. This question asks about the gap between that status and a perceived desired state, and how to act to close that gap. These are different topics. –  user4051 May 3 '13 at 8:04

6 Answers 6

up vote 16 down vote accepted

Based on available information, I believe that Software Engineering is already a formal profession. It may not be widely accepted as such, but it is meeting the generally accepted criteria for the characteristics of a profession.

From Wikipedia's article on Profession:

There is considerable agreement about defining the characteristic features of a profession. They have a "professional association, cognitive base, institutionalized training, licensing, work autonomy, colleague control... (and) code of ethics,"[18] to which Larson then also adds, "high standards of professional and intellectual excellence," (Larson, p. 221) that "professions are occupations with special power and prestige," (Larson, p.x) and that they comprise "an exclusive elite group," (Larson, p. 20) in all societies.

This quotes Magali Sarfatti Larson's The Rise of Professionalism: A Sociological Analysis extensively. Searching for "characteristics of a profession" tend to lead similar results.

How does Software Engineering stack up against these characteristics?

  • Professional Association There are numerous professional associations for software engineers. The IEEE and more specifically the IEEE Computer Society serve professionals working in engineering around the world, with the IEEE Computer Society focusing specifically on computer and software engineers. The ACM is another professional organization for professionals working in computing, generally in the Americas. There's also the British Computer Society, which caters to various aspects of professions in information and communication technology, generally in the UK.

  • Cognitive Base The Software Engineering Body of Knowledge is sponsored by the IEEE, Boeing, National Research Council Canada, Raytheon, Construx Software, Canadian Council of Professional Engineers, the MITRE Corporation, NIST, Rational, SAP (for the 2004 version). It was started specifically as a step toward "making software engineering a legitimate engineering discipline and a recognized profession".

  • Institutionalized Training In the United States, Information Technology, Computer Science, and Software Engineering programs can be accredited by ABET. In Canada, Computer Science and Software Engineering programs are accredited by CIPS. These organizations define minimum standards and expected outcomes for students graduating from an accredited program to enable them to function in a professional environment. The IEEE also offers two exams based on the Software Engineering Body of Knowledge - the Certified Software Development Associate exam for undergraduates (or recently graduated undergraduates) and the Certified Software Development Professional exam for mid-career professionals.

  • Licensing As of April 2013, NCEES offers a Professional Engineering exam in Software Engineering. It is offered on a state-by-state basis in the United States. However, the Software Engineering PE exam is not currently offered by every state, and even fewer require the license. This article, published in the November/December 1999 issue of IEEE Software, discusses licensing requirements in the state of Texas and a brief discussion of licensing in Ontario and British Columbia, Canada and the UK. In Texas, a license is only required to work on the design, testing, or implementation of embedded or real-time systems that "require a detailed understanding of the engineered electrical or mechanical components" and for software systems for "mechanical devices, electrical devices, and power systems" - a relatively small amount of software development work. In states that offer licensing, the worst case scenario is disciplinary action, sanctions, or loss of your license should a client or employer file a complaint. However, the only real harm comes in states that require a license - unless the license is required to do the work, losing it doesn't mean anything.

  • Code of Ethics The ACM and IEEE Computer Society created a Software Engineering Code of Ethics and Professional Practice. In the United States, graduates of ABET accredited engineering programs, including Software Engineering programs, can also join the Order of the Engineer, which maintains a code of ethics that generally applies to professional engineers.

  • Work Autonomy, Colleague Control, High Standards of Professional and Intellectual Excellence These are frequently visible in an environment where software engineering is treated as an engineering discipline. That is to say that not all employers (or freelancers) treat software development as engineering.

share|improve this answer
4  
90%, or I'd even go so far as to say 99% of programmers probably don't even know that IEEE CS exists. If 99% of doctors didn't belong to the AMA, I would have much less faith in the profession. –  Jonathan Rich May 2 '13 at 14:07
3  
@JonathanRich - Everyone I knew in college joined at the very least IEEE. Where did you come up with your numbers? You connected to IEEE so you actually have some actual subscription numbers? –  Ramhound May 2 '13 at 14:25
1  
@Ramhound: When I was in university, people were aware of IEEE but few ever seemed to join. Then again, my school had a Computer Science program, not a Software Engineering program, other schools had Computer Programming courses. Very few had Software Engineering, though that's starting to change as schools get accreditation for their courses. Also, we were not in the US, not sure if that has any impact on IEEE participation. –  FrustratedWithFormsDesigner May 2 '13 at 14:29
11  
@JonathanRich, 90% of programmers aren't software engineers. –  Philip May 2 '13 at 14:31
5  
@Philip And therein lies the problem. Are you a programmer? A developer? A software developer? A software engineer? A systems analyst? Which ones are professional and which ones are not? Do you need a software engineer to set up your WordPress site? Should you let a developer come close to your in-house data warehousing platform? I wish very much that software engineering was approached more professionally than it is by 90% of the people I've worked with, but when you have people who want to pay a DBA less than the guy that mows your lawn, you're not going to get the best people. –  Jonathan Rich May 2 '13 at 15:25

A widely established and accepted professional body for software developers/engineers/architects/etc would not be a good thing.

Currently, this is one of the few fields that can act as a meritocracy. As in, I don't care what degree you have (or if you have one at all), how much seniority you have, which languages you know, etc. It is relatively easy to figure out if you are a good developer or not, and at the end of the day that is the only thing that matters. i.e. Can you get things done?

Currently you are gauged by your ability, not by some accreditation that someone awarded you. And this is a fair, Good Thing (tm).

share|improve this answer
2  
The similarity to Prostitution is mildly disconcerting.... –  mattnz May 3 '13 at 3:56
    
@mattnz It's called intellectual prostitution, and my hourly rate is probably lower than the traditional kind. –  MrFox May 3 '13 at 13:49
    
Thanks for the insightful answer @MrFox. I'd like to pick your brain a bit further if I may. If doctors / accountants / lawyers make a critical / costly error, they risk losing their certification and being barred from further trade. Software Engineers, on the other hand, face no such risk, since they seldom stand to lose money (due to the limited liability afforded to them by the companies they are employed by). All they stand to lose is their current job and reputation. In light of this, do you think it would make sense to have a formal society to govern Software Engineering best practise? –  Kosta Kontos May 3 '13 at 18:29
2  
@KostaKontos Consider what that would mean in the real world - you would get violations if you didn't write unit tests or didn't have sufficient documentation? Or would you lose the license if you pushed code to a production environment with a security flaw? Would that be a good thing for the field? My argument is that this would add a lot of red tape, politics, blaming, and just inflate the profits of insurance companies through every developer having to buy malpractice insurance. It is an interesting thought though. I bet it hasn't happened yet because suing your own engineers is a bad idea. –  MrFox May 3 '13 at 19:20

I think it should be possible to become a certified software developer by passing an exam the way a lawyer passes a bar exam. I also think that non-certified programmers should still be able to operate as programmers. The difference is that employers would be able to advertise specifically for certified programmers if that's what they want, and a certified programmer would come with certain guarantees of accountability, as well as a higher price tag.

I agree with the poster who says that software development is a buggy mess with no accountability. I don't think it has to be that way. There are developers who want to make good software and are willing to be accountable for it. We just need a way to distinguish ourselves.

I have been developing software for more than 20 years. I don't claim this makes me a great developer by itself, but I do think I'm a pretty good developer. The problem is that I have to constantly demonstrate why I'm a better developer than every kid who learned programming in his spare time and wants the same job as me. Not to mention the legions of "offshore" developers who promise to do the same job for a fraction of the money. Right now this takes a lot of effort. I have to provide work samples, references, take tests, do interviews. I could easily have a bad day, make a mistake on a test, and get disqualified. I'd rather just say, "yes, I'm a certified developer and here is my certificate". I'd still have to do interviews, but at least I'd only be competing against other certified developers.

share|improve this answer
    
Thanks for the insightful answer. Do you think there should be a minimum amount of work experience required before developers are able to take their "bar exam"? Similar to how lawyers / accountants have to complete two to three years of articles. And if there were this minimum requirement, do you think the work itself should be standardised to some extent, so as to ensure consistency in experience gained across the profession? –  Kosta Kontos May 28 '13 at 7:24

Nothing needs to change.

As pointed out by Thomas, software engineering is already a profession. It can be called engineering, programming, hacking, and/or crafting, but it is as profession and lots of people are making money on it.

I think your question is is around licensing.

Right now there is no formal licensing for software engineering. Anyone with enough smarts and programming ability can get hired and paid for creating code than runs on a machine or a device.

This is unlike other industries (law and medicine being examples as cited in the question). A license is required for those professions. Anyone can drive a car, but to drive one legally you have to have a dirvers license is another example. Anyone can program, no license or certification(s) required.

Now, I beleive that licensing is good in that it proves that someone has the ability to do something (like drive a car) and knows the ins and outs of the rules (of the road).

A similiar license could be required for software engineering, but I don't think it would do much good. In fact there are many licensed drivers who are horrible drivers, so just becase you have a license doesn't mean your a good driver or programmer.

A license creates a barrier for entry, which in this industry would not be a good thing, so I don't see any perceived benefit of such licensing.

Companies that hire software engineers should definately test the ability of that potential programmer with a "programming test" (and I am no talking about fizz buzz type) based on the skill set needed. Programmers with "certifications" look good on paper, but they should really be put to the test with a real world test to gauge experience and aptitude.

share|improve this answer
2  
"Programmers with 'certifications' look good on paper", no they don't. –  Philip May 2 '13 at 20:26

Software is not a profession, nor will it ever be one.

"A profession arises when any trade or occupation transforms itself through the development of formal qualifications based upon education, apprenticeship, and examinations, the emergence of regulatory bodies with powers to admit and discipline members, and some degree of monopoly rights."

That description doesn't match software at all.

First off, anyone with an interest in software can go out and try to find a job developing software. Many of those people have college degrees totally unrelated to computer programming and many have no degree at all. There's nothing stopping either of those groups from becoming software programmers.

Software can't become a profession because "licensed" members become responsible for damage they cause and their malpractice. 80-90% of developers will lose their job within a couple of years for that one alone.

In general, software quality is atrocious, bug prone and just plain not very well done. Is that worthy of being a profession? Do you foresee that stopping because people get licensed? If a professional organization isn't going to stand for high standards and professional quality then there's no point to it. That goes directly against industry practice. Writing quality, robust and working software is against the principles of most of the companies out there, because time-to-market, cost, it is good enough, don't want to break anything else trying to fix broken software is viewed as more important than professional grade software.

Also, regarding malpractice. How are you going to prove that one develper versus another is to blame. In software it is way to easy to point fingers and both developers "are right". Who is to blame when that developer uses the undocumented API hidden in the bowels of the OS and then the OS vendor changes its function or removes it?

Good luck with that regulatory body thing. Let's see congress say no to Microsoft when Microsoft asks them to kill that bill because it will only allow them to hire "licensed" developers. Without that regulatory body, then who is going to join an organization that has the right to discipline you and charge you dues especially if there is no added value like getting monopoly rights without the regulatory body.

As for, would it be a good thing to require licensing? Absolutely, for those who can get accredited. Your pay would rise dramatically with your new found monopoly.

However, for everyone else...the use of computer technology in businesses would probably decline along with the fast pace of advancement we see nowadays. There will certainly be barriers to new software advances, such as languages and design methodologies. After all, who is going to want to push for new ways of doing things that will require years of retraining in order to maintain your license. Most licensed developers will prefer to keep things just the way they are in that regard.

share|improve this answer
    
add some references to support your assertions (which make certain sense to me but that doesn't matter), and I'll remove the downvote –  gnat May 2 '13 at 23:49

It never will, at least not entirely. Software is a medium, like paint. There are people who do industrial scale painting jobs of large structures, there are people that design new paints to perform to high standards, but there are also people who buy paint to do small scale jobs like paint their shed, and still others who might mix their own paint but just use it to paint pictures of cats.

Similarly while I could see a future where safety critical and/or financial software needs accredited engineers working on it, there will never be a need for people producing art or entertainment software. What needs to change to get safety or financial software required to have accredited engineers? Well much like those other professions it would require a law to mandate it.

share|improve this answer
4  
How is that different than other engineering disciplines? Let's take civil engineering. Anyone can build a bridge in their back lawn over a creek. But not everyone can build a highway bridge over a lake. I think that can be applied to many other engineering disciplines as well, and it's commonly accepted that engineering is a profession. –  Thomas Owens May 2 '13 at 13:08
    
@ThomasOwens that is true however with software we do not reall have a formal 'not everyone can buid a highway bridge' part, that will come though –  jk. May 2 '13 at 13:19
2  
That's not true. Not everyone can build the avionics software for a commercial jetliner. Or the control software for a radiation therapy machine. There is plenty of software that is controlled, regulated, and there needs to be certain standards. However, until more recently, there weren't the same licenses that go along with other engineering disciplines. –  Thomas Owens May 2 '13 at 13:41
1  
@ThomasOwens As a software engineer working on avionics software for a commercial jetliner (OBIGGS), yeah, actually anyone could probably build this. The software isn't all that complicated. But the customers are REALLY picky about it being robust and having confidence that it won't explode. Just like anyone could build a bridge, badly, anyone could probably code up an OBIGGS unit, badly. The professional aspect comes with the testing, the process, tackling DO-178b, and being able to show with confidence that it isn't going to fall out of the sky when it crosses the international date line. –  Philip May 2 '13 at 14:39
2  
"there is no analogue of physics in software": There is, it is called Mathematics or some other formal method. And in fact, for mission-critical software most of the work goes into specification, verification and testing and only 10 % of the work goes into actual coding. Only non-mission critical software can be developed in an agile, trial-and-error way (the way one would build a bridge in their back lawn), but try to use the same method for building avionic software! –  Giorgio May 2 '13 at 18:55

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.