Technical Book Club: Code Complete – Software Construction: Building Software

Code Complete is all about Software Construction.  What? You probably never faced a course on software construction in school … or did you.  Some key points from this chapter:

  • Software Construction includes detailed design, coding, debugging, integration, unit, and integration testing. 
  • Construction is also known as implementation and programming.

These topics are likely a cross-section of the courses you’ve taken or the tasks you’ve completed while on the job.  Construction is a core piece of software engineering.  If you’ve worked on a project that started out as “just a small app to do foo” then it’s likely you started with this phase of development.  If you’ve worked on a more mature product, concept, or idea, then you might have worked your way to construction through specifications and business requirements.  In class, this might be a set of information provided to you before you begin a lab or homework.  Steve discuss many great points for why construction is an important topic including:

  • Construction is the only activity that’s guaranteed to be done.
  • Construction’s product, the source code, is often the only accurate description of the software. 

I love the articulation of this first point.  Whether it’s a project or a product that’s running late, many corners can be cut but this isn’t one of them.

Questions for discussion:

  • In projects you’ve worked on how much time has been spent in the construction phase?
  • Steve’s motivation for this book was to provide a quicker dissemination of best practices among practitioners and between academia and industry.  How do you learn about or share best practices to improve your skills?

I find the way I learn best is to chat with other developers, although I also like books and newsletters.  I find that when I try to explain my code to someone else, I see a lot of nuances that I missed when I was looking at it on my own.  When I was at IBM, I developed libraries in C.  Memory debugging was quickly one of my frequent tasks and I learned how to use Valgrind and Electric Fence from my colleague Folu.  This lead me use to use linux.die.net as a resource more generally.  I read a lot of MSDN and DeveloperWorks articles.

Since working at Microsoft, I’ve learned about Channel9 which has a lot of great developer content.  Microsoft has a number of great resources for students such as the MSDN Flash Newsletter “News for Students” column and our Facebook discussion at Microphone.