用科学的思维方法指导软件的设计开发

07-08-16 killer
                   

在J道潜水很久了,看到了很多精华的文章,精彩的讨论,着实使我受益非浅。从学习专业知识的角度上说,斑竹banq极力倡导培养oo思想,并且提出了java学习的三件宝(领域建模、模式、框架),及时跟踪先进的思想和技术,站在业界的前沿,这也是我多年来的软件开发中深有体会的,可以说我和J道是有思想上的共鸣,相信很多道友也有这样的感受。从做人做学问的态度上来说,也让我感受到了道友们的真诚以及斑竹banq的热情,正因为这样,才能有许多精彩精湛的讨论,在这样的各种观点的摩擦下才能碰撞出智慧的火花出来,从而结出理论与思想的果实。

但是,现在仍然看到有很多的道友对一些问题都还是比较迷惑的,具体该如何培养oo思想?如何进行领域建模?如何搭建框架?这些问题都不是一两句话能说得清的,需要在实践中循“道”而为(“道”的概念banq已经说过了,不过还是建议把道的鼻祖《老子》先看个大概!^_^),直至道人合一,大道至简!我今天在这里只是站在前人的肩膀上把软件开发设计中的技术和方法提升到科学思维方法论,哲学逻辑方法论的高度,希望对各位道友在循道前进的过程中有所帮助,顺利到达大道的目的地!

方法是非常重要的,好的方法能起到事半功倍的效果,相信大家都有体会,简而言之,方法就是为了达到一定的目的而采取的手段,方法可以分为多个层面的方法,首先是具体的方法,如一道数学题的多种解题方法,其次是各学科、行业的专业方法,如物理的方法,数学的方法,建筑的方法,等等,再就是科学思维的方法如抽象和具体的方法,分析和综合的方法,逻辑和历史的方法等等,最高层次的就是哲学的

逻辑方法了,如辩证法。前两个层面的是具体的方法,后两个层面的是抽象的方法。我在这里要说的主要是后两个层面的方法。

科学的探索需要科学的思维方法,那么在我们的软件开发设计中,最重要的是要培养怎么样的科学思维方法呢?其实从“思维”两个字中,我们也可以领悟到一些东西,“思”即是思考,比较容易理解,关键在“维”字,“维”其实是角度的意思,我们经常说的三维空间,就是从x,y,z三个轴的角度来看空间,再加上一个时间维的话就是我们所赖以生存的动态时空了。所以我们的思维一个很重要的元素就是要从多角度看问题,角度决定深度。映射到我们的科学思维方法的话就是其中的发散性思维方法,发散思维是非常重要的,是分析问题的一个利器,但是也要从哲学的高度加以辩证法来把握,那就是必须辅以收敛思维从顶端予以控制,没有收敛的无限发散就容易成为无边的空想幻想,杂乱,没有发散的收敛又将成为呆板僵硬的死脑筋。

下面说一下前面提到的几个问题,先说说如何培养oo思想,oo思想最需要什么样的思维方法呢?oo的核心是抽象,我想这个应该没有太大的争议。抽象,就是抽取事物一些本质的东西,剔除次要的表面东西,但是千万别忘了后面那个象字,那就是抽取之后还得让事物象原来的事物,我们很多人在软件设计中抽取类的时候往往就是抽而不象,变了形,最终不能满足用户的需求。抽象也是一种重要的科学思维方法,同样,抽象也必须从哲学辨证法的高度辅以具体的科学思维方法,是一个感性具体到抽象再到理性具体的过程,感性具体到抽象是解决“抽”的问题,抽象到理性具体是解决“象”的问题。而我们的抽象往往只是抽而不象,就是缺少或者忽视了后一个环节的原因,而且我们的抽象也往往是孤立的,没有发散性地从多个角度进行抽象。

