The Profession of Software Engineering. What is the difference between a job and a profession?...

36
The Profession of Software Engineering

Transcript of The Profession of Software Engineering. What is the difference between a job and a profession?...

Page 1: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

The Profession of Software Engineering

Page 2: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

What is the difference between a job and a profession?

• Briefly, a profession:– Requires training and education– Is backed by a professional association– Has a code of professional ethics that set

standards of behavior for its members– Has certification and licensing that can be used

to assess competency

Page 3: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Importance of advancingthe state of the profession

• The benefits of software engineering becoming a mature profession include:– Consistent and universal standards for initial professional

education. Standards would help professors design courses, students select courses and provide employers assurance that new hires had some basic competencies.

– More influence at the national level. The (American Medical Association (AMA) and American Bar Association (ABA) regularly drive/influence national policy. Today you just don’t hear about congress or the president seeking the backing of the ACM or IEEE Computer Society before enacting legislation effecting software practitioners’ interests (Patents, Copyright law, Monopoly regulation, Section 1706 of the Tax Reform Act of 1986, etc.).

– Confidence that comes from having licensed practitioners. You might feel safer driving a car or flying on an airplane knowing its software was designed by a licensed engineer.

Page 4: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Outline

• Nature of software development work

• Core Body of Knowledge

• Education and Training

• Certification and Licensing

• Professional Societies

• Code of Ethics and Professional Practice

Page 5: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

What is software development?

• Art?

• Craft?

• Science?

• Engineering?

• ??? (Some new hybrid discipline)

Page 6: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

It’s all of the above

• Art – good UI design and solution design depend on innovation and inspiration

• Craft – there are many problems best solved through the application of rules-of-thumb. The pride in work usually associated with craftspeople is something important when the quality of work (especially with code) isn’t readily observable.

• Science – good practice depends on underlying theory and mathematics. Example: complexity analysis can be used to compare the performance of one algorithm versus another (O(n) versus O(n1.5))

• Engineering – there is a growing body of knowledge that can be applied in a systematic way guided by judgment.

Page 7: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Why do we care?

• How we view software development (art, craft, science, etc.) determines:– How we go about training and credentialing practitioners– What tools and techniques we develop and promote– How we go about validating the qualifications of

practitioners

• If it is a craft, we promote guilds. If it is an engineering discipline we work on developing handbooks of routine practice. If it is an art, we promote dark clothing and hanging out in designer coffee shops.

Page 8: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

How software development is practiced has changed over the years

Page 9: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Engineering disciplines develop over time from artistic and craft roots

• Consider the history of civil engineering

Page 10: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

What is Engineering?• Engineers apply science and technology to develop cost-

effective solutions to practical problems.

• The Accreditation Board for Engineering and Technology (ABET) defines Engineering as:

“The profession in which a knowledge of the mathematical and natural sciences gained by study, experience, and practice is applied with judgment to develop ways to utilize, economically, the materials and forces of nature for the benefit of mankind”

• Engineering disciplines have a core body of knowledge or underlying science that can be used to solve practical problems. For example, chemical engineering has chemistry and electrical engineering has math and physics.

Page 11: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Engineering Accomplishments

• Spaceflight: landing a man on the moon, Mars rovers, Hubble space telescope, smashing a probe into a speeding comet, collecting the debris from the impact and returning it to earth for analysis

• Construction: Chesapeake bridge, Roman aqueducts.

Page 12: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

What is the difference between science and engineering?

Science: Large Hadron Collider. Seeking to understand the fundamental forces that existed at the dawn of the universe. Practical applications? Maybe someday.

Engineering: Application of scientific and mathematical principles toward practical ends.

Page 13: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Engineers

• Apply well-understood knowledge to solve practical problems

• Must be familiar with knowledge that has already proven to be reliable and effective

• Need a broad understanding of the factors that effect the products they are designing

• Regulated; Accountable to public.

Page 14: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Working from accumulated knowledge rather than instincts alone

• Engineers work from handbooks that have practical solutions to common problems. For example, when exposed to the elements a steel pipe will expand and contract. To prevent rupture, an expansion loop is needed at certain intervals. Civil engineers have handbooks that instruction them on the width of the expansion loop needed for different pipe sizes.

• Engineers work from accumulated knowledge but know when to trust and apply their intuition and instincts.

• What handbooks should be at the elbow of any practicing software engineer?

Page 15: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Scientists

• Make and test hypotheses to extend knowledge in the field

• Must keep up-to-date on the latest research

• Narrow focus; Scientists tend to specialize in one area

• Not regulated; Accountable to peers.

Page 16: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Software Engineering’sBody Of Knowledge (SWEBOK)

• The accumulated knowledge for software engineers is documented in the SWEBOK.

• The SWEBOK “does not purport to define the body of knowledge but rather to serve as a compendium and guide to the body of knowledge”

• Having a recognized body of knowledge will help support:– Training– Credentialing– Defining standards of acceptable practice

Page 17: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

SWEBOK• The software engineering body of knowledge is the sum

total of all the knowledge within the profession of software engineering.

• It would be impossible to fully document such a large amount of knowledge, hence the need for a guide to the software engineering body of knowledge

• The SWEBOK is such a guide (but not the sum total of all knowledge).

Page 18: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

SWEBOK• Creation of the SWEBOK started as a joint project

between the IEEE Computer Society and ACM. ACM later dropped out because their members felt that the state of knowledge and practice in the field was at the time too immature to be codified.

• First version published in 2004. There is a new alpha version planned for 2009; 4th Quarter 2010; 4th Quarter 2011, sometime in the future …

• The future is now! Version 3 was released 2014.

Page 19: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

SWEBOK Purpose

http://www.computer.org/portal/web/swebok

“The Body of Knowledge is subdivided into 15 software engineering Knowledge Areas (KA) plus an additional chapter providing an overview of the KAs of strongly related disciplines.”

“Achieving consensus by the profession on a core body of

knowledge is a key milestone in all disciplines and … crucial for the

evolution of software engineering towards professional status.”

Page 20: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

SWEBOK Knowledge

Areas

Page 21: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

SEBOK Scope

• The SEBOK covers generally accepted knowledge and practices

• The selection criteria for inclusion in the SEBOK: knowledge and practices that are applicable to most projects most of the time.

Page 22: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Criticisms of the SWEBOK

• Defining a software engineering body of knowledge too soon could slow progress toward raising the average level of practice.

• There is not quite universal agreement on standards of practice. A portion of the community views the SWEBOK as defining overly bureaucratic practices.

Page 23: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Professional Malpractice• Ever notice how so few programmers are found guilty of malpractice?• Doctors, lawyers and other professionals can be sued for malpractice if

they fail to follow generally accepted professional standards.• Right now we don’t have generally accepted standards of

performance for programmers• If the SWEBOK is used as the basis for licensing software engineers it

will be viewed as defining generally accepted standard of performance for software engineers.

• This has the potential to expose programmers to malpractice suits.• The safest way to avoid being found guilty of malpractice will be to

follow the practices outlined in the SWEBOK.• To the extent that it is possible to define good software engineering

practice and to keep this definition up-to-date this is a positive influence. If one or the other or both are not feasible, this has the potential to lower average performance. It also may discourage practitioners from trying innovative approaches that push the state of the art.

Page 24: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Certification vs. Licensing

• Certification is voluntary, administered by a private organization and is an endorsement of an individual's professional knowledge and experience. (CCNA, CompTIA Secrity+, CompTIA A+, CSDP, etc.)

• Licensure is a grant of legal authority to practice a profession within a designated scope of practice. In the US professionals are licensed by states.

Page 25: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Becoming a Professional Engineer (PE)

• To become a PE, you must:1. Pass the Fundamentals of Engineering (FE)

exam after college.

2. Pass an engineering specialty exam after 4 years of employment.

• As of April 2013 Software Engineering is an approved specialty.

Page 26: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

PE exam for Software Engineering

• Principles and Practices Exam of Software Engineering was added as an option for the specialty exam April 2013.

• The one-day exam will be open-book and consist of 80 multiple-choice questions given in two four-hour sessions.

• Questions cover a broad scope of software engineering activities such as design, test, design, and security.

Page 27: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Software Engineering Code of Ethics and Professional Practice

• Article from IEEE Computer that introduces and presents the SE Code of Ethics: http://www.computer.org/portal/cms_docs_computer/computer/content/code-of-ethics.pdf

• Also see: http://computer.org/certification/ethics

Page 28: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

8 Elements of a mature profession [Ford Gibbs SEI]:• Initial Professional Education (University degree)• Accreditation (Oversight bodies that accredit degree programs.)• Skills Development (It takes education + experience to develop full professional

capability. Doctors have intern for several years before they are allowed to practice on their own. You need 4 years of work experience before you are eligible to become a PE)

• Certification (Certification exams assure a minimum level of knowledge. Doctors must take a board exam; Lawyers must take the Bar exam.)

• Licensing (Professionals may be required to obtain a license in order to practice within certain jurisdictions. In the US, licensing is handled at the state level. Hair dressers, private eye’s, child car, contractors, etc. Sometimes controversial: anti competitive?)

• Professional Development (Ongoing training and professional development is often a requirement for maintaining a license.)

• Professional Societies (They both safeguard the public interest and promote the interests of their members. They promote the exchange of information, define certification criteria, manage certification programs, establish accreditation standards, define a code of ethics and disciplinary actions for violations of these codes. AMA and ABA)

• Code of Ethics (Helps establish a level of trust. Professionals can be ejected from their professional societies or lose their license to practice for violating the code of ethics.)

Page 29: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

State of the Software Engineering Profession

• Initial Professional Education – approaching established. (approximately 15 undergraduate degree programs in SE in 2006)

• Accreditation – established 2004. Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering (SE2004)

• Skills Development – established. There are guidelines for the skills needed by a software engineer. (Universal agreement? Does it matter if you think they are X and I think they are Y and X != Y?)

• Certification –established. Cisco/Microsoft/Sun certification as well as IEEE Certified Software Development Professional Certificate.

• Licensing – ad hoc. In the state of Texas you have to be licensed before you can call yourself a software engineer. Some provinces of Canada also license software engineers.

• Professional Development – ad hoc. IEEE has continuing education guidelines and a few programs and learning modules.

• Professional Societies – established. IEEE and ACM are the most prominent societies for computer professionals.

• Code of Ethics – established. The ACM and IEEE Computer Society have adopted a code of ethics specifically for software engineers although there are no provisions for disciplining those who violate the code of ethics.

Page 30: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Prospects for a profession of software development

• Software Developers tend to be more committed to their occupation than their employers or even their own self interest (witness voluntarily working long hours).

• The open source movement is one example. There is a desire there to commit to something larger. It’s a grassroots movement (bottom up) but the idea is the same.

• Why isn’t membership in IEEE Computer Society and the ACM higher?

Page 31: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

stop here

Page 32: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

CFR Definition of Profession

• The Code of Federal Regulations (CFR) in the US defines professional work as work that:– Requires advanced knowledge in science or a field of

learning that is acquired through a prolonged course of specialized study

– Requires invention, imagination, originality or talent in a recognized field of artistic or creative endeavor

– Requires the constant exercise of discretion and judgment in its performance

• At least according to the code of federal regulations, the work of writing software meets all the criteria of a profession

Page 33: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Legal Definition of Profession

• Requires extensive learning and training• Has a code of ethics that imposes standards higher

than those normally tolerated in the marketplace• Has a disciplinary system for professionals who

breach the code• Emphasizes social responsibility over strictly

individual gain, and has a duty to its members to behave as members of a disciplined and honorable profession

• Requires a license to practice

Page 34: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Relationships between the 8 elements of a mature profession:

Page 35: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

Levels of Maturity

• Each of the 8 elements of a profession may be more or less present or mature:– Nonexistent– Ad Hoc – the element exists, but only in

isolated, uncoordinated instances– Established – the element is newly established– Maturing – the element has existed for many

years and is actively maintained and improved by some professional body

Page 36: The Profession of Software Engineering. What is the difference between a job and a profession? Briefly, a profession: –Requires training and education.

References

• http://www.sei.cmu.edu/reports/96tr004.pdf

• Professional Software Development by Steve McConnell.