标签 学习 下的文章

你应该关心你的代码

本文翻译自”You Gotta Care about the Code“,来自于《程序员应该知道的97件事》一书中的某个章节。

即使不用大侦探福尔摩斯,我们也能知道优秀的程序员能写出好代码。糟糕的程序员…则不能。他们生产出代码巨兽,而其他人则不得不去清理。你想写出好代码,对不对?你渴望成为一名优秀的程序员。

好代码不会凭空冒出来。它也不是什么需要各大行星排成一列时靠运气才发生的事情。为了写出好代码,你必须在代码上下足功夫。这的确很难。并且如果你真正地关心好代码,你也只是得到这些好代码,仅此而已。

优秀的编程能力不单纯来自于技术能力。我曾经看到过很多智力超群的程序员,他们可以实现出精细的且令人印象深刻的算法,他们对语言标准烂熟于心,但他们编写出的代码却是最糟糕的。这些代码难于阅读,难于使用,并且难于修改。我还曾见过一些谦卑的程序员,他们坚持编写简单精炼的代码,不过他们却可以写出风格优雅且极具表现力的代码,能在工作中使用这些代码不失为一件乐事。

基于我在软件行业多年的经验,我得出这样的结论:那些可胜任工作的程序员与伟大程序员之间的真正差别在于态度。优秀的编程在于能在真实世界的约束以及软件行业的巨大压力下采用一些专业的方法,并且由衷地渴望编写出最好的软件。

通往地狱的代码是用良好的意愿铺成的。要成为一名优秀的程序员,你必须克服良好意愿的影响,并且真实地去关心你的代码 –培养积极的观点,形成健康的态度。伟大的代码是由工匠大师们精心制作的,而不是由粗心程序员草率编写的或者由某些自称编程大师的人故弄玄虚地创建的。

你想编写出好代码。你想成为一名优秀的程序员。因此,你就应该关心你的代码:

·在任何编码的情况下,你都应该拒绝在那些只是看似能运行的代码上工作。你应该力求精心制作一份优雅且完全正确的代码(并有良好的测试用例可以证明你的代码是正确的)。

·你编写的代码应该是可发现的(其它程序员可以很容易地学会和理解),可维护的(即你或者其它程序员在将来可以很容易的修改这些代码),以及正确的(你需要采取一切可能的措施确保你已经解决了这个问题,而不只是让程序看似是可以工作的)。

·你和其它程序员一起工作。没有程序员是孤立的。很少有程序员独自工作;程序员团队所从事的大多数工作要么是在一个公司环境中,要么是一个开源项目。你要顾及其它程序员,并且构建其它人可以读懂的代码。你希望团队能编写出尽可能最好的软件,而不是使自己看起来很聪明。

·任何时候你遇到一段代码,你都应该力求将它改造得比之前更好(要么结构更优,要么更易测试,要么更易理解)。

·你关心代码和编程,所以你持续不断的学习新的语言,惯用法以及技术。不过你只能在适当的时候应用它们。

幸运的是,你正在阅读这些建议,那是因为你确实关心你的代码。你感兴趣。这是你的激情。快乐地编程。享受制作代码解决棘手的问题的乐趣吧。生产出让你感到骄傲的软件!

By Pete Goodliffe

通过精减来改善代码

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

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

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

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

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

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

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

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

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

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

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

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

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

By Pete Goodliffe

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! 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