A brief summary of The Pragmatic Programmer

Chapter 1 – A Pragmatic Philosophy

  • It’s Your Life – If you’re frustrated by your current job, opportunities, or skill set, why not change it?
  • The Cat Ate My Source Code – Take responsibility for your actions. Admit when you’ve made a mistake. Don’t make excuses, provide options instead.
  • Software Entropy – Address all the “broken windows” in your code as soon as they’re discovered. Don’t let entropy win.
  • Stone Soup and Boiled Frogs – Remember that people love to join an ongoing success but that it’s also important to remain focused on the big picture.
  • Good-Enough Software – Great software today is often preferable to the fantasy of perfect software tomorrow.
  • Your Knowledge Portfolio – Invest in your knowledge portfolio the same way you would a financial portfolio: invest regularly, diversify, manage risk, buy low, sell high, and review and rebalance.
  • Communicate! – Say what you need to say considering the audience and the context.

Chapter 2 – A Pragmatic Approach

  • The Essence of Good Design – The easier software is to change, the better it is designed. This is the ETC (easy to change) principle.
  • DRY – The Evils of Duplication – If requirements or specifications change, you should only have to change your code in a single place.
  • Orthogonality – Changes in one thing not should affect any other. It should be a trivial task to replace one component with another.
  • Reversibility – Organize your project in such a way that if a requirement changes you can easily adjust without re-doing everything.
  • Tracer Bullets – It can be a great idea to initially set up a basic working version of your application that demonstrates that each and every component can work together.
  • Prototypes and Post-it Notes – In other cases it may seem better to flesh out ideas using a disposable prototype that will be scrapped once the discovery phase has ended.
  • Domain Languages – Sometimes it makes sense to develop an application-specific mini-language that allows you to express your intent in a much clearer way than you otherwise could with a general purpose language.
  • Estimating