阅读更多

19顶
0踩

研发管理

翻译新闻 软件开发最佳实践集锦

2013-04-08 18:22 by 副主编 wangguo 评论(6) 有20901人浏览
本文的这些最佳编程实践、开发准则都是伟大的程序员的经验总结。Tim Oxley从互联网中搜集了这些最佳实践,并放在了Github上,以供他人查看和补充。希望这些最佳实践能够为你的开发工作带来一些帮助。

不要构建大型应用

构建大型应用的秘诀就是“不要构建大型应用”,也就是把你的应用拆分成若干小应用,然后将这些可测试的小应用组装到一起。——Justin Meyer,JavaScript MVC作者

注重项目质量

当我听到“匆忙做出了能够运行的代码”,我也许不会去使用这些应用程序,因为它们会逐渐丧失可迭代的能力。——Avdi Grimm

不写代码

“Don’t write code”是每一个开发人员都需要学习的最重要的一条准则。目前存在大量重复的、蹩脚的代码(跨项目),在很多情况下,开发者甚至不去仔细看看周围有什么,他们只是一味地编写代码。

将减少产品中代码量作为目标

我讨厌代码,我希望在我们的产品中代码尽可能少。——Jack Diederich

保持最少依赖

经典格言“不要重新发明轮子”并不适用于火车头处的轮子(指项目的核心部分)。

停止编写类

“这不应该是一个类”,尤其是在类有两个方法,且其中一个是构造函数时。任何时候你看到这种情况时,你也许只应该写一个函数。——Jack Diederich

忘掉新功能,将同样的东西做得更好

开发者容易忽视而用户通常比较关心的东西是——应用程序中最常用功能的性能和可用性。——Tim Anderson

重新发明轮子

发明自己的轮子,可以让你更深刻地理解轮子如何工作,以及如何才能做得更好。

做容易的事情,而不是难的

  • 简单比复杂好
  • 复杂(Complex)比超复杂(complicated)好
  • 顺序比嵌入好
  • 可读性应当被重视
  • 如果你的代码实现难以解释,这不是一个好的实现
——The Zen of Python(Python禅宗)

重写>重构

如果你正在更改一个类或方法超过25%的部分,你可以考虑重写,你的代码将会更加整洁。

重构>重写

重写一个项目的常见借口:

  • 代码很烂
  • 我们现在更聪明了
  • 我们选错平台/语言了
为什么重写(几乎)不是一个好主意:

  • 它总是需要比你预期更长的时间
  • 市场在不断变化
  • 现有客户会变得沮丧
  • 重构也可以清理代码
  • 你无法控制重写的代码,最后会变成它在控制你
你不知道项目将如何增长

从一开始你就要承认,你不知道项目会如何增长。一旦你承认这一切,你就会开始防御性地设计系统……你应该花大部分的时间来考虑接口,而不是实现。——Nicholas Zakas,《高性能JavaScript网站》作者

避免代码味道(指代码中存在潜在问题)

写单元测试

每个程序员都知道他们应该为自己的代码编写测试,但很少有人会这样做。问其“为什么不呢?”通常会回应“我太忙了。”这很快就会变成了一个恶性循环——你感到压力越大(越忙),你写的测试就会越少,你的代码也会变得不太稳定,你的生产力会越来越低。这样一来,你的压力就更大了(工作更忙了)。正是由于这样的恶性循环,导致程序员的编码热情降低。我们发现,有时一个简单的测试框架,就可以让工作有很大的不同。

(没有单元测试)你不是在重构,你只是正在改变一堆狗屎。——Hamlet D'Arcy

测试驱动开发&控制反转(Inversion of Control)

即使你的代码不需要测试,你也应该编写可测试的代码。IoC(控制反转)可以帮你这样做。尝试在测试时注入对测试友好的依赖或模拟实例,并隔离受测试单元。

避免将对象创建与应用程序逻辑混合在一起

避免创建技术债务

尽管不成熟的代码可以正常工作,客户也完全可以接受,但是最后出现的技术债务将会使你疲惫不堪,整个工作组也有可能会被这些技术债务困在原地。

过早优化是罪恶之源

一些程序员会浪费大量的时间去思考或担心程序中非关键部分的运行速度,而他们的这些尝试有可能会对最终的调试和维护产生负面影响。我们应该忘掉小的效率,在97%的时间内告诫自己“过早优化是罪恶之源”,但是,也一定不能在关键的3%上错过优化机会。

