刘德华的有效工程师

评测总结

  • 作者 :刘德华
  • 平装: 260页
  • 发行人:有效书架; 1版(2015年3月19日)
  • 链接到网站 :http://bit.ly/2aJzbgH
  • 亚马逊 :http://bit.ly/2aJzbgH
  • 我的评分:8.5 / 10

评论

我向特别是初级(中级软件工程师)推荐这本书。 有效工程师专注于指导软件工程师通过称为杠杆的框架最大程度地发挥影响。 在整本书中,埃德蒙分享了“高杠杆”活动的清单,这些活动来自他自己的经历以及他对其他技术公司的采访,尽管这些公司大多在硅谷。 其中一些高杠杆活动包括收集早期反馈,衡量正确的指标,持续部署,标准化最佳实践和自动化。

本书涵盖了从生产率,项目管理,时间管理等广泛的主题。但是,本书并未详细介绍思想和建议的实现方式。 毕竟,所有这些主题都值得一读。 如果读者有兴趣了解任何特定主题的更多详细信息,请参阅附录中的Lau推荐的10本书和博客列表。

我希望Lau还包括来自硅谷以外其他技术公司的故事和访谈。 看看他的“杠杆”观念在其他地方有多有效,将是很有趣的。

从书中引用:

有效的工程师并不是试图通过增加工作时间来完成更多工作的工程师。 他们是高效完成工作的人,他们将有限的时间专注于产生最大价值的任务。 为了成为有效的工程师,我们需要能够确定哪些活动可以用较少的时间投入产生更大的影响。 并非所有工作都是平等的。 并非所有的努力,无论是出于好意,都可以转化为影响。

有效工程师摘要

引入正确的心态:利用,优化学习和确定优先级

该书首先介绍了杠杆的概念。

杠杆率是指每投资一次所产生的价值或影响。

为了提高效率,每个软件工程师都应问自己以下三个问题:
1.如何在较短的时间内完成此活动?
2.如何增加这项活动产生的价值?
3.还有什么我可以花时间在上面的东西可以带来更多的价值吗?

为了缩短投资时间0r,增加产值将需要不同的心态和方法来完成工作。 第一种心态是拥抱“成长心态”:人们可以通过努力来培养和发展自己的智力和技能的信念。 因此,我们应该在工作场所内外寻找学习机会。 当我们优先考虑学习并提高技能时,我们将找到更好,更快捷的做事方式。

Lau提倡的另一种心态是优先级。 不同的作品产生不同的价值。 因此,随着作品不断堆积,我们必须明智地选择。 Lau不仅要回应紧急任务,还提醒我们着重于具有重要长期价值但经常被忽视的重要和非紧急作品。 该书还提供了一些生产力提示,例如管理待办事项,减少上下文切换以及制定if-then计划以应对拖延症。

投资迭代速度

为了提高效率,有必要提高迭代速度。 毕竟,我们越快地完成工作,就可以在一段时间内完成更多的工作。 那么,什么样的活动可以帮助我们缩短迭代速度?

  1. 掌握我们的工艺基础
    熟悉并精通开发环境。
  2. 投资工具
    选择正确的工具和软件,以帮助加快我们的开发周期。
  3. 全面了解整个工作流程
    端到端工作流程中是否存在瓶颈? 瓶颈通常来自流程约束或人员约束。 例如:决策需要某些人的批准或对其他团队的依赖。

迭代越快,您可以学到的越多。

衡量您要改进的地方

您如何知道哪些类型的工作是合理的? 如果没有衡量正确的指标,我们既不会知道我们作品的价值,也不会知道如何确定优先次序。 良好的指标可帮助我们专注于正确的事情,提醒我们未来可能会退步,并最终帮助我们随着时间的推移评估我们的有效性。

在决定使用哪些指标时,请选择以下指标:1)最大化影响力; 2)可行; 3)响应迅速且稳健。

尽早验证您的想法

尽早验证想法的目的通常是帮助我们完成正确的事情。 与人们接触以获取关于我们作品的反馈意见可能会使我们放慢脚步。 但是,这样做可能会阻止我们花费大量的时间,而后来却发现我们做出了错误的决定或错误的假设。 相反,我们应该迭代解决问题以减少浪费的精力。 每次迭代都提供了验证新想法的机会。 快速迭代以快速学习。

作为软件工程师,我们可以做以下几件事:

  • 要求代码审查,并提早迭代执行。
  • 在对API设计或接口或设计文档进行编码之前,先进行讨论。
  • 通过使用小型验证降低大型实施的风险。 花一些额外的精力来确定计划的其余部分是否可行并且值得做。
  • 征求购买和定期反馈,尤其是在新的高风险项目中。
  • 使用A / B测试来验证您的产品假设。

