`

软件开发中的简单法则

阅读更多

    读了前田约翰的《简单的法则》 ,我自己也总结了一下软件开发中的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. **人月神话的由来**:书名“人月神话”源于一个常见的...

    Java软件开发

    本文将详细探讨Java软件开发中的一些核心要素,包括数据结构、算法、软件开发生命周期以及安全性等方面,从而深入理解Java软件开发的全貌。 数据结构是构建任何程序的基石,Java中提供了多种内置数据结构,比如...

    程序员法则 比较全的!

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

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

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

    无限法则源码!直接用

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

    南京中新赛克2016校招笔试题(C语言软件开发)

    本文将对南京中新赛克2016校招笔试题中的C语言软件开发部分进行深入探讨,分析其题型构成以及考核的重点内容,并由此为求职者提供复习建议。 首先,C语言作为一种被广泛应用于系统软件开发的经典编程语言,其基础...

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

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

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

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

    软件工程学习心得体会

    总之,软件工程的学习经历让我深刻体会到,软件开发绝非单纯编写代码这么简单,它涉及到多个环节的紧密协作和精细管理。作为一个软件工程师,我们需要不断学习新的理论知识,掌握先进的开发技术,同时,更要培养自己...

Global site tag (gtag.js) - Google Analytics