Discover more from Tech World With Milan Newsletter
Learn things that don't change
And take a look into books I recommend you to read in 2024. (34 books)
In this issue, we will try to understand why we should learn fundamentals rather than frameworks and what the effect of this is.
Also, you will see new book recommendations for 2024 that every software engineer needs to read.
So, let’s dive in.
Have you ever wondered why some technologies are still with us and some have disappeared? Here is the Lindy effect to explain it. This effect tells me developers will still use C# and SQL when I retire. It is a concept in technology and innovation that suggests that the future life expectancy of a non-perishable item is proportional to its current age. In other words, the longer an item has been in use, the longer it is likely to continue to be used.
The concept was named after Lindy's Deli in New York City, where Nassim Nicholas Taleb popularized it in his book "The Black Swan." According to Taleb, the Lindy effect applies to many things, including technologies, ideas, and cultures, and evaluates their potential longevity.
We developers like to learn new stuff as soon as possible. That stuff consists mostly of new frameworks and tools (such as React, Angular, Spring, Web Forms, etc.). Yet, those frameworks usually have a short life, 2 to 5 years at their best. Instead of learning frameworks, which are needed to some extent, we should focus more on learning fundamentals.
Learning software development fundamentals allows developers to understand the underlying principles and concepts common across different frameworks and programming languages. This understanding allows for more flexibility and adaptability when working with new technologies or facing problems that a specific framework may take time to solve.
Additionally, a strong understanding of the fundamentals can lead to more efficient and effective use of frameworks, as the developer can better understand how to customize and extend them to meet specific needs.
Take an example of a web application that allows users to upload and share images, which is done, e.g., in Ruby on Rails and its functionalities for image processing. If the number of users increases, we could only work with performance issues if we know the framework well. Yet, if we understand the fundamentals of web development, we could identify bottlenecks and try different solutions, such as using CDN-s, optimizing image sizes, using various storage solutions, etc.
So, which fundamentals do you learn? Here are some:
Algorithms
Data
Clean Code
SOLID Principles
OO Programming
Design Patterns
Distributed Computing
System Design
And more.
Try to learn those fundamentals by reading these books in the next section.
All the energy I put into learning those technologies 10-15 years ago continues to support my work today. Some things changed, but the fundamentals stayed the same and even improved.
So, try to learn things that don’t change (quote from Jeff Bezos). Focus on foundations, not frameworks. I've been doing this for two decades now.
Books Every Software Engineer Must Read in 2024.
Last year, I wrote a list of books every developer needs to read. This year, I updated the list with new titles that I found interesting and important in different categories.
Here is the list, separated by sections:
General
1. The Pragmatic Programmer by David Thomas and Andrew Hunt.
This book provides technical and professional practical advice for developers. It examines what it means to be a modern developer, covering topics ranging from personal responsibility and career development to architectural techniques. Even though it was written in 1999, it is still valid in many aspects. The unique thing about this book is that it teaches you pragmatically with a collection of tips to improve the development process.
I wrote about the book here.
2. Modern Software Engineering by David Farley
This book focuses on building great software, where the author offers a solid framework to connect good practices such as Continuous Delivery (CD), Hexagonal Architecture, and Test-Driven Development to the main ideas in software engineering. He also writes about the history of software development and the ideas that have changed the industry.
3. Code Complete: A Practical Handbook of Software Construction by Steve McConnell
Again, one of the books written more than 15 years ago is still valid today. It deals with design, coding, debugging, and testing. In more than 900 pages, the authors describe how to write programs for people first and then for computers second, how to divide your code into domains, and how to master the human qualities of top coders (humility, curiosity, and, most importantly, keeping your ego in check).
4. Software Engineering at Google - by Titus Winters, Tom Manshreck, and Hyrum Wright (Free Ebook)
The Software Engineering at Google book is not about programming, per se, but about the engineering practices utilized at Google to make their codebase sustainable and healthy. In this book, you will learn the difference between software engineering and programming, why the Beyonce rule is essential, and how to shift left and properly test things. Also, you will learn why they are small and frequently release importance.
I wrote about the book here.
Good Practices
5. Clean Code by Uncle Bob Martin.
It is one of the most excellent software development books ever. It was written to teach software engineers the principles of writing clean programming code. The book contains many examples showing how to refactor code to be more readable and maintainable. In addition, it includes chapters on common mistakes made by all kinds of programmers and chapters explaining the SOLID principles of object-oriented design.
I recently gave a presentation on Clean Code development. You can look it up here.
6. Head First Design Patterns by Eric Freeman.
The book describes the leading software design patterns for creating more flexible, elegant, and reusable designs without rediscovering design solutions. It is written similarly to the For Dummies series of books, meaning it is easy for beginners to understand.
Take a look at my book “Design Patterns in Use.”
7. Refactoring by Martin Fowler.
In this book, Martin Fowler discusses improving the design of existing code. Refactoring is changing a software system that does not alter the code’s external behavior but improves its internal structure. In the 2nd edition of the book, Martin used JavaScript instead of Java, which was used in the 1st edition.
Data Structures and Algorithms
8. Grokking Algorithms by Aditya Bhargava.
It is an easy-to-understand book on applying standard algorithms to developers' daily practical problems. It starts with sorting and searching and then moves on to data compression and artificial intelligence with code samples in Python. Probably the best book to begin your algorithm journey with.
9. Introduction to Algorithms, by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
It is one of the most famous books on in-depth algorithms (CLRS). It represents a comprehensive guide for all readers, from beginners to professionals. Each chapter is relatively self-contained and can be used as a unit of study. Algorithms are described in English and pseudocode, so they can be familiar even to someone who didn’t do much coding.
Data
10. Designing Data-Intensive Applications by Martin Kleppman
The book describes advanced data concepts, such as databases and data models, and a deep dive into distributed concepts, such as transactions, replication, consistency, etc. It is one of the most influential books in this category.
11. Learning SQL by Alan Beaulieu (Free Ebook)
This introduction to SQL will get you started quickly. The book will help you quickly understand all the SQL essentials, whether you need to create database applications, carry out administrative duties, or generate reports.
If you want to learn more about SQL, check out this text.
Testing
12. Growing OO Software by Tests by Steve Freeman.
The authors outline their procedures, design goals, and some equipment they use to complete the task. Next, you’ll understand how TDD functions on several levels through an extended worked example, utilizing tests to direct the code's features and object-oriented structure and mock objects to find and then define links between objects.
13. Unit Testing Principles, Practices, and Patterns by Vladimir Khorikov.
The book demonstrates how to apply best practices to improve your unit tests. You'll discover how to tell which tests are working, which require restructuring, and which must be removed entirely!
14. The Art of Unit Testing by Roy Osherove.
This book is focused on unit testing, which is crucial for any developer to do to deliver a good piece of software. The book explains the core competencies for unit testing, how to scope it, and what to unit test.
15. TDD by Example by Kent Beck.
TDD is a software engineering technique that has proven effective over time. In this book, Kent Beck teaches programmers TDD by example.
Software Architecture
16. Fundamentals Of Software Architecture by Mark Richards and Neil Ford.
This book offers the first thorough examination of software architecture's numerous facets. It covers architectural characteristics, patterns, component selection, diagramming and presenting architecture, evolutionary architecture, and many other topics for aspiring and practicing architects.
17. Clean Architecture by Uncle Bob Martin.
The book introduces necessary disciplines and practices for software architects using design principles to address function, component separation, and data management. It shows how to use different high-level structures for various kinds of applications and how to define appropriate boundaries and layers.
Read my text on Clean architecture.
18. Software Architecture The Hard Parts by Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani.
This book reveals how to choose proper architecture for different solutions among various compromises. You will learn to analyze trade-offs, document your decisions, and understand the complexities of breaking apart monolithic applications. It also shows how to handle data in a highly distributed architecture.
Read my review of the book.
19. Domain Driven Design Quickly by Abel Avram and Floyd Marinescu (Free Ebook).
This is probably the best book on DDD. It shows the DDD approach with concrete examples that build an actual project. It also explains the hexagonal architecture typically associated with DDD. It is a summary of Eric Evans's “Domain-Driven Design” book.
20. A Philosophy of Software Design by John Ousterhout.
This book explains how to break down complicated software systems into independently implementable pieces. After that, it discusses philosophical concerns about approaching the software design process and offers a list of design guidelines to follow. The book also presents a list of warning signs for bad design. It is a great companion to the Clean Code as it offers a different perspective.
Read my review of the book.
Distributed Systems
21. Understanding Distributed Systems by Roberto Vitillo.
The book teaches the fundamentals of distributed systems. This book is a great first book on distributed systems, and it introduces the network stack, data consistency models, scalability and reliability patterns, and much more.
22. Designing Distributed Systems by Brendan Burns (Free Ebook)
In this book, you will learn how patterns and reusable components enable the rapid development of reliable distributed systems, how to split your application into a group of containers on one machine using the sidecar, adapter, and ambassador patterns, and also to explore loosely coupled multi-node distributed patterns for replication, scaling, and communication between the components.
DevOps
23. DevOps Handbook by Gene Kim, Patrick Debois, John Willis, and Jez Humble.
The book is a continuation of The Phoenix Project. It attempts to define the guidelines for successful DevOps and dispel any lingering misconceptions about this subject. It is intended for everyone in the IT sector, from programmers to technology executives, and it should be attractive to seasoned practitioners and DevOps newcomers.
24. Continuous Delivery by Jez Humble and David Farley.
The writers present the foundations of a quick, dependable, low-risk delivery procedure. They then introduce the "deployment pipeline," an automated mechanism for handling all changes from check-in to release. They then discuss the "ecosystem" required to support continuous delivery, including governance, infrastructure, data, and configuration management.
25. Accelerate by Nicole Forsgren, Jez Humble, and Gene Kim.
The authors examined what made successful technology organizations different from their less successful rivals. The book compiles years' worth of thorough research from State of DevOps Reports, which were based on 23,000 datasets from businesses worldwide. According to the study, four key metrics may be used to compare how organizations operate (Cycle Time, Deployment Frequency, Change Failure Rate, and Mean Time to Recovery).
Check more book recommendations from this category in my DevOps Roadmap for 2024.
Machine Learning
26. The Hundred-Page Machine Learning Book by Andriy Burkov
The author of this short book offers a high-level review of various machine learning subjects that will be interesting to novices and prospective students who want to quickly learn about the breadth of opportunities provided by ML algorithms before delving more deeply into the issue.
27. Designing Machine Learning Systems by Chip Huyen
In this book, you will learn how to build and design holistic ML systems that are reliable, scalable, and maintainable. The author analyses each decision point in building such systems, from how to process and train data to which features to use and how to monitor them.
Leadership
28. The Five Dysfunctions of a Team by Patrick Lencioni
This book explores different weaknesses that can undermine any team. Those weaknesses are Absence of Trust, Fear of Conflict, Lack of Commitment, Avoidance of Accountability, and Inattention to Results.
Read more about it in my text.
29. Drive by Daniel Pink
This book focuses on understanding what truly motivates people. Pink argues that traditional methods based on rewards and punishments (extrinsic motivators) are often ineffective. Instead, he proposes that the key to motivation lies in intrinsic factors: autonomy (control over work), mastery (opportunity to improve skills), and purpose (a sense of working towards something meaningful).
Read my text about the book.
30. The Making of a Manager by Julie Zhuo
This guidebook is aimed at new managers, especially those unprepared for the role. Zhuo, a former tech executive, shares her experiences of being thrust into a leadership position at a young age. The book emphasizes that great managers are developed, not born. It offers practical advice on managing a team, from shifting a mindset from individual contributor to supporting others, providing feedback, and delegating tasks.
Personal Development
31. How to Win Friends & Influence People by Dale Carnegie
This classic self-help book provides timeless principles for building strong relationships and getting what you want out of life. It emphasizes the importance of being a good listener, showing genuine interest in others, and encouraging them to talk about themselves. The book also offers tips for praising others sincerely, avoiding arguments, and influencing people without causing resentment. It is one of the best books I read and has influenced me and my relationships.
32. Deep Work by Cal Newport
Cal Newport's "Deep Work" argues that the ability to focus intensely on cognitively demanding tasks without distraction is becoming increasingly valuable in our information overload world. The book highlights the benefits of deep work, like improved learning and performance, and offers concrete strategies to improve this skill. The author proposes different deep work scheduling philosophies, from separating focused work from shallow tasks to integrating them in regular cycles. It is one of the most essential books for software engineers.
33. The 7 Habits of Highly Effective People by Stephen R. Covey
In this book, Stephen Covey outlines a path to personal and professional success through seven core habits. The first three focus on taking the initiative, setting goals, and prioritizing tasks. The next three emphasize win-win solutions, empathetic communication, and collaboration. Finally, the last Habit stresses the importance of continuous self-improvement across all dimensions of life.
You can read more about the book in my review (including the 8th Habit). It was one of the books that changed my life and career 10x.
34. Atomic Habits by James Clear
Atomic Habits explores the science of habit formation and explains how small, consistent changes can lead to remarkable long-term results. The book offers a practical framework for building good habits and breaking bad ones, focusing on the "habit loop" and using cues, cravings, responses, and rewards to create a system that will transform one's behavior. This book is a must-read for everyone!
Check my book on setting and achieving goals to improve your personal and professional life, where you can learn more about habits formation.
Also, check my list of the most outstanding software development books of all time:
Of course, you probably cannot read all of these books in a year (correctly), but you can select from this list those most important to you in your current career/life situation and goals.
“If you haven't read hundreds of books, you are functionally illiterate, and you will be incompetent because your personal experiences alone aren't broad enough to sustain you.” ― Jim Mattis, Call Sign Chaos: Learning to Lead
More ways I can help you
Patreon Community: Join my community of engineers, managers, and software architects. You will get exclusive benefits, including all of my books and templates (worth 100$), early access to my content, insider news, helpful resources and tools, priority support, and the possibility to influence my work.
Sponsoring this newsletter will promote you to 33,000+ subscribers. It puts you in front of an audience of many engineering leaders and senior engineers who influence tech decisions and purchases.
1:1 Coaching: Book a working session with me. 1:1 coaching is available for personal and organizational/team growth topics. I help you become a high-performing leader 🚀.
mythical man-month is a must read for any software engineer. It covers all non-technical topics we need to know!
What a great list. I have at least a dozen or so of those titles. Several have been must reads for all new team members such as Head First Design Patterns and Code Complete. Don’t know if he is still popular but always found Celko to be a goto resource for SQL.