细节实现其中,大脑往往被"快点搞定它"的想法所充斥,已经无暇再回到比较高的角度来思考整
个架构的合理性了
就我的经验,新手SA/Architecture最容易犯的错误,就是只见树木不见森林.Architecture要既有望远镜,又有显微镜,并且要知
道什么时候该用望远镜,什么时候该用显微镜.
我同意原贴中关于快速prototyping, pseudocode来做概念验证,但就我感觉来说,新的Architecture更容易犯的,是这种
只见树木不见森林的错.
举个例子来说,前面这个新手SA,他的一个显而易见的错误,是把各种异常情况都暴露到表面...
这个系统是一个机电一体化+软件的项目,对于底层的机电一体化系统来说,自然包括各种各样的异常因素,比如说两个产品同时通过时,导致光电眼检测定位天
线检测不同步.原来的设计,把这个异常类和业务类完全混到一起去了.
我当时就告诉该SA,对于最终客户(在这里就是业务类喽),他有什么样的必要知道这个错误呢???为什么你要把这个类混在一起呢..
其实这里的原因就是该SA在做设计时,宏观视野不足,而微观视野过多了.他满心以为自己考虑的很周到,却没有想到这样最终导致了糟糕的设计.
所以原贴说:
"在设计阶段,作得细致一些,尽量不要让自己陷入实现的细节中纠缠"..这个表述,看起来好象矛盾(既要细致,又不能陷入细节..),实际上我觉得是没
说到点子上.
很多架构设计是top down的,如果你遵循分层原则,并且理解层与层间依赖应该最少.你就会很容易的判断出哪些细节是我这一层应该考虑的,哪些细节
我不应该考虑(应该交给下一层去考虑).如果不记住这个原则,你一样最终还可能陷于混乱,即使你有prototyping和pseudocode也一
样.关键在于Architeture要善用两种不同的工具(望远镜和显微镜).
我的表达能力不是很好....观点欢迎拍砖.
On 12月5日, 下午2时38分, pongba <pon...@gmail.com> wrote:
> 来源:http://hi.baidu.com/yjpro
>
> 杨军 <http://hi.baidu.com/yjpro>之前在 TopLanguage 上只发了三个主题,但字字珠玑:
>
> [1] 有些事情做起来比想象中容易<https://groups.google.com/group/pongba/browse_frm/thread/9a459b6efe94...>
> 。
> [2] 有关读书方法的一点想法<https://groups.google.com/group/pongba/browse_frm/thread/20a08b6201d8...>
> 。
> [3] 一件事情如果你没有说清楚,十有八九不能做好<https://groups.google.com/group/pongba/browse_frm/thread/6f6140744ab9...>
> 。
>
> 以下是 "关于软件架构设计的思考" 的正文
> --------
> 最近在重构设计。这一回自己吸取了之前的教训,在想清楚整个设计的架构之前,一直没有动手写太多实
>
> 际的code,更多的时候是用伪码来描述验证自己的设计思想。
>
> 花了三天的时间,在一条设计道路上不断地思考,尝试,最终发现并不太可行,于是*改换另一个思路*继
>
> 续进行设计,经过一天时间的设计,发现这个思路也存在一定的缺陷,及至今天,才算是基本确定下来整
>
> 体设计的框架。
>
> 如果自己这一次还是在设计阶段浅尝之后就开始实际动手coding,恐怕就未必能够及时地意识到设计中
>
> 存在的不足了。很多时候,虽然在实际编码的过程中我们能够体会到设计中存在一些缺陷,*但是身陷于
>
> 细节实现其中,大脑往往被"**快点搞定它"的想法所充斥,已经无暇再回到比较高的角度来思考整
>
> 个架构的合理性了*,这种情况下,往往要待到编码到一个*原有的设计缺陷已经无法忍受*的状态下,才
>
> 会明确清晰地意识到有必要重新考虑设计层面的变化了。
>
> 但是到了这种时候,也往往意味着前面大量的实现工作要被推翻重来,不啻为一种浪费。
>
> 而*在设计阶段,作得细致一些,尽量不要让自己陷入实现的细节中纠缠,即使在仅凭思考和抽象已经不易
>
> 把握系统复杂度的时候,也不要轻易诉诸实现,而是借助于流程图,伪码这样的抽象层次较高的手段来协
>
> 助自己建立起对系统的具体理解,则有助于以一种有序的方式把握整体的设计了。*
>
> 设计工作往往是抽象的,不易把握的,甚至是有些痛苦的,因为你往往要从一个空白的起点开始通过抽
>
> 象,组合,等等手段构建出一个假想的符合要求的目标架构,这种不够厚实,欠乏实物支撑的感觉经常会
>
> 让一个设计经验不是很丰富的开发人员在设计阶段萌生出逃避设计,尽早切入具体coding的想法。
>
> 而相比之下,实现工作则具体得多,也易把握得多,也更容易带来*快速成就感*,所以开发人员可能更容
话说联合利华新换了一批自动香皂包装机以后,经常出现香皂盒子是空的没有香皂的情况,而在装配线一头用人工检查因为效率问题不太可能而且不保险。这不,一个由自动化,机械,机电一体化等专业的博士组成的Solution队伍来解决这个问题,没多久他们在装配线的头上开发了全自动的X光透射检查线,透射检查所有的装配线尽头等待装箱的香皂盒,如果有空的就用机械臂取走。
不巧,中国一乡镇企业生产香皂也遇到类似问题,老板吩咐线上小工务必想出对策决之,小工拿了一个电风扇放在装配线的头上,对着最后的成品吹之,空盒子被吹走,问题解决之.
很想从比较高的角度去思考整个系统的实现,但往往是抽象能力不够,对所涉及的方方面面知识还没融汇贯通,这样情形下,觉得还是coding实现一个简陋
的demo有助于思考
一点没错。我是越来越发现知识本身对思维的阻塞。想问题的时候,如果脑子里有一个与问题场景有某些相似性的既有方案,就会抑制不住地思维被该方案占满,很难实现fresh的思考。可以说是既有知识block了思维。我很想弄明白如何能够避免这个办法,为此也在阅读思维/认知科学方面的书,有一些heuristics能够有一定的作用,但是每每还是发现会思维落入盲点 :D
因此我一直以来认为好的SA必定是Programmer出生,而且也必定是优秀的,so,要做好SA,先做好coding,当然这里的coding是广义的。毕竟望远镜和显微镜是有差异的,必定要身处其中才能有深刻体会的。
不但出现盒子是空的情况,还会出现两块香皂挤在一个盒子里边的情况(两块香皂都挤扁了);同时,流水线上拥挤了很多的盒子,即两个(或以上)盒子可能会齐头并进到达装配线的出口。
说到生产线,呵呵,有一个笑话是关于化繁为简的(虽然不一定真实)
虽然是笑话,但对设计者也应该有些启示吧
博士和小工的区别
据说这是真实的笑话,搏君一笑,看看什么叫资源浪费
话说联合利华新换了一批自动香皂包装机以后,经常出现香皂盒子是空的没有香皂的情况,而在装配线一头用人工检查因为效率问题不太可能而且不保险。这不,一个由自动化,机械,机电一体化等专业的博士组成的Solution队伍来解决这个问题,没多久他们在装配线的头上开发了全自动的X光透射检查线,透射检查所有的装配线尽头等待装箱的香皂盒,如果有空的就用机械臂取走。
不巧,中国一乡镇企业生产香皂也遇到类似问题,老板吩咐线上小工务必想出对策决之,小工拿了一个电风扇放在装配线的头上,对着最后的成品吹之,空盒子被吹走,问题解决之.
工人日常所做的工作导致了他的思考模式必然是现实、低级的,但在检查空盒的方面却发挥了实效。
而专家因为工作原因,思考的思路必定是专业考究的,但却忽略了小技巧的现实效用。
越是学历高,考虑问题的时候越容易划地自限。所谓拿这个锤子看见谁都像个钉子。
重量的确是一个最佳feature,但相应的应该有能识别这个feature的最简模式,如果专家们知道从重量来分辨肥皂盒,也许他们会整一个电子秤放在装配线上,然后继续使用机械臂取走那些未能达到一定重量的盒子。而小工也许还不一定拿风扇吹哈,把装配线弄斜一点就行了。
我恰恰觉得"你的灯亮着吗?"就是要告诉我们注意深刻反思自己的立场和当前所处的"地方",走过了就倒回来几步,走慢就加快脚步。
这又让我想到另外一个问题,Google和Wiki上找到的往往是现成的解决问题的手段。这时候面临的问题其实不是Google的知识是否限制了我们的"思考",而是长期以来现成的解决方案,不去自己尝试解决问题是否限制了我们的"成长"。
> > TopLanguagehttp://groups.google.com/group/pongba- 隐藏被引用文字 -
>
> - 显示引用的文字 -
同意你的观点:."关键在于Architeture要善用两种不同的工具(望远镜和显微镜)."
我来咬文嚼字一下,我始终觉得,把望远镜和显微镜比作工具,是不恰当的,我觉得用能力比较合适。差别在于,能力需要锻炼,而工具只需要到店铺买就行了。
就像上面说的,你会画UML图并不代表你就能画好UML图。UML是工具,而画好它所需要具备的素质则是能力。
在软件设计的过程中,我们经常会面临这样的诱惑: 在工作过程中,突然出现了一个问题如鲠在喉,阻塞住了当前整个的工作进度, 而同时,你立刻能够想到一个快速搞定该问题的方案,这种情形下开发人员,很 容易就会受到快速解决问题的诱惑,快速地给出fix,然后继续推进到后面的内容, 维持那种开发过程中酣畅淋漓的快感。但是在开发过程中,不可避免会经常性地遇 到问题,如果经常性地给出快速的fix,到了一定的阶段,可能就会发现,现有的 系统处于一种补丁落补丁的状态,看上去不舒服,在这个不舒服的基础上作后续 的开发也很难受。如果一定要继续坚持维持这个不够好的设计,也许,最终产品 还是能够开发完成,但是它的扩展性,稳定性,可复用性,可修改性都会大打折扣 。 这种对问题快速给出fix的方式,在产品维护的阶段,尚可运用,当然前提是产 品本身的架构设计得足够好。但是在产品的设计阶段,在早期开发阶段,还使用 这种方式,则可能会带来较大的负面影响。 这样的体验,最近自己就有这一回。 最近一直在设计一个处理语意部分的evaluator,期间也遇到了不少问题。初始 给出的设计在后续的实现环节中发现有一些局限,但是在实现的过程中因为过于关 注进度,也在一定程度上受到持续推进的顺畅感的诱惑,自己并没有停顿下来审视 原先的设计,而是稍作思考,给出一个快速的fix,能够解决当前的需要之后,就 继续进行到后续的开发中。虽然在编码的过程中,已经感觉到有些底层数据结构设计的 实在谈不上舒服,为了解决设计问题,引入coding trick的场景也不只一处,但 是身陷其中,并没有想过站起来,从更高的角度进行思考。及至代码基本编写完毕 ,开始测试,暴露出一些bug,需要进行修改的时候,才更充分地体会到现有的设计 的局限性以及这种局限性给维护和扩展带来的开销。这样束手束脚地调试了差不多 一周的时间,基本功能倒是调通了,但是有些不爽的是,这种调通的感觉完全是建立 在调试经验之上的,刨开调试的经验和fix的一些bug,从流程上和框架上来看,自己 对现有的这个版本实现的品质并没有太大的信心,简单来说,让自己闭上眼想一想, 现在的这个设计,这个实现,在品质上是不是达到了自己的要求,是不是在自己的控制 范围内,还是一件说不太清楚的事情。对于一个工业级的软件产品来说,这种控制感实 在是太虚弱了。考虑了一天,跟老大也沟通了一下,决定对evaluator进行重构。从底 层的数据结构的定义,到基本的流程框架,乃至具体的实现,几乎全部要作一番调整。 短期来看,这种调整会给进度带来一定的影响,但是在项目的初期阶段,对于根基性的 东西,还是值得花费较多的资源作精作细,这样后续的开发才可能有一个良好的基础。 P.S. 这段时间一个比较深的体会就是,当你感觉需要实现的某个模块过于复杂,条理 不是非常清晰,或是需要引入特殊的coding技巧来解决一个问题的时候,往往意味着更高 层次上的设计和架构潜伏着问题,所以这种时候,要控制住埋头实现复杂逻辑,引入trick 快速解决问题的冲动,缓冲一下,站起来,审视一下,是不是可以从更高的层次来简化问 题,给出更好的设计,消除引入特殊trick的必要性。 |
其实倒也不必担心"思考"的问题。
毕竟要站在巨人的肩膀上做事,当然对任何事情存疑是值得推崇的,不过也要注意"量",不过量即可,为了追究根源,会浪费很多精力和时间在次要的问题上。
我更担心的是创新问题。
最近一直在看量子力学,狄拉克将近80年前出的量子力学圣经中,漂亮的数学架构实在是令人叹为观止,如果他出生在我们这个时代,有google可以找到别的数学家的方案,估计现在还在象我一样,忙着推导别人的理论架构吧,狄拉克方程能否问世实在是问题。现在的知识累积实在太多了,一个人很难穷尽一个分支的所有,什么时候该收集资料,什么时候自起炉灶很难判断的说。
实际上我在这行业混了十几年的结论就是,CS本身革命性的变化非常少,本质上都是相通的,甚至还有思想回潮(就是十几年前的东西突然流行起来,比如重
构).
On 12月5日, 下午7时43分, pongba <pon...@gmail.com> wrote:
> 2008/12/5 Linker <linker.m....@gmail.com>
另外,他所说的"开发过程中酣畅淋漓的快感",我也是深有体会,确实是一种非常有成就感的感觉.好象做了一个好设计以后,一天都觉得非常开心,看外面的
天都觉得更加蓝了的感觉.哈哈.
On 12月5日, 下午8时06分, pongba <pon...@gmail.com> wrote:
> 索性再转来杨军的另一篇相关的:
>
> 软件设计过程中的诱惑
> 2008-11-28 09:35
> 在软件设计的过程中,我们经常会面临这样的诱惑:
>
> 在工作过程中,突然出现了一个问题如鲠在喉,阻塞住了当前整个的工作进度,
>
> 而同时,你立刻能够想到一个快速搞定该问题的方案,这种情形下开发人员,很
>
> 容易就会受到快速解决问题的诱惑,快速地给出fix,然后继续推进到后面的内容,
>
> 维持那种开发过程中酣畅淋漓的快感。但是在开发过程中,不可避免会经常性地遇
>
> 到问题,如果经常性地给出快速的fix,到了一定的阶段,可能就会发现,现有的
>
> 系统处于一种补丁落补丁的状态,看上去不舒服,在这个不舒服的基础上作后续
>
> 的开发也很难受。如果一定要继续坚持维持这个不够好的设计,也许,最终产品
>
> 还是能够开发完成,但是它的扩展性,稳定性,可复用性,可修改性都会大打折扣
>
> 。
>
> *这种对问题快速给出fix的方式,在产品维护的阶段,尚可运用,当然前提是产
>
> 品本身的架构设计得足够好。但是在产品的设计阶段,在早期开发阶段,还使用
>
> 这种方式,则可能会带来较大的负面影响。*
>
> 这样的体验,最近自己就有这一回。
>
> 最近一直在设计一个处理语意部分的evaluator,期间也遇到了不少问题。初始
>
> 给出的设计在后续的实现环节中发现有一些局限,但是在实现的过程中因为过于关
>
> 注进度,也在一定程度上受到持续推进的顺畅感的诱惑,自己并没有停顿下来审视
>
> 原先的设计,而是稍作思考,给出一个快速的fix,能够解决当前的需要之后,就
>
> 继续进行到后续的开发中。虽然在编码的过程中,已经感觉到有些底层数据结构设计的
>
> 实在谈不上舒服,为了解决设计问题,引入coding trick的场景也不只一处,但
>
> 是身陷其中,并没有想过站起来,从更高的角度进行思考。及至代码基本编写完毕
>
> ,开始测试,暴露出一些bug,需要进行修改的时候,才更充分地体会到现有的设计
>
> 的局限性以及这种局限性给维护和扩展带来的开销。这样束手束脚地调试了差不多
>
> 一周的时间,基本功能倒是调通了,但是有些不爽的是,这种调通的感觉完全是建立
>
> 在调试经验之上的,刨开调试的经验和fix的一些bug,从流程上和框架上来看,自己
>
> 对现有的这个版本实现的品质并没有太大的信心,简单来说,让自己闭上眼想一想,
>
> 现在的这个设计,这个实现,在品质上是不是达到了自己的要求,是不是在自己的控制
>
> 范围内,还是一件说不太清楚的事情。对于一个工业级的软件产品来说,这种控制感实
>
> 在是太虚弱了。考虑了一天,跟老大也沟通了一下,决定对evaluator进行重构。从底
>
> 层的数据结构的定义,到基本的流程框架,乃至具体的实现,几乎全部要作一番调整。
>
> 短期来看,这种调整会给进度带来一定的影响,但是在项目的初期阶段,对于根基性的
>
> 东西,还是值得花费较多的资源作精作细,这样后续的开发才可能有一个良好的基础。
>
> *P.S. 这段时间一个比较深的体会就是,当你感觉需要实现的某个模块过于复杂,条理
>
> 不是非常清晰,或是需要引入特殊的coding技巧来解决一个问题的时候,往往意味着更高
>
> 层次上的设计和架构潜伏着问题,所以这种时候,要控制住埋头实现复杂逻辑,引入trick
>
> 快速解决问题的冲动,缓冲一下,站起来,审视一下,是不是可以从更高的层次来简化问
>
> 题,给出更好的设计,消除引入特殊trick的必要性。*
我一直以来主要工作是用C做的,感觉就是,设计非常的套路化,就一个原则——封装。
将系统大致分成几个模块,定义一下接口,就拉倒了。
没有多态,没有继承,没有设计模式,没有Abstract Class,没有Interface,没有Exception……
画出来的设计图就是几个方框框,A调用B在调用C……
只用两种数据结构:数组和hash,甚至都不准用链表;公然鼓吹拷贝代码是最安全高效的开发方法……
当然C也可以模拟出这些来,但用起来总是不那么自然,而且会遇到同事的抵触。
On 12月5日, 下午7时43分, pongba <pon...@gmail.com> wrote:
> 2008/12/5 Linker <linker.m....@gmail.com>
>
On 12月5日, 下午8时33分, "wanng fenng" <wanng.fe...@gmail.com> wrote:
> 2008/12/5 樊帆 <fanfan19830...@gmail.com>
>
> > 其实倒也不必担心"思考"的问题。
> > 毕竟要站在巨人的肩膀上做事,当然对任何事情存疑是值得推崇的,不过也要注意"量",不过量即可,为了追究根源,会浪费很多精力和时间在次要的问题上。
>
> 我更担心的是创新问题。
>
> 最近一直在看量子力学,狄拉克将近80年前出的量子力学圣经中,漂亮的数学架构实在是令人叹为观止,如果他出生在我们这个时代,有google可以找到别的数学 家的方案,估计现在还在象我一样,忙着推导别人的理论架构吧,狄拉克方程能否问世实在是问题。现在的知识累积实在太多了,一个人很难穷尽一个分支的所有,什么时 候该收集资料,什么时候自起炉灶很难判断的说。
一点没错。我是越来越发现知识本身对思维的阻塞。想问题的时候,如果脑子里有一个与问题场景有某些相似性的既有方案,就会抑制不住地思维被该方案占满,很难实现fresh的思考。可以说是既有知识block了思维。我很想弄明白如何能够避免这个办法,为此也在阅读思维/认知科学方面的书,有一些heuristics能够有一定的作用,但是每每还是发现会思维落入盲点 :D
但另一方面,没有知识又真的很难思考。很多时候方案难以完全逆向导出,而是通过联想发现某个既有知识能够被用来解决手头问题的。
我想最终的方案肯定是critical的接受知识,critical的思考。具体的思维方法还在不断反思中..
P.S. 这段时间一个比较深的体会就是,当你感觉需要实现的某个模块过于复杂,条理
不是非常清晰,或是需要引入特殊的coding技巧来解决一个问题的时候,往往意味着更高
层次上的设计和架构潜伏着问题,所以这种时候,要控制住埋头实现复杂逻辑,引入trick
快速解决问题的冲动,缓冲一下,站起来,审视一下,是不是可以从更高的层次来简化问
题,给出更好的设计,消除引入特殊trick的必要性。
--
刘未鹏(pongba)
Blog|C++的罗浮宫
http://blog.csdn.net/pongba
TopLanguage
http://groups.google.com/group/pongba
思想的回潮,是时尚界几年一次注定的轮回,还是因为时移世易,旧的方法有了存在的理由?又或者多年的发展之后,当年的天方夜谭,到现在终于有了实用的价
值?
飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
简言之,就是高速时后掠角增大.低速时后掠角减小.
在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
苏联人的设计令人崩溃的简单.
内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
我讲这个故事,落实到架构设计,我想说明的是,一个优秀的架构师的本事在于简化模型.只有模型简化了,才会有一个好的实现.如果在架构阶段模型就复杂的
不得了,那基本上不大指望后面的design和coding能做好.
至于Problem Solving,我觉得这是一个典型的80-20法则的应用....美国人的设计好不好?应该说是好的.但苏联人的设计用20%的
代价解决了80%的问题.
On 12月5日, 下午5时53分, pongba <pon...@gmail.com> wrote:
> 2008/12/5 Kenny Yuan <yuankain...@gmail.com>
>
> > *
> > 话说联合利华新换了一批自动香皂包装机以后,经常出现香皂盒子是空的没有香皂的情况,而在装配线一头用人工检查因为效率问题不太可能而且不保险。这不,一个由自 动化,机械,机电一体化等专业的博士组成的Solution队伍来解决这个问题,没多久他们在装配线的头上开发了全自动的X光透射检查线,透射检查所有的装配线 尽头等待装箱的香皂盒,如果有空的就用机械臂取走。
>
> > 不巧,中国一乡镇企业生产香皂也遇到类似问题,老板吩咐线上小工务必想出对策决之,小工拿了一个电风扇放在装配线的头上,对着最后的成品吹之,空盒子被吹走,问 题解决之.
> > *
>
> 这个我也听过,印象很深刻,这次你贴出来之后我又想,从机器学习的角度来看,这个小工的 feature selection
> 做得非常棒,因为这本质上是一个分类问题,只要摸到那个对于区分最关键的 feature 就事半功倍了,而小工 select 出来的这个 "重量"
> 就是一个最佳 feature 。
这就是重构的一个意义,那就是不能欠下技术债,要不停的使用重构来使设计和实现能很好的解决当前的问题,欠债越多越久,以后还起来就越困难,成本越高。bob大叔在agile社区的发怒贴主要也是说的这个问题。
2008/12/6 Rui <cao...@gmail.com>:
--
Any complex technology which doesn't come with documentation must be the best
available.
飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
简言之,就是高速时后掠角增大.低速时后掠角减小.
在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
苏联人的设计令人崩溃的简单.
内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
美军的这个设计师就想.噢.他要的是一自动可变后掠翼的飞机...
于是,错误就开始了.
从架构师的专业角度讲,这个设计师犯了什么错误呢?
架构师所接触的第一份材料,就是客户的需求,而在架构师的工作准则中,有一点就是需求与实现分离.时刻要防止把实现的因素带到需求里来.
这个案例符合典型错误,因为飞机员的真实要求,实际上是高空高速和缠斗时的高机动性.飞行员在描述时,自己设想了一些实现方式(自动变后掠翼),这一点
被设计师误解后带入到了设计和制造中.
这在软件中更常见,尤其是一些对于软件略有了解的客户,在描述需求时,可能会告诉你,嗯.我想用一个TAB页,然后上面有几个按钮,某一个按钮按下去后
会XXXYYY.之类的.
如果架构师没有良好的过滤的话,这些false assumption就会错误的引入到设计中来,可能导致用户真实的需求被掩盖起来了.
这个时候出问题架构师真的可能很委屈,不是你说要XXXX的么.现在又怪我...客户可能就怒了...是我设计还是你设计...于是架构师气
绝....
On 12月5日, 下午11时14分, pongba <pon...@gmail.com> wrote:
> 2008/12/5 Rui <cao...@gmail.com>
>
> > 飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
> > 那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
> > 简言之,就是高速时后掠角增大.低速时后掠角减小.
>
> > 在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
> > 美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
> > 系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
>
> > 苏联人的设计令人崩溃的简单.
> > 内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
> > 这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
>
> 我觉得这个例子很赞。我对它的理解是,美国飞行员在计划一开始就犯了false
> assumption的错误,先入为主的假定了一定要用自动的,也许是因为他们太"高级工程师"了。Anyway,如果一开始的时候能够做横向的思考,众人头脑 风暴,应该很容易侦测出犯下的false
不但出现盒子是空的情况,还会出现两块香皂挤在一个盒子里边的情况(两块香皂都挤扁了);同时,流水线上拥挤了很多的盒子,即两个(或以上)盒子可能会齐头并进到达装配线的出口。
我所参与过的例子,都过于简单或者说粗糙。而市面上大多数的东西都是从OO的角度谈问题的解决方法的,同样对我没有帮助。我不是“必然不是纯OO的”,
我是被迫做纯PP的。
有的时候看各位这样的高手讨论,有一种修炼到了很深的地步,看穿一切迷雾,飞花摘叶皆可伤人的地步。所以有没有兵器对你们来说没有什么区别了。
可是我觉得对小兵来说,手中有没有兵器,区别还是挺大的。
另外,我觉得CS毕竟只是Engineering,和纯智力的公理体系去推演还是有很大不同吧。
就像Knuth说过(大意),他能证明一段程序是正确的,但他不能保证这段程序可以工作啊
The limitation of the wide spacing, however, was that it reduced the
benefits of variable geometry as much as it reduced their technical
difficulties.
美国人实际上首先搞出来了F111这种世界上第一个量产的Variable-sweep wing战机。他们做设计的时候,真的不曾想到过mig-23
的简化版本么?
未必。
也许他们权衡了之后,觉得F111这种方案才是最适合美国人的——他们有钱,有技术,可以把Variable Geometry Swing的优点发挥
到最高,而不需要用一个简化版的方法赶时间。
(当然我也是猜的,也许真的就是他们一时头脑不清)
也许设计和生活中相当多的事情一样,就是一个在很多因素之间trade-off的过程,只有better后worse,没有perfect的解决方
案。
进度、人力、历史因素、执行者的能力、个性、市场、老板的意见、心情……设计从来不光是一个纯technical的问题。
On 12月6日, 上午12时00分, 一首诗 <newpt...@gmail.com> wrote:
> 我想,真正的工程设计,特别是像飞机研究这样耗资巨大的工程,其决策过程,未必会这么简单的。草草看了一点这个故事的资料,看到一句话:
>
> The limitation of the wide spacing, however, was that it reduced the
> benefits of variable geometry as much as it reduced their technical
> difficulties.
>
> 美国人实际上首先搞出来了F111这种世界上第一个量产的Variable-sweep wing战机。他们做设计的时候,真的不曾想到过mig-23
> 的简化版本么?
>
> 未必。
>
> 也许他们权衡了之后,觉得F111这种方案才是最适合美国人的----他们有钱,有技术,可以把Variable Geometry Swing的优点发挥
> 到最高,而不需要用一个简化版的方法赶时间。
>
> (当然我也是猜的,也许真的就是他们一时头脑不清)
>
> 也许设计和生活中相当多的事情一样,就是一个在很多因素之间trade-off的过程,只有better后worse,没有perfect的解决方
> 案。
>
> 进度、人力、历史因素、执行者的能力、个性、市场、老板的意见、心情......设计从来不光是一个纯technical的问题。
只是我的经历来讲,面对的更多的是对日常生活的需求的一种实现。我这些年的工作经验,除hash之外,从未用过任何因算法。
"Business Logic"是最没有逻辑的东西,在面对它的时候,用PP的过程,我总有乏力的感觉。银弹是不存在的。但我手里的工具已经挖不出什
么东西了,我感觉换一件,也许会方便一些。
当然,坦白来说,我从来没有机会用OO的方法做过任何一个正式的软件,也许以后也不会有的。路是自己选的,也没人逼我,也许不应该这么抱怨的
但是美国人的方案风险也非常大,在过了一段时间之后,可能会发现可变后掠翼这个方案本生就不是最优解。我们不再需要可变了。
那么美国人的前期研究就都浪费了。
当然,如果财大气粗,能够承受损失的的话,浪费一些也不错。
2008/12/6 Rui <cao...@gmail.com>:
小工的故事给我的印象类似,工业上面用浮选(重力浮力,逻辑没啥大区别吧)来做分捡也早就不稀奇,没有电动机的时代就有了。所以我觉得这个故事多半也就
是个都市传说之类的东西。为了讲述think different的思路或者逻辑造出来的故事,虽然看着那么的有鼻子有眼睛。
我给你们讲一个完全真实的,发生在我自己身上的。我毕业第一二年,在一个电子厂做网管。技术部有计算机方面的事情也有机械方面的事情要做。技术部常作的
事情就是设计搭设生产线,我们是摩托罗拉的外包组装厂。生产线其实不是那种全自动的传送带式的流水线,就是工人站在一排,拧螺丝之类的。但是我们要自己
做部件测试仪(不买摩托罗拉自己的原因是他们的太贵,他们研发成本高,一个测试仪至少几十万,我们自己做出来,算上机械和里面嵌入式Pc,最多1万也就
搞定了),每个部件,比如翻盖手机前盖,拧螺丝前后,都要在测试仪上面检查屏幕是否能够输出全部的内容,有没有坏点等等;对于手机主体就是让机器手点一
遍所有的键盘,看看键盘是不是会发出正确的信号等等。
所有的手机其实都大同小异,所以每年我们的测试仪研发都很顺利。直到那一年,手机越来越小,部件之间的连接排线越来越窄,排线接果越来越小,接口的线数
却越来越多了。为了连接可靠,接口往往是带应力,容易连接不容易松开的那种。以前测试仪都用跟手机排线接口配对的接口,现在不行了,接上就很难弄下来,
测试效率下来了,生产效率就下来了(全部部件100%要测试的);而且更难办的是如果弄下来的时候稍不小心可能会损坏接口,这就造成废品率的狂增。
我们后来采用了极细的弹簧针制作的插头,弹簧针的粗细具体数值我忘了,反正比家里最细的针还细,因为很细,所以很软,我不小心损坏过一个后,折开它,用
显微镜看过,那么细的针居然真的是中空的,里面还有缠绕的弹簧。那种针一根就几十块钱。当时国内没有卖的,好像是从日本进口的。我是学机械的,我想象都
想象不出来这东西是怎么加工的。一般中空的弹簧针的加工工艺肯定是搞不定的这种针,这你放心。为了制作插头,我们自己做有机玻璃块,然后找了一家可以做
精密机加工的军工给我们打孔,那个床子又是十几万美金的东西,当然我们只是租用。然后,特意进口的超细钻头,跟针一样很细,很软,那家军工的工程师拿到
钻头的时候放在手里面看了一眼,居然给搞坏了钻头,幸亏预先就想到这种东西不可能结实,一次就买了5个。那钻头在床子转速没上6万的时候,都不能启用。
所以你知道这个插头有多金贵了吧。可是,你测试仪的台子不可能太精密,居然插头很精密,操作工不可能用显微镜操作。结果做几万个就要换一个插头,成本极
高,要知道组装是利润很低的。(我们那边废品率绝不能高过万分之三,万分之三就意味着白干,废品要赔,一个前盖要赔几十美元,三个就白干,你这下知道一
万个加工费才多少了吧)。
最后,我倒是想出来一个好办法,用柔性电路板来印触点,然后在下面放一个薄海绵电子。手机的排线接口往上一压,就可以接触上了,非常耐用,关键是便宜,
印一筐也就是一个弹簧针插头的价钱。
好,如果故事就这么完了,我也成了一个都市传说制造者。当然没有那么好。插座插头,排线接口,总是一个公一个母的。我设计出来的方法只能解决公的排线接
口,他的触点是外露的。母的,在我离开那家公司之前,仍旧是用弹簧针插头做的。当然制作工艺仍旧是不停的改进,越来越可靠,越来越便宜了。
我是想说,解决问题往往有两个办法,一个恒久远永流传,但是重剑无峰看着那么的白痴。就像美国的自动变翼,博士的复杂生产线筛选技术,弹簧针插头,他们
关注于问题的核心和实质;另一种更注重实际,也许解决不了终极问题,但是现在正好够用,比如带档位的变翼,电风扇吹盒子,我的柔性电路板。我们的传统教
育和生活常识让我们更喜欢后一种,觉得务实,省力快。然而,一快则一慢,省力则距离长。
假设只有无级才能实现1024度旋转,从而百分百逃离导弹的新需求出现了,那么仅为了变速才设计的带档位的变翼可能就要彻底抛弃。假设空盒子问题解决了
以后,新的质量问题是某些盒子颜色印错了,小工的方案似乎就多余了。博士的方案无非是质量传感器,再多个颜色传感器。柔性电路板亦然,如果公司接到的单
子都是公口的,那就算了,一辈子用柔性吧。但是难道来了母口的单子你不接么?再者,现在有些接口的公口前端是没有触点的,触点都在侧面,柔性不也不行了
么。
我说的这些假设也许不会发生。但是我担心的是一种思想,一直事事想走捷径的思想,被传统教育带给我们的。我从小喜欢机械,所以大学报了机械专业(另外的
原因是分不够计科系)。但是大学第一堂机械设计课后,我对机械的兴趣全部都消失了。因为老师告诉我们,我们国家的机械工业主要是模仿设计,就是人家有个
东西我们拆了,然后画图,然后加工出来。老师告诉我们轴的粗细都是靠经验公式,设计余量是1.5倍。齿轮都是模数齿轮,设计的时候按照公式。
你如果看过王小波小说里面描写的数独社会的机械工程师怎么用球墨铸铁做柴油机,你就会发现那不是夸张。我们的机械(这些年有好转,但是可能会更可悲,我
后面会写为什么)为什么看着笨重,形状单一,就是因为构件的尺寸都是经验公式,因为是经验,应力承载都是估算出来的,所以设计余量大,所以笨重,而且不
可靠。
你可能会说,这一暂时的,那时候我们只能这样。没错,但是你知道,浮沙之上不能筑高台。
我毕业前夕,忽如一夜春风来,大学里面开始流行有限元分析,pro-E等等等等。有了有限元多扯淡的形状你都可以设计了,不用经验,你可以用计算机算
了,对吧。跨越式发展达成了吧?错,大错特错。我们学校是石油部的部属院校,机械系的几个老师发明了一个非常牛屄的三牙轮钻头,就是用有限元等计算机手
段设计出来的。结果呢?第一,那个形状是一个完全非常规的曲面,学校和国内钻头产生的数控机床根本做不出来,没有那么多轴向的加工能力。第二,即时买个
牛屄的机床回来,培养出会使用的人也需要很多年。编程可能倒是简单的问题了,数控机床是需要你对机械加工涉及到的工艺和力学问题有丰富知识的,尤其是这
种非常不简单的机床。那么我们伟大的跨越式发展的设计产品怎么办了呢,很简单卖给外国的钻头厂商了。据说是百万美金,可是你知道百万美金,买真正好的钻
头的话,也买不了多少个的。能自己生产,打死也不能卖啊。
我毕业前参观过某重型机械厂,据说国内大型项目的机械构建都是他们生产的,必须大型水电的发电机轴等等。他们所有加工机床几乎都是进口的,西门子的超长
镗床,钻床,1200吨的捷克产的水压机(40年前进口的,直到05-06年,国内才有了更大的国产水压机,江南造船厂的那个水压机,应该比这个小或者
是一样大)。问道他们为什么这些都进口,原因很简单,很多东西有需求,但是国内自己造不出来。歼十的生产厂我们也参观过,他们做军工之外,还做波音的机
尾的组装,他们是很强的单位了,但是自己为什么不做大飞机。当年我问过他们,他们说做不了。现在国家又开始立项大飞机项目了,但是多少光阴已经过去
了。
想起来的事情太多了,逻辑有点混乱了。索性继续说下去,反正是在论坛不是blog。
最近一起程序有篇文章是采访余平六段和他们的计算机围棋Team的故事,他们这次得了第五。第一是用了最新的数学方法,他们最近也开始研究这个领域。这
个故事多么的似曾相识。当年陈志行的手谈称霸计算机围棋比赛的时候,大家是怎么说的,说中国人懂围棋,这个领域只有中国人才能突破。甚至现在前几名都不
是亚洲的,陈志行更是早就不行了。
似曾相识吧?过去UCDOS和WPS最火的时候,我们都说中文操作系统还是要靠中国公司。现在内,我用了10多年的中文Windows了,现在用中文的
Macosx,哪个是中国公司的?有个百度说自己最懂中文,那么我们看看中文分词的核心技术是中国人搞出来的么?哪个算法是?我看了这个领域的很多
Pager了,无非是把老外的成熟经验拿来修修补补,巨大开创性的有来自中国人的么?现在,有很多论断说美国经济不行了,中国要领导全球经济了之类;或
者说中国是这次大危机唯一的背风港,我也觉得似曾相识。说起来美国次贷之前,我就更早的担心中国经济了。人家美国次贷不靠谱,中国的贷款买房就靠谱么?
首付20万-40万,多少年轻人是一己之力拿出来的,多少人是一次性把自己父母一辈子的积蓄扔出去了?多少人考虑过20-30年的还款期,如果自己失业
个一年半载(经济要是不好的话,这可不稀奇),钱还不上,银行可能收房(政府有政策不让收一房,这我知道,但是经济真得危机的时候,这政策相当于多少亿
钱直接水飘,政府官员出台政策的时候算过么?这么大利益,会有人不杀人防火的收房么?)
又开始跑题了,回到软件。我做的所有东西,设计有所保留,不仔细想清楚的,使用维护中都带来无数的问题,尤其是难以修改,系统跑起来以后,任何修改都要
考虑不改变用户原来的习惯。
所以,我倾向于把问题想清楚些,至少逻辑要相同,少用一些特别花巧的技巧,尤其是跟某些会变的因素有关的,比如你假定用户不会超过200个,你就用个8
位来做Id,万一超了你怎么办?
所以,我倾向于把问题想清楚些,至少逻辑要相同,少用一些特别花巧的技巧,尤其是跟某些会变的因素有关的,比如你假定用户不会超过200个,你就用个8
位来做Id,万一超了你怎么办?
1. "我一直认为,重新设计一个有过经验的东西(包括重构和重生)和做一个未知的新
东西是有很大区别的。前者适用于文中的原则。"
Kenny 所说的重新设计一个有经验的东西和做一个未知的新东西是有很大区别的, 我比较好奇,
能不能谈得具体一些啊?
2008/12/5 Rui <cao...@gmail.com>:
> 嗯.既然提到这个空盒子的.
> 我也讲一个吧,也算Problem solving话题之一好喽.
>
> 飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
> 那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
> 简言之,就是高速时后掠角增大.低速时后掠角减小.
>
> 在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
> 美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
> 系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
>
> 苏联人的设计令人崩溃的简单.
> 内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
> 这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
>
> 我讲这个故事,落实到架构设计,我想说明的是,一个优秀的架构师的本事在于简化模型.只有模型简化了,才会有一个好的实现.如果在架构阶段模型就复杂的
> 不得了,那基本上不大指望后面的design和coding能做好.
>
> 至于Problem Solving,我觉得这是一个典型的80-20法则的应用....美国人的设计好不好?应该说是好的.但苏联人的设计用20%的
> 代价解决了80%的问题.
>
>
>
>
> On 12月5日, 下午5时53分, pongba <pon...@gmail.com> wrote:
>> 2008/12/5 Kenny Yuan <yuankain...@gmail.com>
>>
>> > *
>> > 话说联合利华新换了一批自动香皂包装机以后,经常出现香皂盒子是空的没有香皂的情况,而在装配线一头用人工检查因为效率问题不太可能而且不保险。这不,一个由自 动化,机械,机电一体化等专业的博士组成的Solution队伍来解决这个问题,没多久他们在装配线的头上开发了全自动的X光透射检查线,透射检查所有的装配线 尽头等待装箱的香皂盒,如果有空的就用机械臂取走。
>>
>> > 不巧,中国一乡镇企业生产香皂也遇到类似问题,老板吩咐线上小工务必想出对策决之,小工拿了一个电风扇放在装配线的头上,对着最后的成品吹之,空盒子被吹走,问 题解决之.
>> > *
>>
>> 这个我也听过,印象很深刻,这次你贴出来之后我又想,从机器学习的角度来看,这个小工的 feature selection
>> 做得非常棒,因为这本质上是一个分类问题,只要摸到那个对于区分最关键的 feature 就事半功倍了,而小工 select 出来的这个 "重量"
>> 就是一个最佳 feature 。
>>
2008/12/5 一首诗 <newp...@gmail.com>:
我给你们讲一个完全真实的,发生在我自己身上的。我毕业第一二年,在一个电子厂做网管。技术部有计算机方面的事情也有机械方面的事情要做。技术部常作的
事情就是设计搭设生产线,我们是摩托罗拉的外包组装厂。生产线其实不是那种全自动的传送带式的流水线,就是工人站在一排,拧螺丝之类的。但是我们要自己
做部件测试仪(不买摩托罗拉自己的原因是他们的太贵,他们研发成本高,一个测
其实苏联人的方案,拿到软件行业来说,也就一个quick and dirty的手段而已,而这正是这个主题所批判的……
2008/12/6 pongba <pon...@gmail.com>:
嗯.既然提到这个空盒子的.
我也讲一个吧,也算Problem solving话题之一好喽.
飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
简言之,就是高速时后掠角增大.低速时后掠角减小.
在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
苏联人的设计令人崩溃的简单.
内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
On 12月6日, 下午8时59分, "莫华枫" <longshank...@gmail.com> wrote:
> 2008/12/5 Rui <cao...@gmail.com>
>
> > 嗯.既然提到这个空盒子的.
> > 我也讲一个吧,也算Problem solving话题之一好喽.
>
> > 飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
> > 那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
> > 简言之,就是高速时后掠角增大.低速时后掠角减小.
>
> > 在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
> > 美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
> > 系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
>
> > 苏联人的设计令人崩溃的简单.
> > 内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
> > 这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
>
> 这类故事还有很多。我这里还有一个更出名的:
> 在早期太空竞赛的时候,美国人和苏联人都需要能够在太空失重环境下使用的笔。美国人花了几百万美金,终于开发出可以在零重力底下使用的圆珠笔。苏联人呢?他们用 铅笔。:D
> 我要说的是,尽管这个故事基本上是真的。但是,如果想从中推断出美国人如何把事情高复杂,苏联人如何把事情高简单,以至于说明设计的思路好与坏,那就错了。
> 如果从另一面看一下这个故事,事情或许有另一种解释。为什么美国人没有用铅笔?美国人天生喜欢把问题想复杂?他们不知道铅笔可以在失重情况下使用?这有些太夸张 了。我们再看一下,国际空间站上用的是什么笔?现在,根本不可能在空间飞行其中看到铅笔。包括俄国人本身的飞行器。因为那是常危险的东西。铅笔需要削的,铅笔屑 是导电的,在失重情况下会飞得到处都是,而且那儿都能进,对电器设备是极大的威胁。人吸入铅笔屑,也不是见好事。即使不削,铅笔也会在使用的过程中产生碎屑。当 时苏联人使用铅笔,并不是铅笔好用,而是迫不得已,或者权宜之计。为了赶紧度。从长远来看,美国人的路线才是正道。事实上,这种权宜之计在苏联航天史上比比皆是 。第一位太空行走的列昂诺夫就差点因为这些权宜之计而永远留在太空。
> 再来看看MiG-23。MiG-23的分级变后掠翼的确简单很多。但是,它是否能够达到无极变后掠翼的效果呢?差得很远。请注意,这和肥皂盒案例有根本性的差异 。小工的方法达到了那些复杂方案相同的效果。但MiG-23不同,MiG-23差不多可以算MiG最失败的作品。尽管宣传上拥有很多光环,但是其实际战果和服役 记录,无论在两伊战争还是中东战争中,都是最差的,甚至还不如老旧的MiG-21。很显然,在天上,战斗机驾驶员已经有足够多的操心事,如果还要他们看着速度表 ,心算着机翼的档位,不断地把手从油门杆上移开,操作机翼,那么这还能得到什么好的效果?事实上,MiG-23差不多是一架固定翼飞机。在实际飞行中,特别是在 空战中很少变换机翼。却背负着变后掠翼的重量。更糟糕的是,这种走捷径的方法迷惑了苏联(领导)人,以至至今也没有真正意义上的变后掠翼战斗机。
> 反观美国人,傻兮兮地硬啃自动化的无极变后掠翼,结果F-111A流产。但钱没有白扔,从F-111A的废墟上重生的F-111B成为了最成功的远程攻击战斗机 。而在此基础上发展而来的F-14,则是一代名猫,甚至在演习中打败了f-15。粉丝遍及天下。去年方才光荣退役。
> 我抬这些扛的意思是说,这些故事有的能够说明问题,但更多的并未表达出深层的意义,以至人们错误地理解。的确,简单是工程中最重要的原则。但是,简单不是绝对的 。在不同的时候,有着完全不同的效果。事物都有两面,简单也是一样,在拥有很好的作用的同时,也会带来某些副作用。我们只能辩证地分析问题,作设计。有时,简单 同时却又是复杂的。举个例子,有一种喷气发动机,叫超音速冲压发动机。结构非常简单,就是一个一头大一头小的通道。简单吧,但是其中的气流是极端复杂的,少有差 池,火都点不着。简单当中也蕴含着复杂的东西。比如python。语言是够简单的,但是设计简单的语言,可能比复杂的语言更困难。
> 所以说,简单不是绝对的。简单必须是恰当的简单。当我们制定一个简单的方案的时候,最好从反面思考一下,这是否是一个有效的简单。
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/
我抬这些扛的意思是说,这些故事有的能够说明问题,但更多的并未表达出深层的意义,以至人们错误地理解。
这类故事还有很多。我这里还有一个更出名的:
在早期太空竞赛的时候,美国人和苏联人都需要能够在太空失重环境下使用的笔。美国人花了几百万美金,终于开发出可以在零重力底下使用的圆珠笔。苏联人呢?他们用铅笔。:D
如果从另一面看一下这个故事,事情或许有另一种解释。为什么美国人没有用铅笔?美国人天生喜欢把问题想复杂?他们不知道铅笔可以在失重情况下使用?这有些太夸张了。我们再看一下,国际空间站上用的是什么笔?现在,根本不可能在空间飞行其中看到铅笔。包括俄国人本身的飞行器。因为那是常危险的东西。铅笔需要削的,铅笔屑是导电的,在失重情况下会飞得到处都是,而且那儿都能进,对电器设备是极大的威胁。人吸入铅笔屑,也不是见好事。即使不削,铅笔也会在使用的过程中产生碎屑。当时苏联人使用铅笔,并不是铅笔好用,而是迫不得已,或者权宜之计。为了赶紧度。从长远来看,美国人的路线才是正道。事实上,这种权宜之计在苏联航天史上比比皆是。第一位太空行走的列昂诺夫就差点因为这些权宜之计而永远留在太空。
再来看看MiG-23。MiG-23的分级变后掠翼的确简单很多。但是,它是否能够达到无极变后掠翼的效果呢?差得很远。请注意,这和肥皂盒案例有根本性的差异。小工的方法达到了那些复杂方案相同的效果。但MiG-23不同,MiG-23差不多可以算MiG最失败的作品。尽管宣传上拥有很多光环,但是其实际战果和服役记录,无论在两伊战争还是中东战争中,都是最差的,甚至还不如老旧的MiG-21。很显然,在天上,战斗机驾驶员已经有足够多的操心事,如果还要他们看着速度表,心算着机翼的档位,不断地把手从油门杆上移开,操作机翼,那么这还能得到什么好的效果?事实上,MiG-23差不多是一架固定翼飞机。在实际飞行中,特别是在空战中很少变换机翼。却背负着变后掠翼的重量。更糟糕的是,这种走捷径的方法迷惑了苏联(领导)人,以至至今也没有真正意义上的变后掠翼战斗机。
反观美国人,傻兮兮地硬啃自动化的无极变后掠翼,结果F-111A流产。但钱没有白扔,从F-111A的废墟上重生的F-111B成为了最成功的远程攻击战斗机。而在此基础上发展而来的F-14,则是一代名猫,甚至在演习中打败了f-15。粉丝遍及天下。去年方才光荣退役。
On 12月5日, 下午6时09分, pongba <pon...@gmail.com> wrote:
> 2008/12/5 Du Lei <dule...@gmail.com>
>
> > 越是学历高,考虑问题的时候越容易划地自限。所谓拿这个锤子看见谁都像个钉子。
>
> 一点没错。我是越来越发现知识本身对思维的阻塞。想问题的时候,如果脑子里有一个与问题场景有某些相似性的既有方案,就会抑制不住地思维被该方案占满,很难实现-fresh的思考。可以说是既有知识block了思维。我很想弄明白如何能够避免这个办法,为此也在阅读思维/认知科学方面的书,有一些heuristics能-够有一定的作用,但是每每还是发现会思维落入盲点
> :D
做的复杂的过程本身就是积累,只有在不浮躁的环境下才可以做
在目前社会这个氛围中,推崇简单也许是件好事情,也许不是
On 12月6日, 下午8时59分, "莫华枫" <longshank...@gmail.com> wrote:
> 2008/12/5 Rui <cao...@gmail.com>
>
> > 嗯.既然提到这个空盒子的.
> > 我也讲一个吧,也算Problem solving话题之一好喽.
>
> > 飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
> > 那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
> > 简言之,就是高速时后掠角增大.低速时后掠角减小.
>
> > 在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
> > 美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
> > 系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
>
> > 苏联人的设计令人崩溃的简单.
> > 内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
> > 这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
>
> 这类故事还有很多。我这里还有一个更出名的:
> 在早期太空竞赛的时候,美国人和苏联人都需要能够在太空失重环境下使用的笔。美国人花了几百万美金,终于开发出可以在零重力底下使用的圆珠笔。苏联人呢?他们用-铅笔。:D
> 我要说的是,尽管这个故事基本上是真的。但是,如果想从中推断出美国人如何把事情高复杂,苏联人如何把事情高简单,以至于说明设计的思路好与坏,那就错了。
> 如果从另一面看一下这个故事,事情或许有另一种解释。为什么美国人没有用铅笔?美国人天生喜欢把问题想复杂?他们不知道铅笔可以在失重情况下使用?这有些太夸张-了。我们再看一下,国际空间站上用的是什么笔?现在,根本不可能在空间飞行其中看到铅笔。包括俄国人本身的飞行器。因为那是常危险的东西。铅笔需要削的,铅笔屑-是导电的,在失重情况下会飞得到处都是,而且那儿都能进,对电器设备是极大的威胁。人吸入铅笔屑,也不是见好事。即使不削,铅笔也会在使用的过程中产生碎屑。当-时苏联人使用铅笔,并不是铅笔好用,而是迫不得已,或者权宜之计。为了赶紧度。从长远来看,美国人的路线才是正道。事实上,这种权宜之计在苏联航天史上比比皆是-。第一位太空行走的列昂诺夫就差点因为这些权宜之计而永远留在太空。
> 再来看看MiG-23。MiG-23的分级变后掠翼的确简单很多。但是,它是否能够达到无极变后掠翼的效果呢?差得很远。请注意,这和肥皂盒案例有根本性的差异-。小工的方法达到了那些复杂方案相同的效果。但MiG-23不同,MiG-23差不多可以算MiG最失败的作品。尽管宣传上拥有很多光环,但是其实际战果和服役-记录,无论在两伊战争还是中东战争中,都是最差的,甚至还不如老旧的MiG-21。很显然,在天上,战斗机驾驶员已经有足够多的操心事,如果还要他们看着速度表-,心算着机翼的档位,不断地把手从油门杆上移开,操作机翼,那么这还能得到什么好的效果?事实上,MiG-23差不多是一架固定翼飞机。在实际飞行中,特别是在-空战中很少变换机翼。却背负着变后掠翼的重量。更糟糕的是,这种走捷径的方法迷惑了苏联(领导)人,以至至今也没有真正意义上的变后掠翼战斗机。
> 反观美国人,傻兮兮地硬啃自动化的无极变后掠翼,结果F-111A流产。但钱没有白扔,从F-111A的废墟上重生的F-111B成为了最成功的远程攻击战斗机-。而在此基础上发展而来的F-14,则是一代名猫,甚至在演习中打败了f-15。粉丝遍及天下。去年方才光荣退役。
> 我抬这些扛的意思是说,这些故事有的能够说明问题,但更多的并未表达出深层的意义,以至人们错误地理解。的确,简单是工程中最重要的原则。但是,简单不是绝对的-。在不同的时候,有着完全不同的效果。事物都有两面,简单也是一样,在拥有很好的作用的同时,也会带来某些副作用。我们只能辩证地分析问题,作设计。有时,简单-同时却又是复杂的。举个例子,有一种喷气发动机,叫超音速冲压发动机。结构非常简单,就是一个一头大一头小的通道。简单吧,但是其中的气流是极端复杂的,少有差-池,火都点不着。简单当中也蕴含着复杂的东西。比如python。语言是够简单的,但是设计简单的语言,可能比复杂的语言更困难。
> 所以说,简单不是绝对的。简单必须是恰当的简单。当我们制定一个简单的方案的时候,最好从反面思考一下,这是否是一个有效的简单。
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/
嗯.理解.
我举这个例子,主要是说明,对于架构师来说,需要有效的进行模型的简化,否则对下一层的设计和实现会有巨大的压力和不好的影响.
但当然大家不能走到反面去...如果简化到影响了可扩展性和功能的有效性,那当然就完蛋了.
老莫是个真正的军迷,所以对MiG-23的设计有更好的意见,我那个是半瓶醋,只是用来说明架构师的责任的.呵呵.
2008/12/6 莫华枫 <longsh...@gmail.com>如果从另一面看一下这个故事,事情或许有另一种解释。为什么美国人没有用铅笔?美国人天生喜欢把问题想复杂?他们不知道铅笔可以在失重情况下使用?这有些太夸张了。我们再看一下,国际空间站上用的是什么笔?现在,根本不可能在空间飞行其中看到铅笔。包括俄国人本身的飞行器。因为那是常危险的东西。铅笔需要削的,铅笔屑是导电的,在失重情况下会飞得到处都是,而且那儿都能进,对电器设备是极大的威胁。人吸入铅笔屑,也不是见好事。即使不削,铅笔也会在使用的过程中产生碎屑。当时苏联人使用铅笔,并不是铅笔好用,而是迫不得已,或者权宜之计。为了赶紧度。从长远来看,美国人的路线才是正道。事实上,这种权宜之计在苏联航天史上比比皆是。第一位太空行走的列昂诺夫就差点因为这些权宜之计而永远留在太空。
再来看看MiG-23。MiG-23的分级变后掠翼的确简单很多。但是,它是否能够达到无极变后掠翼的效果呢?差得很远。请注意,这和肥皂盒案例有根本性的差异。小工的方法达到了那些复杂方案相同的效果。但MiG-23不同,MiG-23差不多可以算MiG最失败的作品。尽管宣传上拥有很多光环,但是其实际战果和服役记录,无论在两伊战争还是中东战争中,都是最差的,甚至还不如老旧的MiG-21。很显然,在天上,战斗机驾驶员已经有足够多的操心事,如果还要他们看着速度表,心算着机翼的档位,不断地把手从油门杆上移开,操作机翼,那么这还能得到什么好的效果?事实上,MiG-23差不多是一架固定翼飞机。在实际飞行中,特别是在空战中很少变换机翼。却背负着变后掠翼的重量。更糟糕的是,这种走捷径的方法迷惑了苏联(领导)人,以至至今也没有真正意义上的变后掠翼战斗机。
反观美国人,傻兮兮地硬啃自动化的无极变后掠翼,结果F-111A流产。但钱没有白扔,从F-111A的废墟上重生的F-111B成为了最成功的远程攻击战斗机。而在此基础上发展而来的F-14,则是一代名猫,甚至在演习中打败了f-15。粉丝遍及天下。去年方才光荣退役。
经典经典!:D 我虽不是军迷,但是这段看得我心向往之:P
On 12月6日, 下午9时57分, "莫华枫" <longshank...@gmail.com> wrote:
> 有两个案例,是我亲身经历的,说明了有时简单和复杂是连体婴儿,都是对方的影子。
> 第一个案例我以前说过。我们一个查询网站,用asp.net
> 做的,全本的C#。倒霉的我,接收了。做网页是容易,贴贴控件,很快就好。这是简单。但是,那天当我在杭州湾边上的一家学校里实施的时候,用户要求一个maqu e跑得快些。结果,我不得不跑过半个校园,从同事那里取来笔记本,把500改成200,重新编译,然后拷贝到u盘,再拷贝到服务器上。里里外外半个多种头。
> 第二个案例,是前一个的延续。这个网站需要加功能,我就索性翻倒重来。用js+jquery做网页,asp.net作为后端,访问数据。所有的查询存放在xml 文件中。并且利用sql2005的for
> xml生成层次化的xml数据,用xquery和xslt将其转换成html片段。结果,实施的时候,用户题出了一些修改意见,包括版面的和查询的。我们都现场 改好,最多的一个也就用了不到半小时。当天我根本没有带笔记本,一个u盘什么都搞定。
> 案例一中,C#提供了一个构建网站的快速方法,但是在实际的应用中,却带来了更多的复杂性。而案例二中,我动用了不下五种技术手段,对于很多程序员(至少我身边 的那些)而言,足够复杂的了。但是,在面对用户变化的需求的时候,却使得问题更加简单。(我们不准用python,否则还要简单)。我那个混合了众多技术手段的 方案算是够复杂的,但是这些专用技术的组合却在总体上简化了问题。
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/
On 12月6日, 下午10时03分, "莫华枫" <longshank...@gmail.com> wrote:
> 2008/12/6 pongba <pon...@gmail.com>
>
>
>
> > 2008/12/6 莫华枫 <longshank...@gmail.com>
>
> >> 如果从另一面看一下这个故事,事情或许有另一种解释。为什么美国人没有用铅笔?美国人天生喜欢把问题想复杂?他们不知道铅笔可以在失重情况下使用?这有些太夸张 了。我们再看一下,国际空间站上用的是什么笔?现在,根本不可能在空间飞行其中看到铅笔。包括俄国人本身的飞行器。因为那是常危险的东西。铅笔需要削的,铅笔屑 是导电的,在失重情况下会飞得到处都是,而且那儿都能进,对电器设备是极大的威胁。人吸入铅笔屑,也不是见好事。即使不削,铅笔也会在使用的过程中产生碎屑。当 时苏联人使用铅笔,并不是铅笔好用,而是迫不得已,或者权宜之计。为了赶紧度。从长远来看,美国人的路线才是正道。事实上,这种权宜之计在苏联航天史上比比皆是 。第一位太空行走的列昂诺夫就差点因为这些权宜之计而永远留在太空。
>
> >> 再来看看MiG-23。MiG-23的分级变后掠翼的确简单很多。但是,它是否能够达到无极变后掠翼的效果呢?差得很远。请注意,这和肥皂盒案例有根本性的差异 。小工的方法达到了那些复杂方案相同的效果。但MiG-23不同,MiG-23差不多可以算MiG最失败的作品。尽管宣传上拥有很多光环,但是其实际战果和服役 记录,无论在两伊战争还是中东战争中,都是最差的,甚至还不如老旧的MiG-21。很显然,在天上,战斗机驾驶员已经有足够多的操心事,如果还要他们看着速度表 ,心算着机翼的档位,不断地把手从油门杆上移开,操作机翼,那么这还能得到什么好的效果?事实上,MiG-23差不多是一架固定翼飞机。在实际飞行中,特别是在 空战中很少变换机翼。却背负着变后掠翼的重量。更糟糕的是,这种走捷径的方法迷惑了苏联(领导)人,以至至今也没有真正意义上的变后掠翼战斗机。
>
> >> 反观美国人,傻兮兮地硬啃自动化的无极变后掠翼,结果F-111A流产。但钱没有白扔,从F-111A的废墟上重生的F-111B成为了最成功的远程攻击战斗机 。而在此基础上发展而来的F-14,则是一代名猫,甚至在演习中打败了f-15。粉丝遍及天下。去年方才光荣退役。
>
> > 经典经典!:D 我虽不是军迷,但是这段看得我心向往之:P
>
> 哦,真有这心思?我有很多这类杂志,要不要看阿?;-)
>
>
>
> > --
> > 刘未鹏(pongba)
> > Blog|C++的罗浮宫
> >http://blog.csdn.net/pongba
> > TopLanguage
> >http://groups.google.com/group/pongba
>
> --
> 反者道之动,弱者道之用
> m...@seaskysh.com
> longshank...@gmail.comhttp://blog.csdn.net/longshanks/
On 12月6日, 下午10时05分, "Jun Yang" <yangjun...@gmail.com> wrote:
> 想强调一下哈,我理解的 在这里讨论的*简单*,应该并不是指那种为了快速解决问题,寻找捷径的简单。
>
> 而是那种*大巧不工*的简单,是基于足够多的复杂思考之后给出的简化的,返璞归真的简单。
>
> 2008/12/6 valpa <valpass...@gmail.com>
>
>
>
>
>
> > 十分同意你的观点
>
> > 做的复杂的过程本身就是积累,只有在不浮躁的环境下才可以做
> > 在目前社会这个氛围中,推崇简单也许是件好事情,也许不是
>
> > On 12月6日, 下午8时59分, "莫华枫" <longshank...@gmail.com> wrote:
> > > 2008/12/5 Rui <cao...@gmail.com>
>
> > > > 嗯.既然提到这个空盒子的.
> > > > 我也讲一个吧,也算Problem solving话题之一好喽.
>
> > > > 飞机设计上,机翼的角度决定了气动性能,高空高速战斗机需要大后掠角,低空低速战斗机需要小后掠角..
> > > > 那么为了制造适应于高低空战斗,同时具有速度和机动性的飞机(这也意味着既可以高速,还能省油..),变后掠翼就是一个大家都能想到的方案了.
> > > > 简言之,就是高速时后掠角增大.低速时后掠角减小.
>
> > > > 在60年代,苏联和美国几乎同时开始了变后掠翼飞机的研制.
> > > > 美国的办法是搞了一个自动控制后掠角和气动控制面匹配系统,简言之就是一个根据飞机气动环境自动改变后掠角的系统,达到了全部飞机包线的最优化.但这个
> > > > 系统实在是太复杂了.正搞的焦头烂额的时候,美国人发现苏联的MiG-23已经实现了变后掠翼飞机了.
>
> > > > 苏联人的设计令人崩溃的简单.
> > > > 内MiG-23的后掠角只有三个角度,16度,45度,72度.然后由飞机员手动去调节.....
> > > > 这就好比电风扇一样,美国人设计的是一个无级变速的风扇,而苏联人设计的是一个带档位的风扇.
>
> > > 这类故事还有很多。我这里还有一个更出名的:
>
> > 在早期太空竞赛的时候,美国人和苏联人都需要能够在太空失重环境下使用的笔。美国人花了几百万美金,终于开发出可以在零重力底下使用的圆珠笔。苏联人呢?他们用 -铅笔。:D
> > > 我要说的是,尽管这个故事基本上是真的。但是,如果想从中推断出美国人如何把事情高复杂,苏联人如何把事情高简单,以至于说明设计的思路好与坏,那就错了。
>
> > 如果从另一面看一下这个故事,事情或许有另一种解释。为什么美国人没有用铅笔?美国人天生喜欢把问题想复杂?他们不知道铅笔可以在失重情况下使用?这有些太夸张 -了。我们再看一下,国际空间站上用的是什么笔?现在,根本不可能在空间飞行其中看到铅笔。包括俄国人本身的飞行器。因为那是常危险的东西。铅笔需要削的,铅笔 屑-是导电的,在失重情况下会飞得到处都是,而且那儿都能进,对电器设备是极大的威胁。人吸入铅笔屑,也不是见好事。即使不削,铅笔也会在使用的过程中产生碎屑 。当-时苏联人使用铅笔,并不是铅笔好用,而是迫不得已,或者权宜之计。为了赶紧度。从长远来看,美国人的路线才是正道。事实上,这种权宜之计在苏联航天史上比 比皆是-。第一位太空行走的列昂诺夫就差点因为这些权宜之计而永远留在太空。
>
> > 再来看看MiG-23。MiG-23的分级变后掠翼的确简单很多。但是,它是否能够达到无极变后掠翼的效果呢?差得很远。请注意,这和肥皂盒案例有根本性的差异 -。小工的方法达到了那些复杂方案相同的效果。但MiG-23不同,MiG-23差不多可以算MiG最失败的作品。尽管宣传上拥有很多光环,但是其实际战果和服 役-记录,无论在两伊战争还是中东战争中,都是最差的,甚至还不如老旧的MiG-21。很显然,在天上,战斗机驾驶员已经有足够多的操心事,如果还要他们看着速 度表-,心算着机翼的档位,不断地把手从油门杆上移开,操作机翼,那么这还能得到什么好的效果?事实上,MiG-23差不多是一架固定翼飞机。在实际飞行中,特 别是在-空战中很少变换机翼。却背负着变后掠翼的重量。更糟糕的是,这种走捷径的方法迷惑了苏联(领导)人,以至至今也没有真正意义上的变后掠翼战斗机。
>
> > 反观美国人,傻兮兮地硬啃自动化的无极变后掠翼,结果F-111A流产。但钱没有白扔,从F-111A的废墟上重生的F-111B成为了最成功的远程攻击战斗机 -。而在此基础上发展而来的F-14,则是一代名猫,甚至在演习中打败了f-15。粉丝遍及天下。去年方才光荣退役。
>
> > 我抬这些扛的意思是说,这些故事有的能够说明问题,但更多的并未表达出深层的意义,以至人们错误地理解。的确,简单是工程中最重要的原则。但是,简单不是绝对的 -。在不同的时候,有着完全不同的效果。事物都有两面,简单也是一样,在拥有很好的作用的同时,也会带来某些副作用。我们只能辩证地分析问题,作设计。有时,简 单-同时却又是复杂的。举个例子,有一种喷气发动机,叫超音速冲压发动机。结构非常简单,就是一个一头大一头小的通道。简单吧,但是其中的气流是极端复杂的,少 有差-池,火都点不着。简单当中也蕴含着复杂的东西。比如python。语言是够简单的,但是设计简单的语言,可能比复杂的语言更困难。
> > > 所以说,简单不是绝对的。简单必须是恰当的简单。当我们制定一个简单的方案的时候,最好从反面思考一下,这是否是一个有效的简单。
>
> > > --
> > > 反者道之动,弱者道之用
> > > m...@seaskysh.com
> > > longshank...@gmail.comhttp://blog.csdn.net/longshanks/
>
> --
> yangjun...@gmail.comhttp://hi.baidu.com/yjpro
> yangjun...@gmail.comhttp://hi.baidu.com/yjpro
On 12月6日, 下午10时27分, "Jun Yang" <yangjun...@gmail.com> wrote:
> 有同感。另外个人还有一点想强调的就是,发现coding的时候有些地方需要引入一些trick来解决问题,也往往
>
> 暗示着设计中存在潜在的缺陷(设计一个特定的算法模块需要引入的技巧性trick除外),这个时候,最好是暂停
>
> 手上的coding工作,站在更高一层的角度来思考设计出现问题的可能,以及重构设计的必要性。
>
> 不过,我这样的想法有些理想化,对于从头设计一个系统,有足够的时间资源的情况下更适用一些。
>
> 对于Bug fix,小的代码模块的编写,可能就未必适合了。
>
> 不同类型 的项目,关注点有所不同,评估的标准也不一样。
>
> 兵熊熊一下,将熊熊一窝。套用一下,coding熊,熊一砣,设计熊,熊一摊。 ~
>
> 2008/12/6 yq chen <mephisto.760...@gmail.com>
>
> > 不错,超过150行以上的代码后来自己都不想去看了。出现这样的问题,主要是自己没有理清楚关系就下笔了。
>
> --
> yangjun...@gmail.comhttp://hi.baidu.com/yjpro