`

软件开发中的简单法则

阅读更多

    读了前田约翰的《简单的法则》 ,我自己也总结了一下软件开发中的10条简单法则。

 

1) 信心

无论做什么事,信心都是最重要的。我一直信奉两条广告语,一句是李宁的“Anything is Possible”,依据是Adidas的“Impossible is Nothing”。只要你有信心,你就成功了一半。软件开发本来就是复杂性的游戏,抗拒这种复杂性,无论是对个人还是团队,信心都尤为重要。从大的方面讲,很多根本问题都已经被前辈们解决了,各种软件开发技术都成熟了,你没理由恐惧。信心使软件开发变得简单。

 

2)思考

思考是人类区别于动物的主要特征。不思考,你就不会找到根本问题,也不会找到根本原因,更不会找到问题的解决办法。软件开发中主要的工作就是思考,其次才是敲键盘。它就像多米诺骨牌,你不能让中间断掉。你必须仔细思考每一个设计环节,让他们契合。关于设计的可预见性,参考我的文章可预见性(Prodictability)——设计之美程序员的结构化思维方法——一个思维脑图模板 ,思考让一切变得简单。


3)学习

软件开发是一个知识密集型的工作。环境在变,技术在变,问题在变,唯一不变的就是变化。所有这些,使你必须不断的更新你的知识。学习使你拥有新工具,新手段,新思路,新方法。用学习来的新手段,思考你现在的处境,然后去实践。关于如何学习,请看我的文章如何从小工到专家——Dreyfus模型应用 。学习让软件开发变得简单。

 

4)沟通

由于软件本身的复杂性,不可能由一个人来完成。当多人共同完成时,沟通常常会成为一个制约工作效率的主要瓶颈。做需求的和客户沟通少;做分析和设计的同需求负责人沟通的少;做开发的和开发负责人沟通的少,有问题也不汇报,也不明确说明自己需要多长时间,遇到问题自己研究,不请求他人帮助;做开发的和需求,设计沟通的少,导致对需求的理解不同,开发出的软件不能用。和最终用户沟通的少,导致软件做出来不能满足需求,需要返工。这种事情太多了,请看我的关于沟通方面的文章。沟通是个大问题——协作化软件开发 。沟通让信息通畅,让软件开发变得简单。


5)协作

Alistair Cockburn说,软件开发就是协作者的游戏,我越来越对这句话有感触。你不是一个人在战斗,团队是软件开发的最小单位。敏捷软件开发很多这方面的实践,计划游戏,结对编程,每日站立会议,反思会议。在高度协作的团队中,每个人都是某一方面的专家。通过紧密高效的配合,完成任务。众人拾柴火焰高,协作让软件开发变得简单。


6)组织

google有效的组织了信息,让信息获取变得简单。信息只有被组织才能够有效的分享,可以参考我的另外一篇文章。可理解性(Understandability)——一个扩展视角通讯录模式(AddressListPattern) 。另外一方面,当资源充足的时候,如何组织,避免浪费,高效的利用资源对于团队效率的提升也是非常重要的。田忌赛马是一个很好的例子,软件开发中对开发人员的分工和调配也是非常重要的。组织让软件开发变得更加简单。


7)细节

这是一个通用的原则。很多开发人员都有这样的调试经历,往往很难发现的错误,源于一个很小的细节。要么是配置文件问题,要么是半角分号,打成了全角。以前写javascript代码尤其这样,一堆的alert。我说过,软件开发就是逻辑游戏,很多措施可以避免犯错误,代码写好了,自己仔细看几遍。写几个单元测试,证明组装之前,代码是可以运行的。最后,功能开发好了,自己自测一下,保证程序可以跑。不要想当然,一定要亲自证明它可以工作。这些难做到吗?很多程序员却做不到。一个注重细节的程序员一定是个优秀的程序员,一个注重细节的团队也一定是个优秀高效的团队。注重细节让一切变得简单。

 

8)背景

了解任何事物,一定了解它的背景。学习web编程,你一定要了解它背后的http协议。学习精益软件开发,你一定要了解酝酿它的丰田生产方式。开发软件,你一定了解它背后的业务知识。事物和问题往往都是联系在一起的,为了更好的了解他,你必须了解他的背景,其实一个更好的词是上下文(Context)。

 

9)问题

曾子曰:“吾日三省吾身”。通过不断的问题,你能获得更多的信息,你能了解问题的本质原因。问题始终使你保持清醒,而不是盲目乐观。你写好程序时,你可以问一句“我如何测试它呢?”,“还能适应更多的变化吗?”,“还有坏味道吗?”,"那样做是不是扩展性更强?"。关于这个,请看我的这篇文章ProblemAttack。 问题越多,你思考越多,事情变得更加简单。


10)开放

开放是一种心态,一种思想,一种哲学。我很喜欢开源软件,如今的互联网网站,大部分都是建立的开源软件之上。作为java来讲,我么经常用的框架,大部分都是开源的,它让软件开发变得更加简单,让所有开发人员的智慧和力量凝聚起来。开放的另外一层含义是,没有隔阂。一个程序员应该具有开放的心态,接受新事物,新方法。犯了错误,要坦诚的承认。拥有开放的心态,你就会积极的分享你的所学,同时你可以可以从别人那里学到更多,让你进步更快。

 

change log:

 

2009-03-23: 感谢jindw的提示,修改所有链接。

21
1
分享到:
评论
5 楼 石建武 2009-03-24  
菜鸟深深学习了 。。。。奔跑
4 楼 gurudk 2009-03-23  
jindw 写道

老大,连接都错了,去掉admin吧


细节,细节,所有链接都改了,非常感谢!!!
3 楼 jindw 2009-03-23  
老大,连接都错了,去掉admin吧
2 楼 gurudk 2009-03-23  
呵呵,其实很多的,我只是模仿一下,凑了10点,多了显得不是那么重要了。
1 楼 mineral 2009-03-23  
我补充一点:

11)执行

当楼主的10点你都具备了,还差一点,就是执行。或者用老毛的话说:“实践”。只有去做了,去尝试了,一切才有可能。重在执行力和实际行动。

相关推荐

    设计模式,软件开发者必读

    1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 11 2.1 SINGLETON单件模式 11 2.1.1 典型的SINGLETON类 11 2.1.2 多线程安全的SINGLETON类 12 ...

    contributing to eclipse 中文版 1.pdf

    在这本书中,Eclipse Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了快速而透彻的介绍。本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的世界...

    Contributing to Eclipse 高清中文版

    ·在这本书中,Erich Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了,陕速而透彻的介绍 ·本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    Contributing.To.Eclipse.rar

    ·在这本书中,Erich Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了,陕速而透彻的介绍 ·本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    contributing to eclipse 中文版

    在这本书中,Eclipse Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了快速而透彻的介绍。本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的世界...

    ContributingtoEclipse

    ·在这本书中,Erich Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了,陕速而透彻的介绍 ·本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    contributing to eclipse ~.part1

     在这本书中,Eclipse Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了快速而透彻的介绍。本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    contributing to eclipse ~.part2

     在这本书中,Eclipse Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了快速而透彻的介绍。本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    contributing to eclipse ~.part3

     在这本书中,Eclipse Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了快速而透彻的介绍。本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    contributing to eclipse ~.part4

     在这本书中,Eclipse Gamma和Kent Beck对Eclipse这个不断发展的软件开发环境,做了快速而透彻的介绍。本书不是简单地告诉你“应该怎么做”,书中的正文和大量的补充、前行的路标将带领你一道真正投身Eclipse的...

    ease软件 4.0版的特点和应用

    (首先建立代预测厅堂的三维模型,可以在ease中直接建模,更好的方法是利用autocad等通用软件建立模型,然后输出为dxf文件,导入ease中。为了保证可以计算,ease需要所建厅堂是没有“洞”的,ease提供了检查“洞”的...

    python django资源下载

    Django是一个开放源代码的Web应用框架,由Python写成。...Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型

    asp.net知识库

    ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题...

    在实用化人形机器人研发流程中深入应用FPGA技术的流程图(基于工信部《人形机器人创新发展指导意见》)

    FPGA 具备高速、并行、运算及引脚资源极其丰富、定时精确(纳秒级)、功能极其灵活、硬件直接实现算法(不需要在操作系统调度下访问片外存储器以读取算法指令序列)、操作数存取机制简单且高效(不需要在操作系统...

    在实用化人形机器人研发流程中深入应用FPGA技术的流程图(基于工信部《人形机器人创新发展指导意见》)(版本A)

    FPGA 具备高速、并行、运算及引脚资源极其丰富、定时精确(纳秒级)、功能极其灵活、硬件直接实现算法(不需要在操作系统调度下访问片外存储器以读取算法指令序列)、操作数存取机制简单且高效(不需要在操作系统...

    关系数据库设计(2).doc

    目录 一 Codd的RDBMS12法则——RDBMS的起源 二 关系型数据库设计阶段 三 设计原则 四 命名规则 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不 那么重要。现实中的情景也相当雷同,开发...

    关系数据库设计(1).doc

    关系数据库设计(总8页) 目录 一 Codd的RDBMS12法则——RDBMS的起源 二 关系型数据库设计阶段 三 设计原则 四 命名规则 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不 那么重要。现实中...

    关系数据库设计.doc

    目录 一 Codd的RDBMS12法则——RDBMS的起源 二 关系型数据库设计阶段 三 设计原则 四 命名规则 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不 那么重要。现实中的情景也相当雷同,开发...

    关系数据库设计(3).doc

    目录 一 Codd的RDBMS12法则——RDBMS的起源 二 关系型数据库设计阶段 三 设计原则 四 命名规则 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不 那么重要。现实中的情景也相当雷同,开发...

Global site tag (gtag.js) - Google Analytics