这是用户在 2025-5-1 6:46 为 https://gist.github.com/AndySuen/10c81bddb03dbf70af3ef77c16b7265f 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
Skip to content
@AndySuen
Forked from rondy/Effective_Engineer.md
Created May 1, 2025 05:52
  • Edit
  • Unstar this gist
    Star this gist

FWIW: I (@rondy) am not the creator of the content shared here, which is an excerpt from Edmond Lau's book. I simply copied and pasted it from another location and saved it as a personal note, before it gained popularity on news.ycombinator.com. Unfortunately, I cannot recall the exact origin of the original source, nor was I able to find the author's name, so I am can't provide the appropriate credits.
FWIW: 我 (@rondy) 并不是这里分享内容的创作者,这些内容是 Edmond Lau 的书中摘录。我只是从另一个位置复制并粘贴过来,并将其保存为个人笔记,之后它在 news.ycombinator.com 上变得流行。不幸的是,我无法回忆起原始来源的确切出处,也无法找到作者的名字,因此无法提供适当的致谢。


Effective Engineer - Notes  有效工程师 - 笔记

What's an Effective Engineer?  什么是有效工程师?

  • They are the people who get things done. Effective Engineers produce results.  他们是能够完成任务的人。有效工程师能够产生成果。

Adopt the Right Mindsets  采用正确的思维方式

Focus on High Leverage Activities  专注于高杠杆活动

  • Leverage = Impact Produced / Time Invested  杠杆率 = 产生的影响 / 投入的时间
  • Use Leverage as Your Yardstick for Effectiveness  使用杠杆率作为衡量有效性的标准
  • 80% of the impact comes from 20% of the work.  80%的影响来自于 20%的工作。
  • Focus on high leverage and not just easy wins.  专注于高杠杆效应,而不仅仅是容易获得的胜利。

Optimize for Learning  优化以学习为导向

  • Change jobs if you have to.  如果必须的话,更换工作。
  • Optimizing for learning is high leverage.  优化学习是高杠杆的。
  • Adopt a growth mindset.   培养成长心态。
    • Talk to people. Become good at telling stories. It gets better with time.  与人交谈。练就好故事的讲述能力。随着时间的推移会变得更好。
    • Those with a growth mindset believe that they can cultivate and grow their intelligence and skills through effort.  那些拥有成长心态的人相信,通过努力可以培养和提升自己的智力和技能。
    • Own your story.  拥有自己的故事。
  • Invest in the rate of learning   投资学习速度
    • Learning compounds. Compounding leads to exponential growth. Earlier the compounding starts, the better.  学习会累积。累积导致指数增长。越早开始累积,效果越好。
    • Working on unchallenging tasks is a huge opportunity cost. You missed out on compounded learning.  从事不具挑战性的任务是巨大的机会成本。你错过了累积学习的机会。
    • Prioritize learning over profitability.  优先考虑学习而非盈利。
    • Invest your time in activities with the highest learning rate.  将时间投资在学习率最高的活动中。
  • Seek Work Environments Conducive to Learning   寻求有利于学习的工作环境
    • Fast Growth: Companies where #problems >> #resources. Opportunity to choose high impact work.  快速成长:公司中问题多于资源。有机会选择高影响力的工作。
    • Make sure you are working on high priority projects.  确保您正在处理高优先级项目。
    • Openness: Look for culture with curiosity, where everyone is encouraged to ask questions.  开放性:以好奇心寻找文化,每个人都被鼓励提问。
    • Fast Paced.  快节奏。
    • People smarter than you.  比你聪明的人。
    • Autonomy: Freedom to choose what to work on. Smaller companies => More autonomy.  自主权:自由选择要做什么工作。小公司 => 更多自主权。
  • While on Job   在职期间
    • Make a daily habit of acquiring new skills.  养成每天学习新技能的习惯。
    • Read code written by brilliant engineers.  阅读由才华横溢的工程师编写的代码。
    • Jump fearlessly into code you don't know.  勇敢地跳入你不熟悉的代码中。
    • Always be learning. Invest in skills that are in high demand.  不断学习。投资高需求技能。
    • Read Books. Attend Conferences.  阅读书籍. 出席会议.
    • Build and maintain strong relationships.  建立并维护牢固的关系。

