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

在J道潜水很久了,看到了很多精华的文章,精彩的讨论,着实使我受益非浅。从学习专业知识的角度上说,斑竹banq极力倡导培养oo思想,并且提出了java学习的三件宝(领域建模、模式、框架),及时跟踪先进的思想和技术,站在业界的前沿,这也是我多年来的软件开发中深有体会的,可以说我和J道是有思想上的共鸣,相信很多道友也有这样的感受。从做人做学问的态度上来说,也让我感受到了道友们的真诚以及斑竹banq的热情,正因为这样,才能有许多精彩精湛的讨论,在这样的各种观点的摩擦下才能碰撞出智慧的火花出来,从而结出理论与思想的果实。
但是,现在仍然看到有很多的道友对一些问题都还是比较迷惑的,具体该如何培养oo思想?如何进行领域建模?如何搭建框架?这些问题都不是一两句话能说得清的,需要在实践中循“道”而为(“道”的概念banq已经说过了,不过还是建议把道的鼻祖《老子》先看个大概!^_^),直至道人合一,大道至简!我今天在这里只是站在前人的肩膀上把软件开发设计中的技术和方法提升到科学思维方法论,哲学逻辑方法论的高度,希望对各位道友在循道前进的过程中有所帮助,顺利到达大道的目的地!
方法是非常重要的,好的方法能起到事半功倍的效果,相信大家都有体会,简而言之,方法就是为了达到一定的目的而采取的手段,方法可以分为多个层面的方法,首先是具体的方法,如一道数学题的多种解题方法,其次是各学科、行业的专业方法,如物理的方法,数学的方法,建筑的方法,等等,再就是科学思维的方法如抽象和具体的方法,分析和综合的方法,逻辑和历史的方法等等,最高层次的就是哲学的
逻辑方法了,如辩证法。前两个层面的是具体的方法,后两个层面的是抽象的方法。我在这里要说的主要是后两个层面的方法。
科学的探索需要科学的思维方法,那么在我们的软件开发设计中,最重要的是要培养怎么样的科学思维方法呢?其实从“思维”两个字中,我们也可以领悟到一些东西,“思”即是思考,比较容易理解,关键在“维”字,“维”其实是角度的意思,我们经常说的三维空间,就是从x,y,z三个轴的角度来看空间,再加上一个时间维的话就是我们所赖以生存的动态时空了。所以我们的思维一个很重要的元素就是要从多角度看问题,角度决定深度。映射到我们的科学思维方法的话就是其中的发散性思维方法,发散思维是非常重要的,是分析问题的一个利器,但是也要从哲学的高度加以辩证法来把握,那就是必须辅以收敛思维从顶端予以控制,没有收敛的无限发散就容易成为无边的空想幻想,杂乱,没有发散的收敛又将成为呆板僵硬的死脑筋。
下面说一下前面提到的几个问题,先说说如何培养oo思想,oo思想最需要什么样的思维方法呢?oo的核心是抽象,我想这个应该没有太大的争议。抽象,就是抽取事物一些本质的东西,剔除次要的表面东西,但是千万别忘了后面那个象字,那就是抽取之后还得让事物象原来的事物,我们很多人在软件设计中抽取类的时候往往就是抽而不象,变了形,最终不能满足用户的需求。抽象也是一种重要的科学思维方法,同样,抽象也必须从哲学辨证法的高度辅以具体的科学思维方法,是一个感性具体到抽象再到理性具体的过程,感性具体到抽象是解决“抽”的问题,抽象到理性具体是解决“象”的问题。而我们的抽象往往只是抽而不象,就是缺少或者忽视了后一个环节的原因,而且我们的抽象也往往是孤立的,没有发散性地从多个角度进行抽象。
再说一下如何进行领域建模,领域建模又需要什么样的科学思维方法呢?现实的事物是变得越来越复杂了,太复杂了也往往就很难直接理解和把握它了,于是我们就先建立它的模型,然后研究模型以代替直接研究事物本身,所以这个模型也就不能太失真了,否则研究结果也就跟现实相距甚远了。我们也经常能见到各种模型,如城市模型,汽车模型,轮船模型等等,这些模型都是一些实物模型,比较好理解,也比
较好建立,我们姑且把它归为物理模型。还有一类模型就是逻辑模型或是抽象模型,比如模拟一个城市的行政系统等,我们所说的领域建模也是建立一种逻辑模型,即对企业某一功能系统建立模型。建立领域模型需要模型化的思维方法,模型化的思维方法也是一种重要的科学思维方法,而且起着越来越重要的作用。模型化的思维方法综合了其他很多的思维方法,首先,它需要从整体出发来把握系统,这就需要用到系统的思维方法,其次,它需要从各个层面,各个角度考虑系统,得到原型的映射,这就需要发散和收敛的思维方法,如分析与综合,猜想与概括,等等,在对实体,流程建模时又需要用到抽象和具体的方法。在一些细节问题的处理上还经常用到比较,分类,类比等方法,数学的方法。整个领域的建模需要从全局着眼,从局部着手。
对于如何搭建框架的问题,主要是要运用系统的思维方法,整体观要强,从多角度多层面把握系统的框架,所以说发散性思维的培养是非常重要的。而且在搭建系统框架的过程中,逆向科学思维方法也是非常重要的,在软件设计中,我们都希望能搭建出一个灵活、可扩展、可维护的框架来适应需求的变化,根据老子的“将欲歙之,必固张之,将欲取之,必先与之”,反者道之动,所以我们从反面出发,运用逆向
思维方法,找出系统的不变的,相对较为固定的东西,沉淀出来即为框架,而且是灵活的框架。这其实也蕴涵了辩证法的哲理在里面。
恩格斯说过,一个民族要想站在科学的最高峰,就一刻也不能没有理论思维的指导,这句话对于我们的软件开发也是同样适应的,所以,我们要培养科学的思维方法,哲学的方法,这是各种具体问题解决方法的本源,有了这样的思维武器,是要少走许多弯路的。
博学而详说之,将以反说约也,希望道友们能够深入浅出,出博返约,放得出去,收得回来,象张无忌学太极那样最终忘掉那些招示,达到忘我,道人合一的境界,练就一身软件开发设计的太极功!
说了那么多,其实也没说清楚,权当是抛砖引玉,望能与banq及广大道友共同讨论,共同进步,共勉!祝j道越办越好!

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

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

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

