软件开发中的最佳实践是什么?

标签: 软件开发 最佳实践 | 发表时间:2015-05-10 20:14 | 作者:
出处:http://news.cnblogs.com/

英文原文: What Is a Best Practice in Software Development?

刚才,我在 Pluralsight 网站发布了一个教程,标题为“ 促成商业交易的最佳实践”。(如果你想阅读、但没有 Pluralsight 账号,请注册右边侧栏中的邮件列表,我将给你发送一份免费的 30 天订阅)。这个标题有个不太认真的元素,它在媒介上或许不是必要的最好想法,我这里的好处是和标题吸引力最大化有着关联。但是,如果你在笑,生活会更加有趣。

不管怎样,它有些不太认真的理由是,我发现“最佳实践”这个术语在很多语境中是骗人的。最好情况下,它是模糊的、主观的、和语境高度相关的。本质上,这个课程的目的是,“嘿,如果你认为,你的团队应该采用 X 实践,那么你最好搞清楚在管理上得到纯利益的东西——‘最佳’实践是有利可图的实践。”因此,我想可以送出这份教程介绍部分的副本,我在这个部分详细讨论了这个术语。事实上,第一部分称之为“‘最佳实践’究竟是什么?”

最佳实践:理想的、真正的和愤世嫉俗的

我提供的“最佳实践”【注1】的第一个定义是,某个人或许将其描述为“官方”版本,但是我把它称作“理想版本”。维基百科对其定义为,“为持续有效地达到企业目标而采取的最成功的解决方案或解决问题的方法,它被用作一种基准。”换句话讲,一种“最佳实践”,多多少少在经验上验证过是最好的一种实践。举个例子,如果你准备鸡肉有三种可能方法:生的、半生不熟、完全熟,那么根据死亡和疾病的事故次数,完全熟将显现为一种最佳实践。我把这种定义称为“理想”的原因是,它意味着明确地有一种做某个事情的最好方法,现实生活很少如此齐整。拿鸡肉的例子。完全熟好于半生不熟,但是并不缺乏完全弄熟鸡肉的方法——你能用火烤、用烤箱、用烤炉、有油炸等。任意一条这些方法是经验上认为的“最佳”、或者它变成了偏爱和看法的一种方式?

烤鸡肉的最佳实践

这导致我将轻率地将其称为最佳实践的“真正的”定义,我的意思是,这也变成了最被普遍应用的定义。它通常被称作是做某事的、可接受方式的一种约定,经常为某些标准机构所推崇,比如 ISO 或其它类似的机构。从这个角度看,或许,关于最佳实践的更好名字可能是“标准化实践”或“可接受的实践”。关于这种情况的例子或许是,外科医生洗手的优先级要高于外科手术。它是如此地被广泛接受且被标准化地实践,以致于那些不遵循此实践的实习生,会让人心生反感。洗手相较于不洗手,在病人治疗效果方面已经从经验上被论证为是更好的了。在该领域,外科医生令人信服地在手术之前洗手,那么这种洗手是绝对的“最佳”实践吗?好吧,这个哲学问题相对于我把最佳实践称作“理想的”定义,不是特别重要。重要的是,洗手是有好处的、且广为接受。

现在,谈谈愤世嫉俗的定义。对于很多人来说,“最佳实践”基本上是一种无意义的漂亮口号,让一个人的行动看起来比实际情况更重要、更合理、或更正当。我敢肯定,不只是我听到人们把“最佳实践”的术语挂在嘴边,以此评判人们的行动,明显的是,这种实践既没有在经验上被论证为最好的可能实践,也没有受到规范或标准组织的通过。你将经常听到开发人员把他们解决某些问题的方法谈论为一种“最佳实践”,当他们在高资历的位置、或控制着组织的技术决定时,就更明显了。但是,它是一种真正的最佳实践吗?或者,他们只是使用这个词语来避开争论?

通过考虑这三种定义,我们可能定义成一种连续统一体。愤世嫉俗版本在最佳实践术语的使用上,有着最少的可信度,而理想版符合这个术语防弹的用法。这样,有人把某种实践定义为“最佳实践”,如果他不能提供证据,就符合愤世嫉俗版。如果他成功地论证了价值,并建立了一种正当的标准,就符合真正版;如果他或多或少地论证了这种实践基本上是可能的最佳实践,就符合理想版。

软件开发的“最佳实践”