Prioritize Regularly  定期优先处理

  • Opportunity cost of working on wrong ideas can set back growth by years.  在错误的想法上工作的机会成本可能会让增长推迟数年。
  • Prioritize tasks based on ROI.  根据 ROI 优先处理任务。
  • Regular prioritization is high leverage activity.  定期优先排序是一项高杠杆活动。
  • On TODO Lists:   在待办事项列表中:
    • Maintain a 'single' todo lists where all tasks are listed.  维护一个‘单一’的待办事项列表,将所有任务都列在其中。
    • Don't try to remember stuff. Brain is bad at remembering. It's rather good at processing.  不要试图记住事情。大脑不擅长记忆,而更擅长处理信息。
  • Ask yourself regularly: Is this the most important thing I should be working on?  定期问自己:我现在做的是否是最重要的事情?
  • Focus on what directly produces value.  专注于直接产生价值的事物。
  • Learn to say no.  学会说不。
  • Focus on the important and non-urgent.  专注于重要且不紧急的事情。
  • Find ways to get into flow. “A state of effortless concentration so deep that they lose their sense of time, of themselves, of their problems.”  找到进入心流的方法。“一种如此专注的状态,以至于他们失去了对时间、自我和问题的感知。”
  • When possible, preserve larger blocks of focused time in your schedule.  如果可能,保留更大的专注时间块在你的日程中。
  • Limit the amount of Work in Progress.   限制正在进行中的工作量。
    • Cost of context switching is high.  上下文切换的成本很高。
  • Prioritizing is difficult.  优先级排序很难。
  • Prioritization is high leverage. It has huge impact on your ability to get right things done.  优先级排序具有巨大的杠杆作用。它对您完成正确事情的能力有着巨大的影响。

Invest in Iteration Speed  投资迭代速度

  • Continuous Deployment is high leverage.   持续部署具有巨大的杠杆作用。
    • Will save a lot of time in manual deployment of code. They are the people who get things done. Effective Engineers produce results.  将大大节省手动部署代码所需的时间。他们是能够完成事情的人。有效工程师能够产生成果。
  • Move fast to learn fast.   快速行动以快速学习。
    • Move fast and break things.  快速行动,打破一切。
    • Moving fast enables us to build more things and learn at faster rate.  快速行动使我们能够更快地构建更多东西并以更快的速度学习。
  • Invest in time saving tools.   投资于节省时间的工具。
    • If you have to do something more than twice, write a tool the third time.  如果你需要做某件事超过两次,第三次时就写一个工具。
    • Tools are multipliers that allow your to scale your impact beyond the confines of a day.  工具是倍增器,使你能够超越一天的限制扩大你的影响。
    • Faster tools get used more often.  更快的工具使用得更频繁。
    • Faster tools can enable new workflows that previously weren't possible.  更快的工具可以启用以前不可能的新工作流。
    • Productivity skyrockets with tools.  工具可以大幅提升生产力。
    • Time saving property of tools also scale with team adoption.  工具的时间节省特性随着团队采用也会成比例地扩展。
  • Shorten your debugging and validation Loops.   缩短调试和验证循环。
    • Extra time spent in optimizing debugging workflow can help you fix annoying bugs with less headache.  在优化调试工作流上投入额外的时间可以帮助你用更少的烦恼解决烦人的 bug。
    • Debugging is hard. It's time consuming. Upfront investments to shorten debugging loops are worth it.  调试很难。这需要花费大量时间。提前投资缩短调试循环是值得的。
  • High test coverage to reduce build and site breakages.  高测试覆盖率以减少构建和站点故障。
  • Fast unit tests to encourage people to run them.  快速的单元测试以鼓励人们运行它们。
  • Fast and incremental compiles and reloads to reduce development time.  快速且增量的编译和重新加载以减少开发时间。
  • Master you programming environment.   精通你的编程环境。
    • One editor. One high level language. Shell. Keyboard > Mouse. Automate manual workflows. Use interactive shell. Make running specific tests easy.  一个编辑器。一种高级语言。Shell。键盘 > 鼠标。自动化手动工作流。使用交互式 Shell。使运行特定测试变得容易。
  • Faster you can iterate, faster you can learn.  你迭代得越快,学习得就越快。

