作为软件工程师,我们一直渴望获得有效的工具来提高生产力。而且在日常工作中,我们通常对现有工具不满意,并且希望有更好的方法,例如更好的GDB脚本配置,Vim脚本和一些Python脚本来自动完成无聊的工作。
但是,实际上这是一个折衷,因为制作工具还需要时间和精力。它不会立即提高生产力。因此,您如何判断是否该是停止工作并提供一些减轻您未来痛苦的工具了?
作为软件工程师,我们一直渴望获得有效的工具来提高生产力。而且在日常工作中,我们通常对现有工具不满意,并且希望有更好的方法,例如更好的GDB脚本配置,Vim脚本和一些Python脚本来自动完成无聊的工作。
但是,实际上这是一个折衷,因为制作工具还需要时间和精力。它不会立即提高生产力。因此,您如何判断是否该是停止工作并提供一些减轻您未来痛苦的工具了?
Answers:
当其中一种情况成立时,我将“制造工具”:
第二个选项的“风险”不必很大-构建一个小工具的成本通常很小,因此,如果您节省的只是每周运行一次10分钟的构建风险,那么通常非常快地偿还自己。
我尝试使工具尽可能的小-现在使任务变得更容易一些,也许下次再改进。
这意味着您每次都只会解决最大的痛苦,而不是解决不会真正伤害您的问题。
凭经验,我发现努力工作通常是最省时的。制作工具通常很诱人。我在以下情况下放弃抵抗:
我的经验法则是,当我第三次不得不做某事时,该是编写一个小脚本以使其自动化或重新考虑我的方法的时候了。
目前,我还没有制作一个完善的“工具”,只是一个小脚本(通常是bash或python; perl也会起作用,甚至是PHP)可以自动化我之前手动执行的操作。它基本上是DRY原理(或“真理的单一来源”原理的应用,本质上是同一件事)-如果必须一并更改两个源文件,则必须共享一些共同的事实,并且真理必须被排除在外,并存储在一个中心位置。如果可以通过重构在内部解决此问题,那就太好了,但是有时这是不可行的,这就是自定义脚本的用处。
然后,该脚本可能会演变成一个成熟的工具,也可能不会演变成一个成熟的工具,但是我通常从一个非常具体的脚本开始,其中包含很多硬编码的内容。
我讨厌充满激情的笨拙的工作,但我也坚信这是不良或错误设计的标志。懒惰是程序员的一项重要素质,最好是经过长时间努力避免重复工作。
当然,有时候这种平衡是负面的-您花了三个小时重构代码或编写脚本,以节省一小时的重复工作;但通常情况下,这种平衡是积极的,如果您考虑的成本不是直接显而易见的,则更是如此:人为失误(人为重复工作确实很糟糕),较小的代码库,由于减少了冗余而具有更好的可维护性,更好的自我记录,更快的未来开发,更干净的代码。因此,即使余额显示为负数现在,代码库将进一步扩展,当您拥有三十个数据对象时,您编写的用于为三个数据对象生成Web表单的工具仍然可以使用。以我的经验,通常估计平衡是有利于艰苦的工作的,这可能是因为重复的任务更容易估计,因此被低估了,而重构,自动化和抽象被认为是较难预测的,并且更加危险,因此被高估了。通常情况下,自动化毕竟并不难。
然后就有做为时过晚的风险:很容易将三个全新的数据对象类重构为形状,并编写一个脚本为它们生成Web表单,一旦完成,就很容易添加另外27个类也可以使用您的脚本。但是,当您到达30个数据对象类的位置时,几乎不可能编写该脚本,每个类都有手写的Web表单,并且它们之间没有任何一致性(又称“有机增长”)。保持这30个类的形式是重复编码和半手工搜索的噩梦,更改公共方面所需的时间是原本应花费的三十倍,但是编写脚本来解决问题,该项目开始时本来可以很轻松地吃午饭,现在变成了一个可怕的为期两周的项目,可怕的后果是长达一个月的后果,包括修复错误,教育用户,甚至可能放弃并恢复到旧的代码库。具有讽刺意味的是,编写30类混乱所花的时间比干净的解决方案要长,因为您可能一直都在使用便捷的脚本。以我的经验,过长的自动化重复工作是长期运行大型软件项目的主要问题之一。因为您可能一直都在使用便捷的脚本。以我的经验,过长的自动化重复工作是长期运行大型软件项目的主要问题之一。因为您可能一直都在使用便捷的脚本。以我的经验,过长的自动化重复工作是长期运行大型软件项目的主要问题之一。