Learning about Software Development
June 14th, 2006First, I had been formulating some thoughts on “learning” to be a software professional before I read the following two posts.
Software Professionalism by Sarah George
Followup to Software Professionalism by Edward Nilges
My thoughts were based on conversations I had with my boss and a consortium of folks who want to explore what might make the Pittsburgh region more competitive in the Global Software Development Marketplace (i.e., competitive against offshoring).
The first topic I’d like to address is whether the the SoftWare Engineering Body of Knowledge (SWEBOK) is a useful heuristic to evaluate the types of education / training one must receive to be a competent software developer.
I’ll start with the positive aspects:
- It provides a central repository for knowledge. The document that describes what SWEBOK is is not the same as the “Body of Knowledge”. Like many professional disciplines, a body of knowledge is a canonical thing that isn’t necessarily codified anywhere, but instead represents what a “knowledgeable” professional should mostly know to be regarded as competent.
- It presents an opportunity to license software developers using a standard set of knowledge. While there are many arguments against licensing, I feel that Nilges blog entry provides a compelling argument for licensing.
- It provides a foundation for future amendments.
There are many dissenters voicing opinions. But I believe the most alarming comment comes from Martin Fowler on his Bliki in that he suggests that a flawed SWEBOK could indicate that a developer performing non-SWEBOK approved tasks might be legally susceptible.
Cem Kaner wrote a thorough statement prior to the 2003 review here where indicates problems withe SWEBOK’s content and the review process.
Keith Ray summarizes many concerns in his post here
The fundamental argument is that those people authoring the SWEBOK might have gotten it wrong and that not enough people contributed to the authoring / review to ensure that it encompasses a “real” body of knowledge.
A poorly stated SWEBOK has, as Fowler stated, legal ramifications. But also, the perception of consumers of Software Development services and educational institutions stands to suffer significant negative effects as a result of mis-guided devotees of “this” version of the SWEBOK.
Should we throw the baby out with the bathwater?
A more constructive approach might be to use a continual peer review process.
Some practices that might help that cause would be to begin incorporating what each individual knows in a matrix of “complete” software development knowledge. Or to encourage feedback from educational institutions and corporations on what is being taught to young software engineers, and how applicable that is to the vocational practice of software engineering.
The second suggestion is where my interest in learning stems from. It seems that a college education cannot in itself prepare a software engineer for success in the corporate environment.
This is not because of any fundamental failing of education (after all it serves other professions perfectly well). More accurately, the SWEBOK is evolving at such a pace, and is fragmented by so many competing theories and technologies that it is only when the knowledge learned in school is applied to a certain problem that a grasp of the relevant aspects of SWEBOK can be applied.
This implies that a competent vocational programmer is not truly abreast of the entire SWEBOK. That’s fine. Physicians don’t know all diagnoses and cures; Lawyers don’t know all law; Engineers specialize in specific fields. However, by understanding where the gaps in our knowledge are compared to the whole, we’ll be able to direct learning to specific vocations, specialities, or technologies and give software professionals a more likely chance that they’ll be able to target their learning. At the same time, employers will be able to understand what “types” of developers they require, and what the specific attributes are that match those developers with their particular environment.

