Share E-Book

现代软件工程如何高效构建软件 (【美】戴维·法利)(Z-Library)

Author 【美】戴维·法利

Programming
Language English

本书探讨了软件工程的真正含义,汇集了一些重要的软件开发基本原则,将它们紧密结合成一个一致的模型,旨在帮助读者有效、快速地构建软件。 全书共4个部分: 第1部分探讨软件工程的真正含义,以及如何将工程的原则和原理应用到软件开发中; 第2部分讲述运用科学思想优化软件开发过程的方法,包括迭代式、增量式工作,获得并利用快速、高质量的反馈,采用实验性和经验主义的科学方法; 第3部分介绍管理软件复杂性的方法,深入探讨模块化、内聚力、关注点分离、信息隐藏和抽象、管理耦合等原则; 第4部分介绍支持软件工程的工具,以及一些贯穿本书的软件开发理念,包括可测试性、可部署性、速度、控制变量、持续交付等。

Format EPUB
Size 1.7 MB
149
Views
0
Downloads
0.00
Total Donations

AI Guide

AI Reading Assistant

Whole-book reading guide from stratified index samples; jump to passages in the text

Full assistant
AI guide
【One-Line Pitch】 A practical, principle-driven guide that redefines software engineering as an empirical, learning-focused discipline—ideal for developers, architects, and team leads who want to build complex systems reliably and efficiently without bureaucratic overhead. 【Book Arc】 - **Opening (~0%–10%)**: Introduces the book’s mission—restoring “engineering” to software development—and critiques common misconceptions (e.g., engineering as bureaucracy or mere coding). Sets up the core definition: applying scientific, empirical methods to solve practical software problems economically. - **Early (~10%–30%)**: Lays out the foundational framework: five learning principles (iteration, feedback, incrementalism, experimentation, empiricism) and five complexity-management principles (modularity, cohesion, separation of concerns, abstraction, loose coupling). Explains why software engineering is a design discipline, not a production one, using historical context (e.g., Margaret Hamilton, NATO conference, Brooks’ “No Silver Bullet”). - **Middle (~30%–50%)**: Contrasts craft with engineering, emphasizing precision, scalability, and repeatability. Uses vivid analogies (e.g., Civil War rifle manufacturing, SpaceX’s iterative prototyping) to show how engineering thinking—modular design, measurement, and trade-offs—applies to software. Argues that most industry “progress” (e.g., serverless) is tool-focused, not design-focused. - **Late (~50%–70%)**: Delves into managing complexity in practice, exploring how modularity, cohesion, and coupling shape system design. Discusses how to evolve systems incrementally even when goals are unclear, and how to use feedback loops to guide decisions. - **Ending (~70%–100%)**: Presents supporting tools and philosophies—testability, deployability, speed, controlling variables, and continuous delivery—as practical enablers of the earlier principles. Ties everything into a coherent model for modern software engineering, backed by data from DevOps reports and industry studies. 【Key Takeaways】 - **Software engineering is applied empiricism** (Early): The book defines it as using scientific methods to find efficient, economic solutions to real software problems—not as rigid processes or mathematical proof. This reframing helps teams focus on learning and adaptation rather than bureaucratic compliance. - **Become a learning expert** (Early): Five principles—iteration, feedback, incrementalism, experimentation, and empiricism—are the tools for exploring uncertain problem spaces. Working in small steps with rapid feedback reduces risk and increases the chance of success, even when the destination is unclear. - **Become a complexity-management expert** (Early): Modularity, cohesion, separation of concerns, abstraction, and loose coupling are the keys to handling growing system complexity. These familiar concepts, when applied consistently, distinguish good systems from bad ones. - **Engineering beats craft for scalability and precision** (Middle): Unlike handcraft, engineering enables repeatable, measurable, and scalable outcomes. In software, this means leveraging automated testing and continuous integration—Google runs ~150 million tests daily—to achieve speeds and accuracy impossible by manual effort. - **Design, not production, is the core problem** (Middle): The Civil War rifle analogy shows that modular design, not mass production, was the breakthrough. Similarly, software’s challenge is managing design complexity, not manufacturing—so focus on componentization and incremental improvement. - **Trade-offs are central to engineering decisions** (Middle): Every choice—safety vs. usability, distribution vs. integration, team size vs. communication overhead—involves trade-offs. Understanding these tensions, especially coupling, is essential for making rational, evidence-based decisions. - **Tools matter less than design thinking** (Middle): Trends like serverless computing are less important than the design questions they raise (e.g., state management, system partitioning). Evaluate new ideas by whether they improve modularity and separation of concerns, not by their novelty. - **Practical enablers amplify the principles** (Late): Testability, deployability, speed, controlling variables, and continuous delivery are not optional extras—they maximize learning opportunities and enable incremental progress. Teams adopting these report higher quality, faster delivery, and better work-life balance. 【Reading Tips】 - **Deep-read the Early sections (10%–30%)**: This is the conceptual core—the 10 principles and the definition of software engineering. Skim the historical anecdotes (e.g., Apollo, NATO) but focus on how each principle connects to the others. - **Skim the Middle analogies (30%–50%)**: The rifle and SpaceX stories illustrate engineering concepts vividly, but you can skim them if you’re already familiar with modular design and iterative prototyping. Pay attention to the trade-offs discussion—it’s dense but practical. - **Use the Late sections as a checklist (70%–100%)**: The tools and philosophies (testability, deployability, etc.) are actionable. Treat them as a self-assessment for your own team’s practices rather than reading for new theory. - **Watch for gray-boxed historical notes**: These provide context on how software engineering evolved—useful for understanding why certain ideas persist, but skippable if you’re short on time. - **Take away the “lens” mindset**: The book encourages viewing principles as adjustable lenses, not binary rules. Use this to evaluate your own code, design, and processes—ask “what trade-off am I making?” rather than “is this right or wrong?” 【Coverage Limits】 This guide synthesizes the book’s core framework (learning principles, complexity management, and practical tools) but does not cover detailed chapter-by-chapter content, specific case studies beyond those mentioned, or the full historical narrative—excerpts focus on the conceptual model and key examples.

