用户操作
[即时聊天] [发私信] [加为好友]
黄海全ID:optman
44561次访问,排名2600(-1),好友2人,关注者3人。
比思想更有力的是行动
optman的文章
原创 111 篇
翻译 6 篇
转载 7 篇
评论 16 篇
最近评论
freeeim:犹如荒漠里的一个绿洲,救了俺的小命,呵呵。
你就这么厉害。
yumn2004:这篇文章对我有很大的帮助,谢谢楼主!
zhanghs202:你那个只是讨论一个主题或者两个人谈论一个话题而已
zhanghs202:你说的那个叫需求吗?肯定不叫,如果你不知道你要开发的东西是什么,你怎么下笔啊?
zhanghs202:听说丰田汽车早上9点上班,8:50的时候,安装车间一个零件都看不到,一个人也没有。晚上6点下班,6:10分的时候,车间里同样是看不到一个零部件。如此完美的景象,和公司的机制有莫大的关系。制度化,反腐倡廉的最佳利器是法律,制度化,以及保障机制。然后带来政府的工作的效率。软件研发的制度化,是保障沟通效率,正确高效工作的保证。
文章分类
    收藏
      相册
      Blog
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 抽象的层次收藏

      新一篇: 项目管理随笔 | 旧一篇: 人类的进步体现在掌握复杂度的能力的增强

      软件开发之所以复杂,是因为业务需求与程序语言之间存在的巨大鸿沟,有太多的变数。

      你无法清晰和准确的描述你所想要的东西,而即便你能,你也很难最后实现出来的东西是不是你所想要的。因为,在软件业,宏观的业务需求很多时候竟然是程序员决定的,要确定一个特性具体会怎样体现,你竟然不得不去看源代码。就好比说,制作一架航天飞机,你不得不从每一个螺丝钉开始考虑。软件太虚幻了,以至于你无法从外观上看出,一个exe程序到底是游戏呢,还是文字处理,或者会格式化你的硬盘。所以,软件的变数太多了,你无法掌控。

       

      软件的灵活是好处,也是坏处。开发人员总是说,你想要怎样都可以,只要你告诉我,就能给你实现出来,几乎没有任何的成本。既然这样没有成本,所以外部的需求总是在变,今天这样明天那样。

       

      软件的外部行为是无法预测的,所以我认为病毒是会永远存在的,就像好人和坏人你从来不能完全分清。这种无法预测性,同时也给模块之间的配合带来了很大的障碍,就像你不知道如何跟一个无法捉摸的人合作一样。于是,就像人与人之间建立了契约关系一样,软件业也开始有了接口的概念。软件模块的外部行为,于是由其接口进行描述,这样的配合就好多了。

       

      对外行为已经公开了,那么自己对外的要求呢?如何表达对世界的意图?

       

      程序之所以复杂,是因为系统底层不知道上层应用的具体意图,无法优化......或者说,缺少更大的视图。每一个小动作的意图都很明确,但是组合起来的效果却不知道会怎样。就像直接阅读一段计算机的操作指令码0101的,你知道到底最后要干嘛?就是直接看C代码,你能猜出这是要发射卫星还是播放电影?不能,除非你阅读了很多的上下文的代码。所以,我相信,如果要让计算机执行更复杂的工作,我们需要更高层次的语言,能够把更高层次的意图表达出来。就像C语言对计算机系统的抽象,SQL对关系型数据的抽象。

       

      抽象又几个层次,首先你会先创建一个函数来封装复杂的操作。 在后来,你会创建更加的完备的代码框架来处理同样领域的各种问题。接着,是用一种抽象的模式来囊括不同领域的类似问题。最后,你会发明一种特定的语言来方便表达。解决方案从开始到后来变得越越抽象,但是适应范围也越广,表达也更简洁。

       

      以为业务需求与程序语言之间存在的巨大鸿沟,弥补起来就会有偏差,我们需要在中间不断的设立参照物,或者是中间产物。共产主义尚且还有分三步走呢,何况软件开发。这种中间的参照物就是函数库,代码框架,模式和语言,一层层的转换,而且要保证每一层之间转换的准确性。

       

      所以软件开发,就是不断地从高层次的抽象不断向下转换,而每一个抽象上都要把自己的意图准确表达。现在的编程语言也在往这方面发展,企图在不增加新的抽象层的情况下,对现有语言进行改造。比如.NET里的Attribute编程,还有XAML里使用标签来描述界面布局和程序行为。这就是所谓的Declarative编程,与以前用很多代码来描述的Imperative编程有很大不同。Declarative编程的最大优点是,它准备的表达了自己的意图,而Imperative编程就很难琢磨。前者对开发工具的支持也比较好,而后者则要求开发工具有很高的智能!

       

      一时兴起,胡言乱语了一番。以上想法,多来自去年看过的《Software Factory》。

      发表于 @ 2006年11月14日 11:53:00|评论(loading...)|编辑

      新一篇: 项目管理随笔 | 旧一篇: 人类的进步体现在掌握复杂度的能力的增强

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © 黄海全