The idea of licensing software developers has been around almost as long as—well, OK, I haven’t done any actual research, but it’s been around a long time. It’s superficially appealing: if massage therapists and dog groomers need periodic re-certification of their skills in order to practice, why shouldn’t programmers? But then comes the hard part of deciding who should do the certification, what should be included in the exams, and the whole project slowly sinks into the sand.
The IEEE Computer Society has just (re-)launched its Certified Software Development Professional (CSDP) exam. You can take part in the beta testing from mid-November to mid-December (some restrictions may apply). Topics are wide-ranging (see the list below the cut), but definitely emphasize a process-heavy engineering view of software development—the exam’s authors were definitely building dams in their previous lives. The list of reference materials reinforces that: words like “agile” and “Scrum” don’t appear (probably because those guys were building backyard stills in their previous lives :-).
I personally think licensure is inevitable: sooner or later, someone’s going to find a way to sue software companies for bad products, at which point those companies are going to start insisting on evidence that their bottom lines are in safe hands. I’d be interested to see the results of administering the CSDP exam to a hundred randomly-selected J2EE developers working at insurance companies, and to another hundred Rails developers working for social media startups. I’d be even more interested in the results for 100 randomly selected Computer Science professors…
IEEE Computer Society CSDP Examination Specification Introductory/ Competency Level I. Software Requirements 11% A. Software Requirements Fundamentals B. Requirements Process C. Requirements Elicitation D. Requirements Analysis E. Requirements Specification F. Requirements Validation G. Practical Considerations II. Software Design 11% A. Software Design Fundamentals B. Key Issues in Software Design C. Software Structure and Architecture D. Human computer Interface Design E. Software Design Quality Analysis and Evaluation F. Software Design Notations G. Software Design Strategies and Methods III. Software Construction 9% A. Software Construction Fundamentals B. Managing Construction C. Practical Considerations D. Construction Tools E. Construction Technologies F. Product Documentation F. Formal construction methods IV. Software Testing 11% A. Software Testing Fundamentals B. Test Levels C. Test Techniques D. Human Computer User Interface Testing and Eval E. Test-Related Measures F. Test Process V. Software Maintenance 5% A. Software Maintenance Fundamentals B. Key Issues in Software Maintenance C. Maintenance Process D. Techniques for Maintenance VI. Software Configuration Management 5% A. Management of the SCM Process B. Software Configuration Identification C. Software Configuration Control D. Software Configuration Status Accounting E. Software Configuration Auditing F. Software Release Management and Delivery G. Software Configuration Management Tools VII. Software Engineering Management 8% A. Initiation and Scope Definition B. Software Project Planning C. Software Project Enactment D. Review and Evaluation E. Closure F. Software Engineering Measurement G. Software Management Tools VIII. Software Engineering Process 7% A. Process Implementation and Change B. Process Definition C. Process Assessment D. Measurement E. Software Process Tools IX. Software Engineering Methods 4% A. Modeling B. Types of Models C. Analysis D. Development Methods X. Software Quality 7% A. Software Quality Fundamentals B. Software Quality Management Processes C. Software Quality Practical Considerations XI. Software Engineering Professional Practice 5% A. Professionalism B. Codes of Ethics C. Group Dynamics / Psychology D. Communications Skills E. Intellectual Property, Confidentiality, Security XII. Software Engineering Economics 5% A. Software Engineering Economy Fundamentals B. For-profit Decision-making C. Non For-profit Decision-making D. Present Economy E. Estimation, Risk, and Uncertainty F. Multiple Attribute Decisions XIII. Computing Foundations 5% A. Programming Fundamentals B. Algorithms, Data Structures/Representation (static & dynamic) and Complexity C. Problem solving techniques D. Abstraction -- use and support for (encapsulation, hierarchy, and so on) E. Computer organization F. Basic concept of a system G. Basic user human factors (I/O, error messages, robustness) H. Basic developer human factors (comments, structure, readability) I. Operating system basics J. Database Basics and Data Management K. Network communication basics L. Distributed and Parallel Computing M. Concepts of programming languages N. Debugging Tools and Techniques O. Secure Coding XIV. Mathematical Foundations 3% A. Functions, Relations and Sets B. Basic Logic (prepositional and predicate) C. Proof Techniques (direct, contradiction, inductive) D. Basic Counting E. Graphs and Trees F. Discrete Probability G. Finite State Machines, regular expressions H. Grammars I. Numerical precision, accuracy, and errors J. Number Theory K. Algebraic Structures XV. Engineering Foundations 4% A. Empirical methods and experimental techniques (such as computer-related measuring techniques for CPU and memory usage) B. Statistical analysis (including simple hypothesis testing, estimating, regression, and correlation) C. Measurement D. Systems development (security, safety, performance, effects of scaling, feature interaction, and so on) E. Engineering design (problem formulation, alternative solutions, feasibility, and so on) F. Theory of measurement (for example, criteria for valid measurement) G. Simulation, Modeling and Conceptual Prototyping H. GQM Paradigm I. Standards (identify, evaluate, select and adapt) J. Tool and platform selection K. Root cause analysis