Here are 61 books that Function and Reactive Domain Modeling fans have personally recommended if you like
Function and Reactive Domain Modeling.
Shepherd is a community of 12,000+ authors and super readers sharing their favorite books with the world.
If someone had told me during my early professional years that I would become a strong advocate for functional programming and the author of a fundamental book on functional software engineering, I would have found it hard to believe. Was functional programming truly worth dedicating my life to? However, once I experienced the sheer beauty of functional programming, there was no turning back. I delved deep into Haskell and functional C++, and began writing articles, giving talks, and developing various technologies. I realized that I possessed a truly unique perspective on approaching software engineering in functional languages, and that there was a significant knowledge gap that needed to be filled for the benefit of all.
My journey in the world of software development has been arduous and challenging.
One of the common struggles we all face is the overwhelming number of solutions available, making it impossible to fully grasp everything at a deep level.
Just when I thought I had mastered an approach and felt competent in it, a new shiny approach would emerge, demanding my immediate attention. It often felt like a never-ending race to keep up with the ever-evolving field.
This constant pursuit of staying relevant as a software engineer can be frustrating, as it feels like we are always lagging behind the rapidly advancing world. I discovered that knowledge of specific technologies, frameworks, or libraries does not easily transfer across different technology stacks. They are too specific and lack universality. It was then that I turned my focus to more general principles of software engineering.
I realized that there are fundamental engineering…
Incorporate effective domain modeling into the software development process
Software design thought leader and founder of Domain Language, Eric Evans, provides a systematic approach to domain-driven design, presenting an extensive set of design best practices, experience-based techniques, and fundamental principles that facilitate the development of software projects facing complex domains. Intertwining system design and development practice, this book incorporates numerous examples based on actual projects to illustrate the application of domain-driven design to real-world software modeling and development.
Domain Model: Part I outlines the goals of domain-driven development, defines terms, and gives an overview of the implications of using the…
The Victorian mansion, Evenmere, is the mechanism that runs the universe.
The lamps must be lit, or the stars die. The clocks must be wound, or Time ceases. The Balance between Order and Chaos must be preserved, or Existence crumbles.
Appointed the Steward of Evenmere, Carter Anderson must learn the…
If someone had told me during my early professional years that I would become a strong advocate for functional programming and the author of a fundamental book on functional software engineering, I would have found it hard to believe. Was functional programming truly worth dedicating my life to? However, once I experienced the sheer beauty of functional programming, there was no turning back. I delved deep into Haskell and functional C++, and began writing articles, giving talks, and developing various technologies. I realized that I possessed a truly unique perspective on approaching software engineering in functional languages, and that there was a significant knowledge gap that needed to be filled for the benefit of all.
It was a wonderful time when I first embarked on my programming journey.
I felt an immense sense of power over computers and had countless ideas on how programming could improve my life and the lives of others. Everything seemed within reach, and I approached the world of programming with great enthusiasm in the early 2000s.
However, reality hit me like a cold shower when I started delving into actual software development. I quickly realized that it was far more challenging than just writing code.
Each programming language and technology had its hidden complexities and treacherous pitfalls. Every domain was rife with intricate nuances that had to be understood before attempting to develop software within it. I soon discovered that there was no such thing as a "perfect solution" that could be universally applied.
As I ventured into working with real-world domains, I confronted the daunting task of addressing the…
When carefully selected and used, Domain-Specific Languages (DSLs) may simplify complex code, promote effective communication with customers, improve productivity, and unclog development bottlenecks. In Domain-Specific Languages, noted software development expert Martin Fowler first provides the information software professionals need to decide if and when to utilize DSLs. Then, where DSLs prove suitable, Fowler presents effective techniques for building them, and guides software engineers in choosing the right approaches for their applications.
This book's techniques may be utilized with most modern object-oriented languages; the author provides numerous examples in Java and C#, as well as selected examples in Ruby. Wherever possible,…
I'm a programmer with a desire to constantly learn and improve. I have many years of experience in writing mission-critical software in highly event-driven areas such as FinTech and online auctions. Through interesting and challenging projects, I've always been fascinated by trying to generalize and abstract what it is that makes good code; so things like design patterns and best practices were just up my street. As I expanded this personal research, I found that functional programming provided many interesting techniques, but that many professionals in the industry were unaware of them. This is why I decided to show these techniques and their benefits to a wider audience through my book Functional Programming in C#.
Many functional programming books concentrate on the detail of functional techniques (things like recursion or higher-order functions), often leaving open the gap between these techniques and their concrete application to solve everyday programming tasks.
This was one of the reasons I wrote my book, and one source of inspiration for me was the work of F# evangelist Scott Wlashin.
For many years, Scott has been showing how he applies functional thinking in his daily practice centered around e-commerce, through blog posts on his popular site and his talks at programming conferences. At popular request, he's organized these ideas into his book Domain Modelling Made Functional.
The examples are practical enough that every business application programmer will be able to relate to them, and his explanation of functional programming techniques and ideas is clear and rigorous. Although Scott encourages the adoption of F# (the functional-first language of the .NET family), these…
You want increased customer satisfaction, faster development cycles, and less wasted work. Domain-driven design (DDD) combined with functional programming is the innovative combo that will get you there. In this pragmatic, down-to-earth guide, you'll see how applying the core principles of functional programming can result in software designs that model real-world requirements both elegantly and concisely - often more so than an object-oriented approach. Practical examples in the open-source F# functional language, and examples from familiar business domains, show you how to apply these techniques to build software that is business-focused, flexible, and high quality. Domain-driven design is a well-established…
The Guardian of the Palace is the first novel in a modern fantasy series set in a New York City where magic is real—but hidden, suppressed, and dangerous when exposed.
When an ancient magic begins to leak into the world, a small group of unlikely allies is forced to act…
I have been working with computers for decades now – having started with programmable handheld calculators and working my way up and down through mainframes, mini- and micro-computers. I always thought there is an art to writing software, and that good software can be read and admired. Maintainability, readability, and testability are some core needs for software, and after going through many programming paradigms, I feel that functional programming (FP) is the way to go – and several modern web frameworks agree. JavaScript (and now, TypeScript) are essential to web development, and I wanted to show how FP could be successfully used with those languages, and thus my book.
This book is different from the others I recommended, because its focus is not really on creating algorithms, but rather on how to improve code with a systematic process, keeping functionality but enhancing quality.
The author shows several practical techniques that he applies to real-world problems and empower you to elevate your code's quality and adapt it seamlessly to changing needs. It's not just about writing code; it's about becoming a more effective and confident developer.
I consider this book a companion on the journey to mastering the craft of coding. With it, you’ll always be able to achieve higher-quality code, no matter the original version of the code.
Refactoring is about improving the design of existing code. It is the process of changing a software system in such a way that it does not alter the external behavior of the code, yet improves its internal structure. With refactoring you can even take a bad design and rework it into a good one. This book offers a thorough discussion of the principles of refactoring, including where to spot opportunities for refactoring, and how to set up the required tests. There is also a catalog of more than 40 proven refactorings with details as to when and why to use…
The art of computer programming is a lot like the art of writing: It's not just about what your program says but about how it says it. One of the reasons I like the C and C++ languages—which I picked up in the late 1990s and haven't put down since—is that, as compiled, non-sandboxed languages, they promise total control over the machine. Show me where you want each byte of data to go in memory; show me the machine instructions you want; and I can make C++ do that for you.
This tour de force probably couldn't get written today. Kernighan and Plauger take snippets of Fortran and PL/I code from real, published textbooks and find things to fix about them. Now, many of their specific concerns are relics of the "structured programming" wars of the 1960s (overuse of arithmetic IF and GOTO) or quirks of the programming languages in question (undeclared variables silently getting the wrong type); but this is educational in itself. If you wonder what's so bad about GOTO, or why we need to declare functions and variables before use, this book may enlighten you. And despite its age, almost every example finds some present-day analog. For example, Kernighan and Plauger's advice to avoid manually counted Hollerith strings in Fortran applies equally to manually counted array bounds in C++: don't write "int a[5]" when you can write "int a[]". The authors boil every couple of pages down to…
This rounds out a collection of works by Kernighan. Each book of his covers a different aspect of software, in clear form with logical concepts. This book covers the look and feel of the code itself. As with the other works, some concepts have evolved as languages have evolved and the normal size of software projects has continued to expand. But the book still has many relevant points and is an interesting read for those wanting to delve into how software development as a process has been growing and evolving over time.
The art of computer programming is a lot like the art of writing: It's not just about what your program says but about how it says it. One of the reasons I like the C and C++ languages—which I picked up in the late 1990s and haven't put down since—is that, as compiled, non-sandboxed languages, they promise total control over the machine. Show me where you want each byte of data to go in memory; show me the machine instructions you want; and I can make C++ do that for you.
Scott Meyers' Effective C++ series was insanely influential around the turn of the millennium. Then C++11 obsoleted almost the whole series by changing the language out from under it. This book—Scott Meyers' last, as of 2024—is the only one that remains relevant to today's C++. It assumes the reader is reasonably familiar with C++98, and then explains smart pointers, move semantics, perfect forwarding, std::initializer_list, decltype and auto, and many other "modern C++" features, in Meyers' trademark item-oriented format, which is easily digestible and quotable.
The past decade of C++ standardization has added plenty of things that this book doesn't mention; but the subjects it does talk about, by and large, have not yet become obsolete. And there's still nobody who writes about C++ quite like Scott Meyers.
Coming to grips with C++11 and C++14 is more than a matter of familiarizing yourself with the features they introduce (e.g., auto type declarations, move semantics, lambda expressions, and concurrency support). The challenge is learning to use those features effectively - so that your software is correct, efficient, maintainable, and portable. That's where this practical book comes in. It describes how to write truly great software using C++11 and C++14 - i.e. using modern C++. Topics include: The pros and cons of braced initialization, noexcept specifications, perfect forwarding, and smart pointer make functions The relationships among std::move, std::forward, rvalue references,…
Aury and Scott travel to the Finger Lakes in New York’s wine country to get to the bottom of the mysterious happenings at the Songscape Winery. Disturbed furniture and curious noises are one thing, but when a customer winds up dead, it’s time to dig into the details and see…
The art of computer programming is a lot like the art of writing: It's not just about what your program says but about how it says it. One of the reasons I like the C and C++ languages—which I picked up in the late 1990s and haven't put down since—is that, as compiled, non-sandboxed languages, they promise total control over the machine. Show me where you want each byte of data to go in memory; show me the machine instructions you want; and I can make C++ do that for you.
This book greatly influenced my philosophy around style. Norman's ostensible subject is the design of physical objects, like emergency exits, shower faucets, and refrigerators, but most of what he says is directly applicable to software design and API design, too.
For example: Whatever you expose or document about your interface, the user will take that and form a mental model of the implementation—and he'll program against that mental model, not against your documentation. So you'd better make sure that your interface—by exposing certain details and deemphasizing others, appropriate naming, and so on—suggests a mental model that will be useful to the user (even if it is not correct in every particular).
For example, a horizontal rod mounted on a door affords pushing (a bit of jargon that's entered my technical vocabulary), while a vertical rod affords pulling. If you use the design language of a horizontal rod, people will…
Even the smartest among us can feel inept as we fail to figure out which light switch or oven burner to turn on, or whether to push, pull, or slide a door. The fault, argues this ingenious,even liberating,book, lies not in ourselves, but in product design that ignores the needs of users and the principles of cognitive psychology. The problems range from ambiguous and hidden controls to arbitrary relationships between controls and functions, coupled with a lack of feedback or other assistance and unreasonable demands on memorization. The Design of Everyday Things shows that good, usable design is possible. The…
I’ve always enjoyed mentoring folks whether new or experienced in programming. Whether it is teaching an intern or a high school robotics student, or onboarding an experienced Java developer, it brings me joy to see people learn. I also love to read. Being able to recommend some of my favorite books can help even more people absorb all of this information.
Head First books are always fun. They know how to engage your brain and have cartoons/puzzles.
I recommend this book whether you are first learning git or have used it for some time. Understanding git is a big deal so you can work efficiently. Without having to keep deleting the repository and starting over!
Many people who use Git rely on "recipes"--copying and pasting commands they find on the internet without really understanding how Git actually works. But what do you do if you find yourself in a tight spot? You can't simply wing it. With this unique hands-on guide, you'll learn the ways of Git and have fun while doing it. Raju Gandhi peels back the layers to reveal the simple yet powerful engine that powers Git, so you'll understand not just the how but the why. You'll master branches, merges, commit messages, search, utilities, and…
I am a professional software developer and technical author, with a number of books published by O’Reilly and Prentice Hall. I have been working in the C / C++ / Unix / Linux world for over four decades. I am also the maintainer of the Free Software Foundation’s GNU Awk interpreter for the awk programming language. I have a passion for writing clear, correct, efficient, and portable code, and for applying the UNIX and Software Tools principles in my development. I hope that this book list will help you climb the learning curve of doing great Unix / Linux development.
This book (an update toSoftware Tools by the same authors) codifies and instructs the principles by which the Unix / Linux toolset was designed. It emphasizes clear, robust code, and the building of tools, reusable, general purpose software components that can be hooked together to solve many kinds of programming and data management tasks. The lessons it teaches are timeless, and the current generation of programmers would be well served to try and learn them.
The original Software Tools was perhaps the single most influential software book that I ever read. It taught me how to thinkwith the Unix mindset, how to make the best use of what the Unix system (and now Linux) offers, and how to focus on readability and maintainability in my own software.
With the same style and clarity that characterized their highly acclaimed The Elements of Programming Style and Software Tools, the authors have written Software Tools in Pascal to teach how to write good Pascal programs that make good tools. The programs contained in the book are not artificial, but are actual tools that have proved valuable in the production of other programs. Structured programming and top-down design are emphasized and applied to every program, as are principles of sound design, testing, efficiency, and portability. All of the programs are complete and have been tested directly from the text. The programs…
Magical realism meets the magic of Christmas in this mix of Jewish, New Testament, and Santa stories–all reenacted in an urban psychiatric hospital!
On locked ward 5C4, Josh, a patient with many similarities to Jesus, is hospitalized concurrently with Nick, a patient with many similarities to Santa. The two argue…
I first learned to program in college in 1970. Since then I’ve spent much time as a software developer, manager, tester, process improvement leader, consultant, trainer, author, and, of course, a user. I quickly learned that I didn’t have time to make all the mistakes that every software developer before me had already made. My training and writing career has involved sharing what I and others have learned with audiences to help them quickly become more effective software development team members, regardless of their project role. This book distills insights and observations both from my own experience and from what I’ve heard from thousands of students and consulting clients.
Robert Glass is one of the foundational leaders of the discipline of software engineering. He’s done it all and seen it all. This book includes 55 facts and 10 fallacies about many aspects of software engineering, grouped into the major categories of management, the life cycle, and quality. Based on my own experience, I can vouch for the validity of all the points Glass makes.
These timeless truths can help you avoid going down an ineffective path, wasting time only to rediscover the same facts on your own. There’s no need to retrace the missteps from the past. Books like this can keep your energies focused where they will provide the most value to your customers.
The practice of building software is a "new kid on the block" technology. Though it may not seem this way for those who have been in the field for most of their careers, in the overall scheme of professions, software builders are relative "newbies."
In the short history of the software field, a lot of facts have been identified, and a lot of fallacies promulgated. Those facts and fallacies are what this book is about.
There's a problem with those facts-and, as you might imagine, those fallacies. Many of these fundamentally important facts are learned by a software engineer, but…