Doing What Works to Build Better Software Faster
David Farley

#Software_Engineering
🧠 خلاقیت، اثربخشی و در نهایت کیفیت کدهای خودت را بالا ببر
🚀 دِیوید فارلی، از پیشگامان دِلیوری مداوم، در کتاب مهندسی نرمافزار مدرن به متخصصین نرمافزار کمک میکنه تا دید بهتری به کارشون داشته باشن، پروژهها رو موفقتر مدیریت کنن و کیفیت اپلیکیشنها و کیفیت زندگی خودشون و همکارهاشون رو واقعاً ارتقا بدن.
💡 فارلی که این کتاب رو برای برنامهنویسها، مدیران و لیدهای فنی در تمام سطوح تجربه نوشته، اصول ماندگاری رو که در قلب توسعه نرمافزار موثر قرار دارن، روشن میکنه. اون این حرفه رو به دو تمرین اصلی خلاصه میکنه: یادگیری و اکتشاف، و مدیریت پیچیدگی. برای هر کدوم از اینها، اصولی رو تعریف میکنه که میتونه بهت کمک کنه همه چیز، از طرز فکرت گرفته تا کیفیت کدهات رو بهبود بدی و روشهایی رو تفهیم میکنه که موفقیتشون در عمل ثابت شده.
🔬 ایدهها و تکنیکهای فارلی در قالب یک رویکرد یکپارچه، علمی و بنیادی برای حل مشکلات کاربردی توسعه نرمافزار، آن هم در چارچوب محدودیتهای اقتصادی واقعی، کنار هم قرار میگیرن. این رویکرد عمومی، ماندگار و فراگیر در مهندسی نرمافزار میتونه بهت کمک کنه تا مسائلی رو که هنوز باهاشون مواجه نشدی، با استفاده از تکنولوژیهای امروز و فردا حل کنی. این کتاب دید عمیقتری نسبت به کارهایی که هر روز انجام میدی بهت میده و کمکت میکنه نرمافزار بهتری رو سریعتر، با لذت بیشتر و رضایت فردی بالاتر خلق کنی.
🎯 نکات کلیدی
📋 شفافسازی دقیق چیزی که تلاش میکنی بهش برسی
🛠️ انتخاب ابزارها بر اساس معیارهای منطقی و عاقلانه
🏗️ سازماندهی کارها و سیستمها برای تسهیل پیشرفت مداوم و گامبهگام
📊 ارزیابی مسیر پیشرفت به سمت سیستمهای پویا، نه فقط تولید بیشتر «کدهای قدیمی و لگاسی»
🧪 کسب ارزش بیشتر از طریق آزمایشگری و تجربهگرایی
⚙️ حفظ کنترل اوضاع همزمان با پیچیدهتر شدن سیستمها
🧱 دستیابی به دقت و چارچوب محکم بدون ایجاد خشکی و انعطافناپذیری بیش از حد
⏳ درس گرفتن از تاریخ و تجربیات گذشته
🧠 تشخیص ایدههای جدید و «خوب» توسعه نرمافزار از ایدههای «بد»
📚 فهرست مطالب
بخش اول: مهندسی نرمافزار چیست؟
فصل 1. مقدمه
فصل 2. مهندسی چیست؟
فصل 3. مبانی یک رویکرد مهندسی
بخش دوم: بهینهسازی برای یادگیری
فصل 4. کار بهصورت تکرارشونده
فصل 5. بازخورد
فصل 6. افزایشی بودن (Incrementalism)
فصل 7. تجربهگرایی (Empiricism)
فصل 8. آزمایشگری
بخش سوم: بهینهسازی برای مدیریت پیچیدگی
فصل 9. ماژولاریتی
فصل 10. انسجام (Cohesion)
فصل 11. جداسازی مسئولیتها (Separation of Concerns)
فصل 12. مخفیسازی اطلاعات و انتزاع
فصل 13. مدیریت Coupling
بخش چهارم: ابزارهای حمایتکننده مهندسی در نرمافزار
فصل 14. ابزارهای یک Disciplined Engineering
فصل 15. مهندس نرمافزار مدرن
⭐ نقدها و دیدگاهها
📖 کتاب مهندسی نرمافزار مدرن دقیقاً به هدف میزنه و روشهایی رو توصیف میکنه که متخصصان ماهر امروزه واقعاً نرمافزار رو باهاش مهندسی میکنن. تکنیکهایی که فارلی ارائه میده خشک، تجویزی یا خطی نیستن، اما دقیقاً به همان روشهایی که نرمافزار نیاز داره نظاممند هستن: تجربی، تکرارشونده، مبتنی بر بازخورد، اقتصادی و متمرکز روی کدهای در حال اجرا.
-- گلن واندربورگ، مدیر مهندسی در نوبانک
📖 کتابهای زیادی وجود دارن که بهت میگن چطور یک پرکتیس خاص مهندسی نرمافزار رو دنبال کنی؛ اما این کتاب متفاوته. کاری که دِیو در اینجا انجام میده، تبیین جوهره اصلی چیزیه که مهندسی نرمافزار رو تعریف میکنه و نشون میده چطور این مفهوم از یک هنرصنعت ساده متمایز میشه. اون توضیح میده که چرا و چگونه برای مسلط شدن بر مهندسی نرمافزار باید در هر دو زمینه یادگیری و مدیریت پیچیدگی استاد بشی، چطور پرکتیسهای موجود از این مسیر پشتیبانی میکنن و چطور ایدههای دیگه رو بر اساس مزایای مهندسی نرمافزاریشون قضاوت کنی. این کتاب برای هر کسیه که جدی میخواد با توسعه نرمافزار به عنوان یک رشته مهندسی واقعی برخورد کنه، چه تازه شروع کرده باشی و چه دههها باشه که داری سیستم میسازی.
-- دِیو هانسلو، مهندس نرمافزار
📖 اینها مباحث مهمی هستن و داشتن مجموعهای که همه اونها رو در یک پکیج واحد کنار هم جمع کنه، فوقالعاده است.
-- مایکل نیگارد، نویسنده کتاب ریلیسایت، برنامهنویس حرفهای و آرشیتکت نرمافزار
📖 من نسخه پیشنویس کتاب دِیو فارلی رو میخواندم و این دقیقاً همون چیزیه که بهش نیاز داریم. این کتاب باید برای هر کسی که آرزو داره مهندس نرمافزار بشه یا میخواد بر این حرفه مسلط بشه، جزو خواندنیهای واجب باشه. توصیههای واقعگرایانه و کاربردی در مورد مهندسی حرفهای. این کتاب باید در دانشگاهها و بوتکمپها تدریس بشه.
-- برایان فینستر، مهندس برجسته و آرشیتکت جریان ارزش در پلتفرم وان نیروی هوایی آمریکا
📖 عنوان کتاب خودش گویای همه چیز هست. دِیو فارلی در این کتاب، خرد و تجربه خودش رو به عنوان یک مهندس نرمافزار و رهبر برجسته به اشتراک میذاره. خواننده خوششانسه که میتونه دنیای طراحی نرمافزار رو از دریچه چشم یک طراح ماهر ببینه. کلمه «مدرن» در عنوان کتاب، پرکتیسها، ابزارها و تکنولوژیهایی رو توصیف میکنه که امروزه برای ساخت نرمافزارهای کاربردی با یک ریتم تولیدی منظم استفاده میشن. کتاب مهندسی نرمافزار مدرن درک روشنی از حوزه مهندسی نرمافزار و اینکه چرا این کار واقعاً مهندسی هست رو به خواننده میده. دِیو جنبههای ضروری مهندسی نرمافزار رو به طور خلاصه از دیدگاه یک مهندس نرمافزار توضیح میده. برخلاف بسیاری از کتابها که روی یک راه درست تمرکز میکنن، اون بر اهمیت قضاوت خوب، آزمایش و اندازهگیری تاکید میکنه. خیلی از نویسندهها در مورد مزایای انسجام، جفتشدگی و تفکیک دغدغهها بحث میکنن، اما دِیو این مفاهیم رو در حین بحث در مورد چالشها و تنشهای طبیعی بین اونها که بخشی از هنر طراحی نرمافزاره، به تصویر میکشه. اشتیاق و بحث اون در مورد توسعه مبتنی بر تست (TDD) و دیدگاهش در مورد چگونگی و چرایی کارکرد اون، انگیزه جدیدی رو برای استفاده از TDD به عنوان یک پرکتیس طراحی ایجاد میکنه. در سراسر کتاب، دِیو نمونههای عینی از انتخابهای طراحی رو ارائه میده که در اونها آزمایش خلاقانه، اندازهگیری و توسعه تکرارشونده ضروری هستن. کتاب مجموعهای از گفتگوهای محترمانه رو در مورد طراحی و پیادهسازی محصول نرمافزاری ارائه میده. این کتابیه که حرفهایها بارها بهش سر میزنن تا دوباره بخوننش و به این گفتگوهای مهم طراحی فکر کنن. این یک کتاب عالیه که جاش تو قفسه کتابهای هر مهندس نرمافزاری هست، چه تازه کار باشه و چه رهبری یک تیم بزرگ رو بر عهده داشته باشه.
-- دِیو توماس، مدیرعامل شرکت بدارا
✍️ درباره نویسنده
دیوید فارلی، موسس و مشاور شرکت دِلیوری مداوم، از روزهای اولیه محاسبات مدرن به عنوان برنامهنویس، مهندس نرمافزار و آرشیتکت سیستم فعالیت داشته. اون رویکردهای پیشگامانهای رو شکل داده که نحوه کار دولوپرها و تیمها رو متحول کرده. فارلی همراه با جِز هامبل، کتاب پرفروش دلیوری مداوم رو تالیف کرد. اون به عنوان مدیر توسعه نرمافزار در بورس چند دارایی لندن (LMAX)، یکی از سریعترین صرافیهای مالی جهان رو ساخت. اون که یکی از اولین پذیرندگان تکنیکهای چابک با استفاده از توسعه تکرارشونده، اینتگریشن مداوم و سطوح بالای تست اتوماتیک بود، در نگارش مانیفست ریاکتیو هم همکاری داشت. دِیو همچنین کانال یوتیوب بسیار محبوب و موفق «دلیوری مداوم» رو اداره میکنه.
Improve Your Creativity, Effectiveness, and Ultimately, Your Code
In Modern Software Engineering, continuous delivery pioneer David Farley helps software professionals think about their work more effectively, manage it more successfully, and genuinely improve the quality of their applications, their lives, and the lives of their colleagues.
Writing for programmers, managers, and technical leads at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: learning and exploration and managing complexity. For each, he defines principles that can help you improve everything from your mindset to the quality of your code, and describes approaches proven to promote success.
Farley's ideas and techniques cohere into a unified, scientific, and foundational approach to solving practical software development problems within realistic economic constraints. This general, durable, and pervasive approach to software engineering can help you solve problems you haven't encountered yet, using today's technologies and tomorrow's. It offers you deeper insight into what you do every day, helping you create better software, faster, with more pleasure and personal fulfillment.
Contents
Part I: What Is Software Engineering?
1 Introduct ion
2 What Is Engineering?
3 Fundamentals of an Engineering Approach
Part II: Optimize for Learning
4 Working Iteratively
5 Feedback
6 lncrementalism
7 Empiricism
8 Being Experimental
Part Ill: Optimize for Managing Complexity
9 Modularity
10 Cohesion
11 Separation of Concerns
12 Information Hiding and Abstraction
13 Managing Coupling
Part iV: Tools to Support Engineering in Software
14 The Tools of an Engineering Discipline
15 The Modern Software Engineer
" Modern Software Engineering gets it right and describes the ways skilled practitioners actually engineer software today. The techniques Farley presents are not rigid, prescriptive, or linear, but they are disciplined in exactly the ways software requires: empirical, iterative, feedback-driven, economical, and focused on running code."
-- Glenn Vanderburg, Director of Engineering at Nubank
"There are lots of books that will tell you how to follow a particular software engineering practice; this book is different. What Dave does here is set out the very essence of what defines software engineering and how that is distinct from simple craft. He explains why and how in order to master software engineering you must become a master of both learning and of managing complexity, how practices that already exist support that, and how to judge other ideas on their software engineering merits. This is a book for anyone serious about treating software development as a true engineering discipline, whether you are just starting out or have been building software for decades."
-- Dave Hounslow, Software Engineer
"These are important topics and it's great to have a compendium that brings them together as one package."
-- Michael Nygard, Author of Release IT, Professional Programmer, and Software Architect
"I've been reading the review copy of Dave Farley's book and it's what we need. It should be required reading for anyone aspiring to be a software engineer or who wants to master the craft. Pragmatic, practical advice on professional engineering. It should be required reading in universities and bootcamps."
-- Bryan Finster, Distinguished Engineer and Value Stream Architect at USAF Platform One
"The title says it all. In this book, Dave Farley shares his wisdom and experience as an outstanding software engineer and leader. The reader is fortunate to see the world of software design through the eyes of a master designer. Modern - It describes the practices tools and technology used today to build working software with a productive cadence.
Modern Software Engineering provides a reader with a clear understanding of the field of software engineering and why it is indeed engineering. Dave explains the essential aspects of software engineering concisely from the perspective of a software engineer. Unlike many books which focus on one right way, he stresses the importance of good judgment, experimentation, and measurement. Many authors discuss the goodness of cohesion, coupling, and separation of concerns but Dave illustrates concepts while discussing the natural tensions between them which are part of the art of software design. His passion and discussion for TDD and perspective on how and why it works, provide fresh motivation as TDD as design practice.
Throughout the book, Dave presents concrete examples of design choices, where creative experimentation, measure, and iterative development are essential. The book presents a series of courteous conversations about software product design and implementation. It is a book that professionals will return to often to reread and think about these important design conversations.
This is an excellent book that belongs on the self of every software engineer be they new or leading a large team."
―Dave Thomas, CEO of Bedarra Corporation
David Farley, founder and consultant for Continuous Delivery Ltd., has been a programmer, software engineer, and systems architect since the early days of modern computing. He has shaped ground-breaking approaches that have transformed how developers and teams work. With Jez Humble, Farley coauthored the best-seller Continuous Delivery. As Head of Software Development for the London Multi Asset Exchange (LMAX), he built one of the world's fastest financial exchanges. One of the earliest adopters of agile techniques employing iterative development, continuous integration, and high levels of automated testing, he also coauthored the Reactive Manifesto. Dave also runs the popular and highly successful "Continuous Delivery" YouTube channel.