提高您的项目估算技能

拥有良好的项目估算技能将有助于我们准确计算每个项目的“投入时间”。 我们的目标是始终以最高的杠杆率,最小的时间投资来发挥最大作用。 如果我们的项目评估技能很差,那么我们分配给每个项目的杠杆点就不准确。 因此,我们最终可能不会选择以最高的杠杆率从事该项目。 埃德蒙(Edmond)有关如何提高项目评估技能的建议:

  • 不要让期望的目标支配估计。 取而代之的是,应将这些估计值用作决定在某个日期之前交付一组功能是否可行的输入。 如果不是,他们应该进行有关是否更改功能集或交付日期的对话。
  • 为计划中的未知项留出缓冲空间。 考虑到竞争性的工作义务,假期,疾病等。项目时间越长,其中某些事件发生的可能性就越高。
  • 定义可衡量的里程碑。 明确的里程碑可以使我们警惕我们是否步入正轨或落后。 利用它们作为修改我们估计的机会。
  • 首先执行最危险的任务。 通过尽早探索未知因素,减少我们估计中的差异和项目风险。

务实兼顾质量

用实用主义来平衡质量有点像一门艺术。 一方面,我们希望我们的作品成为杰作。 另一方面,我们时间和其他资源有限,无法完成工作。

最终,软件质量归结为一个权衡的问题,而且对于做事没有统一的规则。 高质量的软件使组织能够扩展规模并提高工程师创造价值的速度,而对质量的投资不足会阻碍您快速行动的能力。 另一方面,也可能过于拘泥于代码审查,标准化和测试覆盖范围,以至于流程提供的质量回报减少,实际上降低了您的效率。

本章的主要内容:

  • 建立审查代码的文化
    在代码审查和工具之间找到适当的平衡,以权衡代码质量和开发速度。 例如:软件的关键或易碎部分需要获得代码审查批准,但针对利基客户的某些特殊功能则不需要。
  • 建立一套自动化的单元和集成测试
    测试每段代码可能会非常耗时。 我们应该关注定期使用和开发的代码段。
  • 管理技术债务
    关注最严重损害我们工作的债务。

减少运营负担

将新功能部署到生产中时,我们还没有完成。 我们仍然需要对其进行维护,监控流量,修复任何可能出现的错误等。软件和系统维护是所有工程师必须不断处理的工作。 因此,最小化运营负担至关重要,因为如果将大量时间用于维护和修复系统,我们将无法完成很多工作。

本章的主要内容:

  • 小心“闪亮的新事物”综合症
    技术在不断发展,几乎每隔几个月我们就会听到有关有望解决所有问题的新技术或框架的信息。 虽然尝试使用新技术令人兴奋,但在将其引入生产系统之前请三思。 其他团队成员是否有使用它的经验,或者他们可以轻松地拿起它? 系统在高负载下工作正常吗? 监视,缩放等有多么容易?
  • 首先做简单的事情。
    随着产品的增长,它的复杂性也在增加。 系统越复杂,维护起来就越困难。 我们应该经常问自己:“最简单的解决方案是能够完成工作而又不会增加高昂的运营负担?”的是,更简单的系统更易于理解,扩展和维护。
  • 快速构建系统
    尽早解决有问题的问题可以帮助我们减少调试和追溯生产日志所花费的时间。
  • 自动化决策机制。
    积极地执行手动任务以节省时间。 我们可以通过简单地编写脚本或构建自动化程序来做到这一点。 同时,在尝试使决策自动化之前,请三思而后行,这往往很难正确。
  • 计划和练习故障模式。
    建立恢复能力的信心使您可以大胆地前进。

投资于团队的成长

工程不是一项个人运动,而是一项团队运动。 与我们一起工作的人员和团队将影响我们的效率。 团队文化,工作环境和开发过程只是阻碍或加速我们工作的几个例子。 因此,提高团队的效能也将影响我们自己的效能。

本章的主要内容:

  • 回顾并记录集体智慧。
    与团队成员一起思考项目,了解什么是有效的,什么是无效的,并记录和共享经验教训,以使宝贵的智慧不会丢失。 这也将使后来加入的新团队成员受益。
  • 投资入职和指导。
    一个新的团队成员越迅速地成长,团队就越有效。
  • 建立代码的共享所有权。
    通过在每个项目中拥有多个专家来防止开发瓶颈。
  • 创造伟大的工程文化。
    这将帮助团队提高工作效率,简化决策并招募其他强大的工程师。

结束

要记住的一件事:

时间是我们最有限的资产,而杠杆-我们每单位时间产生的价值-使我们能够将时间引导到最重要的事情上。