Software Engineering

Steve McConnell, of Code Complete fame, just put the following post up on his blog:

The February 2007 issue of IEEE Computer contained a column titled “Software Development: What Is the Problem?” (pp. 112, 110-111). The column author asserts,

“Writing and maintaining software are not engineering activities. So it’s not clear why we call software development software engineering.”

The author then brushes aside any further discussion of software development as engineering and proceeds to base an extended argument on the premise that software development is not engineering.

The post caught my eye as I’m thinking of switching from a Computer Science degree to a Software Engineering one.

Steve says:

Numerous software development activities have clear counterparts in other engineering disciplines, including:

  • Problem definition
  • Creation of models to verify the engineer’s understanding of the problem
  • Feasibility studies to verify viability of design candidates
  • Design as a central activity
  • Creation of detailed plans for building the product
  • Inspections throughout the product-creation effort
  • Verification that the as-built product matches the product plans
  • Ongoing interplay between the abstract knowledge used by engineers and the practical knowledge gained during construction
  • etc. 

 Which is why software development is often compared to bridge building ( albeit one can only take the comparison so far).

Which brings me to Scott Rosenberg’s book, Dreaming in Code. In the Epilogue , he tells the remarkable tale of the San Francisco Bay Bridge. The construction of the bridge was halted by Governor Schwarzenegger  in December 2004 and a new design was called for (which arrived in July 2005 in the guise of an exact copy of the original). By this time the bridge was nearly half built. Says Scott:

As I read about the controversy, I couldn’t help thinking of all the software management manuals that used the rigorous procedures and time-tested standards of civil engineering as a cudgel to whack the fickle dreamers of the programming profession over the head. ” Software development needs more discipline”, they would say. ” nobody ever tried to change the design of a bridge after it was already half built!”

The State of California had done a fine job of undermining that argument.

Touche

All joking aside, however, Software development is indeed treated as a field of engineering. Says Steve:

  • The Computer Society adopted a Code of Ethics for Software Engineers almost 10 years ago.
  • The IEEE Computer Society approved the Software Engineering Body of Knowledge 2.0 in 2004, which was adopted as an ISO/IEC Technical Reference 19759:2005.
  • Curriculum guidelines and accreditation standards have been established for undergraduate software engineering programs.
  • In the United States the official engineering accreditation board, ABET, has accredited 13 undergraduate software engineering programs since 2003, and in Canada 9 such programs have been accredited (by CEAB).
  • Numerous provinces in Canada license professional software engineers, and professional engineers are chartered in software in England. 

 So do we treat software design in the same way as we treat algorithms, or do we try to do new and novel things  (the way I like thinking of engineering) with our software?

Perhaps both. While there are well established principles when it comes to bridge building, bridges ( or, indeed, any kind of construction – take the Guggenheim in Bilbao, Spain) emerge from construction rather unique. Each bridge features something new and novel.

So is Software Development more a blend of engineering and art?