为什么C和C++牛人多.docx
《为什么C和C++牛人多.docx》由会员分享,可在线阅读,更多相关《为什么C和C++牛人多.docx(31页珍藏版)》请在冰豆网上搜索。
为什么C和C++牛人多
为什么C和C++牛人多?
热1已有28665次阅读 2009-06-2209:
52
“我的面试感悟”有奖征文大赛结果揭晓!
呵呵,这是个找抽的话题,我本人虽然做C和C++很多年,但确实不敢这么说:
“C和C++牛人多!
”。
不过没办法,昨天晚上一个同学在QQ里面问我,希望我就这个话题做个论述。
我尝试着答一下啊。
一家之言哈,欢迎拍砖
====================================================================
在我们学校里,职场里面,确实有一种看法,玩C和C++的人,水平通常要高一点,而做Java和.net的朋友呢,总是有种要受歧视的感觉。
现在虽然好点了,Java多年媳妇熬成婆,已经成为使用率最高的编程语言,Java的粉丝,终于可以喘口气了,狠狠滴BS一下C和C++,呵呵。
其他几门语言也在奋起直追。
大家总结了很多批评C和C++的话,不是完全的面相对象,太低级,语言太简陋,不是一门程序员友好的语言,==。
不过很奇怪,大家一边骂,一边也得承认一个事实,C和C++的程序员,TNND,为啥总是比我们牛一点点?
好像大妈生的,让人看了很不爽,呵呵。
我当年也有一个例子,刚刚进入迈普公司的时候,我一心想去做路由器,感觉很酷,没想到被分配到网管产品中心,做报表系统,当时全中心是Dephi的天下,好像当时成都电子科技大学开的是Pascal的课,没开C,搞得一帮同学全是弄Dephi,我脑门上写了个VC就混进去了,居然没人说啥,我用VC做报表系统,大家也是敢怒不敢言,呵呵,直到最后,我都调离这个部门了,问当时的组长,如果大家是VC,我用Dephi,会怎么样,他笑了一下:
“分分钟被杀掉!
”。
呵呵,看来,就是在Dephi群体里面,做VC的程序员,还是受到了大家的尊重。
我当年还听到这么一句话:
C和C++语言,是所有程序设计语言的皇冠,而VC++,则是皇冠上的明珠。
这话谁说的,我记不得了,不过,作为VC的粉丝,我当年可是着实得意了一小把。
呵呵。
说了这么多,越来越找抽了哈,各位看肖某人一定很不爽,这不是捅大家肺管子嘛?
呵呵,其实不是的,我今天借着那位同学的话题,给家分析一下其中的原因。
1、C和C++够笨,逼的程序员自己做很多事。
C其实大家都知道,是一门中低级语言,保留了指针等汇编特征,与系统底层结合密切。
C++呢,更多的向个ObjectC,即面向对象的C。
但这些,其实并不能够让程序员显得很牛。
我个人的理解,之所以C和C++程序员显得很牛,其实原因和大家想像的正好相反,不是因为C和C++太强大,而是这两门语言太弱智了。
C和C++,由于设计时,主要针对系统底层,操作系统层面的应用,因此,其提供的核心基本库相对比较简陋,没有提供很多华丽的框架,VC的MFC不算啊,那是针对Windows的,不是C++的基本特性。
这直接导致了C和C++程序员,在进行大型开发时,缺乏现成的框架模板可以使用,也没有太多的工具库可以使用,像Java等其他语言,基本都提供了常见的几乎所有数据结构类,或者工具模块,不过,C和C++没有,搞得C和C++程序员,这群可怜的娃,啥事都喜欢自己做。
我就经常干这种事,实现个队列,实现个树,经常自己从头写起,无形中呢,自己被逼的把很多常见数据结构,弄得滚瓜烂熟,很多时候,小弟问我一个功能如何实现,我说“站着别动,立等可取!
”,然后几分钟,十几分钟就实现一个给他,呵呵,这不是我想牛叉,这是被逼出来的。
学生大本营很多朋友教训我,说我重复造轮子,弄得我哭笑不得,有那么多现成的轮子用,哪个龟孙想自己造,这不是没办法给逼的嘛,5555。
。
。
2、C和C++够通用,逼的程序员广种薄收。
这个通用,分两层意思。
一个是从应用角度,C和C++是目前我见到唯一的可以适应任何应用场合的语言,它对应用通用。
起码,除了汇编语言,C和C++大概是唯一用来写操作系统的语言了,很多底层的驱动程序,操作系统内核级模块,只能用C和C++来开发,因此,一个C和C++程序员,他唯一不知道的,可能就是不知道自己以后会去写什么平台的什么程序,这要求他必须努力学习很多语言之外的知识,为下一份工作做好知识储备。
第二个是从跨平台来说,C和C++又不是很通用,虽然从第一天开始,C就吹嘘自己很牛叉,是跨平台语言,但是,就我个人的经验,可以很负责任地告诉大家,它在吹牛。
没错,作为基本语句,C和C++程序可以到大多数平台的编译器下开发,不过,稍微涉及应用一点的库,差异就很大,比如同样的socket编程,Windows下和Linux下就有很大差异,什么线程库啦,很多,差异都很大。
不过,日常工程开发,离了这堆库,程序员估计也不用做什么事了,因此,很多C和C++程序员自从被骗得上了贼船,没办法,就得面对无穷无尽的学习,操作系统,任务调度,内存管理,资源管理,很多都得自己来,去理解各个操作系统的差异性,然后自己写程序来适应。
这么弄下来,搞得C和C++的程序员,无形中对于很多语言之外的知识,掌握得就多一点了。
3、C和C++不是一门应用级的语言,其程序员的要求也不是应用程序员的要求
对于很多语言来说,比如Java,PHP,Python等,在开发之初,都有明确的应用方向,同时,为了适应跨平台需求,都做了一定性能上的牺牲,这类语言,一般比较擅长应对企业级数据库应用,即办公应用系统,以及网站开发等。
应该说,这已经是很大的市场了,足以让一个程序员吃一辈子的饭,因此,学会了这类语言以及应用开发,一般已经可以再80%~90%的开发市场找到饭碗了。
不过,C和C++不一样,C和C++从设计出来,就没有明确的应用方向,或者说,唯一明确的应用方向,就是做操作系统。
我们知道,操作系统是适应面最广的应用软件,所以,C和C++就显得很保守,为了通用,它宁愿不提供什么功能过去强大的库,一切靠程序员自己来。
换而言之,做C和C++的程序员,或多或少都有一点操作系统,系统底层相关的知识,这部分知识,一般难学,费解,比起学习应用开发,使用某些框架模板来做某一类型应用来说,C和C++程序员需要更加深入的思考加学习,无形中,造成这类程序员没事喜欢瞎琢磨的特性,我就没事老是喜欢想操作系统内核一些功能,我来实现该怎么做。
这种事情想多了,不用说大家也知道,对自己的水平无形中,有一点点促进,因此,C和C++程序员往往看问题会深入一点,善于思考。
4、C和C++是高性能应用的唯一选择,这造成程序员必须学习优化
我们知道,虽然很多语言都可以写游戏,不过,作为大型游戏系统,比如暗黑破坏神吧,还有很多网游,出于高性能图形动画的需求,必须使用C和C++来实现,才能保证效率。
很多大型网站的后台数据库,为了响应高吞吐量,高并发量的客户请求,也需要使用C和C++进行优化。
这就造成了,C和C++程序员一玩就是大的,必须对优化非常熟悉才行。
我们知道,优化,有两个要求,一是对各类算法必须很熟悉,可以进行算法比较,另外,也是需求分析的专家,可以根据需求特性,做量身定做的优化。
这就要求C和C++程序员,经常陷入算法比对之类的任务,而且,也不能仅仅做一个程序员,还必须时刻思考客户需求,对需求做不断的再分析,才能找出优化之路。
我们知道,任何事情,做多了,就成熟练工了,自然也就来得快,C和C++程序员就是这个样子。
可能还有很多其他理由,不过,我匆忙间,也就想出这几条。
不过,大家可以看到,日久天长,C和C++程序员,不管是否自愿,但工作和学习中,确实比别语言的程序员在多想,多看,多学,自然而然,就显得很牛叉了。
但大家注意到没有,其实我上面分析的几点,与C和C++其实没有太多的关系,任何一门语言的程序员,只要坚持上面几点,不断**自己,其实都可以达到牛叉的地步。
所谓“功夫在诗外”,又所谓“穷人孩子早当家”,C和C++之所以显得牛人多,并不是这两门语言有多好,其实恰恰相反,是这两门语言没有给程序员提供太多帮助,而其应用环境又太多太广太深,逼的程序员在自我不断的学习,几年,十几年下来,自然显得比小日子过的还算不错的其他语言程序员,要深入一点。
但是,我们还是要看到,每一门语言,都有其存在的价值,起码程序语言排行榜前十的语言,都是伟大的语言,都可以产生大师,我觉得大家完全没有必要人云亦云,都一窝蜂跑来做C和C++,在很多应用市场上,Java、PHP等脚本语言,都以开发周期短,开发时间快,成为优选语言,C和C++完全没有办法和这些语言比较。
计算机软件开发,发展到现在,其实已经是很细分的市场,有专门的应用软件市场,也有系统软件市场,C/C++和Java等,各自应对的是不同的市场,因此,二者其实没有可比性的。
建议已经选择Java、.net等其他语言方向的同学,不要跟风,在自己的领域深入进去,你们也能成为牛人的。
评论(169个评论)
一路自恋王同辉(C/C++学生)2009-06-2210:
09
我想应该是java之类的语言有很多华丽的东西,初学也能做得出比较像样的东西,而c++之流的写出华丽丽的东西那得付出比java之类语言要多得多,但是 这些学的多的多的东西当然是有用的,也会锻炼大量的思维,这好像就是牛的本质吧,所以c++才会显得很牛
李宁(Java老师)
2009-06-2210:
43
语言只是一种表达方式,就象中文、英文、法文一样,更重要的是用自己喜欢的语言可以做出来什么。
各种编程语言的高手并不只是对语法、类库熟悉,还要对高级算法、系统设计理念融会贯通。
只要达到这种程度,不管用什么样的语言,VB、delphi(pascal)、C++还是Java,都可以做出另人钟爱的系统来。
就象Solaris的操作系统桌面(类似于KDE)就是用Java做的。
还有Eclipse也是用Java做的。
伟大的产品并不在于什么语言,而在于能给我们带来什么。
肖舸2009-06-2210:
43
李宁(Java老师)
:
语言只是一种表达方式,就象中文、英文、法文一样,更重要的是用自己喜欢的语言可以做出来什么。
各种编程语言的高手并不只是对语法、类库熟悉,还要对高级算法、系统设
没错,同意,顶!
回复举报
董昌朝(C/C++老师)
2009-06-2210:
58
如果c能做出MVC,能有各种各样的框架,拖拽配置就可以进行开发的IDE,估计也会培养出一堆懒惰的C程序员,可是最常用的就是gcc之类的,逼得大家只能自己动手了
洛阳师范陈占峰(C/C++学生)2009-06-2211:
08
四川师范大学罗恒锋(C/C++学生)2009-06-2211:
19
这么一说:
我更有信心了,呵呵……
不断学习就是很快乐的一件事!
麦浪(C/C++学生)2009-06-2211:
56
一般的“高手”会搭积木;更牛的高手不仅会搭积木,还会造积木。
这是区别之一。
内蒙古农业大学尹晓日(C/C++学生)2009-06-2212:
20
说得我都不敢学c++了
东大张国宝(Java学生)2009-06-2212:
57
在学校,C和C++还是受重视程度高的~~~
武科大黑照(Java学生)2009-06-2213:
02
普罗通信西安有限公司肖舸(C/C++老师)
:
也算一个应用软件啦,仔细想想,抽象出来看。
软件显然是分系统软件和应用软件.而操作系统显然是系统软件
成功是逼出来的.
**市中等职业技术学校刘hack(Java学生)2009-06-2213:
09
貌似笔者还在维护c/c++的地位嘛!
理由:
操作系统、C等是计算机必入门的理论课程。
肖舸2009-06-2213:
20
刘hack(Java学生):
貌似笔者还在维护c/c++的地位嘛!
理由:
操作系统、C等是计算机必入门的理论课程。
无所谓维护,每门语言都有其存在的道理,Java如此,C和C++也如此。
这里我只想客观论述一下,帮助其他语言的程序员树立信心。
湖南大学刘鹏飞(C/C++学生)2009-06-2214:
18
分析的很好...
之前学C/C++,这段时间又被逼着学JAVA,有时候真的感觉好乱...
毕竟一门都没怎么掌握好..
代码人生(C/C++爱好者)2009-06-2222:
30
无意中看到,只能像楼主说的,你做过C和C++也是白混了。
C++没有数据结构方面的类吗?
STL里面每个都是经典。
说到GUI库,MFC本身就是一套Win32的类库集合,当然也有不少开源的,甚至是可跨平台的GUI开发类,难道你能把他们和C++分开?
C++之所以让其他人觉得牛,不是因为他们弱智,什么都需要自己来写,而是多方面的原因:
一方面因为他们贴近系统层,有相对于其他语言的运行性能。
另一方面,因为保留了指针,使得操控起来相当灵活。
再一方面,因为模板的运用,把C++推上了一个新的台阶,甚至在语言基础之上生成了函数式语言,而且也改变了高性能运算只能采用Fortran的历史
MFC是针对Windows的,不是C++的特性,那你平常用的Struts,Spring之类的是JAVA的特性吗?
你说C/C++跨平台是吹牛,只能说明你自己水平不够,写的代码太臭了。
我参与过的一个C++的项目,曾经能在Win32,IBMAIX,Solaris,HpUx等多个系统运行。
JAVA的跨平台方式是一次编译,处处运行吧。
C/C++的跨平台是一次编码,处处能编译运行
以上只是个人的一点见解,欢迎探讨
另外,你说你做过Delphi,其实你就更不应该去误导其他人。
Delphi6的性能也是很高的,而且做为一个RAD应用开发工具开发GUI也是相当便捷。
另外估计你没有在里面使用过嵌入汇编吧?
那也是相当牛
∙回复举报
代码人生(C/C++爱好者)2009-06-2309:
05
刘hack(Java学生):
从50、60年代到就有了FORTRAN、LISP、COBOL等现在都广泛使用语言。
计算机本来就是向高级应用进化的嘛,以后还不断进化。
语言不外乎表达思想,比如:
一扇由声音控
只能说你一叶障目。
任何一种语言都不可能适应各个方面的应用(基于其简易程度而言),JAVA/PHP之类的语言天生就是为网络而生,它们在开发互联网应用极其方便,但如果你用他们来开发GUI应用试试,他们是C++/Delphi类语言对手吗?
连VB都不如。
历史的潮流不可改变的是什么呢?
是物尽其用,不是JAVA将引领C/C++或者说C/C++类开发工具将不复存在。
你能说VC将从此消失吗?
估计你也只知道.Net了
∙**市中等职业技术学校刘hack(Java学生)2009-06-2311:
43
代码人生(C/C++爱好者):
只能说你一叶障目。
任何一种语言都不可能适应各个方面的应用(基于其简易程度而言),JAVA/PHP之类的语言天生就是为网络而生,它们在开发互联网应用极其方便,但如果你用他
像甲骨文数据库Oracle就是全部改用java实现的,在企业管理系统上招聘都是.net,c/c++的应用慢慢变成一个中间层,代替它们的是脚本或其他语言的东西。
∙
回复举报
代码人生(C/C++爱好者)2009-06-2313:
49
刘hack(Java学生):
像甲骨文数据库Oracle就是全部改用java实现的,在企业管理系统上招聘都是.net,c/c++的应用慢慢变成一个中间层,代替它们的是脚本或其他语言的东西。
ORACLE数据库全部采用JAVA做开发,对这点我表示怀疑,你要说管理器我肯定相信。
我还是这样说的,物尽其用,每种语言都有它自己的用武之处。
∙
回复举报
tongshou(C/C++爱好者)2009-06-2315:
11
刘hack(Java学生):
从50、60年代到就有了FORTRAN、LISP、COBOL等现在都广泛使用语言。
计算机本来就是向高级应用进化的嘛,以后还不断进化。
语言不外乎表达思想,比如:
一扇由声音控
你可知道LISP,FORTRN,JAVA等语言本身是怎么做出来的?
!
说个具体的,JAVA语言中的垃圾回收功能块是用什么语言编写的?
懂得C/C++语言的人,往往会对其他语言看得比较透,反之,其他语言使用者,如果没有C/C++知识,往往连本身语言都认识不清楚,只会盲目说好!
好!
好!
不是他们笨,而是他们缺少C/C++知识. 这就是C/C++牛的地方!
∙
回复举报
tongshou(C/C++爱好者)2009-06-2315:
46
曹洪伟(3G/移动开发老师)
:
C和C++太强大,而是这两门语言太弱智了。
说C/C++太弱智,有误导人的感觉!
C/C++称得上万能语言,不仅功能非常强大,而且非常灵活!
不可避免地该语言的程序的"粒度"会很小.编程会比较费时间.
∙tongshou(C/C++爱好者)2009-06-2316:
14
C/C++语言是牛语言,但是并不是会用C/C++的人都牛,同样用C/C++语言搞的东西,可能会"相差一万八千里"!
比如,好几家"国产"CAD用C/C++完成某一个功能:
把1000条直线LINE连结成一条多义线POLYLINE,会一下子消耗几百个M內存,费时几十秒,而AutoCAD仅仅消耗几个M,且在瞬间(<1秒)完成.
∙
回复举报
肖舸2009-06-2316:
20
tongshou(C/C++爱好者):
C/C++语言是牛语言,但是并不是会用C/C++的人都牛,同样用C/C++语言搞的东西,可能会"相差一万八千里"!
比如,好几家"国产"CAD用C/C++完成
呵呵,所以我说,C和C++也只是显得牛人多点,并不是所有的人都是牛人。
∙
回复举报
**市中等职业技术学校刘hack(Java学生)2009-06-2319:
42
tongshou(C/C++爱好者):
你可知道LISP,FORTRN,JAVA等语言本身是怎么做出来的?
!
说个具体的,JAVA语言中的垃圾回收功能块是用什么语言编写的?
懂得C/C++语言的人,往往会对其他语言
各位同学,我从宏观上讨论语言的地方,而不是从微观的角度比较两种语言的优劣,其实硬件结构、数据结构、操作系统都是基础文化的东西,没必要争那种语言好坏。
对复杂的问题,以往都是从抽象分层的角度来化解。
例如,计算机网络分层就是为上面的层提供抽象接口。
操作系统就为程序提供硬件抽象接口。
脚本就抽象了算法和数据结构。
如果你只懂一门语言,就没必要讨论了,你只要领到别人划分给你的那层次任务,低着头一直做就可以了。
∙
回复举报
tongshou(C/C++爱好者)2009-06-2320:
42
争论语言好坏很有必要,许多语言中的问题都是在争论中被发现,这对使用好语言是很有帮助的.人们是不可能从教科书里获得这些的(里面只有美益之词!
)
语言的好坏,有点象人的美丑,尽管"情人眼里出西施"可以让人啊Q一下,但是美就是美,丑就是丑,西施的美世人应该都不会否认吧!
∙
回复举报
黄海峰(网络管理爱好者)2009-06-2321:
01
你说vc还是明珠,气死我。
。
。
不知道为何我对微软很排斥,用linux,用gcc,但是公司全是windowspc,气死,不干就没饭吃了,继续不服气地写.net的人路过
∙
回复举报
肖舸2009-06-2321:
03
黄海峰(网络管理爱好者):
你说vc还是明珠,气死我。
。
。
不知道为何我对微软很排斥,用linux,用gcc,但是公司全是windowspc,气死,不干就没饭吃了,继续不服气地写.net的人路过
我对VC也很排斥的,呵呵,我现在也是用gcc为主。
∙
回复举报
江西蓝天学院柳无云(C/C++学生)2009-06-2321:
22
知识在于积累,学习在于坚持.
∙
回复举报
tongshou(C/C++爱好者)2009-06-2321:
29
微软的软件到处.NET,确实很烦!
尤其把东西做得越来越大,越来越繁!
看看其VB.NET:
VB.NET根本上不是VB的提升版本。
尽管其功能很强大,但是编程烦琐,令人费解,这是背道而弛的做法,当初人们喜欢用VB,就是看中它的简洁!
有人以AutoCAD里画一条直线为例子,进行编程比较,结果太恐怖了(这里比C++还繁):
VB.NET(和VSTA):
_
PublicSubDrawLineA()
DimmyTransManAsDatabaseServices.TransactionManager
DimmyTransAsDatabaseServices.Transaction
DimmyDocAsApplicationServices.Document
DimmyDWGAsDatabaseServices.Database
DimmyBTAsDatabaseServices.BlockTable
DimmyMSAsDatabaseServices.BlockTableRecord
DimmyLineAsDatabaseServices.Line
DimStartPointAsNewGeometry.Point3d(1,2,3)
DimEndPointAsNewGeometry.Point3d(4,5,6)
myLine=NewDatabaseServices.Line(StartPoint,EndPoint)
myDoc=ApplicationServices.Application.DocumentManager.MdiActiveDocument
myDWG=myDoc.Database
myTransMan=myDoc.TransactionManager
myTrans=myTransMan.StartTransaction
myBT=myDWG.BlockTableId.GetObject(OpenMode.ForRead)
myMS=myBT(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite)
myMS.AppendEntity(myLine)
myTrans.AddNewlyCreatedDBObject(myLine,True)
myTrans.Commit()
myTrans.Dispose()
myTransMan.Dispose()
EndSub
--------------------------------------------
VB:
SubDrawLineA()
DimStartPoint(0To2)AsDouble
DimEndPoint(0To2)AsDouble
StartPoint(0)=1:
StartPoint
(1)=2:
StartPoint
(2)=3
EndPoint(0)=4:
EndPoint
(1)=5:
EndPoint
(2)=6
ThisDrawing.ModelSpace.AddLineStartPoint,EndPoint
EndSub
∙
回复