`
zz563143188
  • 浏览: 2274570 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
博客专栏
77fc734c-2f95-3224-beca-6b8da12debc8
编程工具介绍
浏览量:578622
D9710da2-8a00-3ae6-a084-547a11afab81
Spring Mvc实战(...
浏览量:1087540
D3f88135-07de-3968-a0f0-d2f13428c267
项目开发经验
浏览量:1656809
社区版块
存档分类
最新评论

软件开发实践的24条军规

阅读更多
本文的这些最佳实践、开发准则都是伟大的程序员的经验总结。Tim Oxley从互联网中搜集了这些最佳实践,并放在了Github上,以供他人查看和补充。希望这些最佳实践能够为你的开发工作带来一些帮助。

本文的这些最佳编程实践、开发准则都是伟大的程序员的经验总结。Tim Oxley从互联网中搜集了这些最佳实践,并放在了Github上,以供他人查看和补充。希望这些最佳实践能够为你的开发工作带来一些帮助。 

1.  不要构建大型应用

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

2.  注重项目质量

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

3.  不写代码

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

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

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

5.  保持最少依赖

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

6.  停止编写类

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

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

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

8.  重新发明轮子

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

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

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

10.  重写>重构

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

11.  重构>重写

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

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

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

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

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

14.  写单元测试

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

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

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

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

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

17.  避免创建技术债务

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

18.  过早优化是罪恶之源

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

19.  计划,计划,计划

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

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

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

20.  一个不断学习的编程团队

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

21.  不断评估、完善

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

22.  什么是架构

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

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

23.  X-Windows系统设计原则

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

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

企业级项目实战(带源码)地址http://zz563143188.iteye.com/blog/1825168

收集五年的开发资料下载地址:  http://pan.baidu.com/share/home?uk=4076915866&view=share
英文原文:Programming Best Practices Tidbits
分享到:
评论
1 楼 fafa8811 2014-03-20  
好,真好。

相关推荐

    成为编程高手的二十二条军规

    ### 第四条军规:掌握核心编程语言 C语言作为编程基础,掌握它对于后续学习其他高级语言至关重要。C语言的严谨性、高效性使其在系统级编程、嵌入式开发等领域有着不可替代的地位。因此,深入学习C语言,是成为一名...

    运维的 85 条军规

    ### 运维的85条军规:核心知识点解析 #### 1. 承载能力优先 - **重要性**:任何系统设计之初都应当优先考虑其承载能力,即能够处理的最大工作负载量。 - **操作建议**:在考虑优化之前,首先确保系统能够稳定运行在...

    成为编程高手的22条军规

    ### 成为编程高手的22条军规 #### 1. 学无止境:广泛学习,不要局限 编程世界博大精深,各种语言和技术层出不穷。作为一个编程高手,应该保持开放的心态,广泛涉猎不同的编程语言和技术。即便当前的工作只涉及到一...

    Java 编程军规.docx

    Java作为一种广泛使用的编程语言,在软件开发领域扮演着极其重要的角色。为了确保代码质量,提升程序的健壮性和可维护性,制定一套行之有效的编程准则显得尤为必要。“Java编程军规”正是在这样的背景下诞生,它旨在...

    防止项目延迟的18条军规

    ### 防止项目延迟的18条军规 #### 1. 详尽的需求分析 - **定义**: 在项目启动之初进行全面、深入的需求分析,包括业务需求和技术需求的明确,确保所有相关人员对项目的最终目标有清晰的认识。 - **重要性**: 准确的...

    云原生技术架构设计与实践

    同时,DevOps平台支持持续集成/持续部署(CI/CD),加速软件开发周期。微服务治理平台则负责服务注册、发现、调用跟踪、熔断和修复等功能,提高系统的稳定性和可靠性。此外,数据中台、技术中台以及互联网中间件等构成...

    技术博客珍藏版

    - 软件开发实践:提出了24条军规,指导开发者遵循良好的编程习惯和项目管理规范。 - JSP内置对象与作用域:JSP的九大内置对象(如request、response、session等)和四大作用域(page、request、session、...

    程序员从初级到高级知识汇集

    - **软件开发实践的24条军规**:提出了高效开发团队应遵循的规范和最佳实践,有助于提升开发质量和团队协作效率。 3. **Spring专题** - **Spring MVC+Hibernate+Freemarker开源项目**:提供了完整的Spring MVC、...

    Visual+C#+2005开发技术+数据库(1)

    1. **SQL Server的项目开发的二十一人、条军规**: 这部分内容可能提供了一套开发SQL Server项目时的实践准则和最佳做法,涵盖了数据库设计、性能调优、代码规范等方面。遵循这些军规,开发者可以避免常见错误,...

    面向对象编程 规则

    【面向对象编程规则】在软件开发中扮演着至关重要的角色,它们不仅关乎代码的格式和细节,更是提升软件工程师编程能力的关键。编程规则是程序员迈向卓越的基石,无论是设计小型程序还是大型架构,都需要遵循这些规则...

    201800130067-黄一鸣-实验101

    实验101主要关注编程指导原则、文档编写以及项目进度管理,这些都是软件开发中的关键环节。编程指导原则是为了确保代码的可读性、可维护性和团队合作的有效性。例如,阿里巴巴的编程规范提供了关于JAVA开发的详细...

    C语言程序设计基础课件

    C语言程序设计基础课件...通过本课件的学习,不仅可以掌握C语言的基本语法,还能了解到良好的编程习惯和规范,为后续的软件开发打下坚实基础。同时,结合实际的编程练习和项目,可以更好地巩固理论知识,提高编程技能。

    大数据和NoSql

    最后,"MySQL数据库开发的三十六条军规(石展)完整.pdf"虽然不直接涉及大数据或NoSql,但作为一款广泛使用的SQL数据库,MySQL在许多大数据环境中仍然是基础组件。这本资料可能提供了优化MySQL数据库开发的实践指南,...

    mysql参考资料.rar

    这份资料可能是对使用MySQL时应遵循的最佳实践的总结,涵盖了开发和运维中的关键点,可能包括: - 数据库设计规则:如避免NULL、合理设计主键、避免过度规范化 - SQL编程规范:使用预编译语句防止SQL注入、避免全...

    Symbian中文技术周刊2

    #### 军规第7条:不一定要在析构函数中删除类的成员对象 这条规则强调的是,在Symbian中,对象的生命周期结束后即可以删除,不一定非要在析构函数中进行删除操作。这样做有助于减小应用的内存占用,特别是在资源有限...

    Java基础-第三天(进阶)---2.ppt

    设计模式是软件开发中的重要概念,它们是经过实战检验的、标准化的解决方案模板,用于解决常见的编程问题。设计模式包含环境、问题和解决方案三要素,如单例模式、工厂模式、代理模式等。它们遵循一系列原则,如"开...

Global site tag (gtag.js) - Google Analytics