Measure what you want to Improve  衡量你想要改进的内容

  • Use metric to drive progress.   使用指标推动进步。
    • If you can't measure it, you can't improve it.  如果你不能衡量它,你就不能改进它。
    • Good metric.   好的指标。
      • Helps you focus on right things.  帮助你专注于正确的事情。
      • Drives forward progress.  推动进展。
      • Helps you guard against future regressions.  帮助你防止未来的退步。
      • Performance ratcheting: Any change should strictly improve the metric.  性能递增:任何更改都应严格提高指标。
      • Bad metric can lead to unwanted behavior.  糟糕的指标可能导致不希望的行为。
      • Examples:   示例:
        • #hours worked < productivity.  #小时工作 < 生产力。
        • click through rates < long click through rates.  点击率 < 长点击率。
    • Metric you choose influences your decisions and behavior.  你选择的指标会影响你的决策和行为。
    • Look for metric that, when optimized, maximizes impact for the team.  寻找一个优化该指标时能最大化团队影响的指标。
    • Actionable metric - Whose movement can be casually explained by team's effort.  可操作的指标 - 其变化可以由团队的努力轻松解释。
    • Responsive metric - Updates quickly to give back feedback whether a given change was =ve or -ive.  响应式指标 - 快速更新以反馈给定更改是积极的还是消极的。
    • Choosing a metric is high leverage.  选择指标具有高杠杆作用。
    • Dedicate time to pick right metric.  花时间选择合适的指标。
  • Instrument everything to understand what's going on.   对所有内容进行监控以了解发生了什么。
    • Measure anything, measure everything.  测量一切,测量所有。
    • Graphite, statsd. A single line of code lets you define a new counter or timer on the fly.  Graphite, statsd。一行代码就可以让你定义一个新的计数器或计时器。
    • Measuring goals you want to achieve is high leverage.  衡量你想要实现的目标具有很高的杠杆作用。
  • Internalize useful numbers.   内部化有用的数字。
    • Knowledge of useful numbers provide a valuable shortcut for knowing where to invest efforts to maximize gains.  有用的数字提供了一种宝贵的捷径,让你知道在哪里投入努力以最大化收益。
    • Need upfront work. Need not be accurate, ballpark idea suffices.  需要前期工作。不需要非常准确,大概的估算就足够了。
    • Knowing useful numbers enables you to do back of the envelope calculations to quickly estimate the performance properties of a design without actually building it.  了解有用的数字可以让你进行粗略计算,快速估算设计的性能属性,而无需实际构建它。
    • Internalizing useful number help you spot anomalies. Be skeptical about data integrity.  内化有用的数字可以帮助你发现异常。要对数据完整性持怀疑态度。
  • Log data liberally.  大量记录数据。
  • Build tools to iterate on data accuracy sooner.  构建工具以尽早迭代数据准确性。
  • Examine data sooner.  Examine data 更早些。
  • When numbers look off, dig in to it sooner.  当数字看起来不对劲时,更早些进行深入分析。

✔️ Measure your progress. Carefully choose your top-level metric. Instrument your system. Know your numbers. Prioritize data integrity.  ✔️ 测量您的进度。仔细选择您的顶级指标。仪器化您的系统。了解您的数字。优先考虑数据完整性。

Validate your ideas early and often.  尽早并频繁地验证你的想法。

  • Not validating early leads to wasted efforts.  不早期验证会导致浪费努力。
  • Don't delay get feedback.  不要延迟获取反馈。
  • Find low effort ways to validate work.  找到一些低努力的方式来验证工作。
  • Power of small batches. Helps you avoid making a big mistake by stopping the flow.  小批次的力量。这有助于你避免犯大错误,通过中断流程来停止。
  • Approach problem iteratively.  迭代解决问题。
  • No large implementations.  没有大规模的实现。
  • Working solo? Be wary. Be extra vocal and get feedback.  独自工作?要小心。要更加积极地表达并获取反馈。

