WWW.LOUGH.COM.CN

加入收藏 | 设为首页 | 联系站长
首页 | Java | C&C++ | 数据库 | 经验交流
论坛首页 | 综合区 | 贴图区 | 狐朋狗友 | 学习区 | 站务区
博客首页 | IT技术 | WebServices | Hibernate | Java设计模式 | Struts | AJAX | 数据库
首页 | 中华古籍 | 网络原创 | 随记

C++学习之我见 zz

C++学习之我见 zz

原作:RedStart81@CSDN

-----------------------------------------------------------------------------
           声明:这篇文章是本人一段时间思考、认识和言论的自我总结
                 纯属个人观点、经历的描述,紧供参考
                 当然也欢迎大家[对本人]和[文中的观点]提出指点:)
-----------------------------------------------------------------------------


    有人认为后期的C++ 趋向学院派风格,走进了一味追求技术和难度的误区,
    逐渐脱离主流的Programmers.
    有人认为C++ 由于复杂度导致在现代软件工程中的地盘不断缩水。
    也有人认为,C++ 无任对特定领域应用还是研究来说,都足够的优秀。


一、面对Object-Pascal、Java、C#等语言,还需要C++ ?

  首先,就方法学来说,不可否认,OO方法学本身具有构造的系统随着工程的进行复杂
度膨胀速度惊人.而且,对于上点规模的工程,为了构建OO系统,在OOA、OOD阶段,设计
者需要极高的水准。而以OOP 为一典范亦作为OOP 代表的C++ 在语法语义的
设计上明显采用为了功能而不惜增加设计复杂度的策略。然而这一切的复杂,自
然带来了好处,包括系统的可扩展性、可重用性等。这里好象存在一层很微妙的
关系,上规模的系统为了可扩展性、可重用性等优点选择OO方法学,然而在OOA 、
OOD 阶段就需要极大的投入(也许在00方法学中,A 和D 在软件工程中的地位体
现的更明显吧~ )。

  这个世界关于语言之间的讨论可能时刻进行着,个人一直认为:
  1.首先每种语言有自己的适用领域,就应用而言,没有必要将语言勉强的拿
    到一起比较。构建企业信息系统,自然会选择Java、dotNET或其它的方案
    (事实上,这种系统一般应该多种语言协同开发,以获得部件性能最佳)。
    可能多种语言同适合某个项目,那么具体就自己裁决了。譬如做一个信息管
    理系统,选择C++ 环境的绝对很少,PB或Delphi、VB都是不错的选择。在初
    学习阶段" 因爱而选(更多的具有偶然性或者与身处环境有关)" 、对于开
    发者基本是" 因用而选".在成熟后," 因用而学" 我感觉是根本也是最实际
    的指导原则。

  2.关于语言复杂度的问题:语言是工具,是不需要也不能太复杂的。我一直
    支持语言应该朝专业化(这里指针对义务和特定应用场合)和简单化方向发
    展。这才是语言的本质之所在。业务是软件实施的根本。对于软件开发着来
    说很多情况下,业务是最难搞定的,或者说,用软件来真实细致安全的模拟
    业务是很困难的。前几天,学籍管理科的老师还跟我说,他们的一个学籍管
    理软件让两个研究生不断的完善,三年才算[ 完全符合他的业务要求].如果
    你只是耳闻某某语言何等的复杂、难学而学之,那么可能你错了~ 就个人而
    言,为了技术而技术是不可取的:)

    3.然而这个世界是现实的,不如你想象的那样。并不是所有领域都有简单、
    强大、贴近业务的语言。在这个层次上说,对于献身企业级信息应用系统开
    发者,Java、C#、Object-Pascal 等的确是福音~~然而在系统软件和其它对
    性能、控制程度要求较高的如工控系统、高性能计算,实时系统,军用软件
    等领域可就缺不了C++ (C )(不过这些领域明显的专业知识占绝对部分的
    重量)。可见,紧从语言上说,C++ (C )依然占据着一片天地。严格来讲,
    C 是作为C++ 的一竞争对手出现的(不管这些了:))。

二、C++是否真的走进了追求技术的误区

    自从,GP思想在C++ 上的第一个作品STL 正式纳入标准库,关于C++ 走进技
术误区的流言便没有停止过,Boost 、作为GP领军人物之一的Andrei Alexandrescu
提倡并实践着(Loki)的编译时编程、将设计模式思想引入库设计,使得流言快
被提上日程讨论了:)。

    然而,GP真的只是技术吗?我一直认为,就OO来说,本人曾经作过这样的思考:
--------------------------------------------------------------------------
    真正的对象应该至少能够具有:自主的适应环境(维护足够的"意识")
                            1.自发行为的意识更强
                            2.反应能力更强
                            3.对外有足够的独立性
    现在的OO,更像是建立在PO上的,不过是对象代替了函数。
    但事实上,无论对象能力多高,过程表现绝对少不了。

Agent :我想是表达和反应能力最强的.
COM :比Object-Based手法构造出的对象表达、反应、适应能力高很多.
    不过There is no magic.还不过是一般的技巧构造出来的,看透了什么都没
有了:)
GP :不能将它看作无谓的技术追求,[从我们谈论的这个节点看来,它的实质我认为[至
     少]是]:提高了构造的对象的适应能力(不是自发行为能力)的一种手段.
     Andrei Alexandrescu的《Generic Programming :类型的else-if-then机制》
     这篇文章可作为一精彩的证明.
