一些c++程序设计的感受

来源:互联网 发布:成都少儿编程培训机构 编辑:程序博客网 时间:2024/04/30 05:54

    学了C++,感觉离理想更近一步,最近学习UNIX的架构,感觉头脑里对计算机的认识相当清新。可以尽情的欣赏风景,觉得计算机就是一门具有强科学性的艺术。
    每一门语言都有各自的独到之处。其中C语言比较霸道,以至于除了C++以外的其他语言都尽量回避与它的相同之处。看了UNIX程序设计艺术,有种恍然大悟的感觉,原来我们一直认为自己走的是直线,却不知道自己所走的路处在悬崖边。
    先谈谈OO语言,现在流行的语言基本上都是OO的,一种语言必然有其局限性,否则世界上就应该只有一种通用的程序设计语言。那么OO语言的局限性在是什么?
    小型程序不适合OO,这一点已经公认,不再赘述。在讨论OO语言其他缺陷之前,我们来了解一下计算机的发展史,自从微软垄断个人机市场以后,商业原因,新一代的程序员都针对GUI系统设计程序,然而微软的程序封装使得大多数程序员只能对程序浅尝辄止,不会了解到NT的内核,很遗憾,对于程序员这是最大的弊端,表面上,我们有微软提供的各种各样的一清二楚的图形界面接口,设计一个程序时,程序员要做的就是把接口粘和在一起,在NT系统上,程序员就是粘合剂。我曾经被误导,以为面向对象就是最好的一切。
    上半年回老家,得到表叔的指导,在他的推荐下,我开始学习UNIX系统,发现NT简直就是垃圾当中的极品。唯一欣赏的是NT的COM和多媒体的外观。NT,说的不好听点,就是专门为偷懒用户设计的系统,尽管这样说要受到NT用户的严重鄙视,我还是坚持己见。不了解内核的人,根本不会注意到NT的内核烂到什么程度。以至于没事你就得从装,微软搞出一个还原功能,只是为了在漏水的桶上不上一个难看的凹凸不平的疤。
     微软对API的设计还算过得去,MFC,不想说市场里的无头苍蝇,狗屁不懂的乱抓一把,招聘要求熟悉MFC,上个月我到招聘市场去了解了下,打算顺便学点东西,结果我得到一个教训:要求MFC的或者说什么只能用VS的,直接走人,看都不看,保证招聘的那个人水平还没自己高。后来遇到一个游戏工程师,他们是开发IPHONE游戏的,用的系统是UNIX内核与macOS外观的中和的系统macOS X。总算找到一个真正的懂行的,跟他很谈得来,登记了个电话号码,说是下学期会有相关培训,当时我看了看其他登记的人,大概20来人,就我去的时候遇到的那个应聘的人来看,也是半壶水还不足。这也就怪不得程序员工资如此之高了,因为有实力的人实在不多。
     回到OO话题,UNIX下的程序员提倡的是,能不面向对象,就尽量不OO编程。UNIX下的主流C、SHELL编程都体现出结构思想,UNIX之所以能长存(他强大,高效),原因归结于它的程序精炼,而精炼的前提便是语言要面向结构,面向模块,而不是面向对象。UNIX内核属于全关闭式,程序与内核建的通信靠SHELL和C的调用,也就是中间粘合剂,NT这一点与UNIX相距甚远,内核与外壳的界限混乱不堪,以至于新手往往一不小心就可能把整个系统搞崩溃,这一点让NT编程初学者相当头疼,而且由于封装的稀疏性,内核与外壳的边界不明显,API分布混乱不堪,使我们进行NT编程时,BUG多得无语,微软给非专业编程人员的选择就是:要么你老老实实遵循我给你的材料进行组合,要么你就等着程序整个崩溃。而从一个非专业人员到专业人员的跨度,大的让人有种恐惧感。对微软真的是相当无赖,既可恨又对他无可奈何。
     OO的思想并不是天生的,而是人们发觉很多东西需要进行整合,来进行同类型事务的高效处理。特别是图像编程,拿三角形来说,需要一种类型来进行简单的同类处理,而无需考虑是直角三角形还是什么三角形,使得程序员的工作更加轻松。有需求便会有新生事物,于是OO语言诞生了。
     但是OO只是解决某类问题的手段,并不是万能的上帝。我一直喜欢C++就是因为它无论面向对象还是面向过程还是新出的一种面向模块编程都可行且比较高效。
    说这些,是希望大家能理解OO的适用性,如果你是游戏编程的图像,那么自然不会意识到OO的局限性,因为对于图像来讲,他们的思想在对象和语言之间刚好有着非常适合的映射。但是并不是所有的东西都像图像那样有这种优秀的映射关系。拿游戏的引擎来讲,性能来自于完美,完美就是做到无法再删减,这恰恰和OO的添加接口和增加属性与继承性(即多态)思想相反。
    在此,虽然仅仅作为一个大学生的角色,但是还是提出我的警示,学习语言千万不要被语言的特性所掩盖,如果你经常用C++,那么你可以考虑一下使用一下smalltalk

原创粉丝点击