计划,计划,计划

首次就做正确的事情比稍后重做的代价要小得多,发现解决问题越早,代价就越小。

夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜少算,而况于无算乎!吾以此观之,胜负见矣。——孙子兵法

计划是无用的,规划是无价的。——温斯顿•丘吉尔

一个不断学习的编程团队

即使一个团队中的程序员平庸、缺乏经验,但如果他们都为团队利益而编写代码,就有可能会成为一支伟大的团队。这一切都要看该团队是否能够意识到他们的工作只是写代码或将写代码和学习作为首要目标。——Reginald Braithwaite


不断评估、完善

软件设计是一个迭代的过程,在一开始不可能什么都考虑到,需要在之后的过程中通过经验来不断完善。而且通常情况下,很少有软件项目能够完全按照预期来完成,随着项目的进展,对于项目的预期也会下降。

什么是架构

你的项目架构反映了什么?是医疗保健系统、会计系统、库存管理系统,还是rails、spring/hibernate、ASP?

软件产品的架构应该让所有人都很容易了解产品所要达到的目的,并且系统的架构应该反映系统的用例而不是它使用的框架。架构不是(或不应该是)关于框架的内容。架构不应该由框架支持。框架是我们要使用的工具,而不是要符合的架构。如果你的架构基于框架,那么它就无法基于你的用例。——Uncle Bob Martin,《尖叫的架构(Screaming Architecture)》作者

X-Windows系统设计原则

  • 不用增加新的功能,除非没有它就无法完成一个真正完整的应用程序
  • 决定一个系统不是什么和决定它是什么同样重要。你无法满足世界上所有人的需求,好的做法是,使系统可以以向上兼容的方式扩展,以便能够满足额外需求。
  • 比从一个例子中归纳,更坏的是,没有可归纳的例子。
  • 如果你不能完全了解一个问题,那么最好别提供任何解决之道。
  • 如果预期要用90%的努力去完成10%的工作,那么应该用更简单的办法解决。
  • 尽量避免复杂性
  • 提供机制而不是策略,实践中把用户方面策略放在用户手里。
Unix设计原则

  • 模块化准则:编写简单的模块用清晰的接口把它们连接起来。
  • 清晰性准则:清晰性优先于巧妙。
  • 组合准则:设计可以和其他程序连接的程序。
  • 分离准则:把政策和机制相分离;把接口和引擎相分离。
  • 简单性准则:设计追求简单性,只在绝对必须时加入复杂性。
  • 节俭准则:只在通过原型澄清后才编写大的程序。
  • 透明性准则:设计的可见性使检查和除错更容易。
  • 健壮性准则:健壮性是透明性和简单性的孩子。
  • 表示准则:将知识包入数据,程序可以笨拙和健壮。
  • 最小惊奇准则:在界面设计中,总是遵循最小惊奇准则。
  • 沉默准则:如果程序没有重要的输出,他就应该保持沉默。
  • 修复准则:如果你必须出错,尽可能响亮和快速的出错。
  • 经济性准则:如果和机器时间比较,程序员的时间是昂贵的。
  • 生成准则:避免手工编程,如果可能,编写编写程序的程序。
  • 优化准则:在打磨前建立原型,在你优化前先使他工作。
  • 多样性准则:怀疑一切声称“只能如此”的说法。
  • 扩展性准则:为未来设计,因为它往往来的比你想得快。
——Eric S. Raymond,《Unix编程艺术》作者

英文原文:Programming Best Practices Tidbits
19
0
评论 共 6 条 请登录后发表评论
6 楼 cuqing 2016-12-21 17:17
很多想法值得借鉴,不错!
5 楼 dohkoos 2013-06-14 17:01
将减少产品中代码量作为目标
4 楼 骨之灵魂 2013-04-13 22:22
phlsbg 写道
好东西。。。