我们已经讨论过了“最佳实践”术语的一些定义了,接下来说一些例子, 它们通常在某种程度上提到了最佳实践,或者我刚才提到的连续统一体。我打算讨论一个小组或组织中的某些具体东东,比如你们的设计师认为,一个小组的“最佳实践”就是使用她写的校验资源库。我也不打算讨论家喻户晓的、已经定义好的行业实践。不是这些实践没有被一致通过或没有他们的诋毁,而是多数开发人员貌似看到了采用的潜在价值,即使他们相信,可能地,采用的价值比其成本和麻烦更加重要。换句话说,可能是相信某些东东是最佳实践, 而不是值得这样做

下面是软件开发领域里的一些例子。

  • 敏捷方法论如日中天。现在整个行业都在致力于帮助公司采用敏捷实践。
  • 自动化测试几乎被普遍赞同而作为一种值得赞美的目标。
  • 测试驱动开发或许更多地归结为有争议的影响,但是根本就不缺乏那些认为这是最佳实践的开发人员。
  • 持续集成,相对于仓库分支的开发,有着大量的合并工作量,很大程度地被视作有益处。
  • 有原始的、所谓的 Gang of Four【注2】面向对象设计模式清单,但是模式清单已经扩大了,超过了这四位作者建议的清单。总之,在策略上使用这些模式被视作为一种最佳实践。
  • 代码审查广泛被视作是促进代码质量的、不可或缺的方法。
  • 结对编程把代码审查带到了下个阶段,让开发一直处于连续的审查状态。
  • 一键化自动开发,对于大多数组织而言,被视作重要目标;与之形成鲜明对比的是,某个劳动力用半天时间,才能让软件达到可部署状态。

上面的清单不一定是全面的,可能也不是没有争议的。你可能认为其中一条或几条甚至不是优秀的思路。然而,总的来说,这个行业已经朝着一个方向前进,一种背道而驰的视角。不论好坏,这个行业共同认为,这些都是值得达到的目标。

但是,在共同维护一种优秀思想的利益和昙花一现之间,有一条分界线。在传统智慧和普遍误解之间,有一条分界线。该怎样才能知道这些实践是真正的优秀思想,更重要的是,该怎样知道这些实践对他自己和组织是有好处的?

喔,这就是本教程的主旨(这里有个暗示——向钱看)。

要点

我是一名软件开发人员,我可以假设你们很多读者也是。几乎可以肯定,你是一名开发人员、一名前开发人员、或与有一定能力的开发人员共事的人。那么,我们都知道,对于软件开发人员而言,存在一种自然倾向,他们想在工作中尝试新东西,并收获宝贵的经验。我们都知道,想采用最新的开发实践、语言、流程的开发人员,和想采用最新框架的开发人员之间,存在这一种天然的紧张局势,因为他们对这样做有兴趣,而开发人员想做对他们的组织或项目最有意义的事情。这只是走在该行业中的一条普遍分界线。

我对本教程的目标非常简单,是为了帮助你走过在这两种关注点之间的分界线。我想给你一种方式来看待被行业吹捧为最佳实践的东东,来鉴别采用这些实践对你的组织是否有着实际意义。还有,我想给你一种方式,让你沿着“最佳实践连续统一体”,从“我想去做因为人们说它好”变成“我们可以公正评判的习俗”,变成理想的、在某种程度上的、“我们这样做是因为它从经验上被论证过,要好于其它方法”。

有了我向你展示的启发和结构,你可以得出结论,所谓的行业最佳实践,实际上对于你的团队或组织没有意义。不错,是这样的。重要的是,你根据可测量的经验和数据做决定,而不是嘴里的词语和猜测。最重要的是要明白,所谓的最佳实践是否为真正的最佳实践。


注1:最佳实践(best practice),是一个管理学概念,认为存在某种技术、方法、过程、活动或机制可以使生产或管理实践的结果达到最优,并减少出错的可能性。http://zh.wikipedia.org/wiki/%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5

注2:The authors of the DesignPatternsBook came to be known as the “Gang of Four.” The name of the book (“Design Patterns: Elements of Reusable Object-Oriented Software”) is too long for e-mail, so “book by the gang of four” became a shorthand name for it. After all, it isn’t the ONLY book on patterns. That got shortened to “GOF book”, which is pretty cryptic the first time you hear it. http://c2.com/cgi/wiki?GangOfFour


译文: 《 软件开发中的最佳实践是什么? 》  腊八粥

