What I Learnt From The Pragmatic Programmer 2nd Edition
Tags: career, books, beginners, testing
Published: 2020-04-24 10:09:22

I always wanted to do an Ask Me Anything. Since today was # Introduction
Ever since I heard about the book "The Pragmatic Programmer", I immediately borrowed it from my local library. It had shaped my thinking as a developer, due to its choke-full of common sense and practicality. Which was not apparently present in my studies on software engineering. Not in the realms of algorithm or architecture but instead comes directly from experience in working the industry. 

Despite I was a broke student. I made a promise myself to buy it one day as part of my personal library. Imagine my surprise when I heard about it in an episode of [Test & Code][1] that a revisited version is out. I rushed to keep it and was able to get a copy by sharing the cost of delivery with 3 others to have it shipped to Singapore.

# Continous Learning Regardless If It is Technical or Soft Skills
I believe the key focus on the book is on the need for self-education and taking charge of your own education as a developer. Regardless if it is your own technical skills or soft skills as you grow in your development journey.

You should commit to yourself to read a technical book once a month and do not skimp on non-technical books as a lot of software development depends on these soft skills. Which sadly does not cover in the full depth of the importance of it. Despite it may not be technical in nature like teaching, mentoring, leadership, ethics, business knowledge and communication.

Learn about it will prove useful as you grow to solve problems that may not require this same technical prowess. Therefore it is not an excuse to slack off, in not adopting or learning new methodology or technology. Just put it as part of your own toolkit for different situations when the need arises.

# Documentation Should Grow With You Not Bolt-On
One should treat documentation as a **living** document that grows with you from the start to the end. Instead, treat **writing** as another programming languages with **style guides** and **ways to present** knowledge & technical information that is a digestible format for anyone besides you. 
 
Do not go through the motion in your documentation, instead write it as a chef would do. It serves as both **marketing tool** as well as **reducing the number of support hours** for your software.

# Everything You Do is a Prototype
Whatever is developed should be treated as a mockup/prototype even if it is finally delivered to users. As there will be times that you have to make radical changes to software that will perform differently. 

Therefore all software design must follow the concept that it has to be flexible and breakable to adapt to the changes of environment, use cases, the business objective. So that it is easily replaceable without affecting the overall structure of your software system.
 
[Design by Contract][2] is useful for API development which is applied as [OpenAPI][3]. This is why testing is easy for design by contract. Which tests the assumption of your contract with a combination of the unit & property-based testing.

[Property-based testing][4] performs variations of tests based upon the input to test the limits of the system. The downside for property-based testing is the **randomness** that occurs when a bug is founded. Due to the random nature of the tests. Creating a unit test cases which tests for that same bug helps to solve the problem and tighten the net. 

# Conclusion
I would advise anyone who is developing software to get [The Pragmatic Programmer: your journey to mastery, 20th Anniversary Edition (2nd Edition)][5]. Regardless you are a junior or senior developer, there is gold for you to mine. It offers common sense and mental models for you to build on and learn in your developer journey.

It will be part of my own personal library equal in terms of contribution & complimentary to what Uncle Bob has talked about over the years. Which help you gain the perspective of being a **pragmatic programmer** to operate on a higher standard than you are now. 

If you like this article do **sign up** for my [Adventurer's Newsletter](https://maxongzb.activehosted.com/f/1) which contains interesting content I stumble across over the week in the area of **Python**, **Web Development**, **Startup**.

You can also **follow** me to get the **latest** update of my article on **Dev**
The original post was on [What I Learnt From Pragmatic Programmer 2nd Edition - Reading Time: 3 Mins](https://www.maxongzb.com/what-i-learnt-from-pragmatic-programmer-2nd-edition-reading-time-3-mins/) and cover image by [Ekaterina Novitskaya on Unsplash](https://unsplash.com/photos/w4gt4iu_ukY)

# Reference
* [The Pragmatic Programmer: your journey to mastery, 20th Anniversary Edition (2nd Edition)][5]
* [Developer Guide to Content Creation][6]
* [Clean Code][7]
* [5 Ways to Increase API Adoption][8]
* [Design by Contract][2]
* [OpenAPI][3]
* [What is Property-Based Testing][4]


[1]: https://testandcode.com/
[2]: https://en.wikipedia.org/wiki/Design_by_contract
[3]: https://www.openapis.org/
[4]: https://hypothesis.works/articles/what-is-property-based-testing/
[5]: https://amzn.to/3aoSR4o
[6]: https://www.developersguidetocontent.com/
[7]: https://amzn.to/2XOEYtL
[8]: https://www.programmableweb.com/news/5-ways-to-increase-api-adoption/analysis/2015/06/12