Pragmatic Programmer by Andy Hunt and Dave Thomas

I’ve heard good things about Pragmatic Programmer from multiple sources. It has been on my to-buy list for years. It officially entered my Goodreads to-read list in October 2017. I’ve bought it in December 2019. I’ve started reading it in November and finished in December 2020.

The book was first published in 1999. That makes it pretty old. For a book about computers. They tend to become obsolete pretty quickly. This one is an exception. That said, many things have changed in the last 20 years, so the authors have published 20th anniversary edition in 2019. That’s the version I’ll be reviewing. I didn’t read the original.

I would highly recommend reading the book. It might be especially useful for people early in their careers. The book is full of advice and tips. It’s hard to summarize it all. I’ll comment on a few quotes from the book that caught my attention.

I’ve read the book on Kindle (see photo). Quotes from the book reference page numbers in pdf version.

Preface to the Second Edition

But, most important, remember to make it fun. (p xvi)

If you want to succeed in this career, you’ll have to constantly learn new things. If you don’t enjoy it, you are unlikely to last long.

Chapter 1: A Pragmatic Philosophy

Make no mistake, it is your career, and more importantly, It’s Your Life. You own it. (p 1)

You are in charge of your career. Not your employer. The topic of career development is covered in The Passionate Programmer by Chad Fowler.

Topic 4: Stone Soup and Boiled Frogs

People find it easier to join an ongoing success. (p 9)

Sometimes you have to start a project alone. Others will join when you show it’s useful.

Topic 6: Your Knowledge Portfolio

Goals

  • Learn at least one new language every year
  • Read a technical book each month
  • Read nontechnical books, too
  • Take classes
  • Participate in local user groups and meetups
  • Experiment with different environments
  • Stay current (p 15-16)

You don’t have to do everything from this list. Doing some of it will make you better than average. Doing most of it will be really good for your career.

Topic 7: Communicate!

Make It Look Good

After awl, their are spelling miss steaks that the chequer can knot ketch. (p 22)

In Google Summer of Code, June-August 2020 I gave this advice to my interns:

… good communication skills are as important as good coding skills, if not slightly more important.

It’s really (really!) important to communicate well. From blog posts to e-mail messages, from chat to code review, from bug reports to video calls.

Chapter 2: A Pragmatic Approach

Topic 8: The Essence of Good Design

So we believe in the ETC principle: Easier to Change. ETC. That’s it. As far as we can tell, every design principle out there is a special case of ETC. (p28)

Software will change. Design it so it’s easy to do so.

Chapter 7: While You Are Coding

Topic 41: Test to Code

Treat test code with the same care as any production code. (p 223)

I’ve said this so many times… I’ve stopped counting.

Topic 43: Stay Safe Out There

Password Antipatterns

  • Do not disable the paste function in the browser.
  • … do not mandate any particular mix of upper and lower case, numerics, or special characters …
  • Do not arbitrarily require users to change their passwords after some length of time. (p 236)

I’m far from security expert. I’ve picked up some pieces of knowledge over the years. I get really annoyed when an application or a site uses any of the above antipatterns.

Common Sense vs. Crypto

The first and most important rule when it comes to crypto is never do it yourself. (p 237)

This is pretty much all I know about crypto. 😂

Topic 44: Naming Things

… site that sells jewelry made from old graphics cards … (p239)

This is such a good joke. 👏

Chapter 8: Before the Project

Topic 48: The Essence of Agility

And This Drives Design

… a good design produces something that’s easier to change than a bad design. (p262)

This is already mentioned in chapter 2 (A Pragmatic Approach), topic 8 (The Essence of Good Design). It is important enough to mention it one more time.

Chapter 9: Pragmatic Projects

Topic 49: Pragmatic Teams

Challenges

Read The Mythical Man Month by Frederick Brooks. (p 269)

Like Pragmatic Programmer, The Mythical Man Month was also recommended from several sources. I didn’t read it yet, but it’s on my to-read list.

Topic 51: Pragmatic Starter Kit

Ruthless and Continuous Testing

Testing the Tests

We need to test the tests.

After you have written a test to detect a particular bug, cause the bug deliberately and make sure the test complains. This ensures that the test will catch the bug if it happens for real. (p277)

I’ve summarized this as:

Never trust a test you did not see fail.