关于企业应用软件设计开发解决之道的一点个人思考

关于企业应用软件设计开发解决之道的一点个人思考

J道--java解决之道,解决java?我想应该不是吧,java只是一门编程语言,语言者,工具也。从jdon的首页上可以看到一句话:“解惑授道,企业信息化解决之道”,我想,banq的意思应该是指用java做企业应用软件过程中的软件设计开发解决之道吧,因为企业信息化包括诸多要素,除了软件(软件除了设计开发也还有需求,实施等要素),还包括企业管理,流程重组,资金,人员等等,而jdon主要还是讲企业应用软件的设计开发等问题,有设计模式,有领域建模,也有框架,并被誉为三件宝,但怎么来运用这三件宝呢?有什么指导思想呢?到底什么才是企业应用软件的设计开发解决之道呢?我想很多人都有考虑过这个问题,也在寻找这么一条通向罗马的大道。在这里,把我个人的一点想法和思考写出来,希望能和朋友们交流,共同提高!欢迎朋友们批评指正!

道,我的理解就是事物的本质规律,顺着事物的规律办事就是循道!循道就是不能超越事物的本质范畴,不能越界,所谓物极必反正是这么一个道理。循道则通,通则久!所以,道也是属于方法论的范畴,哲学的范畴,无不是在阐述某一事物或某一行业的本质规律,根本的解决方法。

其实,企业应用软件的设计开发解决之道的答案也容易找,就在J道网站的logo里面,jdon里的那个o在logo里是一个太极八卦图标,太极八卦者,易也。易,群经之首,大道之源!易道,太极之道!易是中国乃至世界上古老的唯物主义哲学体系,阐释着万事万物的本质规律,具有明显的科学的辩证法特征,是优秀的辩证方法论,是亘古不变的真理,把它运用于为人便是为人之道,用于政治即是政道,用于战争即为兵道,用于商战即为商道,当然用于企业应用软件的设计开发也就是企业应用软件的设计开发解决之道!

企业应用软件的设计开发解决之道有几个要素,有主观的,有客观的,有个人的,也有团队的,有静态的,也有动态的,总的来说有公司的资金保障,实际业务系统的复杂度(即需求),现有技术和工具,项目经理,开发人员,软件过程管理,项目组组成结构等。但是,纵览国内许多软件公司的项目,有着强大的资金支持,有着成熟的技术,有着拼搏精神,有着良好的软件过程管理,项目经理和开发人员个人技术能力都很强,业务需求也不算复杂,但仍然不能做出客户满意的能应对市场需求的软件,其中一个最重要的原因就是缺少一种哲学要素,方法论要素。这种哲学要素是处于最高统治地位的,上述提到的几个要素应该是仰望着它的,它统帅着整个软件设计的理念,贯穿着整个软件的生命周期。看看国内外有着成熟稳定产品的、受客户欢迎的成功的软件公司,无不有着自己独特的哲学。

讲了那么多,我们就不禁要问了,易道到底是什么?怎么把它运用于企业应用软件的设计开发呢?我觉得易的精髓可以从几方面把握,从宇宙观上是唯物论,人生观上是自然论,方法论上是辩证法。这三方面再综合一下,那就是平衡两字,或者说是和合两字。易经说,一阴一阳之谓道,易道就是阴阳平衡之道,就是要和天和地和人!企业应用软件设计开发之道就是前面提到的各要素平衡之道,那么这些要素的和天和地和人之法是什么呢?下面就讲一下这个问题。

一、 软件设计开发的和天之道

对于我们企业应用软件设计开发人员而讲,软件设计开发的天道要素有软件政策,市场需求,现有技术的成熟度,软件发展的潮流等。易经说,天行健,君子以自强不息!天道的最大特点就是永恒不息,不是我们个人所能左右的,要想使它固定下来据为己有是既不可能,也代价太大,结果只能是自己被绊得粉身碎骨。我们要想真正地拥有它就只能是在天道的动态运行中顺着它的势去掌握它,这样才能为我所用!

软件政策就不用说了,目前国内对软件的政策是大力扶持的,如果还要反抗这个政策的话那可以尽早离开这个行业了,呵呵。

