I have been meaning to read it for at least 5 years and I am very happy I finally took the time to read The Pragmatic Programmer, a book regarded as one of most influential among software engineers. As it turned out, it was a good thing to wait those 5 years because the authors have released a new edition in 2020, for the 20th anniversary of the book. According to the authors, the book has been substantially edited to reflect the (massive) changes that have happened in the software industry over the past 20 years, so, overall I am reading an updated classic which I bet was even more useful!
The book is organized into small topics that can be read independently. That said, the book follows a certain logic it is actually worth reading them in order. Every topic begins with a short story that helps the reader understand the problem, then the authors explain how to deal with it using a pragmatic approach. Problems are stated generally, so that the reader can relate to them, irrespective of the programming langages the reader is accustomed to working with. When relevant, the authors provide examples in a given programming langage, but they don’t focus on a specific one, instead they alternate between several langages. A topic ends with exercices/challenges that make the reader thinks about the problem. I particularly enjoyed that the authors turn what matter the most into one-sentence tips, I found these very helpful1.
IMHO, it is worth to have a little experience to fully benefit from the authors’ advices. Of course a beginner could read this book and get a lot from it, but I noticed that topics for which I have little to zero experience, I felt that it was harder to understand how the programmatic approach would be useful… No real surprise there, one may even think it is worth skipping the topic in such case. I did not and it wasn’t actually that bad, in worst cases I had to read some Wikipedia articles to understand new concepts.
Overall, I can classify the things I have learned into three categories. First, I have learned new concepts and more about concepts that (I thought) I already knew. For instance, I have learned what a semaphore2 is in computer science; I now understand the difference between concurrency and parallelism and I am now aware that there are various kind of testings. This is extremely useful, because it is hard to find help and resources about something you cannot even name! Second, I will bare in my mind that it is important to try new things and to learn more stuff, even if it looks like something may not seem useful in the short term, it does not mean it won’t be in the long run. For instance, as suggested by the authors, I will try to spend more time using the keyboard exclusively (no cursor), I’ll give a try at other programming langages and I will listen to my lizard brain! Last but not least, I have learned principles that would definitively guide my when I’ll be coding! For example, I have learned that I sometime code by coincidence and I will avoid coding so in the future. I will follow ETC (Easy To Change) and DRY (Don’t Repeat Yourself) principles; I will try to find the box3, i.e. finding what are the real constrains I have to deal with, and I will keep in mind unit testing as I am coding, because that what matters the most with testing!
To conclude this post, I would like to clearly state that this edition of The Pragmatic Programmer is a great read even if you are only programming every now and then. I’m thinking more specifically about scientists such as myself that are not trained as software engineers but are spending several hours a week coding. Even if not all topics are relevant for us and even if the examples given are in programming langage not frequently used in research (Clojure, Elixir, Ruby, etc.), there are advices, guidelines and principles that I am sure would help many people like us. Also, the book will always remain a good reference to go back to and I know for sure that it will be of great assistance as I will be preparing future workshops about coding. Finally, this book made me realize that I should read more about coding. Fortunately, The Pragmatic Bookshelf have a lot of good references, may be I could start with one of them!