战五渣程序员的五项必备技能

4,126 阅读7分钟

本文翻译自 Ravi Shankar Rajan 的 5 Toxic Habits That Will Make You a Bad Developer.,请对照原文阅读。

你无法改变自己的未来,但你可以改变自己的习惯,而你的习惯肯定也会改变你的未来。

“习惯的束缚太轻了,以至于它们变得沉重而无法被打破。” --- 沃伦·巴菲特

当我们因为自己的不良习惯感到不适时,就会四处寻找解决方案。我们会去翻书或求助于他人,期望能知道如何去摆脱它。然而实际情况是,打破任何不良习惯仅取决于“镜子里的人(the man in the mirror)”。你期望变得更好,做一些不同的事情。一旦你掌握了改变的范式,摆脱不良习惯就变得很容易。

如同生活一样,编程也有好习惯和坏习惯。能否成为一个优秀的程序员,取决于你能否有效地控制编码中的不良习惯。你反复做的事情会影响你的行为,你所相信的事物以及对整个世界的看法。简而言之,养成好习惯还是坏习惯,都取决于思维。

如果你意识不到自己的所做所为正在破坏你的工作,那么坏习惯就很难消除。你仍然自我感觉良好,并且会继续陷入效率低下和代码质量差的泥潭。

作为一个自学成才的开发人员,我对于不良习惯带来的后果可谓经验丰富。但是现在我知道自己犯了什么样的错误,并学会了避免将来犯下同样的错误。我仍在学习,并且日新月异。

这里有一些有害的习惯,这些习惯会使你成为一个糟糕的开发人员。

没有计划的编码

“我总是发现计划是无用的,但是计划却又是必不可少的。” --- 艾森豪威尔将军

不幸的是,许多开发人员(包括我自己)都常常会想:“我可以轻而易举地做到这一点”,而最终结果却很差。我们没有认真思考就开始工作,最后到项目截止时间时,还有一堆的需求没完成,而代码也是乱七八糟的。

而如果在编码之前能花些时间来分析需求,将需求分解为可管理的模块,并与同事和业务分析师进行一些头脑风暴,然后依此提出一个渐进式计划,则可以帮助我们创建高质量的代码。利用纸笔,或白板,甚至是和小黄鸭交谈,然后提出一个可跟踪的有序的计划。

请记住,你无法计划所有事情。解决问题的第一个计划可能是完全错误的,不过没关系。重要的是,当你完成初稿时,你能清楚地知道差距在哪里,以及需要在怎样来填补这些差距。计划很重要,但计划也会不经意间发生变化。

对代码审查心怀戒备

“我们大多数人的问题在于,我们宁愿被赞美毁灭,也不愿受到批评的拯救。” --- 诺曼·皮尔(Norman Peale)

批评可能令人无法接受,但却是必要的。它与肉体上的疼痛一样,能让人们关注到自身的不健康状态。你可能自认为是世界上最好的开发人员,但你的代码的表现却不尽然。你越早意识到这个事实,就能越快成为一个优秀的程序员。

你需要谦虚地对待在代码审查过程中检测到的错误或缺陷,并确保后续不会再犯同类的错误。糟糕的开发人员对此却无动于衷,最终只会害人害已。

优秀的开发人员愿意将自己的代码拿出来公开讨论,并不断改进。他们不会被自己的牛逼的解决方案蒙蔽,愿意接受自己的无知,并且不断地学习新事物。

表现得无所不知

不了解所有事情,有时候是件好事 --- 尼尔·盖曼(Neil Gaiman)

糟糕的开发人员不承认自己无知的原因有很多。害怕被嘲笑,自我膨胀,害怕受到谴责等。但不管是什么原因,最终他们在知识获取和声誉上都会是失败者。行为经济学畅销书《狂热经济学》的作者斯蒂芬·J·杜布纳和史蒂文·D·莱维特提出这样的观点:最难说有三个字不是 "I love you",而是 "I don’t know"。

需要记住,说 "I don’t know" 是完全可以的。这比掩盖你缺乏某些知识/技能要好得多。这里的关键是要知道如何解决问题 -- 可以通过询问他人或进一步调查研究。

与其执着于应该无所不知的乌托邦式梦想,不如将世界视为学习的基础。你应该随时随地接受新的,不同的或变化的观点,并根据变化的情况调整解决问题的能力。

以代码行数来衡量进度

“通过代码行数来衡量编程进度就像通过重量来衡量飞机制造进度。” --- 比尔·盖茨

“我可以在一个通宵工作中编写10,000行代码”。

“你看到那个项目了吗?那都是我的。我为此写了30,000行代码”

“我有自己的编码风格。无论别人做什么,我都会按照自己的方式进行编码”

听起来很熟悉吧?这就是所谓的程序员自我。用自己的方式做事并重写现有代码可能会满足你的自我,但肯定不能满足项目的需求。

作为开发人员,你的工作应该是编写尽可能少的代码来满足需求。当得到一个新的功能需求时,应该首先问自己:“有人做过吗?我可以重复使用它吗?”借用现成的解决方案没有什么可耻的,因为任何软件的创建通常都是团队合作的结果。应该始终希望整个团队坚如磬石,而不只是个体的拼凑。

为自己省去一些麻烦。不要重复自己。不要在程序中重复相同或几乎相同的代码。而是将代码放入一个可以处理多种情况的类或函数中。如果有人已经为你做到了,那就无耻地去使用它。

推卸责任

优秀的人善于自省,自卑的人责备他人 --- 唐·舒拉(Don Shula)

软件开发是一项团队运动。Agreed

软件开发是集体协作。Agreed

因此,我不对我的代码负责。Not OK

在开发人员中有些自大和傲慢的态度也不是什么秘密。因此,承认犯了错误并确认生产问题是由你编写的代码引起的,这需要非常谦虚和无私的态度。将问题归咎于他人很容易。但查找过去的代码并找出导致错误的原因对解决问题会更有效率。

大家都会重视那些对自己的代码负责并确保以后不会犯同样错误的开发人员。软件不可能永远是完美的。瑕疵将永远存在。关键是要控制缺陷,并追求卓越。

从现在开始,你应该努力使自己和他人的代码尽可能地可读。记住,如果你不敞开心扉来承认自己的错误,那实际上也得不到成长。

正如沃尔特·惠特曼所说的一样:

Be curious, not judgmental.

原文链接

更多好文,请关注公众号 知识小集 (ID: zsxjtip)