Improve project estimation skills.  提高项目估算技能。

  • Beware of mythical man month. Communication overhead is significant.  小心莫尔曼月。沟通开销很大。
  • Reduce risk early.  尽早降低风险。
  • Rewrite projects - almost always fail.  重写项目 - 几乎总是失败。
  • Additional hours hurt productivity. Causes burnout.  额外的工作时间损害生产力。导致过度劳累。
  • Do the riskiest task first.  先做最危险的任务。
  • Allow buffer room for the unknown.  为未知情况留出缓冲空间。

Balance Quality with Pragmatism  平衡质量与实用主义

  • High code quality. Code readability.  高质量的代码。代码可读性。
  • Establish sustainable code review process.  建立可持续的代码审查流程。
  • Code reviews help:   代码审查有助于:
    • Catch bugs and design problems early.  早期发现错误和设计问题。
    • Sharing working knowledge of the codebase.  分享代码库的工作知识。
    • Increases long term agility. Easier to understand, quicker to modify.  提高长期灵活性。更容易理解,更快修改。

Manage complexity through Abstraction  通过抽象来管理复杂性

  • Example: MapReduce.
  • Right abstractions make huge difference.  正确的抽象会带来巨大的差异。
  • “Pick the right ones, and programming will flow naturally from design; modules will have small and simple interfaces; and new functionality will more likely fit in without extensive reorganization,”  "“选择正确的抽象,编程将自然地从设计中流露出来;模块将具有小而简单的接口;新的功能更有可能在不进行大量重组的情况下就能很好地融入进来,”"
  • “Pick the wrong ones, and programming will be a series of nasty surprises: interfaces will become baroque and clumsy as they are forced to accommodate unanticipated interactions, and even the simplest of changes will be hard to make.”
    "“选择错误的抽象,编程将变成一系列令人不悦的惊喜:接口将变得复杂笨拙,不得不适应未预见的交互,即使是简单的更改也很难实现。”"
  • The right abstraction can increase engineering productivity by an order of magnitude.  合适的抽象可以将工程生产力提高一个数量级。
  • Simple abstractions avoid interweaving multiple concepts, so that you can reason about them independently rather than being forced to consider them together.  简单的抽象避免了多个概念的交织,因此你可以独立地思考它们,而不是被迫同时考虑它们。
  • Designing good abstractions take work.  设计良好的抽象需要工作。
  • An abstraction's usage and popularity provides a reasonable proxy for its quality.  抽象的使用和流行程度可以作为其质量的一个合理代理。

Automate Testing  自动化测试

  • Unit test cases and some integration testing provide a scalable way of managing growing codebase.  单元测试用例和一些集成测试提供了一种可扩展的方式来管理不断增长的代码库。
  • A suite of extensive and automated tests can reduce overall error rates by validating the quality and by safeguarding against regressions.  一套全面且自动化的测试可以降低整体错误率,通过验证质量和防止回退来实现。
  • Tests also allow engineers to make changes, especially large refactorings, with significantly higher confidence.  测试还允许工程师在进行更改,尤其是大规模重构时,具有显著更高的信心。
  • Despite its benefits, it can be difficult to foster a culture of automated testing.  尽管有这些好处,培养自动化测试的文化可能会很困难。
  • Focus on high leverage tests.  专注于高杠杆测试。
  • Writing more tests, creating a virtuous feedback cycle and saving more development time.  编写更多测试,创建良性反馈循环并节省更多开发时间。

Repay Technical Debt  偿还技术债务

  • Technical debt refers to all the deferred work that’s necessary to improve the health and quality of the codebase and that would slow us down if left unaddressed.  技术债务指的是所有需要改进代码库的健康和质量的未完成工作,如果我们不解决这些问题,它们会拖慢我们的进度。
  • Accumulating technical debt is fine as far as it is repaid within time.  只要技术债务在一定时间内得到偿还,累积技术债务是可以接受的。
  • Refactor often.  经常重构。

