来源:solidot
"Linux内核的创始人Linus Torvalds最近在一封邮件中说明了内核开发需要使用C语言而非C++的理由。在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的 确切含义才能提高开发效率,而C++引入的各种抽象则使代码变得晦涩难读。
另外Linus还认为C++的内存管理方式很弱智(that idiotic "new" keyword in C++)。邮件最后的总结是:很显然C并不适合所有项目,不过C++?还是算了吧。垃圾回收和并发等等,这些才是真正重要的特性。
那么他所期待的C++替代会是什么呢?是方兴未艾的Go语言?还是即将迎来2.0的D语言?或是用 Java, .net这些基于虚拟机的语言去代替?"
本文来源:Linux之父Linus Torvalds:讨厌C++


于 2012-08-19 21:49:15发表:
另外补充一下:驱动编程主要要理解硬件datasheet,关于它的coding,确实简单,而且大多数都是移植国外开发的驱动程序,相当的没意思,不涉及真正的软件开发,只是一个会移植的不合格的码农。唯一的优势是熟悉硬件。软件开发则要求较高,需要熟悉设计模式,软件工程等知识。小弟目前在做大型游戏开发,使用的语言是C++和Python,呵呵。
于 2012-08-19 21:44:47发表:
另外补充一下:驱动编程主要要理解硬件datasheet,关于它的coding,确实简单,而且大多数都是移植国外开发的驱动程序,相当的没意思,不涉及真正的软件开发,只是一个会移植的不合格的码农。唯一的优势是熟悉硬件。软件开发则要求较高,需要熟悉设计模式,软件工程等知识。小弟目前在做大型游戏开发,使用的语言是C++和Python,呵呵。
于 2012-08-19 21:40:07发表:
作为一个来自2012的人,回复一个贴子:我对shampoo的言论非常赞同,也非常支持,本人深有体会,目前来说,嵌入式行业在上海的价钱确实比纯软件行业低,而且低得多。中国的硬件工程师绝大多数不合格,而且driver确实被认为是fiimware,而且工作底下。。。。,目前来说做软件确实不错。本文从本科毕业后干硬件、研究生毕业后干驱动(或者叫固件开发)、现在果断选择软件。
于 2012-07-21 17:04:04发表:
你们这些linux党真让人讨厌
f0rrest 于 2010-06-26 18:47:22发表:
看了你的一些帖子,你连很多基本问题都搞不清楚,你还不如你口中的“HR“。
shenhao0129 于 2010-06-26 16:00:32发表:
[i=s] 本帖最后由 shenhao0129 于 2010-6-26 16:12 编辑 [/i]
这个问题不扯了,小弟甘拜下风
shampoo 于 2010-06-26 15:30:35发表:
51# shenhao0129
你是很顽固或是太爱面子,我不是已经说得非常清楚了么?
hardware engineer:在美国的Intel,nVidia,IBM等硬件公司从事设计工作,年薪十万美金。
software engineer:在美国的ANSYS,Cadence,IBM,NASA等单位当程序员,年薪十万美金。
中国内地完全没有hardware engineer或software engineer,
目前在大连上海深圳做代工的是firmware engineer,月薪5000到一万人民币。
所有的XDJM出来说说,谁比较高级?
shenhao0129 于 2010-06-26 14:42:04发表:
hardware,firmware ,software确实是不同的工作,但是有高低之分吗?firmware的低是指跟硬件相关的底层,而不是技术要求低,恰恰相反,fiimware的程序员是这三个之中门槛最高的一个了,嵌入式系统设计师远比应用程序员少多了。不明白为什么要一直说工资低的事情了?硬要说工资的话,嵌入式系统程序员的工资不会比应用程序员的工资低,初期可能有一些差距,但是越到后面,差距越小。再者firmware和software的门槛都不一样,就目前看来,software的门槛明显的低好多。虽然挣钱也很容易,这是不争的事实,却不能就此贬低firmware的程序员,虽然做的事情是为上层服务的,但是在技术层面上看,绝对的不比上层的程序员差。大家关注的重点不一样。
shampoo 于 2010-06-26 14:04:34发表:
呵呵,人力资源只是端茶的服务员,他们的功能就是过滤掉我不想要的那些咚咚,例如,水平太低,薪资要求不合理,专业不对。
当然他们也可能会过滤掉大老板不喜欢的人。
例如,在清华帮的单位,HR首先就是把清华滴挑起来,北大复旦的甩掉。
人力资源会把剩下的给我,然后我决定要瞧瞧哪一只猴子?
倘若只有一个名额,我会一次只找一个求职者来谈。
如果是新进人员,那么我会设计一些试题让HR帮我测试,或自己监考,履历表内的专长,成绩单的科目,。。。都是我筛选的条件。
总之,是我在指挥HR,人力资源只是我的服务员。HR只有一个权利我没有,他可以限制这个求职者薪资的上限。
记得:是我,shampoo,在招人,不是HR!
f0rrest 于 2010-06-26 13:22:39发表:
firmware本身就是个完整的系统,你所说的“屏蔽“是指HAL,那是系统的一部分。
另外,成熟的HR只找合适的人,而不是什么“科班“。
shampoo 于 2010-06-26 13:09:51发表:
hardware,firmware,software是不同性质的工作。
硬件与软件是对称的,他们的地位与工资很接近。
firmware相对来说,是比较低阶的,其工作就是帮助software的人把hardware屏蔽掉。
既然和硬件有关的事物都已经被firmware的system calls给取代了,software的人就不必去了解硬件的东西。
因此,在西方国家很多computer science(理科)的人才,是出身于数学领域,相对地EE出身的便攻读computer eng.(工科)。
f0rrest 于 2010-06-26 12:37:36发表:
硬件和软件从来都是联系在一起的。窃以为不懂计算机原理的人不可能写出像样的软件。
shampoo 于 2010-06-26 11:11:28发表:
44# shenhao0129
美国Cadence或ANSYS的博士程序员,年薪美金十万。
大连的驱动嵌入式程序员月薪拿得到一万人民币么?
设计飞机汽车轮船,预测全球气候,金融管理,导航系统,。。。。这些软件,中国的哪个单位在制作或设计?
shampoo 于 2010-06-26 11:03:55发表:
44# shenhao0129
你似乎该想想,自己与富士康龙华厂的操作员有何差别?
对西方的企业家来说,都是《代工者》的操作员。
印度与内地分别拥有一百万的软件代工操作员,这些人都不是软件工程师。郭台铭的工人一大堆握着重点大学本科的文凭,你呢?不要认为念过大学就高级啦!你的《工作性质》决定你是否高级!
computer science不需要看到CPU,内存,。。。。,甚至不必碰assembly。
硬件与软件本来就是分家,你自封为程序员,哪个computer science滴,承认你呀?
听过firmware这个词么?驱动与嵌入式都属于firmware,不是software。不要伤心,不要自卑,中国人与美国人本来就不是相同的东西,何必比较?
shenhao0129 于 2010-06-26 10:04:42发表:
[i=s] 本帖最后由 shenhao0129 于 2010-6-26 10:12 编辑 [/i]
其实中国的软件就是由于对底层的东西不懂,只知道用别人已经封装好了的模块上面搭搭积木,这样的东西,看似很繁荣,实则永远不会有出头之日的。能推动计算机的发展主要是硬件而不是由软件来决定的,有了什么样的硬件,才能发展出与之配套的软件。例如我只给你一个4004的CPU,那么能在这上面的应用就可想而知了。从计算机的发展史来看,无一例外的是由IC这样的硬件发展来推动的,而正好是由于我们在硬件研发实力上的巨大差距,导致软件的核心底层被牢牢的掌握在老外手上,在硬件和操作系统这块,我们是完全的处于劣势的。比如我们国家自行研发的CPU(虽然有抄袭的嫌疑),难道最先用的就是那些应用程序员吗?还不是需要底层的程序员把下面的底层都完全的封装好了,应用程序员才开始接触的。目前我们国家的计算机教育就是几乎不重视底层的教育,我身边好多的计算机毕业的同事整天就在旁边说什么MFC啊,这个库那个库的,真正跟他们聊计算机原理的时候,一个个都不说话了。
shampoo 于 2010-06-26 07:48:40发表:
如果你不是computer science,也不是computer eng.,那么学习C是足够的。
EE或通讯等专业学习了C,可以在驱动和嵌入式混口?吃。
土木机械等专业学习了C,可以在CAD/CAE/CAM混口?吃。
computer eng学习了C,可以在PDA,相机,机器人,手机等产业发展
你们可以自称是软件工业的一份子,当然也能说是工程领域的一份子。
但是,想清楚,你们与computer science不但无关,而且无法影响computer science的未来。
为了每年五万个亿人民币的GDP,党妈妈肯定会支持
《FreeBSD,C++,Intel C编译器》
倘若无法在computer science领域和美国放手一搏,任何一个总书记都很难对祖先交代。
chainloader 于 2010-06-26 01:29:14发表:
41# shampoo
呵呵,你继续你的C++吧
硬件目前离不开C,要是连硬件都没了你应用程序还有用?
所有的应用程序都是基于硬件上的,如果电脑拿来,啥都没有你还用个屁啊?骨头硬了忘了娘,那样是永远也不会有好结果的
不想和你吵,纯属路过,我也不知道该学C还是C++,不过C我决定试试!
shampoo 于 2010-06-26 00:07:56发表:
现在我以统计局的立场帮总书记算一笔帐:
假设20年后,
中国累积了500万的软件工程师,
每人的年薪为十万人民币。
倘若他们对GDP的贡献值是十倍。
那么,他们对祖国每年的GDP贡献总值,就是
500万 X 10万 X 10 = 50000个亿人民币
说说,你们这些玩驱动或嵌入式的,多少年能够为祖国贡献五万个亿人民币的GDP?
shampoo 于 2010-06-25 23:32:55发表:
少年滴!
记住我的话:
中国每年毕业了最少十万个computer science。
驱动或嵌入式只能养活EE与CS的硬件组,剩下的软件组学生要到哪儿找活?腾讯可以收容多少人?
GNU/GPL在中国不会流行的,党妈妈会生气的,因为她的小孩将饿肚子!
shampoo 于 2010-06-25 23:21:05发表:
驱动与嵌入式是中国软件业的耻辱!
美国的商业套装软件的单套售价常常超过十万美金。就以EDA来说,单机所有模组都买齐的话,Cadence的租金,一年可能高达数十万美金!
但是Cadence养了很多中国人,说开了公司的创始人就有台湾的华人。这些海外华人中有很多早期的内地留学生,特别是六四后,留美的中国留学生自动获得绿卡,也就为这些高贵的软件公司添加了很多硕士博士。
现在说说为何是耻辱?
同样是中国人,在美国的程序员,写的是商业套件,一年单套的租金就是数万美金。
你们呢?在大连上海深圳,为小东西写驱动,值多少钱?不需要C++,不需要Data Structure,不需要Algorithm,。。。。
吹到哪边去?
说白了,继续高喊《GNU/GPL万岁》,内地的软件就永远玩着驱动或嵌入式了!呵呵。
shampoo 于 2010-06-25 23:03:22发表:
37# shenhao0129
PDA,手机,相机的芯片都是消费性IC。
早期的消费性IC很小,可能只是玩具闹钟等等,但是整个设计过程仍然必须软件搭配。
那时候,软件业非常吃香,IC设计公司很难找到好的computer science毕业的。因此,就从EE里面挑出愿意接受挑战的人,自己去学习C,然后写出可以配合芯片设计的小程序。这种做法有一个好处,EE学习C语言容易,除非修过VLSI,否则软件的要学习芯片设计很难!
数年后,公司业务变大了,就找了一个烂烂的computer science去把那个工作接下来。他对芯片不懂,只好把前人所留下的破程序进行微量修改或增加!
某一天,公司大到股票上市了,于是成立一个软件系统部门,曾经学习过芯片设计的我是领导。然后所有的东西就进入computer science的规模。整个公司电脑软硬设备约两千万人民币都挂在我的名下。
在乡下搭棚子唱戏的,无法与美国百老汇的演员相比。在所有行业都有《科班》这个词。
在computer science,一门程序语言的课上一个学期,可能得搞懂十种语言的差别。其他一大堆课程就是《科班》教育。老百姓可以打架,但不能上战场。
shenhao0129 于 2010-06-25 21:40:47发表:
[i=s] 本帖最后由 shenhao0129 于 2010-6-25 21:54 编辑 [/i]
其实不只是应用程序员才叫程序员的。除了PC之外的好多实时的操作系统,比如ucos ii 或者VxWorks,这些系统都是用C写出来的,windriver公司写VxWorks的人不能不算是编程专家吧?为什么他们不选择好用的C++,而是选择有那么多缺点的C来实现?C++不是更加好维护的吗?从系统维护的成本考虑,为什么不选择更加好维护的C++?VxWorks据说有用在探索火星的火星车上面的,因为对实时性要求非常的高,普通的系统例如windows,linux等常见的系统完全的不能满足要求,虽然Vxworks这个东西相当的贵,但能满足要去,就算再贵,也是要买的。
其实PC之外,日程生活中接触到最多的就是嵌入式行业了,几乎无所不在,稍微带点智能的东西,基本上都在这个范围,并且好多的开发平台都只提供C编译器和汇编器(只由硬件厂商提供的),这也许也是限制语言使用的一个原因的吧。
驱动或者嵌入式这个不能笼统的划分为EE行业的,现在社会分工很细,虽然驱动层不仅要知道底层的硬件,而且还要知道编程,并且驱动层用到的编程思想可能比较的简单,但是也不能说他们写的就不是程序了,就不叫程序员了。除了驱动层之外,硬件层和在驱动层之上的应用层其实是由专门的硬件工程师和软件工程师分开来完成的,并不是一群人硬件,软件全部都精通(这样牛人也有,比较少)
也许晚辈在您面前是班门弄斧了,不是有所谓的隔行如隔山吗?如果您对某一个行业了解的不是很详细的话,可能好多的看法也不是那么深入的
develop2006 于 2010-06-25 17:48:27发表:
先学好c在想别的语言吧
develop2006 于 2010-06-25 17:48:19发表:
先学好c在想别的语言吧
f0rrest 于 2010-06-25 17:38:30发表:
Linus Torvalds 今年41岁,谢谢~
shampoo 于 2010-06-25 16:18:50发表:
首先我说说,Linus Torvalds是啥样东西?垃圾!
30年前发明《三轮车》的家伙,今天有啥资格出来评论《和谐号》的设计!
一个60岁的老头子,30年来,他写了多少行的程序?
硬件行业:PDA,手机,嵌入式,驱动。。。。。
软件行业:Computer Science
软件行业征才的时候,你们这些小咚咚哪一个有资格去面试?
C++,Data Structure,Algorithm,。。。。,那一门行呢?
f0rrest 于 2010-06-25 14:32:31发表:
你对嵌入式的理解和你对C++的理解一样,停留在10年前。。。
shampoo 于 2010-06-22 12:57:42发表:
对于一些,自认会编程,但又不属于软件行业的人,
我这样子说:
驱动或嵌入式,是EE(电子电机通信)的行业。对编程来说,You are nothing!
computer science才是软件行业!
以上两者的差别在,
前者必须具备工程背景。
后者则是满脑子数学!
不要捞过界!
shampoo 于 2010-06-22 12:09:04发表:
当我是C的行家时,你还需要妈咪抱着尿尿呢!
至于其它和你一样是C语言的外行者,
我这样子说比较快:
假设你们手上已经端着一只碗,记得别掉啦!否则你们将找不到另一个碗!
倘若你们还睁大眼球看着天,就想着:
你们是没有说话权!
当我告诉人力资源,求职者的最低要求是《非常熟悉C++》,你们连面谈的机会都没有!
驱动或嵌入式,对我来说,并非编程人员!
浩瀚天魔 于 2010-06-22 08:03:05发表:
还是C好,至于C++,路过
shenhao0129 于 2010-06-19 22:45:20发表:
26# f0rrest
恩,我很赞同,c++和c已经在两条路上了,应用的场合基本上不相同的.例如汇编语言,很古老了,但是现在依然有不少的场合要用到,虽然不多,但却很有作用。
prinse 于 2010-06-19 20:54:13发表:
C已经被phrased out。(淘汰出局)
=============================
10楼这话说的外行死了……
f0rrest 于 2010-06-18 13:27:56发表:
10年前这样说或许没错,现在是2010年,C和C++已经完全在两条道路上发展了。
C依然是一种高效的面向过程的语言,编译技术的发展已经让C在某些条件下达到纯机器代码的效率。
C++则往数据抽象、泛型和面向对象上面前进。
一个大量采用抽象数据类型和多态的C++应用,加载的时候会有大量的symbol address relocation,这将占用很多的CPU和内存,在实时要求很高而CPU和内存相对紧张的嵌入式领域,这是难以容忍的。虽然prelink可以解决一部分问题,但这需要多占用内存,同时也造成可移植性降低。
所以说,现阶段想让C++完全取代C是不现实的。
dreamno1 于 2010-06-18 09:36:04发表:
一样精通了,多了解下别的语言……
tarantula 于 2010-06-18 01:03:24发表:
用中国人的话来说,是不是有些同行相轻的味道呢。
shampoo 于 2010-06-17 18:32:23发表:
语言只是用来呈现事物。用英文,法文,中文,都行。
根据电脑语言学,C或C++都是克难的临时性语言。它们就像今天的微软系统,电脑行家都知道windows不好,但是甩不掉呀!
包括我自己,想玩大型游戏就得上微软。编程就是用C。
但是,对于我的学生或徒弟。。。。,我绝对要求他们必须从C++与Xwindows着手!
这就是为何在这个帖子,我一直告诉年轻人快快把C给扔了!否则中国没有明天。(台湾岛已经没有人在学习C了)
shenhao0129 于 2010-06-17 17:57:57发表:
诚然c++好处多,用途也广,但是有一些场合,比如说嵌入式系统中系统内核移植,驱动部分,基本上还主要式以c为主的,毕竟在底层方面c还是有很大的优势的,当然在这之上的应用层的开发,c++我想估计用的还是很都的,这个我也不是很熟悉了
shampoo 于 2010-06-17 08:40:37发表:
[i=s] 本帖最后由 shampoo 于 2010-6-17 08:44 编辑 [/i]
???言被?作“C with Classes”
维基百科:
《
????室的比雅尼?斯特?斯特?普博士在20世?80年代?明???了C++。起初,???言被?作“C with Classes”(“包含类的C?言”),作?C?言的增?版出?。随后,C++不?增加新特性。虚函数(virtual function)、?算子多?(operator overloading)、多重?承(multiple inheritance)、模板(template)、异常处理(exception)、RTTI(Runtime type information)、命名空?(namespace)逐??入??。
》
百度百科:
在1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
f0rrest 于 2010-06-16 18:19:00发表:
晕啊,C和C++完全是两种不同的语言,C++不过是用了C的一些保留字而已,怎么会得出C++会取代C的结论呢?
shampoo 于 2010-06-15 15:02:24发表:
告诉你三个事实:
一。最近20年,世界上,主流computer science的学生,学习的就是C++。
二。以程序的行数来比较,开源软件的总行数,不到闭源的一百万分之一。
三。书店中关于C语言的书,大部分是C++。至于C么?都是旧书。
总之,前面已经说了,gcc之所以存在,只因为
一。留给shampoo这样子的人使用。
二。维护现有的旧程序,特别是开源部分,因为开源软件很难移植到C++。
事实就是事实,你没啥好争的。