再说一下如何进行领域建模,领域建模又需要什么样的科学思维方法呢?现实的事物是变得越来越复杂了,太复杂了也往往就很难直接理解和把握它了,于是我们就先建立它的模型,然后研究模型以代替直接研究事物本身,所以这个模型也就不能太失真了,否则研究结果也就跟现实相距甚远了。我们也经常能见到各种模型,如城市模型,汽车模型,轮船模型等等,这些模型都是一些实物模型,比较好理解,也比

较好建立,我们姑且把它归为物理模型。还有一类模型就是逻辑模型或是抽象模型,比如模拟一个城市的行政系统等,我们所说的领域建模也是建立一种逻辑模型,即对企业某一功能系统建立模型。建立领域模型需要模型化的思维方法,模型化的思维方法也是一种重要的科学思维方法,而且起着越来越重要的作用。模型化的思维方法综合了其他很多的思维方法,首先,它需要从整体出发来把握系统,这就需要用到系统的思维方法,其次,它需要从各个层面,各个角度考虑系统,得到原型的映射,这就需要发散和收敛的思维方法,如分析与综合,猜想与概括,等等,在对实体,流程建模时又需要用到抽象和具体的方法。在一些细节问题的处理上还经常用到比较,分类,类比等方法,数学的方法。整个领域的建模需要从全局着眼,从局部着手。

对于如何搭建框架的问题,主要是要运用系统的思维方法,整体观要强,从多角度多层面把握系统的框架,所以说发散性思维的培养是非常重要的。而且在搭建系统框架的过程中,逆向科学思维方法也是非常重要的,在软件设计中,我们都希望能搭建出一个灵活、可扩展、可维护的框架来适应需求的变化,根据老子的“将欲歙之,必固张之,将欲取之,必先与之”,反者道之动,所以我们从反面出发,运用逆向

思维方法,找出系统的不变的,相对较为固定的东西,沉淀出来即为框架,而且是灵活的框架。这其实也蕴涵了辩证法的哲理在里面。

恩格斯说过,一个民族要想站在科学的最高峰,就一刻也不能没有理论思维的指导,这句话对于我们的软件开发也是同样适应的,所以,我们要培养科学的思维方法,哲学的方法,这是各种具体问题解决方法的本源,有了这样的思维武器,是要少走许多弯路的。

博学而详说之,将以反说约也,希望道友们能够深入浅出,出博返约,放得出去,收得回来,象张无忌学太极那样最终忘掉那些招示,达到忘我,道人合一的境界,练就一身软件开发设计的太极功!

说了那么多,其实也没说清楚,权当是抛砖引玉,望能与banq及广大道友共同讨论,共同进步,共勉!祝j道越办越好!

                   

14
banq
2007-08-16 17:53

迄今为止看到最精彩的帖子啊,楼主思想和语言功底极其深厚。学习中。。

所以,思维思想的培训和训练非常重要,其实我们10年教育,真正有用知识并不多,而是在训练我们的思维,认识到这点,就不会死读书,读死书了,可惜中国有高考等考试能够考出知识水平,但是思维水平是无法考核的。而且思维随着阅历不断成熟。做软件实际上和在做其他事情如销售 生产 金融等领域都类似。

[该贴被banq于2007年08月19日 10:20修改过]

wusuosuo
2007-08-16 20:11

又一次被教育了感动中,一些道理,偶也想过地,要学会思考!虽然没前辈们在技术上哪么大牛,但一些宏观的东西,还是有共鸣的!

偶也是在J道潜水很久了呀,看到了很多精华的文,受益非浅,还有亲爱的banq!

xmuzyu
2007-08-17 00:05

呵呵,精辟。。前辈是站在道的角度来诠释思维方法。学习中。。

pns110
2007-08-17 00:41

受益匪浅啊

楼主总结的很有道理,这些都算是明白,但一旦实践起来好象少了点什么,不 能抓到重点解决问题,也挺苦恼.不知道楼主怎么解决这样的问题?

10Go 1 2 3 4 ... 10 下一页