语言之争是程序员永远不会疲倦的闲暇话题,初学者的语言选择也是大家所津津乐道的。回望近年来,随着微软.net战略的来势汹汹,不少初学者都喜欢以C#作为自己的第一门语言。在这样的大环境之下,讨论C++还有什么意义么?
在瞎扯这个问题之前,我们先来看看为啥初学者都选择C#。估计原因很简单,就是入门容易。当然,这容易是相对于C++而言的。如果学C++,你肯定要看《C++ primer》这本经典吧?泛型编程,也是需要了解的,所以《C++标准程序库》这书也不能放过吧?这两本书,页码加起来不下1600页,杯具的是,即使你将这两本书读得滚瓜烂熟,你也写不出一个最简单的窗口程序。如果你想写Windows的窗口程序,那么你还要再看一本《Windows 程序设计》,这又是一本厚达1300页的巨著。不过,噩梦远远还没有结束,因为学完了这些,你的C++水平还是处于一个相对低阶的水平。为了跨越这个阶段,你还必须要看《Effect C++》,《More Effect C++》,《Effect STL》等等进阶名作。当你已经将如上的资料烂熟于心的时候,此时你才不是菜鸟,当然也不会是个老鸟,但已经能够凭着这点小资本到人才市场碰碰运气了。如果你还想在继续往上提升,那么这就和你专注的领域有关了,专注于系统的,什么《操作系统原理》不能放过吧?专注于编译器的,《编译原理》这些不可或缺吧?专注于底层的,一大堆的CPU的datasheet你是不能视而不见吧?只有精通了某个领域,你才能是老鸟。
反观C#,入门就相对简单。初学者,只要看完半本《C#高级编程》,就能写出一个最简单的窗口程序。什么,你看了一半还不会写?那你不适合做程序员,回家洗洗就睡了吧。不过,即使初学者用C#写出了一个简单的窗口程序,他对对于操作系统可能还是一无所知的。当然,这里并没有任何贬低C#的意思,因为.net本来就是号称多平台(虽然目前还只是在Windows),所以它必须要隔离操作系统的特性,如果初学者还要知道操作系统的特性才能写程序,那就是对.net的最大侮辱了。当然咯,任何一门语言想要精通,都不是两三天的事情,对于C#来说自然也是如此。但,C#的入门,远远比C++要简单,这是不争的事实。
假设五年之后都能达到高手的阶段,那么C++和C#的进阶曲线将会如下:
入门简单,这个最基础的因素决定了初学者为什么选择了C#。不过这对于他们是无可指责的,因为现在的公司,都不愿意花钱去培训新人,你是打算学2个月的C#就能找到工作呢,还是想花个2年时间学C++才能上岗?我想大部分人都应该选择是前者。于是,直接结果就是,学C#的初学者几何性地倍增。菜鸟不可能永远是菜鸟,他们也会有成为高手的一天。因为初学者的基数很大,所以成为高手的数量会不少,这对于现在已经是C#的高手,不可谓不是一个冲击。但对于C++的高手而言,虽然也是有所冲击,但这冲击却比C#要小,因为C++的新生血液实在太少了。这个看似可悲的状况,却成了C++长期风险低于C#的一个理由。
C++还有一个最重要的特性,就是在某些领域具有不可替代的作用。驱动是要用C++吧?启动代码是要用C++吧?就连.NET的的底层,也和C++脱不了关系。也许有人说,不是还有汇编么?开玩笑,你用汇编写一个框架试试,等写出来,黄花菜也凉了。那么C呢?呃,这个我不否认,C++很多地方都能用C来写,甚至某些地方都只能用C。但C和C++就是一对孪生兄弟,学的是C++,写的是C,这会有什么困难么?所以为什么C和C++两种语言的分隔不是用逗号,而是用斜杠:C/C++。在这个领域里面,还有能威胁到C++的统治地位的么?但对于C#来说,情况却大为不同了。先不说很多领域和JAVA重合,即使在JAVA无计可施的地方,.net的其它成员也能对C#产生威胁。C#是基于.net的,C#能做到的,也就意味着.net能做到,更深一层也就代表VB.NET或是F#或是其它的X#也能做到,即使今天不行,那明天呢?虽然说在这些领域C#目前正如日中天,但谁能知道明天会怎样?微软不是还弄出了个F#么?虽然现在它干不了啥事,也暂时威胁不到C#的地位,但谁能知道明天微软会将它摆在哪个位置?C#刚出来的那时候,不也是如此么,谁能预言F#的未来达不到C#的高度?所以学习C#,不仅要面临本语言后继者的竞争,还要堤防别的.net成员来势汹汹的攻势,而C++所擅长的领域,却是死水一潭,唯我独尊。C#的欣欣向荣,C++的不思进取,看似很美好的背后,却赋予了C++长期风险低于C#的另一个理由。
看起来,C++似乎和鸡肋异曲同工。在很多大型应用中,无法施展拳脚;但在不少领域,却又是不可或缺顶梁柱。只是,说C++是鸡肋,非常不恰当,也许说成是巨人更为合适。C#之所以看得远,是因为站在了C++这个巨人的肩膀之上,如果没有了C++这个巨人作为垫脚石,那么落入平地的C#只能看到眼前冰山一角。不过无可反驳的是,只要站在了巨人的肩膀之上,就绝对能够比巨人看得更远,所以C#能将触角延伸到很多C++无可企及的领域。但懂得站在巨人肩膀之上的,却不仅仅是只有C#,还有和它一同出现的.net兄弟姐妹,所以C#的站位并不是牢不可破。做巨人很辛苦,因为他没有站在肩膀上的人们那么光彩亮丽引人夺目,就像幕后人员和舞台明星一样,大家喜欢的永远都是明星。也正是因为没有太多的人去争当巨人,反而造成了巨人的地位能够长期稳定,这也就是为什么学C++的长期风险相对会低很多的原因。
分享到:
相关推荐
便捷的C++转C#工具,用于将完整的C++项目转换成C#项目
用C++调用C#实例代码,C#封装为DLL。
C++调用C#的DLL实例程序,压缩包中包含部分程序说明,很小的几行代码,但是C++调用C#的DLL目的已经达到。
比如使用C++调用C#的DLL。 SwfDotNet是.net下输出flash的类库。SwfDotNet是C#编写的,作者的C#水平,真是令我佩服。这是个特别好的读写Swf文件的库。但是,我要用在C++项目中,怎么让C++调用C#的DLL呢。今天一上午都...
C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.C#调用C++.
c++转C#工具,c++转C#工具.c++转C#工具
网文 C++和C#相互调用COM组件举例等。
C++转换成C#工具
C++ C#混合编程
c++调用C# COM 参数是结构体数组
这个程序是转C++程序为C#程序的,内置了部分DirectX方面的转换,你可以扩展其他方面的语法转换 真的,不坑爹,觉得的语言转换功能,虽然它只是一期工程。
C++程序员快速学习C# 随着.NET的深入人心,作为一个程序员,当然不能在新技术面前停而止步,面对着c++在.net中的失败,虽然有一丝遗憾,但是我们应该认识到,对于c++其实就不应该对其在.net中的表现有太大的奢望,因为毕竟...
对于C#编程,遇到调用C++的dll,对于头文件中的格式转换确实很头疼,简单的格式还好,复杂一点,涉及指针,接口,回掉等高级格式,就不知道怎么转换了,附件的工具可以直接转换,下载打开exe即可,不知道如何使用...
C++ 与C#之间的指针参数传递,实现无限量数据的传递,轻松无压力,方便在C++里面获取或者从C#传递数据到C++的动态库调用内。
c++ to c#,把c++代码转换成c#类型的 c++ to c#,把c++代码转换成c#类型的
C++和C#的类型转换,全面地列出了C++和C#中对应的类型,因为在调用dll中经常地在两种语言之间转换数据类型。
c++加载c#dll
本人慢慢在网上各地收集及自己验证后总结的C/C++和C#的数据类型对照.没有完全 验证..组织部 类型太多了..要怪就怪C/C++的type define这个该死的语法 吧...
这是对C/C++代码 封装 可以用C#调用。事实上,C系列中还存在一种语言叫做托管C++,这种语言语法上和C++几乎一样,但是却和C#一样编译成为微软中间语言,这样就可以和C#良好地通信,即可以在c#中使用托管C++类