C#与C++之抉择见--我为什么抛弃C#

近几天博客园有一些关于C++的讨论,自己也有感而发,写一些我的想法,作为周末的消遣。可能我的这些想法不很成熟,欢迎讨论。这里同时认为C#=.net平台,虽然两者概念都不一样,本文主要从平台出发,语言上的对比较少,所以估且认为一样。 

 

可能看过我文章的,都知道我以前是做C#的,以前做的一些,像等值线的追踪和3D绘图,特别对于3D绘图,都是用的C#,后来工作,也是用的C#做winform,C#语言简洁,强大,我的体会最深的,就是事件(委托)和闭包, 还有一个.net的反射,这三个特性加上VC#强大的智能提示给我带来的编程体验,是C++不能比拟的,其它的一些好的特性,不是很熟悉不做评论。 

 

同样C++功能强大,凡是C#能做的,C++都能做,但是C++编程复杂,特别是其一些晦涩的语法,还有其在windows 下面众多的char, wchar等等这些都会让初学者却步。 

 

其中前几天的 C++强大背后 讲解的非常好,大家可以去看,我这里主要讲一下我的认识。可能只试用于我个人,不适用于大家,大家各自权衡。 

 

我为什么抛弃C#(更多的应该是.net平台)

1,  应用领域不同

C#的应用领域,主要是大型的企业系统,不是说C#不能做其它的,而是很多时候选择一种语言或者说平台不是语言或者是平台本身这一个因素决定的,比如我现在做的服务器方面,项目主管就说过他也用C#做过,性能也还不错。大型的企业系统要求更多的不是语言,性能和一些底层的控制,其主要的是业务逻辑。C#语言用做这一类的开发,可以带来众多的好处,比较明显的开发效率高等等。

C#中还有一类应用相对较少的,做为门户类或者论坛类的网站,屈指可数,这里面比较知名的CSDN,博客园,还有myspace。做这一类型的网站,更多的已经似乎并不是C#或者.net平台的问题了,更多的是策略,比如缓存机制,负载均衡等等。

C++应用领域,主要在于现在我主攻的服务器(通信),实时系统,游戏和一些与硬件交互较多的系统。主要的并不是业务逻辑,更多的是相对独立于业务逻辑的底层层面,也就是策略,比如内存池,对象池等,还有那就是算法,算法也是一种策略。业务逻辑与策略的区别是,业务逻辑是有一个东西在那里,我来实现,其是业务的表现,而业务却由于其特性,变化频繁,而策略是一种权谋,就是我要怎么做。

2,  更新速度的问题

大家知道C#从2001年到现在,已经由1.0到了4.0,到了4.0把C#进行了大换血,当然我不是说那些功能不好,而是这样的更新速度让我觉得无助,特别是WF,更是进行的全面的更新(更换?),在强势的引入的WF,WCF,WPF中,每一个的引入,都需要大量的时间来学习,虽然这些东西非常有用,可是却给人以不安全感,因为今天你学习的,明天可能就会淘汰或者被放弃,这样的例子在.net中大量存在,近来就有WF为先驱。而相对于C++而言,只从语法上讲,虽然语法晦涩难懂,掌握不易,但是发展却相对的缓慢,远没有C#那火箭般的速度。从应用的领域讲,从服务器到游戏,大多的流程固定,一旦成型,在几年内不会有大的变动,以服务器为例,做服务器虽然难,但是其主要的IOCP以及一些内存池,对象池,通信规则,多线程规则,基本上也有10年没有大的变动了,更甚者像算法,也是难,但难不在语言,难在策略,一旦成型,那是多少年也不会有大的变化,比如克里格算法,估计也有30年没有什么大的变动了,其前期主要是Fortran实现,后来改成了C++。

3,  个人问题—深入学习的态度

C#的学习量庞大,像4.0里面的,每个深入那都不是一日可成,就算你学会了,你能保证明天不会像WF一样,这样使我们疲于奔命,导致我没有学习的激励,记得以前用C#,常常下班后,很少来学习,是担心今天学了,明天就没用了,而C++不一样,深而有嚼劲,并且在短期内是不会被淘汰(或者是大的变动),学了就有积累,使自己不会永远是一个新人,前些日子面试,就遇到了不少做到40多的C++程序员,而在我面试C#的时候,基本都30以下。 

 

所以,我决定,抛弃了C#,转了C++。 

 

后记: 

其实我选择的服务器的开发,其难度不会小于各位的各种系统的开发,其要学习的东西不要少于各位要学习的东西,就像现在星期六,我都还在调。语言或者平台的更新是好事,带来的更加高效,更加的方便 ,和编程理念的改变,关键是这一种更新,如果今天更新了,你跟上苦学几个月,好不容易入了个门了,可是哪天把你的东西全部了换了,就像WF,更甚者完全废弃,就像VJ#,诚然大家会说什么思维,什么能力等等内功修炼好了,其它的不攻自破,这对于那些大牛来说自然水到渠成,但是对于那些工作不久,倘没有不攻自破的能力的人,难道不是一种折磨。那我为什么不选择一个相对稳定的,凭什么给你做小白咧。跟着你闹腾。

关于学习,我可以这样说,在同龄人当中,除了那些天才,自恋的认为至少也算是中上水平,这些都是学习来的结果,有多少人在星期六的晚上12点还在调代码的。

关于抛弃这个词,可能用的不当,但是现在是你处于什么行业,大多情况下(不是绝对),你所选择的语言和平台也就是定下的,一般不会有大的改动,因为很多的公司会考虑自己公司原有的积累,对于我,如果在有选择的情况下,肯定会选择优先选择C++,次而考虑其它的。

关于大换血,这个用在C#是不对的,但是对于WF,用大换血一点错都没有。

行业(领域)的不同,对于软件开发的要求是不同的,比如我上家公司就是做GIS的,要求就是美观第一,所以为了做的炫,就不免要上WPF等等的这些,而现在这家公司,做服务器类的开发,对界面的要求就不那么高了,首先要求先做出来,性能还可以,然后再考虑其它的(这里要申明,我不是说美观等UI不重要,不要偷换概念),就比如做服务器开发领域,很多时候压根就不要界面,自然什么wpf的就可以完全的不需要考虑,对于服务器领域,技术相对成熟,模式比较固定,要学习的东西虽然难,并且深入也困难重重,但是,最起码,我可以像解决温饱问题一样,我不用担心明天我碗还在不在,我不用担心,要是明天他换了wdf, wff 怎么办,是跟上学习?我的选择可能只是一种退而求其次,我说的这些可能都不是其本质,本质的,还是要修炼内功,可是对于一个温饱都没有解决的人来说,等到内功到老赵那水平,人都不是饿死了,就是给微软三天一换血给累死了。

天下的技术多的出奇,你全部去学,学的完么,不要和我说内功,更多的时候,大家学东西都是被项目推着走的,项目要什么就学什么,如果既然要有所选择,为什么不能选择一个比较稳定的,先解决温饱的,不用担心明天饭碗还有没有的,这样难道不好?

综上撰述: 我选择C++,主要是因为我的主攻方向的转变,由原来的winform的桌面转向服务器,在此基础上,也有C++与C#两种选择,首先现有大多数服务器产品均用C++开发(这里包括什么性能,参考资料齐全等等),其次在就是我上面那扯的一堆东西了。

posted @ 2010-09-18 10:29  connoryan  阅读(8047)  评论(100编辑  收藏  举报