Passage locations

Excerpt 1
为一套具有普适性、基础性的现代软件工程思想和范式,进而以实用有效的方法为重点,讲解科学原理、工程技术如何应用于软件开发。 书中提及的现代软件工程“道法术器”,广泛适用于各类软件开发团队,无论是初创公司还是大型企业,对于改进复杂软件系统的工程实践十分有帮助,促进软件组织更加可靠、高效、高质量地构建软件,交付业务价值...
View in text
Excerpt 2
关注【异步社区】微信公众号,回复“e59958”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。 提 交 错 误 信 息 作者、译者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。当您发现错误时,请登录异步社区,按书名搜索,进...
View in text
Excerpt 3
型,但是之后它还是会测试它们。 即使是看似简单的事情,比如从4毫米不锈钢换成3毫米不锈钢,看起来也是一个相当可控的更改。SpaceX公司获得了有关金属抗拉强度的详细数据,它从测试中收集经验和数据,这些数据准确地显示了4毫米不锈钢制成的压力容器的强度。 尽管如此,SpaceX公司在分析完这些数据后,还是建立了实验原...
View in text
Excerpt 4
,在这种情况下,这是有道理的。但如何做到呢?对于这类问题,我见过最常见的解决方案是创建一种称为 浸 泡 测 试 的东西。浸泡测试的运行时间会比两次故障之间的正常运行时间长一些,比如在我们的例子中假设它的运行时间是3周。有时人们会试图缩短浸泡时间,以便在较短的时间内模拟出问题,但通常行不通。 测试开始运行,两周后,...
View in text

Recommended for You

Loading recommended books...
Failed to load, please try again later

Tip the Site

Scan the WeChat Pay or Alipay code to tip. No login required.

WeChat Pay
Alipay
Back to List