软件设计与哲学,做人


http://www.jdon.com/jivejdon/thread/32520.html

不得不佩服高人的语言,尤其是"killer"和"banq" 引经据典,随手捏来,着实让我着迷.就像是一篇严紧的论文,句句入理;又像是一篇哲文,道出本质.把中国的哲学引入软件设计中,甚至把做人的道理揽括在内.然而哲学终究是一种世界观,尤其是中国的哲学如何在软件设计中转化为方法论.好像没有专著做过研究.jdon的高人不妨在这来个小的总结.也让大家共享一下.

[该贴被fety07于2007-12-14 10:13修改过]

小弟瞎想哲学就是门自然的世界观(就是顺应自然).越自然,越强,以自然为核心.

我想"自然"即为事物"本质"运动规律. 我们的领域建模过程,其实是在挖掘领域的本质规律,越接近本质,软件越自然.

>尤其是中国的哲学如何在软件设计中转化为方法论.好像没有专著做过研究
其实我一直有意无意在发帖中谈一些,特别是老子的道,是一个真正大的哲学,大智慧,如果全世界有书籍排行,它应该列在圣经前面,作为国人更应该读,而孔子那些都是小智慧,孔子一套与老美的那套正好互补,两者合在一起才是老子的道。说得有点玄,只当灌水。

感觉彭老师在这方面有很深的造诣,呵呵

>>其实我一直有意无意在发帖中谈一些,特别是老子的道,

看得出来,彭老师的见解,能自成体系.

我相信大道至简

能把J道弄明白..那就是"道家'高手啦..

楼主实在是抬举,我真是感到诚惶诚恐,高人不敢当。中国传统哲学博大精深,不敢妄谈什么方法论,只是谈一点自己的拙见,希望与大家共同讨论,共同进步!

其实方法论就是属于哲学的范畴,有什么样的世界观就会有什么样的方法论,我在“企业软件设计开发解决之道的一点个人思考”里面谈到真正的解决之道在易道,其实老子的学说源头也在易道,孔子的学说也是来自易道,两者是从不同的层面来解释和发展了易道,个人觉得老子是站在高层次的,是高端产品,孔子是站在大众层次的,是家常便饭。

下面再从方法论的角度写一点自己的粗浅认识,与大家讨论。

[该贴被killer于2008-01-25 20:28修改过]

企业软件设计的方法论是每一个软件设计人员都必须学习、掌握、应用的,在实践中必须有方法论的指导才能取得良好的效果,才能设计出优秀的企业软件。那么,到底什么是企业软件设计的方法论呢?它有哪些要素呢?我们从哪几个层面来把握它呢?要弄清这些问题,我想还是先了解一下这里面涉及到的几个概念。