本文链接

相关 [软件开发 最佳实践] 推荐:

软件开发人员的最佳实践

- - CSDN博客综合推荐文章
        最近在一个网站上看到一篇写关于软件开发人员应该有的几项实践,感觉写的非常的好. 下面将列举下文章中提到的几个方面.         首先文章中提出,软件开发人员需要不断的练习,什么是练习,为什么要练习,练习意味着什么. 练习是一种习惯,练习是一个过程,练习并不意味着记住,练习需要不断的实践,练习需要专心致志的付出.

软件开发中的最佳实践是什么?

- - 博客园_新闻
英文原文: What Is a Best Practice in Software Development?. 刚才,我在 Pluralsight 网站发布了一个教程,标题为“ 促成商业交易的最佳实践”. (如果你想阅读、但没有 Pluralsight 账号,请注册右边侧栏中的邮件列表,我将给你发送一份免费的 30 天订阅).

jQuery最佳实践

- andi - 阮一峰的网络日志
上周,我整理了《jQuery设计思想》. 那篇文章是一篇入门教程,从设计思想的角度,讲解"怎么使用jQuery". 今天的文章则是更进一步,讲解"如何用好jQuery". 我主要参考了Addy Osmani的PPT《提高jQuery性能的诀窍》(jQuery Proven Performance Tips And Tricks).

PHP最佳实践

- xiangqian - 阮一峰的网络日志
虽然名字叫《PHP最佳实践》,但是它主要谈的不是编程规则,而是PHP应用程序的合理架构. 它提供了一种逻辑和数据分离的架构模式,属于MVC模式的一种实践. 我觉得,这是很有参考价值的学习资料,类似的文章网上并不多,所以一边学习,一边就把它翻译了出来. 根据自己的理解,我总结了它的MVC模式的实现方式(详细解释见译文):.

MongoDB最佳实践

- - NoSQLFan
将 MongoDB加入到我们的服务支持列表中,是整个团队年初工作计划中的首要任务. 但我们感觉如果先添加一项对NoSQL存储的支持,而不是先升级已支持的关系型数据库,可能对用户不太好,毕竟目前的用户都使用关系型数据库. 所以我们决定将引入MongoDB这项工作放到升级MySQL和PostgreSQL之后来做.

Dockerfile 最佳实践

- - DockOne.io
在容器领域,Docker 公司提出的容器镜像已经成为目前容器打包交付的事实标准. 构建镜像需要编写 Dockerfile,如何编写一个优雅的 Dockerfile 呢. 在 Docker 公司的官方文档中给出了一篇:《 Best practices for writing Dockerfiles》.

文章: Grails最佳实践

- - InfoQ cn
我在IntelliGrape工作,这是一家专门使用Groovy & Grails进行开发的公司. 本文是我们Grails项目遵循的最佳实践的基本清单,收集自邮件列表、Stack Overflow、博文, 播客和 IntelliGrape的内部讨论. 它们分为控制器、服务、Domain、视图、TagLib、测试和其他.

PHP最佳实践(译)

- - CSDN博客Web前端推荐文章
原文:  PHP Best Practices-A short, practical guide for common and confusing PHP tasks. 译者: youngsterxyf. 本文档最后审阅于2013年3月8日. 由我, Alex Cabal,维护该文档. 我编写PHP程序已有很长一段时间了,当前我 经营着 Scribophile,由认真作家组成的一个在线写作团体,  Writerfolio,为自由职业者提供的一个易用写作工具集,以及  Standard Ebooks,一个图文并茂、无数字版权管理的公共领域电子书出版商.

Log4j最佳实践(原) - Mainz

- - 博客园_Mainz's Blog
本文是结合项目中使用 Log4j总结的最佳实践,非转载. 网上可以找到的是这一篇《 Log4j最佳实践》. 本来 Log4j使用是非常简单的,无需多介绍其用法,这只是在小型项目中;但在 大型的项目中使用 log4j不太一样. 大型项目非常依赖日志,因为解决线上问题必须依靠log,依靠大量的日志.

再谈RestAPI最佳实践

- - 企业架构 - ITeye博客
http://www.javacodegeeks.com/2014/05/rest-api-best-practices-reloaded.html ,仅供学习和参考,转载请注明出处. 近一年半,我参与了2到3个项目的工作,这些项目涉及到大量供“外部”使用的Rest API,稍后我们再来解释为什么要将“外部”这个词放在引号之中.