`
jimmy_c
  • 浏览: 14694 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

编程风格偶感

阅读更多
基础知识:
c++和c是一种完全不同的语言。c以小取胜,c++以多范性编程而著称。

c++的范型可以包括:
c一样的面向过程编程;
宏语言;
c with class;
oo;
template;
GP。

这中间,我认为宏是一种可以称作范型的东西,因为这方面的高手完全可以用它来创造出属于自己的子语言来。
应该把简单目的的template编程(泛型?此泛型非彼范型)和GP分开,他们的编程目标是截然不同的。

最早受MFC影响很深。感觉自己最初的进步始于MFC源码的阅读(VC4.0了)。所以当时写程序的风格也是类MFC的,我的定义就是OO + 宏。其实也很好,很强大。

中间做了两年java,这期间学习了GP,两种完全不同风格的编程模式冲击下,渐渐放弃了MFC的手法。

但是OO + GP的开发偶觉得很痛苦,所以虽然不断地尝试,但并没有持续很久。原因一个字:累!

OO最大的缺点我认为是侵入式的。用c写程序,lib也好,dll也好,一般只要一个简单不过的头文件就好了。而C++和Java呢,拔出萝卜带着泥,哩哩罗罗一堆类,通常缺了谁也不行。

OO的原始目的/优点是什么呢?封装呗!可这样还不如c的模块封装性,实在是难以令人苟同。
带来的恶果是很明显的。OO的工程,尤其是C++,我们精心维护的工程,很容易被一两个水平不够的孩子改的面目全非。编译不过了,这儿加个头文件;程序运行遇到了框架的束缚,改就一个字!java的情况也好不到哪儿去。所以broken window的理论被发明了,说白就是:谨慎谨慎再谨慎!珍惜珍惜再珍惜!
解决这种状况的方法大概只有一种,就是给OO的模块加上一个面向过程的壳子。我们可以美其名曰:Facade。MS发明的COM+接口在这里也能凑活用上。不过这样的壳子对于程序本身,总像是身外之物。因为他们和真正的Facade和COM+的初衷是不一致的。孟岩老大给这种状况起了一个好听的名字,叫做:用C做接口,用C++编程!

GP是一种很奇特的技术。我不是科班出身,所有的技术大多从编码中得来。虽然好读书,但是有点儿不求甚解,经常会搞错个名词什么的,思想上也很难达到深刻。不过当我第一次看到《深入C++模型》、《设计模式》、《重构》、《敏捷开发》时,里面的东西都有似曾相识的感觉:原来如此!这不就是我一直研究的XXX问题么?
然而GP的概念最初我是从书本中得来的。两本书给了我很大的启发作用:《C++设计新思维》和《产生式编程——方法、工具和应用》。它给我的感觉是震撼性的,焕然一新的:原来C++还可以这样想,这样用!然后基于它作了很多实践。但是真实的感受却是:理想和实际相差得很远。
GP的技术难度我就不说了。多数人认为是GP的技术门槛太高,限制了它的使用。我不这样认为。如果一个技术真的能够带来很高的劳动生产率,那么即使它的难度很大,也不会真正阻止它的流行。而对于有创造力和求知欲的程序员来说,“技术难度”一词很难说是褒义还是贬义,也许更可能因此成为大家追捧的对象。
所以,GP之所以未流行起来,应该只能是基于以下两种可能:
1. 目前的市场没有符合这种技术的强有力的需求(不妨碍这种技术今后在某一时刻会忽然流行起来);
2. (由于某种限制,或者自身缺陷)这种技术并未带来真正的、实际的、比其它技术更高的劳动生产率水平。
说到这儿我要暂停一下。我所说GP技术未流行起来,并不是否定或者无视诸如STL,boost之类的模板库的广泛应用。我所指的,是深入C++项目的GP思想的应用,至少目前是不存在的。
那么,原因何在呢?

<未完待续>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics