Software Engineering at Google - Titus Winters

Software Engineering at Google

Titus Winters

出版时间

2020-03-03

ISBN

9781492082798

评分

★★★★★

标签

编程

书籍介绍

The approach to and understanding of software engineering at Google is unlike any other company. With this book, you’ll get a candid and insightful look at how software is constructed and maintained by some of the world’s leading practitioners.

Titus Winters, Tom Manshreck, and Hyrum K. Wright, software engineers and a technical writer at Google, reframe how software engineering is practiced and taught: from an emphasis on programming to an emphasis on software engineering, which roughly translates to programming over time.

You’ll learn:

Fundamental differences between software engineering and programming

How an organization effectively manages a living codebase and efficiently responds to inevitable change

Why culture (and recognizing it) is important, and how processes, practices, and tools come into play

精彩摘录
  • "我们在这本书中分享的一个关键见解是,软件工程可以被认为是“随着时间而不断集成的编程”。我们可以为我们的代码引入哪些实践,使其在整个生命周期内,从概念到上市、到维护、再到弃用,具有可持续性(能够对必要的变更做出反应)? 这本书强调了我们认为的软件组织在设计、架构和编写代码时应该牢记的三个基本原则: 时间与变化 代码在其生命周期内需要如何适应。中规模与增长 组织在发展过程中要如何适应。 权衡与成本 组织如何从时间、变化、规模和增长中所学到的经验来做出决策。"
  • "权衡 谷歌在这一权衡中的选择是不在serverless解决方案上投入巨资。谷歌的持久化容 器解决方案Borg已经足够先进,可以提供大部分serverless的好处(如弹性伸缩、 针对不同类型应用程序的各种框架、部署工具、统一的日志记录和监视工具等)。 缺少的一点是更激进的伸缩(尤其是缩小到零的能力),但谷歌绝大多数的资源占 用来自高流量服务,因此过度提供小型服务的成本相对较低。同时,谷歌运行的多个应用程序在“真正的无状态”世界中无法工作,从GCE到BigQuery 或Spanner,到需要很长时间填充缓存的服务器,如前 面提到的长尾搜索服务作业。因此,为所有这些事情使用一个通用的统一体系结构的"
  • "Deep down, many engineers secretly wish to be seen as geniuses. This fantasy goes something like this: * You are struck by an awesome new concept. * You vanish into your cave for weeks or months, slaving away at a perfect implementation of your idea. * You then "unleash" your software on the world, "
  • "Another big reason for not becoming a manager is often unspoken but rooted in the famous “Peter Principle,” which states that “In a hierarchy every employee tends to rise to his level of incompetence.”"
  • "The best advice I received when I first became a manager at Google was from Steve Vinter, an engineering director at the time. He said, “Above all, resist the urge to manage.”"
  • "One of the early managers at Google, Bill Coughran, a VP of engineering, had truly mastered the ability to maintain calm at all times. No matter what blew up, no matter what crazy thing happened, no matter how big the firestorm, Bill would never panic. Most of the time he'd place one arm across his "
  • "Much like the role of manager, most people don't apply for the role of mentor-they usually become one when a leader is looking for someone to mentor a new team member. It doesn't take a lot of formal education or preparation to be a mentor. Primarily, you need three things: experience with your team"
  • "These short-lived systems are effectively "just" a programming problem 这里给出了一个关于如何去平衡over engineering和所谓的university homework (programming problem)不去想将来maintenance的low quality solution的好的思考角度。 不是去想将来这个feature会被扩展成什么样,而是去想这个feature的life span是怎么样的,单纯从maintenance和sustainability上去考虑。"
作者简介
Titus Winters is a Senior Staff Software Engineer at Google, where he has worked since 2010. Today, he is the chair of the global subcommittee for the design of the C++ standard library. At Google, he is the library lead for Google’s C++ codebase: 250 million lines of code that will be edited by 12K distinct engineers in a month. For the last 7 years, Titus and his teams have been organizing, maintaining, and evolving the foundational components of Google’s C++ codebase using modern automation and tooling. Along the way he has started several Google projects that believed to be in the top 10 largest refactorings in human history. As a direct result of helping to build out refactoring tooling and automation, Titus has encountered first-hand a huge swath of the shortcuts that engineers and programmers may take to “just get something working”. That unique scale and perspective has informed all of his thinking on the care and feeding of software systems. Tom Manshreck is a Staff Technical Writer within Software Engineering at Google since 2005, responsible for developing and maintaining many of Google's core programming guides in infrastructure and language. Since 2011, he has been a member of Google's C++ Library Team, developing Google's C++ documentation set, launching (with Titus Winters) Google's C++ training classes, and documenting Abseil, Google's open source C++ code. Tom holds a BS in Political Science and a BS in History from the Massachusetts Institute of Technology. Before Google, Tom worked as a Managing Editor at Pearson/Prentice Hall and various startups. Hyrum K. Wright is a Staff Software Engineer at Google, where he has worked since 2012, mainly in the areas of large-scale maintenance of Google's C++ codebase. Hyrum has made more individual edits to Google's codebase than any other engineer in the history of the company. He is a member of the Apache Software and an occasional visiting faculty member at Carnegie Mellon University. Hyrum received a PhD in Software Engineering from the University of Texas at Austin, and also holds an MS from the University of Texas and a BS from Brigham Young University. He is an active speaker at conferences and contributor to the academic literature on software maintenance and evolution.
目录
Foreword
Preface
Programming Over Time
Google’s Perspective
What This Book Isn’t

显示全部
用户评论
代码分析自动化➕无处不在的测试是大代码库的要义
太啰嗦了
文化方面不看,工程方面(代码、文档、设计)可参考(清晰&逻辑是最终答案),管理和团队方面,印证了之前的观念
学完了,就差去 Google 实践一下了。
都不容易
介绍谷歌的软件工程体系,除了一些历史真实事件的例子之外读起来比较枯燥,大部份问题的主要原因都是 scale 太大,解决方案除了少数属于技术范畴之外,大部份其实是 policy 或者项目管理的角度。感觉可能给新入职员工比较 high level 地了解一下公司主要政策和系统有一定的帮助,除此之外可能就是作为“历史记录”而存在了——感觉对其他人来说不太有参考价值,首先需要建立这么大一个 scale 的软件工程体系的机会不多,而且真的到了有这样需求的情况,估计每个团队也都会有自己特定的文化和限制等各方面的因素导致许多东西没法直接参考。最后,其实很多时候没有最优的方案,总是取舍,谷歌所采用的方案(例如单版本策略)也只是代表了谷歌所处的特定 constraints 下所能接受的取舍。
与实践相结合
culture这一章印象挺深刻的,tooling就感觉infra都差不多啊
收藏