通过精减来改善代码

本文翻译自"Improve Code by Removing It",来自于《程序员应该知道的97件事》一书中的某个章节。

少即是多。这是一句有些陈腐的短小格言,但有时它确实是正确的。

在过去的几周里我对代码库所作的改善工作之一就是删除了其中的几大块代码。

我们编写软件时一直遵循着XP的(译注:极限编程,eXtreme Programming)原则,包括YAGNI(即You Aren't Gonna Need It,你不再需要它了)。不过人类的天性就是这样,我们不可避免地在一些地方无法达到这些要求。 

我观察到,某些产品在执行一些任务时耗时太长,这些任务原本是可以立刻执行完毕的。这是因为它们被过分实现(overimplemented)了;附加了许多其实并不需要的特性,但在当时看来这似乎是一个不错的想法。

因此,我简化了代码,提高了产品的性能,删除了代码库中那些引发问题的特性,降低了全局代码熵(global code entropy,译注:一般指软件中代码的混乱程度)的级别。我的单元测试结果告诉我这些操作没有对产品造成任何破坏。

一个简单且非常令人满意的体验。

为什么起初这些不必要的代码留在了代码库中?为什么程序员感觉到需要编写这些额外的代码呢?还有这些代码是如何通过评审或结对过程的?几乎可以肯定是这样:

·额外的代码会带来一些乐趣,程序员渴望编写这些代码。(提示:写代码,是因为它增加了软件的价值,而不是因为它可以取悦你。)   

·有人认为:这些代码可能是将来需要的,所以觉得最好现在就编写这些代码。(提示:这不符合YAGNI原则。如果你现在不需要它,那么现在不要编写它。)

·这些"额外"的功能看起来似乎都不大,所以与将它们返回给客户确认是否真正需要相比,直接实现它们更为容易。(提示:通常实现和维护一些额外的功能耗费时间更长,而客户实际上则非常容易接近与沟通。一小片额外功能的代码就像一个小雪球,随着时间的推移将变成一大块需要维护的工作。)

·程序员发明的额外需求,既没有写入文档,也没有经过正式的讨论。这些需求实际上是伪造的。(提示:程序员不应设定系统需求;那是客户的职责。)

你现在在做哪些事?这些事是否都是客户需要的?

By Pete Goodliffe

知道如何使用命令行工具

本文翻译自”Know How to Use Command-line Tool“,来自于《程序员应该知道的97件事》一书中的某个章节

现今,很多软件开发工具被打包成集成开发环境(Integrated Development Environments,IDE)提供给开发者。微软的Visual Studio和开源的Eclipse就是两个颇受欢迎的IDE,当然还有很多其他类似的工具。很多程序员喜欢使用IDE,这不仅是因为IDE容易使用,而且IDE还可以让程序员无需过多考虑一些过程中的微小细节,特别是构建过程。

不过,易用也有其负面因素。通常,一个工具容易使用,是因为这个工具在幕后替你作出了决定并自动地做了很多事情。因此,如果你只用IDE作为唯一的开发环境,你可能永远无法知道你的工具实际上究竟做了哪些事情。你点击一个按钮,一些奇妙的事情发生了,一个可执行文件就会出现在你的工程目录下。

使用命令行构建工具,你会了解到更多有关这些工具在工程构建过程中的行为细节。编写你自己的Makefile文件可以帮助你理解构建一个可执行文件过程中的每一步(编译,汇编,链接等)。用这些工具的命令行参数做些试验也是一个有价值的学习体验。最初开始使用命令行构建工具时,你可以使用一些开源的命令行工具,比如GCC。或者你也可以使用IDE自带的命令行工具。毕竟,一个设计精美的IDE只是一组命令行工具的图形前端而已。

与IDE相比,命令行工具除了可以帮助你增进对构建过程的理解之外,还能更容易更高效地完成某些任务。例如,grep和sed两个实用程序提供的查找和替换能力往往比IDE中提供的工具更为强大。命令行工具原生地支持脚本,支持自动化运行一些任务,诸如按预定时间制作日构建版本,为一个工程制作多个版本以及运行测试用例。在IDE中,这类自动化工作做起来可能非常困难(如果不是不可能的话),因为构建参数通常是通过图形界面的对话框设置的,并且构建过程是通过鼠标点击启动的。如果你一直没有脱离过IDE的襁褓,那你可能都无法意识到这类自动化的任务是可行的。

不过请等一下。难道IDE的使用没有使开发工作更简单,没有提高程序员的生产力吗?噢,不是这样的。这里提出的建议不是让你停止使用IDE。而是建议你“应该深入到幕后“,弄明白你的IDE到底为你做了哪些事情。而这么做的最好的方式就是学习使用命令行工具。接下来,当你回过头来使用IDE时,你就会更透彻地理解IDE为你做了哪些事情,并且知道如何控制构建过程了。另一方面,一旦你掌握了命令行工具的用法,体验到了这些工具提供强大功能和灵活性后,你也许会发现:与IDE比起来,你更喜欢命令行工具。

By Carroll Robinson

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats