Another New Talk: Elements of Design

Elements of Design

At C++ and Beyond next week (and in December) I’ll also be giving a brand-new half-day talk on Elements of Design.

I’m passionate about design, in part because it requires specific skills and taste, but most off all because it’s so important for every programmer — whether building a new library or extending one, building a new class or maintaining one, and that covers pretty much all of us.

In recent years, I’ve been spending a lot of my time leading design work in diverse areas ranging from general- and special-purpose library design, to systems software architecture, to programming language design and evolution, including participating in the crafting of various C++0x language and library features.

Although those areas are pretty diverse, they also have a lot of commonalities, and the insights and learnings apply directly to mainstream classes-and-libraries production software design. I’ve organized the topics to cover proven design practices at three levels:

  1. Design process: Running a design effort to set it up for repeatable success. This isn’t about heavyweight Process with a capital P, it’s about practices that  apply universally to projects of any size — when the projects are smaller, the elements can be informal.
  2. Design principles: Fundamental truths that guide design choices toward high quality.
  3. Design elements: Key specific design points and best practices to learn and apply.

We’ll build these areas from the bottom up — first key elements as the foundation, then the principles that unify the elements, and finally the process that enables staying true to the principles. Each process, principle, and practice is illustrated using real-world examples drawn from personal experience in many different design areas, but always targets “how you can use this today”: concrete skills and techniques for the development of well-designed production software and applications.

I’m looking forward very much to this topic in particular, not only in this talk itself but also in the informal and unstructured fireside time built into the C++ and Beyond schedule. Together with my other new talk on Lambdas, Lambdas Everywhere, my part of C++ and Beyond will be 100% new material never seen in public before — 270 minutes’ worth (whew). I look forward to seeing many of you there next week, or at the December “Encore” event where registration opened two weeks ago.