市场需求方面,因为现在是市场经济体制,全球一体化迅速加剧,市场瞬息万变,机会转瞬即逝,在这样一个大背景下,企业需要的正是一种灵活的应变机制,要能够迅速有效的和别人沟通,获取各种有用的信息,以做出相应的决策,所以现在的社会迅速有效的沟通是至关重要的,那么,对于这种市场需求,对作为工具的软件提出的要求是什么呢?我觉得这种要求可以归结为六个字,那就是:“开放、标准、集成”。开放就是打开自己的大门,增强软件的互操作性,我们国家80年代都改革开放了,软件经历了这么久,也该开放了。标准就是要遵循世界公认的工业标准,比如web标准,通讯协议标准,数据表达标准,对象管理组织的建模标准,等等,大家都遵循同样的标准就容易使软件更加开放,相互之间的调用就不用转换格式了。集成就是系统之间的模块要集成,数据要集成,流程要集成,甚至要在互联网的基础上和客户集成,和供应商集成,和合作伙伴集成。总之一句话:就象全球一体化趋势一样,软件也要一体化,这是趋势,不可阻挡。所以,现在企业协作商务软件(CPC)是趋势,是在ERP的基础上转变了焦点,以前企业的核心焦点是企业的生产制造,市场方向变化比较少,现在主要焦点是市场导向。但是现在还是有很多软件公司做软件根本都没有做这方面的考虑,信息孤岛还在不断地增加,整个系统是呈烟囱式地突出来。现在业内炒得很火的SOA正是在这么一个时代背景下提出来的应对系统集成的解决方案,虽然现在由于标准和技术都还不够完善,真正实现还有一定难度,但是总方向是对的,我们不可回避,必须静观势态,顺势而作。

对于现有技术的成熟度,我们也要有所把握,总的来说,现在的软件编程语言,数据库,网络技术是比较成熟的,相应的工具也都比较多,硬件技术也是成熟的,是足够满足我们做企业应用软件的,但是也还有一些技术是还不够完善的,比如现在的web service技术,建模技术和工具等都还不够成熟,主要是这方面的理论也还不够成熟。所以我们做软件的时候也要考虑到现有技术是否能够实现我们的目标。

