`

软件开发中的简单法则

阅读更多

    读了前田约翰的《简单的法则》 ,我自己也总结了一下软件开发中的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点你都具备了,还差一点,就是执行。或者用老毛的话说:“实践”。只有去做了,去尝试了,一切才有可能。重在执行力和实际行动。

相关推荐

    简单法则 设计 技术 商务 生活的完美融合

    7. 设计模式:在设计和软件开发中,设计模式作为一套解决特定问题的方案,能够帮助专业人员更高效地工作,同时也让结果更易于理解与维护。 以上就是从提供的信息中分析出来的相关知识点。在实践中,这些概念可以...

    软件开发和服务项目价格构成及评估方法-中国软件行业协会.zip

    通过以上分析,我们可以看到,软件开发和服务项目的价格并不是简单的计算成本加上利润,而是需要全面考虑项目的各个层面,包括成本、风险、市场因素等。对于软件企业和客户来说,理解和运用这些评估方法,可以更好地...

    软件开发设计原则软件开发设计原则

    在软件开发过程中,设计原则是指导开发者构建高效、可维护和扩展软件系统的重要准则。这些原则不仅提高了代码质量,还能确保团队之间的沟通清晰,降低维护成本。以下将详细阐述一些核心的软件开发设计原则。 1. **...

    软件开发中的11个系统思维定律

    例如,在软件开发过程中,通过简单的重构和优化代码结构,就能显著提升程序的性能和可维护性。又比如,在项目管理中,通过建立有效的沟通机制和信任关系,可以极大地减少不必要的误会和冲突,提高团队协作效率。因此...

    嵌入式开发学习的十三法则

    嵌入式开发是IT领域一个非常重要的分支,主要涉及在特定硬件设备上进行软件开发的工作。在嵌入式系统开发中,硬件资源(如CPU、存储空间和外设接口)相对有限,而且嵌入式系统常常需要具备高实时性、高可靠性和高...

    《软件需求分析法则》提高软件质量

    在软件开发过程中,需求分析被视为项目成功与否的基石。一个清晰且全面的需求分析不仅有助于开发团队明确目标,还能有效避免后期的返工和修改,确保项目的顺利进行。本文将基于“《软件需求分析法则》提高软件质量”...

    《敏捷软件开发宣言》

    ### 敏捷软件开发宣言解析 #### 一、宣言的核心价值观 **《敏捷软件开发宣言》** 是2001年由一群资深软件开发者提出的指导原则,旨在改变传统的软件开发方式,提升开发效率与质量。宣言提出了四个核心的价值观: ...

    软件开发和运行维护基础知识.docx

    软件开发和运行维护是IT行业中至关重要的环节,涵盖了软件生命周期的多个阶段,包括需求分析、设计、编码、测试以及后期的维护与更新。本篇主要讨论软件开发模型及其相关基础知识。 1. 渐增模型(Incremental Model...

    人月神话 (C),一本经典的软件开发书籍

    布鲁克斯博士以其在IBM System/360项目中的经验为基础,揭示了软件开发过程中的诸多深层次问题和挑战。以下是对《人月神话》中一些核心知识点的详细解释: 1. **人月神话的由来**:书名“人月神话”源于一个常见的...

    程序员法则 比较全的!

    这些法则旨在帮助程序员提高工作效率,避免常见错误,以及提升软件开发的整体质量。以下是部分重要的程序员法则: 1. **YAGNI(You Aren't Gonna Need It)**:你不会需要它。这一法则提醒程序员不要过度设计,只...

    嵌入式学习必知的13条法则

    嵌入式学习是掌握微处理器、微控制器、单片机等在有限资源的硬件平台上,进行软件开发并实现特定功能的过程。嵌入式系统在电子、工业自动化、智能设备等领域有广泛的应用,因此掌握嵌入式开发技术对于IT专业人员来说...

    无限法则源码!直接用

    从压缩包的文件名"无限法则永世妖王开源 成品"来看,这可能是一个完整的、可以运行的项目版本,而不是开发过程中的某个分支或中间状态。"成品"一词意味着它已经过测试,具备了对外发布的基本条件。用户在获取源码后...

    飞机总体参数设计与软件开发.docx

    因此,软件开发在飞机设计中变得越来越重要。 飞机总体参数设计主要任务是根据飞机性能要求,确定飞机的总体布局、几何参数、气动参数等。总体参数设计需要综合考虑飞机的用途、机场环境、乘客体验等多方面因素。...

    基于CAE的铸钢补缩系统CAD软件开发.pdf

    基于CAE的铸钢补缩系统CAD软件开发旨在整合CAE技术到CAD系统中,利用CAE仿真软件模拟和分析铸件的凝固过程,根据模拟结果指导冒口设计,从而提高设计的科学性和准确性,减少试验成本。这种开发思路能够帮助工艺人员...

    软件开发设计模式.pdf

    ### 软件开发设计模式 #### 概述 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。它不是完成任务的具体代码,而是一种模板或指南,帮助开发者以一种结构化的方式思考问题,并提供了一种标准化...

    程序员法则完整(电子书)VIP卷全84章

    不过,我们可以尝试从这段描述中提取出与IT行业相关的一些概念,并结合标题“程序员法则完整(电子书)VIP卷全84章”以及描述中的关键词进行扩展。 ### 知识点一:程序设计语言的选择 在描述中提到学习了C语言和...

    迪米特法则---门面Facade模式.docx

    总的来说,门面模式是软件设计中的一个重要工具,它帮助我们构建模块化的系统,降低组件之间的耦合,提高系统的可维护性和可扩展性。通过合理使用门面模式,可以使复杂的系统变得更加易用和灵活。在开发过程中,应...

Global site tag (gtag.js) - Google Analytics