Overall Review, Re Read the Book

General Review: Starting over with “Reading” #

Hello, I’m Zheng Ye.

Let’s continue our review. In the previous lesson, I took you through some of the content in the column from the perspective of best practices. In this lesson, we will approach the review from a different angle. During the course of the column, some students noticed that I referenced a lot of books and suggested that I organize these books into a list.

Wei suggested:

I have a small suggestion: In the summary of each topic module, create a book list of the books mentioned in the articles for the convenience of the readers.

Liu Xiaolin suggested:

Zheng Teacher recommended many great books as references in the column. Could you consider compiling these reference books into a list in one of the issues, categorizing them by column topics, and giving a brief two-sentence review of each book as a guide. I hope to see this book list before the conclusion of the column.

Y024 even helped me summarize a small checklist in the comments, while someone also created a list on Douban, listing some of the books mentioned in the column.

In this lesson today, I will take the perspective of “reading” and guide you through a review. Most of these books have left a deep impression on me during my personal growth.

I hope that after completing this column, you will embark on another learning journey, using these books to improve your level and solidify your foundational knowledge. After studying this column, you will have a new knowledge structure, and reading these books will provide a whole new experience.

Furthermore, in this content, I will mention several books that were not mentioned in the column, as a supplement for your learning journey. I have also created a list on Douban for your convenience to find these books.

Coding Practices #

  • If you want to learn in detail how to write good code, I recommend you read “Clean Code” by Robert Martin. This book covers almost every aspect of writing good code. Book Link

  • “Implementation Patterns” is a book about how to write good code, more specifically, how to write code that others can understand. Its author, Kent Beck, is a pioneer in many software development practices. However, Kent Beck’s writing ability is average, and many of his works have been overlooked. Only by carefully appreciating them can you experience Kent Beck’s profound skills. Book Link

  • My understanding of improving my coding skills started with the book “The Practice of Programming” by Brian Kernighan and Rob Pike. Both of them came from the famous Bell Labs and were involved in the development of Unix. Book Link

  • If you want to improve your efficiency in daily development, you can read “The Pragmatic Programmer”. If you have never thought about this question before, this book will show you some different ways of working. I have also written a book review for this book. However, the techniques in this book are too specific, so some of them have become a bit outdated. Book Link

Design #

  • The SOLID principles are a set of object-oriented software design principles. As early as 1995, Robert Martin proposed the prototype of these design principles, and then in his book Agile Software Development: Principles, Patterns, and Practices, he elaborated on these five principles in a more complete way. Later, he further organized these principles into what is now known as “SOLID”. With these design principles as a foundation, the book goes on to discuss design patterns, making it easier to understand. Although the book is titled about agility, it is actually a book about design.

  • What’s the difference between design and architecture? In 2017, Robert Martin published Clean Architecture, where he tells us that there is no difference between the two. Therefore, this is also a book about design, providing Robert Martin’s latest understanding of design. You can think of it as a revised edition of Agile Software Development: Principles, Patterns, and Practices.

  • I do not recommend reading Design Patterns, which is the seminal work on design patterns. However, it is based on Erich Gamma’s doctoral thesis, and its writing style is more academic, with the Chinese translation also being mediocre. I only list it here because of its historical importance. If you want to learn design patterns, there are now some easier books to get started with, such as Head First Design Patterns.

  • Martin Fowler’s Patterns of Enterprise Application Architecture brings together common solutions in software development and presents them as patterns. Many of these patterns have become commonplace today, but they were astonishing when they first appeared. From the title of this book, you can see that it was published during the heyday of enterprise development. Martin Fowler has always believed that this book is not finished and hopes to continue updating it, but it’s unknown when we will see a new edition of this book.

  • The Art of Unix Programming is also a book about software design, but it focuses on design in the context of Unix. From it, you can learn programming concepts such as “do one thing, and do it well” and “textuality,” which can help you improve your daily work. Such a book can only be written by someone like Eric Raymond who has immersed themselves in programming for decades.

Engineering Practices #

  • Kent Beck has a well-known software engineering work called “Extreme Programming Explained”, which introduces a software development method called Extreme Programming. But more importantly, many mainstream software development best practices today come from here. This book can be understood as an outline of many best engineering practices.

  • In 1999, Martin Fowler wrote the famous book “Refactoring: Improving the Design of Existing Code” and brought the practice of refactoring to the public eye. At the end of 2018, Martin Fowler, after almost 20 years, wrote the second edition of “Refactoring”, incorporating his new understanding of industry development into refactoring practice. Refactoring should have a goal, and that goal is “refactor to patterns”, which is also a separate book: “Refactoring to Patterns”.

  • Test-Driven Development” is a book by Kent Beck that showcases the practice of TDD. Its merits need to be experienced by oneself, as Kent Beck does not explicitly explain them, such as task decomposition.

  • Jez Humble and Dave Farley’s book “Continuous Delivery” (Chinese translation) takes continuous integration a step further by incorporating the production environment into consideration. Qiao Liang, the translator of “Continuous Delivery” into Chinese, and after nearly a decade since the publication of this book, he himself wrote “Continuous Delivery 2.0” (Chinese edition), incorporating his new understanding of continuous delivery over the years.

  • When it comes to legacy code and testing, I recommend a classic book: Michael Feathers’ “Working Effectively with Legacy Code”, as you can tell from its English title, it is a book about legacy code. If you plan to deal with legacy code, I also suggest you read this book. I have also written a book review for this book, where you can learn about my views on it.