又一次被教育了感动中,一些道理,偶也想过地,要学会思考!虽然没前辈们在技术上哪么大牛,但一些宏观的东西,还是有共鸣的!
偶也是在J道潜水很久了呀,看到了很多精华的文,受益非浅,还有亲爱的banq!

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

受益匪浅啊

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

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

问题就是没有认识到这一点或者说对这一点认识得不够深刻啊,我们目前的教育,甚至包括高等教育,基本上还是授人以鱼而非授人以渔,学生是处于一个被动的状态,知识是被灌输进去的,所以也就经常是学了这门忘了那门。老师也经常说要注意学习方法,教学生第一步该怎么做,第二步该怎么做,等等,这其实都只是我上面提到的前两个层面的方法,如果不能把它提高到后两个抽象的层面,那么这样的方法也只不过是无源之水,无本之木,也还只是“鱼”而非“渔”。我们所说的科学的思维方法可以说是寻找问题解决方法的方法,是“渔”。
知识的海洋是浩瀚的,我们不可能学得了那么多知识也用不到那么多知识,所以也没有必要去学习那么多知识。我们所需要的是在要用到某方面知识的时候能以主动的方式迅速去学习和掌握知识。这才是真正的自学能力。
这样的方法其实就来自生活的点滴中,我们看到一样新的东西,比如你要买一辆小车,肯定都要看其外形,还要钻到里面去看看座椅,感受一下,甚至还要翻开车盖看看里面,还甚至要钻到车底看看底部,买个手机也要正面反面掂量一下呢,然而一碰到抽象的问题,我们却往往忘记了把问题翻一翻,左瞧瞧右看看了。所以我们要从生活的小事中吸取一些智慧,这也是banq说的思维随着阅历而不断成熟。

