北京儿童插座价格联盟

从Dash iOS开源说起,不要过于追求完美代码

只看楼主 收藏 回复
  • - -
楼主

(Dash iOS源码截图)

前段时间知名的苹果平台文档工具Dash作者开源了它的iOS版本,这是Dash被突然从App Store下架,双方扯皮,直到现在的后续结果。对于这件事情我们不多做评价,不过开源是人们乐于见到的。Dash iOS版本开源后,获得了一些开发者的赞美,但没想到的是,它的代码引起了一些争议。

引用自@图拉鼎微博:

Dash 的作者把 iOS 版本开源了,然后马上有人发现了 Dash 里面的代码是各种简单粗暴,开始吐槽。Swift 也躺枪了,有人说如果 Swift 这么写的话编译器肯定会 Crash,幸好这是 Objc 总之,无论代码写的咋样,Dash 不失为一个成功的独立 App,作者也靠它曾经一年营收 27 万美元并休假五周。

在以往开发者的印象里,开源意味着展示自己,意味着对代码有追求,Dash可以说粉碎了这个看法。但就像图拉鼎所说,代码写得如何,并不妨碍它在商业上的成功。

你对追求完美代码有什么看法呢?

我们找到伦敦一位资深程序员Daniel Irvine分享的文章,他认为不应该追求完美代码。

作者:Daniel Irvine

译者:刘志勇

本文由作者授权翻译并发布。

原文:https://8thlight.com/blog/daniel-irvine/2016/11/11/perfect-code-is-an-illusion.html

引言

完美主义者最大的特点就是过度追求一件事情的完美,他们看什么东西都不会完全满意,因此经常陷入深深的矛盾之中,殊不知这个世界上根本就没有绝对的完美,将精力投注到工作中、生活中各个方面,努力改善,乐此不疲。程序员中的完美主义者又会怎样呢?

许多程序员文化是建立在完美代码的理想上:代码不仅能够运行,而且也必须是干净、优雅的。我们以巧妙地构建解决难题的对策为傲。然而这种完美主义可能不利于团队的成功,因为完美主义常常导致个人分歧。

然而能得到所有人公认的完美代码标准并不存在。对于完美代码,每个人都有一个略微不同的审美观点,这意味着我们每个人都有自己的想法:什么样的代码看起来完美。如果我们都是由完美主义来驱动——希望我们的代码看起来像我们想要的样子,那么我们最终会与队友发生分歧,因为我们每个人互相反对,只是为了让代码库看起来像我们所想看到的样子。

当我成长为一个程序员时,我发现有一些小技巧,可以让团队避免因为完美代码而发生冲突。下面就让我们来看一看。

不要被教条束缚

对代码库的唯一要求就是,它是可用的。通过一个简单的方法来验证,如果它经过完全覆盖测试并通过,就可以证明是可用的。除此之外,每个测量都是主观的。

当你阅读其他人的代码,不要去想如果是你写的话会怎样。不要试图在你脑海中重写这段代码,让它存在就是它的方式。

减少你对代码设立的标准

用制表定位键(Tab)还是空格键(Space)?两个还是四个空格?为你的左括号设置同一行呢,还是另起一行呢?不知道如果只有一个单一的编程语言的话,是不是就不会有这种争论?解决这个问题的标准方法就是为团队设立编码标准,这会为团队的代码带来一致性。

不幸的是,很难形成完整的编码标准。总是会有灰色区域导致了潜在的分歧,如命名、模式、对象建模技术等。

而且,他们团队定下的规则有时会引火烧身。

我曾经所在的团队,对编码标准有过如下规则:“功能不得超过7行代码”。事后看来,这个规则,还不如没有。虽然我仍然赞同这个观点,但这一规则还是激起了很多混乱和争辩。人们需要不断地想着它。团队里的一些人从不相信这个规则。总之,我们团队花了大量时间和精力,来维持这个规则。

你想想啊,那些时间如果用来结对编程或是一起改进代码该是多好啊。所有的规则都有一定的代价,尽管有了这些规则,你可能仍然会有意见分歧。

虽然我仍然按照简短代码的规则来写代码——通常少于七行——但我不屑于依照这些规则来写代码。

让代码库成为自己的标准,而不是写出什么规则。

不要被pull请求套牢

我通常会迅速合并pull请求,即使它对代码有很大的改动。这样做有两个原因。第一是等待PR修改十分煎熬,会打消团队成员的积极性。第二点更微妙,基本代码保持可延展性是非常重要的:意义、准备和期待去改变。但是,“完美pull需求”文化阻碍了这一点。它促进了代码在主分支是“黄金”,并不应该再次改变的概念。如果我们允许不完美代码成为主干,那我们会鼓励更高的变化率。团队学会总是提出:“我看的代码足够干净吗?”

这有点违背直觉:允许主程序写入不完美的代码。实际上,它可以提升程序的质量。

那么,审查pull请求的更好的方法是什么?

我的策略是这样的。我会首先通读整套变更,标注任何可能重要的事情。然后优先排列他的反馈,限制最多三条建议。其它的就不管了。

我很少就风格问题进行评论,比如放错的空格或缩进参数列表。如果代码是可延展的,有人可能在以后会清理它。同时,这些风格问题并不会给任何人带来伤害。

放眼望世界

对于任何多于几十行的代码,完美只是旁观者的感觉。如果你期望每个人以完全相同的方式解决问题,那么你就犯了错误。如果你对代码有着宏伟的愿景,那么你将会感到失望。

为你的队友提供他们认可的设计和代码的空间,并鼓励每个人在系统设计时平等的发挥作用。

当你的团队写出的代码与你想要的不一样时,不要与他们争论。要记住,在团队中保持健康工作关系,长远来看是有价值的。所以也许你要牺牲你个人对质量的愿景。

程序员应该每天花一些时间,回顾并反思自己的开发技术的发展。为自己和团队,思考每天的效率。这个月的工作可能下个月不再做。团队技能的增长是从新手到专家,这一点尤为如此。所以,要确保你少走弯路,因为最初的弯路要比他人提供的帮助都多。

移动平台如何与AR/VR、视频、硬件创新等新技术相结合?Hybrid是否是移动技术的最佳形式?创业公司如何选择适合自己的移动架构?相约ArchSummit北京2016,与来自腾讯、阿里等移动技术专家们一起深入移动架构的选择与思考ArchSummit9折倒计时,点击“阅读原文”了解详情。

更多移动开发精彩内容,欢迎关注移动开发前线公众号!



举报 | 1楼 回复

友情链接