`

设计与开发的五条原则–六年真谛

阅读更多

这篇文章发表于我的博客 http://blog.feihoo.com/archives/388 。
但是希望各位拍砖,就贴到这里了。
---------------------------------------------------------------------------

从2004年初(大学二年级第二学期)加入学校就业信息网站,靠写代码获得第一笔收入,迄今已经将近六年。

第一条原则,首先弄清你的问题是什么。这一条规则无论怎么强调都不过分。在《Programming Pearls》第二版的开篇,Jon Bentley 讲的就是,首先弄清你的问题是什么! 在你没有详细、明确地定义好你的问题之前,你所做的大部分工作只产出废物。这些年,曾经的最头疼的事,就是经常搞了一大堆东西,累死累活,甚至加班加点, 最后总才发现很多事情偏离了目标。但这样的事情,总是在周围一遍一遍地发生。

  一个工程师,如果在接到一个问题时首先不是尽可能挖到细致的资料,定义问题,并向了解问题的人去反馈,详细讨论问题的定义。虽然问题定义不是那么容易,但不首先定义好问题,那就是不合格的工程师。

  还有很多原则,大抵都是这个原则的派生品。

第二条规则,弄清你要干什么,以及哪些先干,哪些后干,哪些根本就不需要干。说白了,就是把问题分解,列个表,排个先后顺序。这是大部分程序员最 蹩脚的部分。高效的本质不是捧着ThoughtWorks那本《卓有成效的程序员》,而是我这条原则。我对Joel的书里印象最深刻的就是有关用 Excel列任务列表的部分。

  这条仍然是如此重要,以致于著名的YAGNI, (You ain’t gonna need it )仅仅是一条推论而已。

   当然,区分的标准是什么?It depends. 但是最重要的参照是,怎么做你能获得最大产出?也许你会在所谓的扩展性、适应需求变化与可工作的代码,用户的需求之间抉择。 最重要的还是可工作的代码,能够按时 ship the beta!

  记住,先列出来要干什么;然后分清先后顺序,然后淘汰那些可以不干的。

第三条规则,KISS。 Keep It Simple Stupid。用郭靖和杨过来比喻,代码要像郭靖一样用最简单直接的方式强壮地工作,不需要太多的波折。你的程序要是像杨过的人生那么复杂、聪明,早死翘 翘了。你的程序要简单强壮地干活,思想越简单越好,功能和特性越少越好。

   这一条对于设计是至关重要的,浮躁的程序员们经常要在架构设计中引入模式、分层,又或者是绚丽的Ajax效果之类,完全是无知下的自虐。我也是好些年后才明白这条道理,直到后来开始使用Unix下的那些让无数人着迷的工具,才真真地看到了这条规则的巨大威力。

   要特别澄清一下,KISS 与你的程序是否好用,是否易于复用,不但不矛盾,而且是相辅相成的。你要知道的只是你的程序应该做什么,然后努力做好。借用《Programming Pearls》开篇里法国作家兼飞机设计师的话::“设计者确定其设计已经达到了完美的标准是不能再减少任何东西”。

第四条规则,一键集成和适当的自动化测试。这条不多说了,在有条件的情况下做会受益非浅。

其他还有一些很有名的原则,例如 DRY (Don’t Repeat Yourself), 也许是因为一开始我就懂得了这个道理(尤记得大学的时候把ASP代码提取函数,封装Head和Foot,将写HTML Table的封装成方法来根据不同的数据集打印,好傻。),感触没那么深。

六年了,好快。

=============================================================
(Update 2009-12-22)
写完以后觉得要考虑补上的,思考几日后觉得必须补上的第五条。

第五条: 一定需要且只需要数页简单明了 的设计说明书。

这个设计说明最好不用word,最好是放在源代码下的html或者txt格式。简单粗线条的UML最适宜用在这种地方。当然设计文档也可以放在别的地方

分享到:
评论

相关推荐

    人教版《道德与法治》八年级下册7.1《自由平等的真谛》公开课教学设计.pdf

    人教版《道德与法治》八年级下册7.1《自由平等的真谛》公开课教学设计.pdf

    人教版道德与法治八年级下册《自由平等的真谛》(共23张PPT).ppt

    人教版道德与法治八年级下册《自由平等的真谛》(共23张PPT).ppt

    五位期货实战高手道成功真谛.doc

    五位期货实战高手道成功真谛.doc

    java开发技术大全

    最后提供了一个完整的即时通讯软件设计实例,让读者能够从实例中学习程序设计的真谛。Java是目前最为流行的程序设计语言。 《Java开发技术大全》内容全面,实例丰富,特别适合于自学者。《Java开发技术大全》可作为...

    javascript真谛

    "JavaScript真谛"涵盖了这门语言的精髓、原则以及实际应用中的关键点。以下是对这个主题的详细探讨: 一、JavaScript基础 JavaScript是基于ECMAScript规范的,由Netscape公司的Brendan Eich在1995年发明。它是一种...

    初中道德与法治《自由平等的真谛(2)》优质教学设计、教案.pdf

    初中道德与法治《自由平等的真谛(2)》优质教学设计、教案.pdf

    软件设计模式在Java程序设计课程教学中的应用研究.pdf

    将其引入教学过程能够帮助学生更深入地理解面向对象思想,掌握面向对象设计的基本原则,进而提高编程能力。设计模式有助于开发出易于维护、可扩展性强且复用性高的系统。因此,在Java程序设计课程的教学过程中,应当...

    九年级政治第八课 日月无私照 平等的真谛教学设计教科版 教案.doc

    本教学设计围绕九年级政治第八课的主题“日月无私照,平等的真谛”,旨在引导学生理解并认同平等的核心理念。课程通过引入两个故事——萧伯纳与小女孩的故事以及屠格涅夫与乞丐的故事,强调无论个人成就如何,每个人...

    《软件系统架构与开发环境》第二章源代码-by 南邮-陈杨

    本书作者把软件架构知识、软件工程方法论、软件技术开发平台等相关知识有机地组织起来,清晰地地阐明了它们的关系,拨开软件架构设计的迷雾,为读者指出了一条学习软件系统架构知识的佳径。本书对软件架构工程技术和...

    布局JavaEE企业级开发:寻觅框架和开发模式的完美整合part1

    张元亮编著的《布局JavaEE企业级开发:寻觅框架和开发模式的完美整合(附光盘)》可以帮助读者精心布局JavaEE企业级开发,并以此寻觅出框架与开发模式完美整合的真谛。 《布局JavaEE企业级开发:寻觅框架和开发模式的...

    全景探秘游戏设计艺术高清版

    撬开你脑子里的那些困惑,让你重新认识游戏设计的真谛,人人都可以成为成功的游戏设计者!从更多的角度去审视你的游戏,从不完美的想法中跳脱出来,从枯燥的游戏设计理论中发现理论也可以这样好玩。本书主要内容包括...

    游戏设计的100个原理

    作者:(美)迪斯潘 出版时间:2015年2月 本书整合了众多游戏设计秘籍,概括并阐释了100条重要的游戏设计领域的...每一条原理都采用丰富的案例来介绍多种不同的设计思路,同时以经典图片的形式展现该原理所蕴含的真谛。

    随熊伟思海德格尔:读《自由的真谛——熊伟文选》

    熊伟先生是中国海德格尔思想研究奠基者,生平著述集于《自由的真谛——熊伟文选》。熊伟可不问胡塞尔,而成功交融海德格尔与华夏思想,因海德格尔是哲学理性主义传统的反叛者,契合华夏非逻辑非科学的思想传统。理性主义...

    真谛制作简易计算器

    希望可以通过我,第一次发谢谢了希望可以通过我,第一次发谢谢了希望可以通过我,第一次发谢谢了希望可以通过我,第一次发谢谢了

    企业管理管理的真谛.ppt

    第六讲是组织设计与权力配置,探讨如何构建有效的组织结构和分配权力。第七讲涉及领导方法与艺术,探讨如何激励员工、促进团队合作。最后,课程讨论控制原则与方法,教授如何实施有效的监控以达成预期结果。 学习这...

    Java开发技术大全

    最后提供了一个完整的即时通讯软件设计实例,让读者能够从实例中学习程序设计的真谛. 《Java开发技术大全》内容全面,实例丰富,特别适合于自学者。《Java开发技术大全》可作为计算机、软件工程专业的教材,也可作为...

    【经验】学习模电的真谛

    李老师在1987年出版的《运算放大器设计》一书,至今仍被认为是经典之作,对运放设计有着深刻的洞察,这种深度和远见在当前仍然十分宝贵。 此外,实际工作中的经验积累同样至关重要,例如,对电路的保护回路进行分析...

    梳理高二政治必修四寻觅社会的真谛知识点.pdf

    【高二政治必修四寻觅社会的真谛知识点】主要涵盖了社会存在与社会意识的辩证关系、尊重社会发展的客观规律以及发挥主观能动性、人民群众的历史地位等内容。以下是详细阐述: 1. 社会存在和社会意识的辩证关系:...

    布局JavaEE企业级开发_光盘_part1

    局JavaEE企业级开发,并以此寻觅出框架与开发模式完美整合的真谛。 《布局JavaEE企业级开发:寻觅框架和开发模式的完美整合(附光盘)》内容新颖、知识全面、讲解详细。 全书分为18章,内容都采用了理论加实践的讲述...

Global site tag (gtag.js) - Google Analytics