[该贴被killer于2007年08月24日 21:13修改过]

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


实践中需要从小事做起,培养自己的思维习惯,具体于怎么抓住重点问题也是我一直在探索的,不是三言两语能讲得清楚,我和大家一样在努力中,呵呵。有兴趣可以以一个具体的例子我们私下讨论

虽然看得不是很透彻,但从字里行间多少有一些悟道,感谢楼主啊!继续学习中.....
[该贴被ingenuus于2007年08月17日 18:55修改过]

一旦我接触了实践中的东西的时候,就不能把握了,所以还是想先从单纯的思维方法上来弄明白些。。虽然说实践是检验真理的唯一标准,但还是要透彻这些方法才可以,希望能给些高建^^

作为一名道友,看了上面的文章不能不感动,想必作者痛定思痛,看透了技术的本质,OO的确不是一门课程,一两本书就可以理会传神的,要反复验证方知其卓越。

前一个月刚又学了哲学家.呵呵,确实如此~~

楼主的理论颇为经典:
“思维”是指从多角度看待分析问题的行为。“思维”过程中需遵循能收能放的原则。
“抽象”是指将对感性具体进行本质抽取的行为过程。需遵循“本质”反映“具体”的原则。
“领域建模”是指在特定领域下对已有系统或目标系统建立模型的行为。“模型”,顾名思义,是能反映客观现实的模具
“框架”是指为解决某一类问题而制作的一种固定结构,“框架”是思维后的产物,能适应大部分问题。但绝对不是全部问题。

apexCloud 概括得很好,这几个概念相信大家肯定都非常熟悉,但不是都能够深入地理解。我个人认为,我们很多软件项目失败的原因就在于对这些大家都熟悉的基本概念没有真正了解清楚,java编程的基础既不是java语法,API,也不是数据结构,也不是设计模式,而恰恰是“思维”,“抽象”,“领域模型”,“框架”等基本概念。

>java编程的基础既不是java语法,API,也不是数据结构,也不是设计模式,而恰恰是“思维”,“抽象”,“领域模型”,“框架”等基本概念。

我一直很奇怪,中国搞软件那么多年,也有很多牛人,有各种软件媒体和聚会,为什么这样简单的道理今天才逐步为大家认可?

>我一直很奇怪,中国搞软件那么多年,也有很多牛人,有各种软件媒体和聚会,为什>么这样简单的道理今天才逐步为大家认可?

起点即是终点,简单亦是复杂!

真理原本是朴素的,至简至约的,做软件也就这么一些简单的概念和道理,然而一半是因为我们理解的需要,一半是因为所谓“饱学之士”的炫耀门楣,使它们变得越来越复杂,越来越深奥了。很多人也就是这样陷入里面出不来了。所以,进的同时,一定要注意出,这样才会平衡,平衡才是中庸之道!

其实,对于很多简单问题和概念,我们都是恨无地洞可钻的。人是什么?社会是什么?不说大家都明白,一说却是人人都糊涂。对于我们软件行业来说,软件是什么?系统是什么?什么是分析?什么是设计?都真的理解了吗?所以,我还是引用孟子的那句话:“博学而详说之,将以反说约也”,从哪里来,回哪里去,从简单来,还得归于简单去。所以,博学详说不是为了炫耀渊博,故作深刻,而是为了融会贯通,深入浅出,出博返约。仔细想想,做哪一行都是如此,教学如此,演说如此,舞文弄墨也莫不如此。当然,软件也是如此,软件从简单到复杂,已经是很复杂了,该让它归于简单了!

所谓绚烂之极归于平淡,博学详说归于简约。博学详说是手段,归于简约才是目的。现在能认识到也不算晚,朝闻道,夕可死矣!哈哈!望banq能继续指点!
[该贴被killer于2007年09月11日 10:39修改过]
[该贴被killer于2007年09月11日 10:40修改过]
[该贴被killer于2007年09月11日 20:29修改过]