Reduce Operational Complexity  降低操作复杂性

  • Keep no. of technologies low. Don’t sway towards shiny new technologies.  使用的技术种类要少。不要追求闪亮的新技术。
  • Every additional technology you add is is guaranteed to go wrong eventually. Will need your time.  每增加一项技术,最终都会出问题。需要你的时间。
  • Do the simple thing first.  先做简单的事情。
  • Embrace operational simplicity.  拥抱操作的简单性。
  • The first solution that comes to mind is generally complex. Don't stop. Keep peeling off the layers of onion.  最初想到的解决方案通常都很复杂。不要停止。继续剥开洋葱的每一层。
  • Simplify the architecture to reduce their operational burden.  简化架构以减少其操作负担。
  • “What’s the simplest solution that can get the job done while also reducing our future operational burden?”  "“最简单的解决方案是什么,既能完成任务,又能减少我们未来的操作负担?”"
  • Discipline to focus on simplicity is high leverage.  专注于简单性的纪律是高杠杆的。

Fail Fast

  • Fail immediately and visibly.
  • Doesn’t necessarily mean crashing your programs for users.  并不一定意味着要让用户程序崩溃。
  • fail-fast to surface issues immediately.  快速失败以立即暴露问题。
  • Failing fast is high leverage as it saves debugging time.  快速失败具有很高的杠杆作用,因为它可以节省调试时间。

Relentlessly Automate  坚持不懈地自动化

  • Automating mechanics is good.  自动化机械是好的。
  • Automating decision making - no.
  • Hone your ability to respond and recover quickly.   提高快速响应和恢复的能力。
    • Leverage recovering quickly > Leverage preventing failures.  快速恢复 > 预防失败。
  • “script for success,” practice failure scenarios, and work on our ability to recover quickly.  "“通往成功的脚本”,练习失败场景,并提高我们快速恢复的能力。"
  • Make batch process idempotent  使批量处理过程幂等
  • Make processes retryable, i.e., not leaving any global state.  使进程可重试,即,不留下任何全局状态。

Invest in your team's Growth  投资于团队的成长

  • Invest in onboarding.  投资于入职培训。
  • The higher you climb up the engineering ladder, the more your effectiveness will be measured not by your individual contributions but by your impact on the people around you.  在工程阶梯上爬得越高,你的有效性将不再由你的个人贡献来衡量,而是由你对周围人的影响来衡量。
  • "You’re a staff engineer if you’re making a whole team better than it would be otherwise. You’re a principal engineer if you’re making the whole company better than it would be otherwise. And you’re distinguished if you’re improving the industry.” - Focus primarily on making everyone around you succeed.
    你是一名 Staff Engineer,如果你能让整个团队比原来更好。你是一名 Principal Engineer,如果你能让整个公司比原来更好。而你则是杰出的,如果你能改善整个行业。—— 重点是让你周围的人成功。
  • Your career depends on your team's success.  你的职业生涯取决于团队的成功。
  • Make hiring everyone's responsibility.  让每个人都有招聘的责任。
  • Shared ownership of code.   代码的共同拥有权。
    • Keep bus factor more than one.  保持司机因子大于一。
    • Shared ownership removes isolated silos of information.  共同拥有权消除了孤立的信息孤岛。
  • Build collective wisdom through post mortems.  通过事后分析构建集体智慧。
  • Invest in automated testing.   投资自动化测试。
    • Automated test cases lead to higher confidence when refactoring.  自动化测试用例在重构时能提高信心。
    • Write test cases when the code is fresh in mind.  代码新鲜时编写测试用例。
    • Don’t be dogmatic about 100% code coverage.  不要对 100%代码覆盖率过于教条。
    • Value of tests increases over time and cost to write goes down.  测试的价值随时间增加,编写成本降低。
  • Hire the best.  招聘最好的人才。
  • Surround yourself with great advisors  围绕自己有卓越的顾问

☀️ “Leverage is the lens through which effective engineers view their activities. ” ☀️  ☀️ “杠杆是有效工程师看待其活动的视角。” ☀️

