红联Linux门户
Linux帮助

编程该学什么

发布时间:2008-02-28 09:45:57来源:红联作者:gistjoe
  编程真正应该学的,是人家的设计思想----怎样抽象、简化问题,怎样用设计表达思想,怎样提高效率等等。
  
  就比如MFC用宏的问题。其实应该这么看:

  单纯从技术方面看,MFC做的很巧妙,一方面绕过了“编译器不支持”问题,另一方面提高了效率----你晃一晃鼠标就可能有几十上百个消息传递,同时还可能有几百上千个可以接受消息的MFC对象存在:这种情况下,为支持虚拟函数不得不支付的空间、时间代价就很可怕----或者说,消息传递的代价过于昂贵。因此微软在宏外,还不得不用了汇编代码去优化它。

  所以,MFC用宏,一方面可以解决效率问题;另一方面用户可以不用写太多代码,很傻瓜的就可以“继承”它的处理模式。
  
  但是,为什么那么多人,甚至包括很多很有水平的专家都对它这个实现不屑一顾?
  
  因为它没有抽象。只是一种赤裸裸的“技术拼凑”----微软的东西,太多都是这样没有抽象拔高的“拼凑”产物,比如VB。甚至是windows系统本身。
  
  没有好的抽象,用户学起来就很麻烦。初级用户好说,依样画葫芦。但中高级用户想做个灵活点的东西或对MFC做个扩充,就必须要理解中间的每一个步骤----这干脆就是要微软的系统原始设计方案嘛。谁能搞得到?
  
  也因此,所以才有侯捷《深入浅出MFC》的火爆。
  
  同时,没有好的抽象,相关的实现代码也就只能实打实一行一行来,基本不可能重用。程序员也很苦恼啊。
  
  相反,看看unix/linux系统的“泛文件概念”和C++中“类”的概念。
  
  可以说,一个单词,就道尽了整个系统的设计理念。
  
  于是乎,对用户来说,unix/linux中,不再有声卡,不再有显卡,不再有网卡,不再有磁盘……一切全都是文件。学会了读写文件,几乎也就掌握了unix/linux系统编程的全部;学会了模拟文件,你的代码也就已经可以和操作系统无缝融合。
  
  这就是设计的境界。
  
  同样,C++的类本质是什么?一个和处理它的函数捆绑的结构体,以及一系列保障它能可靠运行的机制。要彻底搞明白颇不容易。
  
  但在高明的抽象下,只需一个“类”字就道尽了其中真谛。甚至从没学过的东西,都可以从与现实的“类”概念的对比中猜出来。查书,很多时候成了确认自己有否猜对。
  
  其实,真正高明的实现,哪个不是把问题清晰地抽象为很少几个简单概念(类)和它们间的交互(方法)?这并不仅仅是面向对象语言特有的东西。
文章评论

共有 2 条评论

  1. pspcxl 于 2009-03-22 13:47:43发表:

    哈哈

  2. sundongbo105 于 2009-03-05 09:56:26发表:

    不错,怎么不在多说点。呵呵!