热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

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

从,dash,ios,开源,说起,不要,过

(Dash iOS源码截图)

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

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

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

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

引言

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

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

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

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

不要被教条束缚

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

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

减少你对代码设立的标准

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

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

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

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

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

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

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

不要被pull请求套牢

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

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

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

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

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

放眼望世界

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

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

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

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



作者:刘志勇
来源:51CTO

推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 前端开发:从底层到顶端的行业现象解析
    在编程领域,鄙视链现象屡见不鲜,从C语言到Java、.NET等,每个技术栈都有其独特地位。然而,前端开发者尽管常处于鄙视链底端,却在市场需求中备受青睐。本文深入探讨这一现象,并分析前端工程师如何在竞争激烈的市场中脱颖而出。 ... [详细]
  • PHP插件机制的实现方案解析
    本文深入探讨了PHP中插件机制的设计与实现,旨在分享一种可行的实现方式,并邀请读者共同讨论和优化。该方案不仅涵盖了插件机制的基本概念,还详细描述了如何在实际项目中应用。 ... [详细]
  • 本文详细介绍了C语言中的指针,包括其基本概念、应用场景以及使用时的优缺点。同时,通过实例解析了指针在内存管理、数组操作、函数调用等方面的具体应用,并探讨了指针的安全性问题。 ... [详细]
  • 本文探讨了通过非官方渠道在苹果手机上安装已下架的迅雷应用程序的方法及潜在风险,重点讨论了信任开发者可能带来的安全问题。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 深入理解Spring:Aware接口、异步编程与计划任务
    本文将带你深入了解Spring框架中的 Aware 接口、异步编程以及计划任务。通过具体示例和详细解释,帮助你掌握这些核心功能的实现原理和应用场景。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 分享一个简化版的Silverlight链接图项目:Link Map Simplified
    本文介绍了一个使用Silverlight开发的可视化工具,主要用于展示和操作复杂的实体关系图(Graph)。该工具在犯罪调查系统中得到了广泛应用,帮助用户直观地获取和理解相关信息。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • 金山与万普广告争议:APP开发者权益受侵害
    探讨了金山毒霸对嵌入特定广告SDK的APP进行封禁的行为,分析其对安卓开发者的影响,并揭示了这一系列事件背后的复杂性。 ... [详细]
  • 本文将详细介绍如何在Chrome浏览器的开发者工具中,像Firebug一样保留和查看上次的XHR(XMLHttpRequest)请求记录。 ... [详细]
author-avatar
胜利者416
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有