对于软件发展的潮流,我这里主要要说的是分析设计方法的潮流和软件过程的潮流发展。Banq在一篇帖子中讲过分析设计方法的历史发展(http://www.jdon.com/mda/modeling.html),企业应用软件分析设计的方法主要经历了三个阶段,首先是围绕数据库编程的面向过程的分析设计方法,其次是面向对象的分析设计方法,目前最新的阶段是在面向对象的基础上发展起来的综合了分析设计的模型驱动的方法,在我的另一篇帖子“用科学的思维方法指导软件的设计开发”中我提到的模型化的思维方法就是讲在对企业业务系统建模时所需要的思维方法,现在科学问题包括我们的企业业务都是变得越来越复杂,模型驱动的分析设计方法也正是在这么一个背景下出现的,可以说代表了目前分析设计方法的最新方向,综观整个分析设计方法的历史发展过程,模型驱动分析设计方法的出现也是必然的,我们也不能回避,虽然相关的理论和工具还不是很成熟,但是我们的思想必须走在前面,如果思想不能先行,理论永远不会成熟,工具永远不会出现。软件过程的发展也可以说经历了两个重要的阶段,首先是瀑布模式过程,需求,分析,设计,开发,测试,运行,维护,每一步的启动都建立在前一步已经完全完成的基础上,这个过程最重要的是一开始就需要确定全部需求,需求不可以随意更改,而需求恰恰是最难确定,最难保持不变的东西。第二个软件过程那就是迭代模式过程了,它是先把软件最最基础的骨骼做出来,先让它能运行起来,然后再根据需求的变化,每一个需求都按瀑布模式的过程在原来的基础上迭代,这其实就象人类的胚胎发育过程,先有整体,然后再由整体慢慢地衍生出各个组成部分,这也是生物体的生长发育过程,记得有个朋友把软件系统比喻成生物系统,非常有道理。我们大家都知道逻辑思维是相当重要的,但是,又有几个人能真正了解逻辑呢,逻辑是历史的规律在我们思维中的再现,是剔除了历史中的偶然性与多样性,历史是决定逻辑的,了解历史的发展才能运用逻辑思维去推理将来,所以我们了解了分析设计方法的历史发展,才能真正知道模型驱动分析设计方法的必然性,了解了软件过程的历史发展,才能真正体会迭代过程的必然性。

天道不可违,顺天者昌,逆天者亡,所谓人定胜天,实在是一些人自欺欺人的幌子!


[该贴被killer于2007年10月06日 20:45修改过]

二、 软件设计开发的和地之道

和地,在中国人的传统概念里那就是和于地理,就是讲风水,用现在的话来讲那就是人与地理环境的和谐。其实,软件又何尝不讲风水呢?阎宏博士在《java与模式》的前面部分也讲过软件的风水。易经说,地势坤,君子以厚德载物!大地是万物之母,孕育滋生着万物,
但是却生而不有,有而不恃。做人就是既要学习大地的这种谦让精神,又要与大地和谐相处,相得益彰。软件设计开发其实就是和做人一样,软件功能组件既要谦让,又要居于合适的位置做好自己的事情,又要与环境和谐相处。

谦让其实就是生而不有,就是把功劳让给别人。软件功能组件自己实现功能,但是要接受别人的封装,要甘做默默无闻的幕后英雄;居于合适的位置那就是要找到自己在整个软件架构中的位子,一个人再有才能再有本事但是却被放错了位置,那也发挥不出他的才能,做好自己的事情那就是做好自己的本职工作,一个人做好自己的本职工作就是对整个社会最大的负责和贡献。与环境和谐相处那就是与周围环境的交互要适度,应该是互利的,共同发展的。其实,仔细想想GOF模式也好,设计原则也好,无一不是在讲怎么让软件功能组件职责分明,怎么让功能组件找到自己的位置,怎么让软件功能组件与其他组件尽量少地交互,避免牵一发而动全身。现在的社会很多问题也正是由于很多职能部门职责不明导致协调不好,相互推卸责任。软件也一样,很多软件出了问题还找不到问题出在哪,就是因为功能组件职责不明,就是自己做了别人的事情或者没有做自己该做的事情,又或者是站错了位置,不知道自己该处于哪一层,经常做出表示层实现业务,业务层托管表示层等荒唐的事情。而且相互间的交互也经常是越级,认真想想真是荒唐得很。其实,我们所做的构建软件的架构就是为了让软件功能组件更快更好的找到自己的位置,领域建模就是确立各软件功能组件,设计模式就是为了解耦这些软件功能组件,让它们职责明确,框架就是约束软件功能组件之间的交互。


三、 软件设计开发的和人之道

软件设计开发的和人之道主要是讲的人的要素,软件设计开发的人的要素主要有项目经理,设计开发人员,项目组组成结构。这里的人道主要从两方面讲,一是用人之道,二是为人之道。

用人之道在中国从古至今可以说都是个热门的话题,说不尽的话题。用人是非常重要的,历史上很多称王称帝的无不都是用人高手,都有贤人的辅佐才得以成功,在这里也就不必多举例子了。我觉得用人之道可以归结为一句话:“唯才是举,任人唯贤,但不避亲!赏罚分明。”软件设计开发的用人之道主要是针对项目经理而言,除了上面的那句话,我觉得还有重要的一点,那就是项目经理必须具有审时度势,合理划分并安排任务,使各设计开发人员能充分发挥其才能的能力。而且项目经理还必须有造势的能力,那就是充分创造各种有利条件,积蓄项目组成员的势能,完成攻坚战,孙子兵法云:“转圆石于千仞之山者,势也!”这样的圆石砸下去,那是火力凶猛。孙子兵法还说:“兵贵胜,不贵久!”软件开发也一样,不宜打持久战,所以项目经理要有能造势,并尽快结束战斗的能力。现在有很多软件项目都是不能按时完成的,都得拖上几个月,这里面有客观的原因,但项目经理缺少这种造势的能力也是一个因素。

软件设计开发中的为人之道主要是指项目经理和设计开发人员的为人之道。项目经理在软件项目中的作用是非常重要的,是领军人物。项目经理要能和设计开发人员打成一片,这样才能充分调动大家的积极性并打开工作局面。我觉得项目经理要善于处下,要善于推功揽过。道德经说,生而不有,有而不恃,功成而不居!夫终不自大,故能成其大!两千多年前的古人都能参透这样的哲理,我们现在的那些功利小人,真是应该感到汗颜了。设计开发人员主要是要能敬业,虚心学习,不要自以为是,我们现在很多人都是觉得自己技术很牛,总觉得别人写的东西都很烂,喜欢瞧不起人,这好象也是中国人的通病,历来都是文人相轻,武人也相轻。软件设计开发人员需要克服这一点心理,软件设计是艺术,没有最好,没有完美,也没有谁会是第一。


和天和地和人者必将会当凌绝顶,一览众山小

孔子说:“圣人取法于天,立人于地!”顺天承地必应人!天时地利人也和!天下万事都是这么一个道理,做软件当然也一样,循着软件开发的天道,地道,人道前进,必将会当凌绝顶,一览众山小!

所以,软件公司要培养自己的独特哲学,设计开发人员也要培养自己的个人哲学,哲学是公司、个人的全局的、最高的思考方式,是最重要的资本,是公司、个人的核心竞争力。企业哲学是企业文化的根源,企业文化是企业哲学的外在表达,方法是思想观点的具体体现。优秀的软件公司部门经理,项目经理在帮助员工提高技术能力的同时,也帮助他们提高个人的精神境界,思考方式,培养全局把握能力,培养科学的思维方法。而普通的部门经理和项目经理只喜欢用兵法的管人之术,各种管理条例和绩效考核方法层出不穷,而取效却甚微。

道是体,而术是用,所以我们不要去崇尚纯粹的技术技巧,我们做企业应用软件不是要搞技术的研究,不是要发明新的工具,我们要做的是将现有的技术为设计开发之道所用。就象金庸的武侠小说那样,不崇尚纯粹的武功,技巧,武功技巧只为侠所用,像欧阳锋那样侠之不在,武功第一又有何用?当然,我这里并不是说技术技巧不重要,只是说要有目的,有指导思想地去用。

悟得太极之道,阴阳平衡之道,和天和地和人,这样才是大智慧,才是经天纬地的大道!懂得了这样的大道,然后构建自己的知识架构体系,运用科学的思维方法去寻找问题解决方法并解决各种问题,必将事半功倍!当然这个过程也是一个不断的迭代的过程!在另一篇帖子里面讲过用科学的思维方法指导软件的设计开发(http://www.jdon.com/jivejdon/thread/32520.html),有时间的话再把如何构建自己的知识架构体系的自己的体会和想法写出来与大家交流。

软件世界是一个新世界,类似人类社会,上帝掌管人类社会,而我们软件设计人员则掌管软件虚拟世界的规则,所以,如何向上帝学习,以无形之手调控软件虚拟世界,则是一个大学问。

正因为我们不可能是上帝,所以,我们创造的世界总不会完美,总是有不断追求完美的余地,这些都是软件会不断发展的原因。

虽然我们不可能成为100%上帝,但是可以掌握一些方法,所以,客观世界之道和软件虚拟世界之道是相通的。

软件是讲大智慧的.

正因为软件是一个大智慧的东西,所以,才会产生盲人摸象的现象,对软件产生各种误解和大量争论,通过争论启迪更多人接近真理,拨开云雾看见大智慧的东西,也是一种“开眼”的过程吧。
[该贴被banq于2007年10月06日 21:13修改过]

Killer是个善于思考的人。

有技术理论就讲技术理论。
讲哲学就把哲学的理论讲清楚。
把软件开发成功与否和什么天地人之道扯在一起,不可笑吗?
banq,Jdon不是这么个天地人之道的东东吧?

hyhongyong,首先谢谢你提出评论,其次虚心聆听你的评论,我相信一定会有值得我学习的地方,别人的评论是一面镜子,能照出自己的不足,不足的地方我一定完善,错误的地方我一定改正。
[该贴被killer于2007年10月08日 22:37修改过]

jdon一直宣传和普及软件开发的前沿理论和知识,这我是非常支持的(因为我从中受益不浅)。这里的知识特别适合中级的开发人员进阶学习。
但如果只是论道这么虚,我想也就没有什么意思了。

hyhongyong的建议非常中肯,这是我们一贯坚持的方向。

虽然 killer文中谈到一些天人词语让人有些不舒服,但是他的文章大部分篇幅还是在谈一种开发之道,也就是说软件需要大智慧,这点我们应该肯定的,但是大智慧的东西往往看上去很虚。

我个人观点:只有更多国人程序员具有大智慧了,国人从软件产品到软件思想才会引领世界前沿,而不是现在我们跟着世界前沿。当然,这个过程是漫长的,需要我们一起加油。

如果一些网友对我帖子中的一些天人词语感觉不舒服,我在此对这些网友表示真诚的歉意!

继续欢迎网友们提出批评和建议,这些都是技术技巧和思想问题,不是大是大非的道德原则问题,是可以交流的,是可以互相从中获取对自己有益的东西的。我不是想把自己的观点和想法强加给别人,只是把自己的想法和观点写出来与大家交流,看客为自己而体味,有所得,幸!无所得,亦无失!虽然想法和意见不同,但能在这里相遇又何尝不是一种缘分呢,西凉已经借镜,虽然不是你要的容颜。还是真心希望能在这里结识一些朋友,并从你们的批评和建议中获取对自己有用的东西!

关于论道的东西很虚的问题,我的观点和banq比较接近。这些东西要在不断地实践中边不断地思考也许更能有体会,国内从来不缺乏优秀的实践者,缺的是思考者,不缺技术,缺的是思维能力。实践中不总结和思考,不悟道,是很难提高的,很多人说起来有很多年工作经验,但实际上的水平可能还是停留在一两年工作经验的水平。

还是给点方法多弄两个钱吧

>>> 这些东西要在不断地实践中边不断地思考也许更能有体会,国内从来不缺乏优秀的实践者,缺的是思考者,不缺技术,缺的是思维能力。实践中不总结和思考,不悟道,是很难提高的,很多人说起来有很多年工作经验,但实际上的水平可能还是停留在一两年工作经验的水平。
同意!实践和技术是基础,总结和揣摩达到思想上的提高才是升华。