The book called “Pragmatic Programmer, The: From Journeyman to Master” about software engineering and best practices was first published in 1999. This book was written by two experienced programmers and writers Andrew Hunt and David Thomas who are both known for their big income in respectively agile techniques and Ruby programming language. The Pragmatic Programmer tries to gather all the necessary characteristics of a programmer that creates high quality, easy to reuse and bug free software solutions.
First of all, the authors describe the pragmatic programmer’s characteristics and what qualities that programmer should have, for example, they suggest that a pragmatic programmer must accept his or hers responsibilities and do not make trifling excuses for mistakes he or she have done. They suggest that a good programmer should not allow making minor mistakes because of the psychological phenomenon which is called the broken window theory.
In addition, a pragmatic programmer should invest regularly in his knowledge and portfolio by experimenting with unpopular and sometimes risky technologies or new languages. Authors suggest that a good programmer should learn new programming language each year. Also there are some tips on how to avoid repeating the same code blocks and maintain a clear and unambiguous code. Everything should be separated to abstract different modules that interact with each other. The book also stresses that there are no endpoints and final decisions for the projects and maintenance starts with the first steps of the project. Authors advise not to hurry and plan everything in detail even if you have a strict and hard to meet deadlines. Thinking more at first will save lots of time at the end and will help you to prevent from making major bugs and bad decisions on the go.
Thirdly, the importance of quality tools is considered one of the most important things especially when optimizing the job. Authors give an analogy with tree cutters and other craftsman by stressing the importance of tools. In addition, a pragmatic programmer should not be afraid of command line and choose IDE wisely. Version Control Systems should be used even on small projects because they help to save and archive all changes made in the code. When talking about optimizing tasks, there is a suggestion to learn a text editing language such as Perl which will definitely help in replacing some parts of code and creating code generators or working with the text itself. A simple text format is said to be the best way to save data for later use.
Moreover, this book might help you to understand that no one is writing perfect code and you need to think of mistakes as problems that you need to solve. Being nervous or angry will not help in this case. The book introduces some tips in order to help avoid these problems, for example, exceptions, MVC architecture, modules, metadata capabilities, parallel programming and testing techniques, blackboards are discussed in the book. Authors do not suggest to create fastest algorithms too because they are usually very complicated and not readable.
Finally, there are great advices on what to do and how to handle when working with pragmatic projects. The authors also make an analogy for people to think that programming and software engineering is like having a garden which you need to look after constantly and you should not think about it as construction site which has the end. Pragmatic programmers should not let bad habits overcome the quality of code and projects because they will destroy your garden as pervasive disease.