企业软件是一个信息系统,信息、系统、信息系统的概念我在以前的帖子中也有说过(http://www.jdon.com/jivejdon/thread/32743.html),但是说得不够深入,这里再补充一点,到底什么是信息呢?我们之前说信息是经过加工处理的数据,数据是信息的载体,这只能说是信息的一般意义,并没有道出信息的本质。那么信息的本质是什么呢,信息的本质是关于事物的运动的状态和规律的表征,是为了消除我们对事物认识的某种不确定性的东西。系统的概念这里也补充一点,系统的基本特征是什么呢?一是整体性,二是综合性,但还有非常重要的一点,那就是整体最优化,确定最佳目标,寻求最佳设计,在运动中达到一种有序的状态,即在运动中求平衡,求稳定,达到最佳控制。了解了信息系统,我们再来了解一下设计。什么是设计?我们都知道分析是解决“是什么”的问题,设计是解决“怎么做”的问题,但是,何为设?何为计?我觉得这个设有两层含义,一是假设,就是要预测未发生的事情,二是设法,就是想办法解决问题。“计”是为什么着想的意思,所以我们的设计有很重要的一层含义就是要为没有发生的事情着想,预测未来,做事留有扩展和退却的余地,这和做人是一个道理。

方法论是关于方法的理论,方法的概念我在“用科学的思维方法指导软件的设计开发”中有讲过,但现在看来感觉还是不够全面。这里我引用李志才方法论全书中的关于方法的定义:方法是关于认识世界和改造世界的目的方向,途径,策略手段,工具及其操作程序的选择系统。我们可以这样来理解,目的方向的选择就是战略问题,途径的选择就是路线问题,策略手段的选择就是政策和策略问题,工具及其操作程序的选择就是战术问题。这是方法的四大要素,也可以说是四个层次,从上到下层层相扣,缺一不可。从另一个角度来说,方是方向,法是法则,规律,万物皆规律,有法天下和,方法的选择其实也就是要遵循事物的规律,就是循道,循道是最科学的方法论。

理解了这些概念后,我们再来寻找企业软件设计方法论,还是从概念出发吧,就从方法的四个要素出发,找到企业软件设计的目的方向,途径,策略手段,工具及其操作程序,这就是企业软件设计的方法论。

一、 目的方向
目的方向是方法的最高层次问题,是战略问题,直接决定了方法的正确与否,目的方向错了,就算你后面的路线、策略手段得当,最终做出来的软件还是低质量的。也许你会觉得目的方向的选择很简单,做软件嘛,不就是要能满足客户的需求吗?这句话本身并没有错,关键是对需求的理解,普通的理解客户的需求是指业务功能需求,但是,时代在变,需求的定义也在变,软件的灵活扩展性,可维护性也越来越突出为客户的需求了,而功能需求虽然也重要,但从我们的软件实现上来说要比灵活扩展性和可维护性容易实现得多,作为软件设计人员,怎么保证软件的灵活扩展性和可维护性才是真正的难点。所以,目前来说,正确的目的方向应该是软件的高灵活扩展性,高可维护性,也就是软件的质,这才是软件的生命力所在。
二、 途径
途径问题也就是路线问题,对企业软件来说,现在有两条典型的路线,一是走面向数据库的路线,另一条是走面向对象的路线。这是两条决然不同的路线,说得严重点是水火不融,但我感到疑惑的是为什么还是有很多人分不清楚这两条路。目前大部分公司和个人都是走的面向数据库路线,面向对象的道路上真可以说是“路上行人欲断魂”!但是,新生事物总是要战胜旧事物的,我相信面向对象的路上会有越来越多的同路人。
三、 策略手段
选定了途径后我们就该选择合适的策略手段了,可以说架构分层,框架的运用,领域建模,设计模式都是我们所采用的策略手段了。从狭义上说这也是我们通常所说的方法了,在这一层面上,是软件设计人员最具有发挥和创造空间的。这几个策略手段具体的讨论在论坛里面已经有很多这样的帖子了,我在这里就不多说了。
四、 工具及其操作程序
工具及其操作程序的选择是在上一环节的基础上进行的,包括编程语言及编程工具的选择,其他的还有建模工具、具体框架的选择。选定了工具后要熟悉这些工具的操作程序,运用工具时要遵循一定的操作程序,这样才能真正发挥工具的作用。

从以上的分析我们可以看出,正确地选择企业软件设计方法需要很多方面的知识,我们首先需要构造我们的知识体系,这个我在“关于构建自己的知识体系架构”中也提到过,但是我们还要知道的是有了这些知识还并不等于你就有科学的方法了,方法系统是知识系统的升华,是理论与实践的桥梁。而且我们还必须知道,方法要素的选择在很多时候也是一个子方法系统,同样包含方法的四大要素。

本文是我的一点愚见,只是概略地叙述了一下方法论的要素,可能大家会觉得很虚,还望不要猛拍砖,呵呵。希望能与大家共同讨论更具体的方法论。本文定有不足之处,恳请各位网友批评指正!

killer真是高人啊,令人有茅塞顿开的感觉!
killer能不能详细分析下 面向数据库的路线,和面向对象的路线的区别呢?
[该贴被zdz8207于2008-01-25 20:02修改过]

>>killer能不能详细分析下 面向数据库的路线,和面向对象的路线的区别呢?

可以参考banq的文章“面向对象建模与数据库建模两种分析设计方法的比较 ”http://www.jdon.com/mda/oo_relation.html

又见马屁精,赤裸裸的。

马上要到2008年春节,这个帖子权当网上J道恳谈会,在新年到来之际,大家提提意见,拍拍马屁,骄傲骄傲,叹叹气,坐而论道,务虚之极,直至无聊,请大家分享自己的经验吧。

也凑个热闹吧。

本人是实用主义者,所以对软件设计也是采用这种态度。
由于脑子不是很好使,绕不了几个弯弯,所以在软件设计的过程中都是力求简单直接。
但有一点是很重要的,那就是业务建模一定要认真,非常地认真。本人不会专业的UML,也不用什么Power Design。习惯找张纸开画,或者写在白板上与客户及同事讨论。虽然简陋,但力求真实反映客户需求,最大限度贴近用户业务。多费些时间精力也无所谓,总比最后人家用着难受要好。

至于什么方法、思想,觉得理解得了,用得着的就抓来用;搞不明白,用不着的就敬而远之。比如什么XP,就只用TDD和结对编程。做Java用TDD(层次有点多,不一层层测好了没法做),做PHP或RoR就不用TDD(页面一刷就出来了,写测试完全是浪费)。

还有一点也很重要,软件一定要重构,要反复地重构。一开始我们不可能做得很好,但时间做久了,技术和业务理解深入了,就一定要与时俱进。