ja被证明是无声地消耗生产力
一个开发者把时间花在什么上面?写代码,调试,思考,和同事交流(包括开会)。任何超出这些活动的都是不必要的开销(有些会议也是不必要的,但那是另外一个话题)。
然而,根据我们的语言和工具,我们必须做更多的工作来支持编写代码的过程。这些活动包括但不限于:
- 手动格式化你的代码——代码必须漂亮地对齐和格式化,但这是额外的工作。
- 使用搜索和替换而不是重构——很少有语言和工具支持好的重构,这在一个大项目中是无价的
- 手动调用编译——保存时编译给你即时反馈;手动运行编译器的需要给你的编码过程增加了一个不必要的步骤
- 缓慢的编译——就上一个问题而言,如果你的编译器很慢,那只是一个死时
- 缓慢的部署时间——如果从编写代码到运行代码的时间超过几秒钟,那么你就是在浪费大量的时间。例如,如果您需要在本地服务器上手动构建和复制文件。
- 笨重的资源导航——如果你不能通过几次击键找到给定的源文件
- 基础设施问题——您依赖于一个数据库、一个消息队列,可能还有一些外部服务。在开发机器上安装和支持这些组件可能会很痛苦。最近,我们花了一天时间试图集成3个组件,其中一些有docker实例。Docker在Windows和Mac上都无法正常工作。这是一个痛苦的错误-谷歌-尝试-错误-谷歌的过程。避免不成熟的、未经测试的工具(这里不是抨击docker,只是一个例子,它可能已经被改进/修复了)
- 操作系统问题——如果你的操作系统每隔几天就崩溃,你的I/O阻塞了你的UI,你有时会失去ALT+TAB功能(这是我在使用Ubuntu时经历的事情),那么你的操作系统会浪费你大量的时间。
https://www.douban.com/note/830046266/
上面的大部分手动任务都可以自动化,其他的应该根本不存在。例如,如果您正在使用Java,您可以拥有一个稳定的IDE,具有自动格式化和重构、保存时编译、可以使用一个操作系统,它不会让你时不时地重新编译内核,以便让它继续工作(注意:这里有些夸张)。
这通常是一种权衡。例如,如果我必须在生产率方面比较Java和groovy,与Groovy中缺乏重构、格式化等相比,Java的冗长是一个小麻烦(至少几年前是这样的;而且现在的scala也是如此)。是的,你要多写几行,但这是一个已知的过程。如果您有不成熟的工具,这些工具经常出故障或者就是不起作用(不幸的是,事实就是如此),您应该如何处理是未知的。你可能会在手工“劳动”中浪费10分钟,这会扼杀一门语言带给你的生产力。对我来说,Linux也是这样一种权衡——拥有终端有时确实有用,但它并不证明保持系统工作的努力是值得的(并且在版本升级后它完全死了)。
因为我真的觉得所有的开销都在消耗我的生产力,所以当谈到我使用的技术时,我非常挑剔。能够更快地打字或写更少的代码行是好的,但是你必须权衡这一点和你被迫要做的其他程序。这也一天的一半时间,那么上面的事情都不重要)。但是试着测量(或者至少观察)你花了多少时间不去做真正的编程(或者思考),而去做“自动化的”或者多余的事情。并且在一开始做一些不一定要做的事情的时候尽量忽略成就感。如果你喜欢的技术被证明是无声地消耗生产力,那么考虑改变它们(或者改进它们,如果你有空闲时间的话)。