难道我们不该放弃C语言吗?
有人说,“每个”程序员都应该学习C语言,这太滑稽了。在2006年,我甚至想不到那怕一个让“每一个”程序员都学习C语言的原因。事实上,我能想到的需要用到C语言的地方,仅仅是在编写设备驱动程序的时候。我认识大约200个程序员。其中有多少个是编写驱动程序的呢?一个都没有!今天,连微控制器这种东西都嵌入到了JAVA虚拟机中了。
一个计算器参数,比如说JAVA虚拟机,数据库,操作系统是用C语言写的。这是事实,但是实际上有多少人在写这些东西?在所有程序员里面恐怕只占5-10%。
噢,等等。忘了游戏。但游戏也大部分是由C++写的。尽管比较C和C++就像比较C#和C,有一些人还是会争论说那是用C写的。确实,“看”上去他们可能一样,但事实上他们的区别就像是大宇和法拉利的区别。
下面,我对那篇文章逐条列出我的反驳意见:
1)相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。从总体上来说,低级的编程语言可以让你更好的了解计算机。
确实在C语言中你不得不进行分配/释放内存的工作,但除了C语言有指针(C++也有指针)和C语言的字符串处理有点难看之外,C语言真的和其他高级语言没什么不同。
2)设备驱动程序和操作系统只能用C语言来编写。现在,你可能还从来没有编写过一个设备驱动程序或者一个操作系统,但是如果你需要去修改他们的时候,怎么办?
这完全是错误的。设备驱动程序现在已经用C++写了(C++离C比C++离C#还要远)。而操作系统(单一的)的内核,操作系统和设备驱动程序都是用C#写的。但我还是不得不承认确实有一部分是用C语言写的。
3)如果你想要得到一份编写微控制器程序的工作的时候,该怎么办?他们都是用C语言编写的。就因为不想学习一门新的语言,你就准备限制你能得到工作的机会吗?
再说一次,很多很多微控制器是基于JAVA的,所以这个观点是站不住脚的。这个观点的另一部分更是毫无意义的。因为你懂C语言,并不代表你懂微处理器的每个方面。就像,我不知道怎么开飞机,那就限制了我可能得到工作的机会了吗?
4)C的程序比其他用别的语言写的程序,实现相同的功能,它用的代码行数更少,而它带来的运行效率却更快。有时候,你的程序所需要的速度,只有C语言能做到。
这完全是谬论。一个程序的速度大部分情况下取决于那个写代码的人,而不是取决于算法。这个观点就像是说印地赛车能跑400千米/小时而一级方程式仅仅能跑360千米/小时一样。尽管那个印地赛车的速度比较快,如果那个开车人不能很好的驾驶它的话…
5)如果你学习过C语言,你就能学习现在任何的高级编程语言。因为所有的高级语言都是以C语言为基础的(像JAVA,C++,C#等等)。
大部分的现代计算机语言的学习,早已不仅仅是语法了。.NET和Java都有大量的支持框架,你需要学习的绝不仅仅是那些看起来JAVA,C++,C#都有的的FOR循环。
6)因为C语言已经存在很多年了,它有广泛的使用团体并且有大量的现成代码可以利用。这就使你能在过去程序的基础上,快速和高效的编写新的算法和函数。
嗯…你听说过GOOGLE吗?我用C#,DELPHI和C++编程,已经不记得上一次我找不到一个具体编程问题的解决方法是什么时候了。
7)C语言是一个开源组织的语言。一个开源组织的产物--LINUX,就是用C语言写的。如果你会C语言,你就能参加这个组织并且还能向众多的开源组织投稿,比如参加Source Forge并且给他们投稿。
我简直不想谈论这个问题。有一个无可争辩的事实是,有同样多的Java、C#或Delphi的开源组织。
8)C语言是唯一一个向你阐述指针的本质的语言。而C#和Java干脆跳过了指针这个题目。可是指针确实使C语言变得更加强大。
指针同样是C语言最大的麻烦。我宁愿让Gurus为我写一个编译器或者框架,那样我就不用担心那些最基本的细节了,好让我能够继续编写应用程序。
9)找编程开发方面的工作时,C语言仍然是最普遍需要的语言。所以它值得你花时间去学会它。
这也是值得怀疑的。我估计在这个世界上写COBOL代码的人要更多一些。难道这就意味着我们都应该再去学习下COBOL语言?
10)任何里面有微处理器的设备都支持C语言。从微波炉到手机, 都是由C语言技术来推动的。
是的,C语言可以用来写微波炉和手机的程序,但是经常是有其他选择的。如果我想写手机程序的话,我就能用VB来编。
别误会我的意思。在适当的环境下使用C语言是非常合适的,我就有可能在80岁以后开始从头学习C语言。但是恕我直言,要是说“每个”程序员都应该学习C语言,那就有点夸张了。 {:5_109:}看来楼主对C有很大的偏见哦,首先,低级的语言并不低级,高级的语言并不高级,至少我没看到是如何高级,低级的语言让人的大脑运转的更快(治疗老年疾病很有效:D)玩笑,高级的语言让人更加的依赖它的便利快捷性,脑低的运行频率也少了许多,不错,程序员没必要都学C,这点很同意楼主,比如,学java的,学C干嘛(除非是为了转型),成天都和web打交道,底层更是没戏,再说,就java的那点智商,学C很难,因为java是即时性语言,培训不了几天就能上岗,而像C,C++这类,呵,几年,恐怕你也没能摸透它,市场上哪些21天精通C、C++纯属扯蛋. C和java是两个不同的发展方向,并不矛盾,互不干涉,所以程序员没必要都学C,这是正确的,但是如果智商够高,学了也没事,还能在别人面前摆酷呢。。{:5_109:} 我没有实战的经验,更没有编程的经验,现在我正在学汇编,因为我知道,底层的东西都搞不懂,高层次的(或者说应用层次的)东西根本没有搞懂的可能,就好比张无忌同学是学了九阳神功之后,学乾坤大挪移神功只用了几个时辰。学习这些东西底层的语言不一定要从事利用底层语言的工作,而是为以后转战其它的语言打下坚实的基础,可笑的是竟然还有这么多人信奉 21天学会C,魔法编程,如果仅仅是要做一名代码工人,N天就可以了,但是,程序员那种灵活的思想,是自己无数次的与计算机交流得来的,而不是靠一种拔苗助长式的学习得来的。当然,没有实践权就没有发言权,我只是从一个文科生的角度来分析,见笑了:loveliness: 底层的东西学会了,学高级语言是so easy!!! 路过.我是刚开始学C语言的.因为我更喜欢linux.因为它是用C语言编写的.所以一直以来我就想学C语言.
好东西,谢谢分享,学习了~~~ 正在看windows内核,reactos,WRK源码是C和汇编的集合~~~~C#是什么? 鉴定完毕:脑残加手残的家伙 C如果没有存在的意义,那你就更没有存在的意思 每种语音 各有特点 C 和 汇编 主要是引导理解的学习语言,就像休养这种东西没有任何商业价值,但我们要成长确必不可少。
页:
[1]