jarredallen's review

Go to review page

3.0

This book is an anthology of 97 different tips, each written by a different person. Naturally, they vary quite wildly in terms of quality. Some offer genuinely useful advice, while others seem unaware that there exist programming languages which aren't Java. In all, a decent read.

amitsaurav's review

Go to review page

5.0

Thoroughly enjoyed reading this book. Every programmer, experienced or green should read this book to reach the next level in their careers. Totally worth it!

tundal45's review

Go to review page

I started reading this book with fair amount of skepticism. Just looking at the cover, it is hard to miss how a large percentage of contributors are white and/or male. It has also been 9 years since the book came out and there has been quite a few changes in how the industry operates and the kinds of technology people are working with. There were definitely essays that probably were very useful at the time they were written and the advice wasn't followed as broadly but industry has improved and the advice these essays were giving are part of most projects now.

The fact that awful human being extraordinaire with extremely shitty worldview like Robert C. Martin had been given the chance to publish not just one but three essays was probably top of the list. Good news is that last reason was a valid one. His contributions in this anthology, much like his worldview, is no longer relevant but he is too stubborn to acknowledge it or put in effort to change himself. Good news is that we can ignore him.

There are definitely chapters in the book that either are more applicable to contexts in which I don't operate or were too specific to either a technology or a paradigm that they did not resonate with me. So the second reason for skepticism was somewhat justified but I was pleasantly surprised to find gems that have withstood test of time. A common theme for the essays that seemed timeless and relevant was that they were generally considering human side of our profession and giving it proper credence. These are very different from the types of essays that I find unnecessarily prescriptive and moralistic, a form of writing Robert C. Martin is known to use which makes him extremely unapproachable and unfortunately some other authors have chosen to follow as well.

There are definitely certain essays that are useless mostly because they are delivered from a position of privilege while being completely unaware of how what you are recommending only works for you because you enjoy certain privileges. A lot of these essays basically regurgitate poorly advice from the Pragmatic Programmers of learning one new language every year and others like it. It could very well be that because I don't like to learn random technology just for the sake of learning it and I get most of my pleasure in problem solving from being seeped into context and knowing whose life I am improving with my work, I find advice like that less than useful. It also is a sign that the author has not examined their privilege, access, and other things that make these advice extremely limited to only those who share that. Of course, being white dudes (it's almost always dudes), they rarely acknowledge it in the work and dispense the advice as if it is universally applicable.

With that said, if I were to recommend chapters from the book to folks, they would be the following (in the order they appear on the book):

1. [Code in the Language of the Domain](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_11/README.md)
2. [Convenience Is not an -ility](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_19/README.md)
3. [Don't Be Cute with Your Test Data](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_25/README.md)
4. [Don't Rely on "Magic Happens Here"](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_29/README.md)
5. [Encapsulate Behavior, not Just State](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_32/README.md)
6. [The Guru Myth](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_36/README.md)
7. [Hard Work Does not Pay Off](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_37/README.md)
8. [Keep the Build Clean](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_42/README.md)
9. [Learn Foreign Languages](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_49/README.md)
10. [The Longevity of Interim Solutions](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_54/README.md)
11. [Make Interfaces Easy to Use Correctly and Hard to Use Incorrectly](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_55/README.md)
12. [Missing Opportunities for Polymorphism](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_59/README.md)
13. [Pair Program and Feel the Flow](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_64/README.md)
14. [Prevent Errors](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_66/README.md)
15. [Put the Mouse Down and Step Away from the Keyboard](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_69/README.md)
16. [Read Code](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_70/README.md)
17. [Read the Humanities](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_71/README.md)
18. [Start from Yes](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_77/README.md)
19. [Take Advantage of Code Analysis Tools](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_79/README.md)
20. [Test for Required Behavior, not Incidental Behavior](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_80/README.md)
21. [Test Precisely and Concretely](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_81/README.md)
22. [Thinking in States](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_84/README.md)
23. [Two Heads Are Often Better than One](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_85/README.md)
24. [Two Wrongs Can Make a Right (and Are Difficult to Fix)](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_86/README.md)
25. [Ubuntu Coding for Your Friends](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_87/README.md)
26. [Write Tests for People](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_95/README.md)
27. [Your Customers Do not Mean What They Say](https://github.com/97-things/97-things-every-programmer-should-know/blob/master/en/thing_97/README.md)

It is quite coincidental that I picked 27 things every programmer must know :).
More...