This slim book (184 pages) is aimed at new software engineers: how to write good, clear, maintainable software, based on the author’s own experience on several projects. It starts off a little slowly, but soon starts covering some crucial topics. I particularly liked the emphasis on general purpose deep modules and layered abstractions; often discussions merely say “be abstract”, but here we get some actual guidance on what that means and how to achieve it. The advice covers a wide range of topics, from design to naming and commenting, from first coding to refactoring and maintaining. He also discusses places where his advice is at odds with that of other authors, and why. There is a lot of wisdom packed in here.