Software development is one of the main topics that I discuss on this blog.   When I decided to focus on the formal aspects of software development, my first inclination was to learn about the deep things of software architecture.   This was so much easier said than done.    What I discovered, much to my dismay, was that there was no single widely-accepted definition of software architecture.     Eventually, after many teeth gnashing episodes, I decided to go with the definition provided by the Software Engineering Institute and the Bass book.     This solved only a small part of the problem.

As I read more books and websites, conflicting terms and overlapping concepts remained a problem.   For example, there was significant variance regarding what was meant by design as compared to architecture.  Some sources used the terms almost as synonyms, whereas others made clear distinctions between the two.  Fortunately, The Guide to the Software Engineering Body of Knowledge (SWEBOK)  came to the rescue.

SWEBOK harmonizes terminology and concepts from a variety of textbooks and other publications and, in doing so, provides not only a coherent idea of architecture vs. design, but also a practical guide to the field of software engineering, which is a much broader topic.  I had two software engineering books on my shelf, and had reviewed others, but they all were far too conceptual to be of much practical use.  SWEBOK, on the other hand, struck just the right balance between conceptual  and practical information.

Chapter writers have done a great job of cross-referencing/harmonizing these resources, making it possible for those of us without any academic exposure to the field to gain an understanding of the key topics, terms, and concepts. Version 2, published in 2004, was the edition I stumbled across.   And, while it was a bit dated in 2011, it was still immensely helpful.

This great resource is now becoming even better. Version 3 is undergoing public review, which assures that all viewpoints, terms, and concepts are considered and vetted for inclusion.   Each chapter covers a specific knowledge area.  For Version 3, five new knowledge areas have been added.  Below is a list of the chapters for Version 3.

Computing Foundations
Mathematical  Foundations
Software Engineering Models and Methods
Software Engineering Professional Practice
Software Engineering Economics
Software Requirements
Software Design
Software Construction
Software Testing
Software Maintenance
Software Configuration Management
Software Engineering Management
Software Engineering Process
Software Engineering Tools and Methods
Software Quality

Chapters (at least in their preview versions) are typically no more than 15 or so pages in length. However, even though brief in length, they pack in a lot of useful information, especially in the form of references to external sources—which is what I find so helpful.  Since SWEBOK is used as a curriculum guide for certificate and degree programs, it provides those who want to learn on their own information about the most authoritative sources for the field.   At last, no more wandering through Amazon trying to figure out what to buy!

I believe that SWEBOK is a great resource for anyone who desires a better understanding of how software is created.  It certainly conveys a more realistic view of what actually goes into building sophisticated software systems, such as EHRs, than does a typical textbook on information technology with a chapter or two on the software development lifecycle.

Reading SWEBOK makes it obvious (or at least it should) that developing more usable systems, decreasing  response times, or improving data quality entails more than hiring more programmers or a creating a longer list of requirements.    The chapters on software construction, software design, computing foundations, and software engineering models and methods are not too technical, yet provide good overviews of important aspects of software development.   They are worth a look, and the public review versions are free.

SWEBOK provides just the roadmap I need to the world of software engineering.  It and the growing pool of MOOCs  are making  professional-level software development  knowldege  both more accessible  and less expensive.  Life is wonderful—just wonderful…

Facebooktwitterpinterestlinkedinmail

4 Comments

  1. Hi

    An interesting article about a topic I’m also interested in. In my circles SWEBOK isn’t really known, but it seems like an obvious resource to increase ones knowledge.

    I was wondering how you approached using the SWEBOK to find books to read? Have you found a strategy for picking up the knowledge? Do you plan to learn the whole field and take one of the exams?

    In my case I’m interested in the Design area as I have little formal training on this area – mostly just what I’ve learned on my own and a few minor courses in College years ago. So I’m thinking of getting all the SWEBOK Recommended Books on Design, and maybe some on the additional reading. I’m not sure if this is really an effective way to go about it or not. Looks like a lot of reading to do.

    Jason

    1. Hi Jason, thanks for your comment. I discovered SWEBOK while trying to find information on software architecture and design. I was trying to get a handle on exactly what software engineering consisted of, and reading articles had gotten to be very confusing. In addition, I wanted to create a self-study program that would enhance my skills, especially in the areas of object-oriented analysis and design.

      Before I came across SWEBOK, I had already begun studying discrete mathematics, which has been extremely helpful. Having written software without knowing discrete math, and now doing so after having studied it, I definitely wish I had studied DM a long time ago.

      Here are a few ways I have used SWEBOK:

      • to select a software architecture reference (Bass)
      • as an authoritative source of definitions
      • as a brief introduction to a topic (e.g., requirements, modeling) before moving on to a more definitive text
      • as a general introduction to the field

      Thus far, the foundation, software design, software construction, and models and methods chapters have been the most helpful for my needs.

      By profession, I am an internist/informaticist, so a developer certification would not be useful for me. However, I am using what I’ve learned. If all goes well, a web app that I have been working on should go online by summer. If things go really well, an iOS app will follow.

      Jerome

      1. Interesting… Mathematics. I’ve often contemplated picking up some mathematics, but wondered if I’d be able to apply it. You may have just encouraged me to re-look at it. Most of my job is development and troubleshooting the integration into the container

        Did it take you a long time to learn what you needed from the mathematics. I’d likely need to go back and pick pick up some high school math as I’m really rusty.

        1. Actually, all one needs to study discrete math is a basic knowledge of high school algebra. Most of the math that you’ve learned deals with solving equations for real numbers. Discrete math is not about solving equations; it is about thinking mathematically. The programming constructs that you use constantly such as functions/methods, iteration, and recursion, as well as data structures such as trees and graphs, are practical applications of DM concepts. The topics I found most useful were logic, proofs, sets, functions, relations, combinatorics, and graph theory. My favorite activity was learning to read and do proofs.

          I have found that using mathematical constructs to analyze problems allows me to think abstractly without being hampered by specifics. I know it sounds esoteric, but it is really quite useful. Discrete Math with Applications by Susanna Epp is the book I recommend. It is clearly written, and it presents logic and proofs better than any other book I reviewed, including Rosen.

          In terms of learning OOA&D, and software construction, the Head First books – Object-oriented Analysis & Design and Design Patterns—were very good basic introductions that made it easier to read more formal texts such as Gamma. Code Complete is also a must. Have you tried them?
          Jerome

Leave a Reply to Jason Church Cancel reply

Your email address will not be published. Required fields are marked *