-----------------------------------------------------------------------------

三、C++怎么学?

    首先声明:本人对之也只能说略之一二(C++ 太博大了:))
    孟岩先生曾经提过"C++需要自由的心" ,我要说"C++需要自由的心和手" ,
    我敢肯定我想的自由和孟岩先生的自由是不同的。因为我的自由就个人诠释
是:" 用自己的思路来自由的写验证性的usecase"

  就个人的学习心得而言 :

    1.在你学习C++ 的过程中,你首先需要扎实的实践一本C++ 基础教程,这个
教程不在深而在全。使你能够全览之。最好结合基本数据结构来练习。不要整天
Hello World~~Hello MM 的。

    2.再下来你需要《(More)Effective C++ 》,它使你可以对C++ 也多了份
思考,也了解到一些技巧和误区,不过,你需要同步实践,不然可能一时你并不
能真正掌握这些技巧、避开误区。

    3.提高,你需要:(下面的书可能已经讲烂了:))

  《Design Pattern》 :个人感觉,设计模式虽说是一种思维方式,具体实现上,只是
                        对OOP语言的发掘和巧妙组合而已.而且这里组合是主要的,
                        特性是有限的,这本书中有几个模式没用虚特性的?
    C++ Standard Document :在你用它来做专项研究的时候,就会体会到什么
                        才叫真正的全而深 (自然指在语法和语义的阐述上).
  《STL源码剖析》 :没有深厚的功底,想来个闭门造车独挑STL源码是不可能的.
                        不过,这本说也重在关键技术的讲解和引导罢了~~
                        这里关于GP和STL的名著不少,本人没看过。不做品评。
  《 Inside The C++ Object Model》:最具价值的一本书,没了它,C++永远是个迷,
                                    哪怕你浸淫之N载~~
  《Moden In C++ Design》 :这里的很多思路是你自己的思维很难接触到的~~:)
                            我不得不佩服Andrei Alexandrescu.

    市面上其它的C++ 书籍可牛车载,我感觉除了《The Design And Evolution
Of C++》是异品,值得一读。其它的不建议花太多的时间,哪怕是Bjarne Stroustrup、
Stanley B.Lippman 等的作品。自然,你有时间读更好,反正我现在有点后悔,
当初只顾多,不顾深读,反复读。经典的书不在本数多,在于每本读的遍数多。
一经验之谈,BBS 上经常有人,在介绍COM 技术书籍时,想也不想的指出,入门
级<<Inside The COM>>. 是这样的吗?我想,正如Dale Rogerson 所说,将这本
书完全看懂,你就是COM 专家了~~书中,作者很多话可能你没有注意到,因为你
还不懂之,对之没感觉,一遍翻下来,感觉哦~~简单~ 全看了:)这些书,跟国
内的很多书籍最大的不同就是国内书籍的作者写的出,可能自己还不懂:)
Copy什么资料上的:)??


4.浸淫一门语言本身的语法语义再久,你不一定能够深入它的精妙之处.
你需要学习应用这门语言的实作品(技术),你可以研究一些FrameWork 或
是一些具体的技术如CORBA 、COM 等。就个人而已,有心接触C++ 十个月左右,
对于Virtual 的认识有过几次较大的的改变。在《 Inside The C++ Object Model
》中算第一次,在《COM 本质论》中关于COM 对二进制兼容布局需求而用虚机制
来解决是第二次,到目前为止,使我对virtual 流下最深刻印象的是在Automation
技术中组件由于环境是否有能力分析virtual 结构而导致是否需要分发接口的问
题。如果,整天抱着《C++ 语法语义深入》这样的书,我不知你何时才能真正了
解C++ 很多的特性。即使你可以对别人说上一大套,这行啊~那不行啊~~云云~~:)

    在这整个的过程中,我喜欢这样对学弟说,你需要经常将C++ 的各种特性在
脑中反复混合酝踉,这也是我强调学基础时,要求教材知识点全的原因。经常的,
为了研究某些特性而自由的写、修改、增加UseCase ,是我自认为很好的一个习
惯。整天记他人的经验之言,不知几个月后还记得几层:)?

   也许上面的叙述是概括了些:)?

    总之,我认为学习C++ ,需要多思考(譬如你想想为什么模板类继承不支持
    virtual 、模板类继承,基类实例和继承类实例产生的关系是什么样的)、
    多写usecase 、多将一堆特性混合酝晾(譬如模板类成员签名、多种嵌套模
    板类成员签名、嵌套类与包裹类生命期控制等等)要尽早选择应用方向(这
    点很重要,附加个人观点:大多数人认为理论很难,可是我要说:应用一样
    是有难度的:))。将00工程学中的理论适时的来对照自己的行为.

后话:
    上面提到,就应用而已,比较语言的是没有什么意义的.然而我想说的是,不敢想象
没有经过C++ 锤炼的人,可以深入的研究C#(事实上,我一直也不人为C#比
C++ 好学,只是他们的深入点是不同的,冒昧说一句,C++ 中很多难度是人为制
造出来的),就目前的情况来说,还有就是由于C++ 历史、社团、资源等因素.

共勉 :
           因用而择、因爱而择
           学究其深
           勿以善小而不为 :)



关于我们 | 站点地图 | 免责声明 | 联系我们 | ©2003-2007 Lough.com.cn 京ICP备06060948号