C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

亚星游戏官网-yaxin222  中校

注册:2003-11-6
发表于 2004-3-16 10:57:00 |显示全部楼层



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

  有人认为后期的C++趋向学院派风格,走进了一味追求技术和难度的误区,逐渐脱离主流的Programmers。

  有人认为C++由于复杂度导致在现代App工程中的地盘不断缩水。

  也有人认为,C++无任对特定领域应用还是研究来说,都足够的优秀。

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

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

  这个世界关于语言之间的讨论可能时刻进行着,个人一直认为:

  1.首先每种语言有自己的适用领域,就应用而言,没有必要将语言勉强的拿到一起比较。

  构建企业信息系统,自然会选择Java、dotNET或其它的方案(事实上,这种系统一般应该多种语言协同开发,以获得部件性能最佳)。可能多种语言同适合某个项目,那么具体就自己裁决了。譬如做一个信息管理系统,选择C++环境的绝对很少,PB或Delphi、VB都是不错的选择。在初学习阶段“因爱而选(更多的具有偶然性或者与身处环境有关)”、对于开发者基本是“因用而选”。在成熟后,“因用而学”我感觉是根本也是最实际的引导原则。

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

    3.然而这个世界是现实的,不如你想象的那样。并不是所有领域都有简单、强大、贴近业务 的语言。在这个层次上说,对于献身企业级信息应用系统开发者,Java、C#、Object-Pascal等的确是福音 ̄ ̄然而在系统App和其它对性能、控制程度要求较高的如工控系统、高性能计算,实时系统,军用App等领域可就缺不了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技术书籍时,想也不想的指出,入门级<>。是这样的吗?我想,正如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++历史、社团、资源等因素。

  共勉:

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

举报本楼

本帖有 2 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-11-14 10:56 , Processed in 0.205274 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图