Domain-Driven Design #

  • In 2003, Eric Evans wrote “Domain-Driven Design” to introduce the industry to DDD methodology, immediately causing widespread attention. But to be honest, Eric’s ability to disseminate knowledge is average at best. Although this pioneering work on DDD is difficult to praise for its writing quality, it is very difficult to learn DDD well through it. Therefore, in foreign technical communities, many people gradually recognize the value of DDD through various exchanges and discussions, while in China, DDD has hardly caused any waves.

  • In 2013, ten years after Eric Evans published “Domain-Driven Design,” DDD is no longer obscure and has developed its own relatively complete system. Vaughn Vernon, by reorganizing the essence of the past decade, wrote “Implementing Domain-Driven Design” which finally gives ordinary technical personnel the opportunity to understand the advantages of DDD. Therefore, you will find that in recent years, there has been a lot of discussion about DDD in the domestic technical community.

  • Because “Implementing Domain-Driven Design” is too thick, Vaughn Vernon also wrote a condensed version, “Domain-Driven Design Distilled,” which allows people to quickly get started with DDD. This book is my first choice for recommending others to learn DDD.

Products and Demands #

  • The concept of “Lean Startup” was first summarized by Eric Ries. He has shared his ideas in many places, constantly refining them. In the end, he wrote a book with the same name, Lean Startup, in 2011. If “Lean Startup” is theory, the book Lean Startup Practice provides you with an operational process.

  • Mike Cohn is an important advocate of Agile concepts. When talking about the Testing Pyramid, we mentioned his work Succeeding with Agile. There are two major schools of Agile development: one focuses on engineering practices, and the other focuses on management practices. If you are interested in management practices such as Scrum, you can read this book.

  • If you are interested in the topic of user stories, I recommend reading two books by Mike Cohn: User Stories Applied and Agile Estimating and Planning.

Development Culture #

  • In the software industry, there is a classic book called “The Mythical Man-Month,” which can be considered as the first work of reflection in the field of software development. Many of the terms we discuss today come from this book, such as “no silver bullet” and “tar pit.” Although this book was published in 1975, the problems mentioned in it still haunt programmers today.

  • Eric Raymond, the proponent of the open source concept, opened the door to open source with his book “The Cathedral and the Bazaar.” Today, open source software has become part of the daily work of programmers. However, without the efforts of people like Eric Raymond, we would still have to struggle with complex enterprise software. Understanding the history of open source can help you better understand the happiness of today.

  • Robert Martin also wrote a book called “The Clean Coder: A Code of Conduct for Professional Programmers,” where he discusses what programmers should do. One of the most important advice for most programmers is to learn to say “no.”

Software Development Nuggets #

  • Donald Knuth’s “The Art of Computer Programming” is definitely a book that programmers are aware of, but few have actually read. The explanations of algorithms have made great progress over the decades, so if you want to learn algorithms, there are definitely better options out there. However, if you want to see how Turing Award winners think about problems from the fundamental level, it might be worth picking up this book.

  • Rapid Developmentis not recommended. In this book, the author first introduced the excellent practice of solving integration problems: daily builds. From the name itself, we can easily see its integration strategy, which is to integrate daily. Many of the practices mentioned in the book were advanced at the time, but today they are a bit outdated. If you only want to gain some conceptual knowledge from it, then go ahead and give it a read.

  • The C Programming Language” and “The Unix Programming Environment” are books written by master programmers from Bell Labs. These books are worth reading, although some of the content may seem outdated today. However, their problem-solving methods and techniques are worth savoring slowly.

  • I mentioned “The Ten-Year Journey of Taobao Technology” when discussing the technological evolution of Taobao. This book may not be a classic, but it can be considered as a leisure read.

Beyond Technology #

  • Peter Drucker, the management guru, wrote a classic book called “The Effective Executive” that, despite the title suggesting it’s for managers, in my opinion, is a book about how to work effectively. Everyone can benefit from reading it.

  • Yuval Noah Harari’s books, “Sapiens: A Brief History of Humankind” and “Homo Deus: A Brief History of Tomorrow”, introduced me to the concept of “Big History”. History is no longer a collection of separate events but a development with intrinsic logic.

  • From One to Infinity” is a famous popular science book that introduces scientific progress since the 20th century. The author, George Gamow, is not only the proposer of the hot Big Bang model but also one of the earliest to propose the “genetic code” model in biology. Although the book was published in 1947, it is still worth reading given the overall scientific literacy of society today.

  • Stephen R. Covey’s book, “The 7 Habits of Highly Effective People”, contains concepts that I have mentioned in two different columns. One is about the concept of “begin with the end in mind” and the discussion on creative intelligence, and the other is about the Eisenhower Matrix mentioned in the discussion on priorities. This book is worth reading for everyone, as many programmers lack these conceptual elements.

  • Many programmers are fans of science fiction. Programming and science fiction are both fields that require imagination. Liu Cixin’s “The Three-Body Problem” is not only rich in vocabulary relevant to the IT industry, but also is a first-class science fiction novel that is worth reading. It will make you look up at the stars and open up your thinking. If you are interested in science fiction, I recommend reading Isaac Asimov’s “Foundation” series. It is a masterpiece in the science fiction world. You will see the presence of big data in a book published in 1942.

  • For programmers, the best state of work is to enter a state of flow, where you can immerse yourself in your work. If you are interested in the concept of flow, you can read Mihaly Csikszentmihalyi’s book “Flow: The Psychology of Optimal Experience”, as he is the one who introduced the concept of flow.

That’s it for today’s review. What classic books do you recommend to the students of this column? Feel free to share your thoughts in the comments.

Thank you for reading. If you found this article helpful, feel free to share it with your friends.