10 Books to read:  推荐阅读书籍:

  • Peopleware Productive projects and Teams. Amazon. My Summary.  Peopleware 产出高的项目和团队。Amazon。我的总结。
  • Team Geek: A Software Developer’s Guide to Working Well with Others. (Debugging Teams) Amazon. My Summary.  团队极客:软件开发者的与他人合作指南。(调试团队)Amazon。我的总结。
  • High Output Management  高产出管理
  • Getting Things Done: The Art of Stress-Free Productivity  Getting Things Done: 无压力的生产力艺术
  • The 4-Hour Workweek: Escape 9-5, Live Anywhere, and Join the New Rich  4 小时工作周:摆脱 9-5,自由生活,加入新富阶层
  • The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change  高效人士的 7 个习惯:个人转变的强大课程
  • Conscious Business: How to Build Value Through Values  有意识的商业:如何通过价值观创造价值
  • Your Brain at Work  你的大脑在工作
  • Flow: The Psychology of Optimal Experience  心流:最优体验的心理学
  • Succeed: How We Can Reach Our Goals  成功:我们如何实现目标

Blogs:  博客:

Recommended Blogs To Follow:  推荐关注的博客:

  • http://www.theeffectiveengineer.com/ - The Effective Engineer is my personal blog, where I write about engineering habits, productivity tips, leadership, and culture.  http://www.theeffectiveengineer.com/ - 《有效工程师》是我个人的博客,我在那里撰写关于工程师习惯、 productivity tips(生产力提示)、领导力和文化等方面的内容。
  • http://www.kalzumeus.com/ - Patrick McKenzie runs his own software business and has written many excellent long-form articles on career advice, consulting, SEO, and software sales.   http://www.kalzumeus.com/ - Patrick McKenzie 自行经营软件业务,并撰写了多篇关于职业建议、咨询、SEO 和软件销售的优秀长文。
  • http://katemats.com/ - Kate Matsudaira, who has worked at large companies like Microsoft and Amazon as well as at startups, shares advice about tech, leadership, and life on her blog.   http://katemats.com/ - Kate Matsudaira 曾在微软和亚马逊等大公司以及初创公司工作,她在博客上分享关于技术、领导力和生活的建议。
  • http://randsinrepose.com/ - Michael Lopp has worked for many years in leadership positions at Netscape, Apple, Palantir, and Pinterest, and writes about tech life and engineering management.   http://randsinrepose.com/ - Michael Lopp 在网景、苹果、Palantir 和 Pinterest 等公司担任过多年的领导职位,并撰写关于技术生活和工程管理的文章。
  • http://softwareleadweekly.com/ - Oren Ellenbogen curates a high-quality weekly newsletter on engineering leadership and culture.   http://softwareleadweekly.com/ - Oren Ellenbogen 编辑高质量的每周工程领导和文化新闻通讯。
  • http://calnewport.com/ - Cal Newport, an assistant professor of computer science at Georgetown, focuses on evidence-based advice for building a successful and fulfilling life.   http://calnewport.com/ - Cal Newport,乔治敦大学计算机科学助理教授,专注于为建立成功和充实的生活提供基于证据的建议。
  • http://www.joelonsoftware.com/ - Joel Spolsky, the co-founder of Stack Exchange, provides all sorts of programming pearls of wisdom on his blog.  http://www.joelonsoftware.com/ - Joel Spolsky,Stack Exchange 的联合创始人,在他的博客上提供了各种各样的编程智慧。
  • http://martinfowler.com/ - Martin Fowler, author of the book Refactoring, writes about how to maximize the productivity of software teams and provides detailed write-ups of common programming patterns.   http://martinfowler.com/ - Martin Fowler,《重构》一书的作者,撰写有关如何最大化软件团队生产力的内容,并详细介绍了常见的编程模式。
  • http://pgbovine.net/ - Philip Guo, a computer science professor, has written extensively and openly about his graduate school and work experiences.   http://pgbovine.net/ - Philip Guo,一位计算机科学教授,广泛且公开地撰写了关于他的研究生和工作经历的文章。
@AndySuen

Select a reply

Loading
set 限制解除