An Engineering Approach
Mark Richards, Neal Ford

#Software
#Architecture
#Engineering
#Fundamentals
💼 بررسیهای حقوق جهانی بهطور مرتب شغل معمار نرمافزار را در بین ۱۰ شغل برتر قرار میدهند، اما هیچ راهنمای واقعی برای کمک به توسعهدهندگان برای تبدیل شدن به معمار وجود نداشت. تا حالا.
📘 این نسخه بهروز شده، نمایی جامع از جنبههای مختلف معماری نرمافزار ارائه میدهد و پنج فصل جدید شامل تازهترین بینشها از این حوزه را در بر میگیرد.
🏗 معماران تازهکار و حرفهای هر دو به بررسی ویژگیهای معماری، الگوهای معماری، تعیین مؤلفهها، ترسیم معماری، حاکمیت، داده، هوش مصنوعی مولد، توپولوژی تیمها و بسیاری موضوعات دیگر خواهند پرداخت.
👨💻 Mark Richards و Neal Ford—کارکنان عملی که سالها بهطور حرفهای کلاسهای معماری نرمافزار تدریس کردهاند—بر اصول معماری تمرکز دارند که در تمام فناوریها و پشتهها کاربرد دارد.
🔍 شما معماری نرمافزار را در نوری مدرن بررسی خواهید کرد و همه نوآوریهای یک دهه گذشته را در نظر خواهید گرفت.
💡 این کتاب به بررسی میپردازد:
🏛️ سبکها و الگوهای معماری: میکروسرویسها، مونولیتهای مدولار، میکروکرنلها، معماریهای لایهای و بسیاری دیگر
🔧 مؤلفهها: شناسایی، coupling، cohesion، partitioning و granularity
🤝 مهارتهای نرم: مدیریت تیم مؤثر، همکاری، مدلهای تعامل با کسبوکار، مذاکره، ارائهها و بیشتر
🌐 مدرنیته: شیوههای مهندسی و روشهای عملیاتی که طی سالهای اخیر تغییرات بنیادین داشتهاند، شامل ملاحظات ابری و هوش مصنوعی مولد
📐 معماری بهعنوان یک رشته مهندسی: نتایج قابل تکرار، معیارها و ارزیابیهای ملموس که به معماری نرمافزار صلابت میبخشد
📑 فهرست مطالب
فصل 1: مقدمه
بخش اول: مبانی
فصل 2: تفکر معماری
فصل 3: مدولاریتی
فصل 4: ویژگیهای معماری تعریف شده
فصل 5: شناسایی ویژگیهای معماری
فصل 6: اندازهگیری و مدیریت ویژگیهای معماری
فصل 7: دامنه ویژگیهای معماری
فصل 8: تفکر مبتنی بر اجزاء
بخش دوم: سبکهای معماری
فصل 9: مبانی
فصل 10: سبک معماری لایهای
فصل 11: سبک معماری ماژولار مونو لیت
فصل 12: سبک معماری پایپلاین
فصل 13: سبک معماری میکروکرنل
فصل 14: سبک معماری مبتنی بر سرویس
فصل 15: سبک معماری رویدادمحور
فصل 16: سبک معماری مبتنی بر فضا
فصل 17: معماری سرویسمحور مبتنی بر ارکستراسیون
فصل 18: معماری میکروسرویسها
فصل 19: انتخاب سبک معماری مناسب
فصل 20: الگوهای معماری
بخش سوم: تکنیکها و مهارتهای نرم
فصل 21: تصمیمات معماری
فصل 22: تحلیل ریسک معماری
فصل 23: ترسیم معماری
فصل 24: کارآمدتر کردن تیمها
فصل 25: مهارتهای مذاکره و رهبری
فصل 26: تقاطعهای معماری
فصل 27: قوانین معماری نرمافزار، بازبینی شده
👤 درباره نویسندگان
🎓 Mark Richards معمار نرمافزار با تجربه عملی است که در معماری، طراحی و پیادهسازی میکروسرویسها، معماریهای سرویسگرا و سیستمهای توزیعشده مشارکت دارد.
💻 او از سال 1983 در صنعت نرمافزار فعال است و در معماری برنامهها، یکپارچهسازی و معماری سازمانی تخصص دارد.
📚 نویسنده چندین کتاب و ویدیوی فنی O'Reilly است، از جمله Fundamentals of Software Architecture و Software Architecture: The Hard Parts به همراه Neal Ford.
🎙 او در صدها کنفرانس و گروه کاربری در سراسر جهان سخنرانی کرده و آموزش داده است.
🎓 Neal Ford مدیر، معمار نرمافزار و متخصص Meme در شرکت Thoughtworks است.
🌐 او متخصص بینالمللی در توسعه و تحویل نرمافزار، به ویژه در تقاطع مهندسی چابک و معماری نرمافزار است.
📚 Neal نویسنده هشت کتاب، مقالات متعدد و دهها ارائه ویدیویی است و در صدها کنفرانس توسعهدهندگان جهان سخنرانی کرده است.
📖 از پیشگفتار
📐 ریاضیدانها نظریهها را بر اساس اصول و فرضیات بنیادین ایجاد میکنند. معماران نرمافزار نیز اصولی ایجاد میکنند، اما دنیای نرمافزار، نرمتر و پویاتر از ریاضیات است: اصول بنیادین همواره در حال تغییر هستند.
🌊 اکوسیستم توسعه نرمافزار در یک تعادل پویا قرار دارد: هرچند در هر لحظه در وضعیت متوازن است، اما در طول زمان رفتار دینامیک از خود نشان میدهد.
📦 ظهور کانتینریسازی و ابزارهایی مانند Kubernetes نمونهای عالی از این تغییرات است: ده سال پیش وجود نداشت، اما امروز کنفرانسهای زیادی برای کاربران آن برگزار میشود.
⚖️ معماران مسئولیت مهمی در بازنگری فرضیات و اصول گذشته دارند. بسیاری از کتابهای معماری نرمافزار در دورانی نوشته شدهاند که به سختی شبیه جهان امروز بود.
🚀 این کتاب معماری نرمافزار را در نوری مدرن بررسی میکند و همه نوآوریهای یک دهه گذشته، معیارها و سنجههای جدید مناسب ساختارهای امروز را در نظر میگیرد.
🔧 هدف فرعی کتاب: ارائه رویکرد مهندسی مدرن برای توسعه نرمافزار، با تأکید بر تکرارپذیری، دقت و تحلیل مؤثر.
⚖️ همچنین، تحلیل trade-off بهطور جدی مورد بحث قرار میگیرد: هیچ انتخابی در دنیای واقعی بدون تبادل نیست و معماران باید ارزیابی واقعبینانهای از هر گزینه داشته باشند.
📈 هر عصر جدید به شیوهها، ابزارها، سنجهها و الگوهای جدید نیاز دارد. این کتاب به معماران موجود و در حال رشد دیدگاه مدرن و جامع از معماری نرمافزار ارائه میدهد.
Salary surveys worldwide regularly place software architect in the top 10 best jobs, yet no real guide exists to help developers become architects. Until now. This updated edition provides a comprehensive overview of software architecture's many aspects, with five new chapters covering the latest insights from the field. Aspiring and existing architects alike will examine architectural characteristics, architectural patterns, component determination, diagramming architecture, governance, data, generative AI, team topologies, and many other topics.
Mark Richards and Neal Ford—hands-on practitioners who have taught software architecture classes professionally for years—focus on architecture principles that apply across all technology stacks. You'll explore software architecture in a modern light, taking into account all the innovations of the past decade.
This book examines:
Table of Contents
Chapter 1: Introduction
Part I: Foundations
Chapter 2: Architectural Thinking
Chapter 3: Modularity
Chapter 4: Architectural Characteristics Defined
Chapter 5: Identifying Architectural Characteristics
Chapter 6: Measuring and Governing Architecture Characteristics
Chapter 7: The Scope of Architectural Characteristics
Chapter 8: Component-Based Thinking
Part II: Architecture Styles
Chapter 9: Foundations
Chapter 10: Layered Architecture Style
Chapter 11: The Modular Monolith Architecture Style
Chapter 12: Pipeline Architecture Style
Chapter 13: Microkernel Architecture Style
Chapter 14: Service-Based Architecture Style
Chapter 15: Event-Driven Architecture Style
Chapter 16: Space-Based Architecture Style
Chapter 17: Orchestration-Driven Service-Oriented Architecture
Chapter 18: Microservices Architecture
Chapter 19: Choosing the Appropriate Architecture Style
Chapter 20: Architectural Patterns
Part III: Techniques and Soft Skills
Chapter 21: Architectural Decisions
Chapter 22: Analyzing Architecture Risk
Chapter 23: Diagramming Architecture
Chapter 24: Making Teams Effective
Chapter 25: Negotiation and Leadership Skills
Chapter 26: Architectural Intersections
Chapter 27: The Laws of Software Architecture, Revisited
About the Author
Mark Richards is an experienced hands-on software architect involved in the architecture, design, and implementation of microservices architectures, service-oriented architectures, and distributed systems. He's been in the software industry since 1983 and has significant experience and expertise in application, integration, and enterprise architecture. He's the author of numerous O'Reilly technical books and videos, including Fundamentals of Software Architecture, Software Architecture: The Hard Parts (both with Neal Ford) several books on microservices, the Software Architecture Fundamentals video series, the Enterprise Messaging video series and was a contributing author to 97 Things Every Software Architect Should Know. A speaker and trainer, he's given talks on a variety of enterprise-related technical topics at hundreds of conferences and user groups around the world.
Neal Ford is a director, software architect, and meme wrangler at Thoughtworks, a software company and a community of passionate, purpose-led individuals who think disruptively to deliver technology to address the toughest challenges, all while seeking to revolutionize the IT industry and create positive social change. He's an internationally recognized expert on software development and delivery, especially in the intersection of Agile engineering techniques and software architecture. Neal's authored eight books (and counting), a number of magazine articles, and dozens of video presentations (including a video on improving technical presentations) and spoken at hundreds of developers conferences worldwide. His topics of interest include software architecture, continuous delivery, functional programming, and cutting-edge software innovations. Check out his website, Nealford.com.
Mathematicians create theories based on axioms, assumptions for things indisputably true. Software architects build axioms as well, but the software world is, well, softer than mathematics: fundamental things continue to change at a rapid pace in the software world.
The software development ecosystem exists in a constant state of dynamic equilibrium: while it exists in a balanced state at any given point in time, it exhibits dynamic behavior over the long term. A great modern example of the nature of this ecosystem follows the ascension of containerization and the attendant changes wrought: tools like Kubernetes didn’t exist a decade ago, yet now entire software conferences exist to service its users. The software ecosystem changes fractally: one small change causes another small change; when repeated hundreds of time, it generates a new ecosystem.
Architects have an important responsibility to question assumptions and axioms left over from previous eras. Many of the books about software architecture were written in an era that only barely resembles the current world. In fact, the authors believe that we must question fundamental axioms on a regular basis, in light of improved engineering practices, operational ecosystems, software development processes—everything that makes up the messy, dynamic equilibrium where architects and developers work each day.
Careful observers of software architecture over time witnessed an evolution of capabilities. Starting with the engineering practices of Extreme Programming, continuing with continuous delivery, the DevOps revolution, microservices, containerization, and now cloud-based resources, all of these innovations led to new capabilities and trade-offs. As capabilities changed, so did architects’ perspectives on the industry. For many years, the tongue-in-cheek definition of software architecture was “the stuff that’s hard to change later.” Later, the microservices architecture style appeared, where change is a first-class design consideration.
Each new era requires new practices, tools, measurements, patterns, and a host of other changes. This book looks at software architecture in a modern light, taking into account all the innovations from the last decade, along with some new metrics and measures suited to today’s new structures and perspectives.
The subtitle of our book is “A Modern Engineering Approach.” Developers have long wished to change software development from a craft, where skilled artisans can create one-off works, to an engineering discipline, which implies repeatability, rigor, and effective analysis. While software engineering still lags behind other types of engineering disciplines by many orders of magnitude (to be fair, software is a very young discipline compared to most other types of engineering), architects have made huge improvements, which we’ll discuss. In particular, modern Agile engineering practices have allowed great strides in the types of systems that architects design.
We also address the critically important issue of trade-off analysis. As a software developer, it’s easy to become enamored with a particular technology or approach. But architects must always soberly assess the good, bad, and ugly of every choice, and virtually nothing in the real world offers convenient binary choices—everything is a trade-off. Given this pragmatic perspective, we strive to eliminate value judgments about technology and instead focus on analyzing trade-offs to equip our readers with an analytic eye toward technology choices.
This book won’t make someone a software architect overnight—it’s a nuanced field with many facets. We want to provide existing and burgeoning architects a good modern overview of software architecture and its many aspects, from structure to soft skills. While this book covers well-known patterns, we take a new approach, leaning on lessons learned, tools, engineering practices, and other input. We take many existing axioms in software architecture and rethink them in light of the current ecosystem, and design architectures, taking the modern landscape into account.
What's new in the second edition:
When we set out to write the second edition of Fundamentals of Software Architecture, we had a few ideas of things we wanted to flesh out and improve from the first edition, but like a lot of software projects, it kept growing.
One of our met goals was to make the styles sections more consistent, making them more useful for comparisons. We also made some changes to our star ratings to add sections and a few new categories, and added new sections on cloud considerations, data topologies, team topologies, and governance for each architectural style. Along the way we made major additions to a number of chapters on popular topics, such as Chapters 15 and 18, and added a new chapter (Chapter 11) on the modular monolith architectural style.
We also added several entirely new chapters covering architectural patterns in Chapter 20, the intersections of architecture in Chapter 26, and revisiting our laws of software architecture (of which there is a new corollary and a new law) in Chapter 27.