好东西。。。
3 楼 sandyppl 2013-04-11 00:01
模式设计的基本原则
2 楼 phlsbg 2013-04-09 14:03
好东西。。。
1 楼 qzy927513 2013-04-09 12:27
不错,支持

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 最佳软件开发实践以及源代码管理方案

    介绍了关于最佳软件开发实践以及源代码管理方案的详细说明,提供计算机的技术资料的下载。

  • 敏捷软件开发与设计的最佳实践

    敏捷软件开发现在是很流行的,来参加一次这方面设计的最佳实践

  • Android开发最佳实践[汇编].pdf

    Android开发最佳实践[汇编].pdf

  • RUP-软件开发团队的最佳实践

    RUP-软件开发团队的最佳实践,为你的开发提供支持

  • 做软件开发都要做哪些工作:软件过程管理的最佳实践

    做软件开发都要做哪些工作:软件过程管理的最佳实践?不可否认,在现实的软件开发项目中,的确存在类似下图所示的情况。  做软件开发都要做哪些工作:软件过程管理的最佳实践?不可否认,在现实的软件开发项目中,...

  • 自动化测试的最佳实践

    事实上,它是与软件开发或使用相关的最重复且最耗时的任务类型之一。对于大多数类型的软件,只有手动数据输入需要更多时间或更多重复-大规模,大容量数据输入通常是首先要实现自动化的任务之一。 当然,自动化测试并

  • RUP-软件开发团队的最佳实践

    RUP-软件开发团队的最佳实践 RUP-软件开发团队的最佳实践

  • 软件需求最佳实践:SERU过程框架原理与应用part1

    本书首先从软件需求实践中出现的主要问题和困难入手,指出了改进的主要方向;然后逐一说明了需求定义、需求捕获、需求分析与建模、编写规约、需求验证等需求开发活动的任务、要点和具体手段;并提出了一个可操作性强...

  • 软件需求最佳实践:SERU过程框架原理与应用part2

    本书首先从软件需求实践中出现的主要问题和困难入手,指出了改进的主要方向;然后逐一说明了需求定义、需求捕获、需求分析与建模、编写规约、需求验证等需求开发活动的任务、要点和具体手段;并提出了一个可操作性强...

  • Python_Development_Best_Practices:Python软件开发最佳实践资源

    Python_Development_Best_Practices:Python软件开发最佳实践资源

  • 软件开发项目实践指导书

    本模型描述了WRUP的最佳实践方式 。它本身也是一套有效的...之所以称为“最佳实践”,不仅仅是因为他们具有可以量化的价值,并且被许多成功的机构,成功的项目所运用,并且在Sundy的十年开发生涯中不断积累的结果 。

  • 代码审查CodeReview的最佳实践

    我一直认为CodeReview(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,CodeReview都是基本要求,代 我一直认为CodeReview(代码...

  • 什么才是软件开发中最佳实践呢?

     说完故事,我想聊聊软件开发中,常常可以听到的一个概念 ——  Best Practice  : 最佳实践 。Wikipedia 上对其解释为: A best practice is a method or technique that has been generally accepted as ...

  • DesignPattern:经验丰富的面向对象软件开发人员使用的最佳实践

    设计模式经验丰富的面向对象软件开发人员使用的最佳实践。

  • 敏捷技能修炼 敏捷软件开发与设计的最佳实践

    敏捷技能修炼 敏捷软件开发与设计的最佳实践

  • 软件安全开发指南资料合集.zip

    内容含DevSecOps参考设计指南、软件安全构建成熟度模型、DevSecOps企业实践、Javascript编码安全指南、JAVA代码审计、软件保证成熟度模型、威胁建模、PHP代码审计、阿里Java开发手册、DevSecOps最佳实践、安全编码...

  • 软件需求最佳实践笔记(一)

    造成这一现象的主要的原因是:在项目立项阶段开发团队(包括需求分析人员)还没有开始工作,可能招标还没有完成,项目团队还没有成立。不管怎样,需求分析员应认真审视需求定义阶段的产物,如果没有达到要求必须做...

  • 06_QLibrary.zip

    06_QLibrary.zip

  • 毕业设计: 基于Densenet + CTC技术的文字检测识别的技术研究

    本毕设课题是属于计算机视觉下的目标检测与识别,对象为自然场景下的各种文本信息,通俗的说就是检测识别图片中的文本信息。由于文本的特殊性,本毕设将整个提取信息的过程可以分为检测、识别两个部分。 论文对用到的相关技术概念有一定的介绍分析,如机器学习,深度学习,以及各种的网络模型及其工作原理过程。 检测部分采用水平检测文本线方式进行文本检测,主要参考了乔宇老师团队的 CTPN 方法,并在正文部分从模型的制作到神经网络的设计实现对系统进行了较为详细的分析介绍。 识别部分则采用的是 Densenet + CTC,对于印刷体的文字有较好的识别。

Global site tag (gtag.js) - Google Analytics