I've been reading Jack G. Ganssle's "The Art of Designing Embedded Systems", which has attracted a few negative reviews because it talks more about the philosophy of general development than embedded systems. To me, this makes the book a lot more interesting and enjoyable. There are a few great quotes that I've come across so far (including the title of this post, in which he discusses the difference between a 6month newbie, and tenured 10 year veteran; turns out there isn't always a difference).

Here are a few that I think are particularly pithy.

  • We jump from design to building too fast. Whether it's writing code or drawing circuits, the temptation to be doing rather than thinking inevitably creates disaster.
  • The customer's delight with our product is the ultimate and only important measure of quality.

Ganssle discusses the 5 levels of the Capability Maturity Model (as outlined by the SEI), which are:

  1. Initial (ad hoc and chaotic)
  2. Repeatable (intuitive)
  3. Defined (standard and consistent)
  4. Managed (predictable)
  5. Optimising (characterised by CI)

and then he notes the pessimistic (but unfortunately resonating) additions of U.S. Air Force Captiain Tom Schorsch:

  1. Negligent (indifference)
    -1. Obstructive (counterproductive)
    -2. Contemptuous (arrogance)
    -3. Undermining (sabotage)

The next one is something that I've cursed myself for many times:

Source code has two equally important functions: it must work, and it must clear communicate how it works to a future programmer, or to the future version of yourself.

This is just the start; there are many other interesting gems in this book, and if you get the chance, I'd recommend giving it a read!