此文贴出后,引起了大家的较多关注,是意料之中的事情。毕竟,C、C++、Linux之父,都是大家最最熟悉的东西。但是许多同学把精力放在纯粹语言优劣的争论上,就没有太大意思了。这场争论的主角之一,微软的Dmitry Kakurin有一句话非常正确:“这是一种信仰问题。因此,任何讲道理和争论都会无穷无尽,而且也毫无意义……”
我想,正确的态度,应该是从高手们的争论中汲取营养,提高和深化自己对相关语言的认识,结合自己的实际环境,想想应该怎么学,怎么用。孟岩和云风、pongba在这方面都有“有营养的”文字,大家可以看看。
各种语言都是有自己的局限性的,也都有自己最擅长的用武之地。今天,软件项目中越来越倾向于采用多语言开发,所以与其花精力做口舌之争,不如多学学对方的语言。写《程序员修炼之路》的Andy Hunt和David Thomas大师早就教导我们,要在软件开发这个行当立于不败之地,应该“每年学一种新的语言”。
Linux之父Linus Torvalds为了Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注。昨天,有一位Dmitry Kakurin老兄在查看了源代码之后,发现使用的是纯C而非C++,表示不可理解,他直言:“别拿可移植性说事儿,这是屁话 (BS,bullshit)。“(此外,他还批评Git蛮力地直接操作文本,既?嗦又易错,而且很难跟上高层代码逻辑。)
这个BS引起了Torvalds的强烈反应,他用“*YOU* are full of bullshit.“(你才满嘴屁话呢)作为自己反驳的开场白。接着,他先转向了对C++的罕见的火药味十足的炮轰:
“C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使情况更糟,以至于极容易产生彻头彻尾的垃圾(total and utter crap)。老实说,选择C就是为了把C++程序员踢出去。……我有这样的结论,任何喜欢用C++而不是C开发项目的程序员可能都是我希望踢出去的人,免得他们来搞乱我参与的项目。C++会导致非常非常糟糕的设计选择。你们这些C++程序员总是一上来就用语言的那些‘漂亮的’库特性比如STL、Boost 和其他彻头彻尾的垃圾,这可能对你们的程序有所‘帮助’,但是却会导致:
“----当库无法工作时无穷无尽的折磨(别跟我说什么STL尤其是Boost很稳定而且可移植性很好,那全是屁话,而且一点都不可笑)
"----低效的抽象编程模型,可能在两年之后你会注意到有些抽象效果不怎么样,但是所有代码已经依赖于围绕它设计的‘漂亮’对象模型了,如果不重写应用程序,就无法改正。
也就是说,使用优秀的、高效的、系统级的和可移植的C++的唯一方式,最终还是限于使用C本身具有的所有特性。项目限制只用C,意味着参与的人不会捣乱,也意味着会得到许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’垃圾的程序员。
"所以,我很抱歉,但是对于Git这样效率是主要目标的软件,C++的所谓优点只是巨大的错误。而我们将看不到这一点的人排除在外却成了一个巨大的附加优势。
"如果你想要用C++写的版本控制系统,去玩Monotone吧。他们确实使用了‘真格的数据库’,使用了‘漂亮的面向对象库’、使用了‘漂亮的C++抽象’。可是说老实话,所有这些对某些计算机专业人士而言富于吸引力的设计决定,其最终结果确是一堆可怕、难以维护的垃圾。“
Torvalds和Dmitry Kakurin争论继续中。
对Torvalds的回击,Dmitry反唇相讥:“随着只用C编程的恐龙们逐渐灭绝,你很快就会发现只剩下自己一个人在固执己见。用Git贡献者的数量是说明不了问题的。显然C++开发者也能够贡献C代码。但是以为他们喜欢这种方式,那可就错了。
“没有C的时候我用汇编编程。然后在C++诞生之前,我转向了C。现在我使用C++和C#,而且不再走回头路。差劲的程序员用任何语言都写不出好程序。但是为了将差劲的贡献者拒之门外这样一个没谱的理由而惩罚优秀的开发者,这简直是胡闹。”
只过了10几分钟,Torvalds就回贴了:“和你不同的是,我实实在在地给出了不喜欢C++的原因,而且指出了它可能导致的各种问题的一些例子。而你呢,没有给出一条像样的使用C++的理由。事实上,Git比其他软件配置管理软件都要好,而好的品味(taste)和C正是原因之一。
对上面的最后一句话,Torvalds后来又做了如下补充:
”说得更具体一些:
“----简单和清晰的核心数据结构, 非常精益(lean)且颇具雄心的代码管理着它们,将”简单胜于花哨”
这一方法发挥到极致。
”----有意识地不抽象数据结构和算法,因为它们恰恰是Git核心的全部要素(whole point)。
”如果你想用更花哨的语言,C++绝对是最糟糕的选择。如果想要真正的高级特性,那就选择有垃圾回收或
者好的系统集成的,而不是既缺乏C的简约(sparseness)又缺乏C的直接而且没有重要概念的高层 绑定(high-level bindings to important concepts)的东西。
“一言以蔽之,C++正处在困境当中,它既无法帮助原型化或者简单的GUI编程足够简化从而真正可用,又 不是C那样积极地鼓励你使用简单和直接的语言构造的精益系统编程语言。
(另一位同学插了一句:这还没有提到很难找到两个C++编译器支持同样的特性。)
“这与什么恐龙毫无关系。好的品味永远不会过时。将C与汇编语言相提并论,恰恰说明你对自己所讨论的问题缺乏起码的概念(don't have a friggin idea)。"


pl_014 于 2010-06-28 15:11:11发表:
这叫什么话?我们没资格,比尔盖茨就有资格吗?鲍尔默就有资格吗?有些人确实没资格在这里说,因为他们那是满嘴胡话,而有些人则是科学地去怀疑,批评也好说三道四也好,只要言之有理,可信于人,不片面,不会迷惑群众,不胡说八道即可,这就是言论自由,言论自由你懂吗?我们中国需要创新型人才,创新型人才需要的就是敢于理性地怀疑,敢于理性地否定,要都像你说的那样,那也就没救了。
如果linus大师说VB是是糟糕程序员的垃圾语言,我绝对是100%地支持,因为我被迫亲自“体验“过VB。如果大师说C#是糟糕程序员的垃圾语言,那我只是一半地支持,因为据说C#和JAVA几乎相同(甚至在抄袭java),如果大师说C++是糟糕程序员的垃圾语言,那么我必须怀疑,因为C++对linux和开源事业曾经做出过并且正在做出重大的贡献,开源离不开C++,至少说KDE是使用qt图库,使用qt图库的应该有许多都是C++写的;如果大师说的是真的,那么你们就都学C好了,什么C++啦java啦perl啦python啦php啦岂不都是糟糕程序员的垃圾语言?
再说你有资格这么说话吗?你的linux水平怎样?你会使用多少命令?你的C语言学的怎样?你读懂linux内核了吗?你源码编译安装过linux操作系统吗?你给linux社区提供过补丁了吗?你参与过linux某个发行版的开发了吗?
shibadashoydy 于 2010-06-28 08:07:40发表:
{:3_118:}
shampoo 于 2010-06-28 00:40:11发表:
这下子可好了。
红联数十万个小朋友大朋友都知道啦!
那个LXXXX不但不伟大,而且
这些代工族更是非常不行。
高中生都可以报名学习的C++竟然不会呢!55555
lonelylong 于 2010-06-27 22:47:23发表:
大师说话,你们查个屁的嘴!你们有资格对大师说三道四吗!等你们中的谁开发出一个linux或者windos级别的饿东西在来这说道!
shampoo 于 2010-06-27 22:38:17发表:
《
C/C++ 基础程式设计班
资料结构与C++进阶班
C++ 程式设计高阶班
3. 全国对学习电脑资讯课程有兴趣之社会大众,不限年纪、学历、性别,只要会基本电脑操作者。
》
最后,说一句,
你们这些代工族,不要再骚扰我啦!实在有够烦滴!
对岸《国立台湾大学》的电脑系,开给高中生的课程,就没有看到《单独的语言C》了。
想想他们自己的本科生还有机会学习语言C么?[b][/b]
北大清华该好好作一些宣导工作的!
shampoo 于 2010-06-27 21:46:30发表:
[i=s] 本帖最后由 shampoo 于 2010-6-27 22:20 编辑 [/i]
32# shampoo
代工族,听着!
相信楼上的帖子,你们是看不懂的!因为你们只是代工族。
台大?工-??系???班[?程??-程式??系列(C?言, C++, C#, VB 。。。。
CSIE是对岸《国立台湾大学》的电脑系,涵盖computer engineering与computer science。
他们本科的程序语言就一门课,所有电脑语言的精髓都得学。既然《C只是C++的subset》,难的就是《C++》,因为考试必须兼顾到语言的结构和文法之原理,就只能考C++了!否则如何区分《科班生》与《代工族》,80分程度与鸭蛋程度只有C++才能分得出来,不是么?
下面,是开给在职进修的,主要学生来源为《非computer science专业》
《通用课程,C没有单独开课!》
C/C++ 基础程式设计班
资料结构与C++进阶班
C++ 程式设计高阶班
《for 微软》
JAVA 班
.NET 程式设计班 (使用 C# )
VB.NET 程式设计班
《招生对象》
1. 本校之教、职员。
2. 本校及他校之在学学生。
3. 全国对学习电脑资讯课程有兴趣之社会大众,不限年纪、学历、性别,只要会基本电脑操作者。
现代人工作忙碌,为适切不同时段而开立各种班次,欢迎学员选择自己可配合的时间。
1. 平日夜间班:每期上课六周,每周上课两次;利用夜间七点至九点半的时段上课。
2. 假日班:每期上课五周,利用每周六及周日的早上时段或下午时段来上课;每次上课三个小时,不含下课时间共计三十小时整。
3. 暑假及寒假白天密集班:每年寒暑假举办,专为服务放假的学生或教职员、志在学习的社会大众。 白天密集班以两周为一期,上课时间为星期一至星期五的上午三小时或下午三小时,共计三十小时整。
shampoo 于 2010-06-27 21:36:04发表:
《C++ 课程》google 搜索
获得约 1,040,000 条结果 (用时 0.18 秒)
搜索结果
1. 台大?工-??系???班[?程??-程式??系列(C?言, C++, C#, VB ...
- [ 转为简体网页 ]
台大?工主攻在??程式??方面,本??班的C/C++程式??系列在2005~2008年的招生比率?全部?程的百分之五十二以上,可知本班在C/C++?程的教???及???忱,都 ...
www.csie.ntu.edu.tw/train/course_program.php - 网页快照 - 类似结果
2. 972 C++ 物件?向程式???程
- [ 转为简体网页 ]
??工程系982 (99/02 - 99/06) C++ 物件?向程式???程. ?程?介 ... 回 C++ 物件?向程式???程 首? ?作日期: 02/25/2010 by 丁培毅(Pei-yih Ting) ...
squall.cs.ntou.edu.tw/cpp/index.html - 网页快照 - 类似结果
litkt 于 2010-06-27 21:06:41发表:
”C是C++的subset,
哪个computer science的老师在教C语言?“
这位老兄是地球人吗?
C是C++的。。。用C++来定义C,这位老兄可真行,可以任意倒转时空。
莱比锡大学所有的Inofrmationstechnik的老师都在教C语言,中国以外的所有大学的计算机系都在用Linux教C语言,只有中国的计算机系在用Windows教什么C#、Delphe这些依赖单一公司私有平台的东西。中国大学的计算机系是微软公司的员工培训部吗?打算在微软公司倒闭那天一起关门大吉吗?
Linus是正确的,任何事物和概念的抽象”封装“都会阻碍交流,使协作成为不可能,不仅软件编程如此,工作生活中一切需要协作的事物都是如此。面向对象”封装“过程本来就与开源南辕北辙。为什么要开源?就是为了便 于协作。任何”封装“和”保密“都使协作难以进行,原因很简单,”封装“后的真实客观的实质不可见,而表面的名字主观性很强,让人难以理解。没有理解就没有协作,这是真理。
就个人独裁来讲,把大量事实封装成几个字的概念,很便于操作,但很多人互相交流的时候,你个人的方便给他人的理解带来麻烦,没有人凭你提供的那几个字的概念就能掌握其封装的大量信息。
什么是面向过程?就是青年男女互相爱睦,谈恋爱,结婚,享受性的快乐,怀孕,生子,一点一滴辛苦养育他成人。
什么是面向对象?就是青年男女授受不亲,对被”封装“得“见不得人”的”性“的“过程”一无所知,为了得到子女就得花钱求助有关机构,由有关机构取精取卵,男女青年就什么也不用管了,只管出钱就行,若干年后得到一个健康的成年子女。这个孩子被有关机构教养成什么样你都得受着。
shenhao0129 于 2010-06-27 20:26:29发表:
额~~~,偶小学数学是语文老师教的,这看不懂
litkt 于 2010-06-27 20:21:57发表:
“现在我以统计局的立场帮总书记算一笔帐:
假设20年后,
中国累积了500万的软件工程现在我以统计局的立场帮总书记算一笔帐:
假设20年后,
中国累积了500万的软件工程师,
每人的年薪为十万人民币。
倘若他们对GDP的贡献值是十倍。
那么,他们对祖国每年的GDP贡献总值,就是
500万 X 10万 X 10 = 50000个亿人民币
让C++的人去赚钱有何不好?中国不需要GDP么?师,
每人的年薪为十万人民币。
倘若他们对GDP的贡献值是十倍。
那么,他们对祖国每年的GDP贡献总值,就是
500万 X 10万 X 10 = 50000个亿人民币
让C++的人去赚钱有何不好?中国不需要GDP么?“
中国不需要GDP,尤其不需要靠提高老百姓生存成本增长的这种GDP。如果总书记爱好这种GDP的话,中国人早晚都得灭亡,整个中国就剩总书记一个人躺在堆积如山的GDP上睡大觉。
liye220 于 2010-06-27 11:40:19发表:
只不过是大家的立场不筒而已
liye220 于 2010-06-27 11:40:06发表:
没有绝对的,也没有绝对的坏呀
liye220 于 2010-06-27 11:39:46发表:
没有最好的,只有更好的
liye220 于 2010-06-27 11:39:34发表:
用习惯酒好了
shampoo 于 2010-06-27 09:50:09发表:
观念有待加强!
高中水平的老头子,不能因为学不了微积分,就大骂:高等教育没有用!
C是C++的subset,
哪个computer science的老师在教C语言?
C语言之所以继续存在,就是两个理由:
一。旧的程序太多了,维护上面需要。
二。老旧人才只习惯C,他们对C++不熟悉。
三。旁门科系的人学习C比较容易,(这是废话,不是理由,只能说这些年轻人懒惰!)
jerry_shan 于 2010-06-27 09:34:43发表:
就像操作系统 可以使用win 也可以是用linux
就是偏好
jerry_shan 于 2010-06-27 09:33:56发表:
个人更比较偏爱C++
没什么好坏之分,只是熟悉了。
jerry_shan 于 2010-06-27 09:33:23发表:
呵呵,这的确是信仰的问题
pl_014 于 2010-06-26 22:40:37发表:
唉,Torvalds倒底是怎么了,这都让我想起鲍尔默了。初学C语言的我确实分不出C和C++的好坏,有的linux业界人士说,C适合底层程序的开发,C++适合大型软件的开发,但我知道KDE用的就是qt,既然用的是qt,那么也只能用C++或其它语言去写。我从网上看到一篇文章,里面写的是Torvalds曾试图用C++写linux内核,但由于种种原因失败了,但这最多只能说明C不适合写系统程序,但不能说明C++就一无是处,我想这点要搞清楚。
有句话叫“人非圣贤,孰能无过”,解放中国的毛泽东也弄出过文化大革命。我们在支持别人时自己也要有个清醒的头脑。中国需要创新型人才,什么是创新型人才,就拿科技创新来讲,首先要敢于批判,而且要理智地批判,linux人学会了批判windows,学会了批判微软,这很好,说明你们已是忠实的linux的支持者。但光学会批判微软不足够的,如果你也像那些糊涂的微软的支持者支持微软那样狂热地支持着linux,却把BSD和novell都说得一无是处,那我说你和那些微软的支持者没有什么本质上的区别。
我之前曾看到一篇贴子,大意是oracle宣布solaris不能再免费使用,unix已死,高呼万岁。我都觉得特别的不解,首先solaris是unix-like系统,而不是纯unix系统,现在的unix由sco维护,哪里来的unix?再说opensolaris不还是存在吗?哪里死了?solaris死了于我们有什么好处?那些使用unix和unix-like系统的企业无疑少了一种选择,opensolaris也是对unix事业,对开源事业的贡献者之一(虽然不是GNU),也是反微软垄断的一员,solaris死了,我们有什么可欢呼的?Torvalds曾经对opensolaris的态度就使我对他起了一些怀疑,他说solaris是残缺版的东西,那么我还说linux最初的版本必须执行于minix上了。
Tuzki 于 2010-06-26 14:05:22发表:
他们那种高度的争论,我们没资格在这里指手画脚,除非我们也能达到他们那样的高度。
Tuzki 于 2010-06-26 13:59:36发表:
程序设计就是门语言,喜欢用什么就用什么
shampoo 于 2010-06-26 07:53:19发表:
如果你不是computer science,也不是computer eng.,那么学习C是足够的。
(1)EE或通讯等专业学习了C,可以在驱动和嵌入式混口?吃。
(2)computer eng学习了C,可以在PDA,相机,机器人,手机等产业发展
(3)土木机械等专业学习了C,可以在CAD/CAE/CAM混口?吃。
你们可以自称是软件工业的一份子,当然也能说是工程领域的一份子。
还有,大陆目前只有(1)和(2),第(3)似乎还没有?
不论如何,想清楚,你们与computer science不但无关,而且无法影响computer science的未来。
为了每年五万个亿人民币的GDP,党妈妈肯定会支持
《FreeBSD,X11,Intel C++编译器》
chainloader 于 2010-06-26 00:59:53发表:
汗。。。
吵得好凶,不光他们吵,看来我们里面也吵了
不知道哪个好,不过我相信linux,相信C。。。 我决定学C试试,反正C++才学一点。。。
shampoo 于 2010-06-26 00:13:21发表:
现在我以统计局的立场帮总书记算一笔帐:
假设20年后,
中国累积了500万的软件工程师,
每人的年薪为十万人民币。
倘若他们对GDP的贡献值是十倍。
那么,他们对祖国每年的GDP贡献总值,就是
500万 X 10万 X 10 = 50000个亿人民币
让C++的人去赚钱有何不好?中国不需要GDP么?
mdxz1229 于 2010-06-26 00:08:34发表:
我同意这些人的看法,c++ 就是为了赚钱,有好吗?????????????
shampoo 于 2010-06-25 19:43:59发表:
认识豆芽菜,且喜欢呼吸自由空气的,看着来:[color=DarkRed][/color]
Mesa3D License:
《
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
* Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice including the dates of first publication and
* either this permission notice or a reference to
* http://oss.sgi.com/projects/FreeB/
* shall be included in all copies or substantial portions of the Software.
》
Xorg License:
《
Copyright 1992, 1998 The Open Group
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
》
litkt 于 2010-06-25 17:34:19发表:
股价是万恶之源。
那些依靠胁迫计算机使用者赚取超额利润的人绝不会有好下场。
那些为这类人抬轿子的computer science的那些人也绝不会有好下场。他们除了吹捧Windows那些胁迫计算机使用者和编程者的“技巧”外,没见过他们为人类做好一点好事。
Linus Tovalds万岁!Linux万岁!
所有不屈从资本淫威,坚持为人民服务的人万岁!
shampoo 于 2010-06-25 16:48:35发表:
今天Linux的悲哀就是:
懂得C++,Data Structure,Algorithm,。。。。,这些《computer science》的人,不但不欣赏开源,甚至瞧不起Linux。
最惨的是,喜欢Linux的人拼着命要把《computer science》的人赶走!
呵呵,谁也救不了你们的。自作自受!
继续自我陶醉吧!
祝大家,股价万岁!
shampoo 于 2010-06-25 16:25:25发表:
首先我说说,Linus Torvalds是啥样东西?垃圾!
30年前发明《三轮车》的家伙,今天有啥资格出来评论《和谐号》的设计!
一个60岁的老头子,30年来,他写了多少行的程序?
当时他耗了一个月写了一个homework,今天的Linux经过了多少好手?多少岁月?他看得懂么?
西方人有风度,把credit给了他,他该满足了!该偷笑了!
硬件行业:PDA,手机,相机,嵌入式,驱动。。。。。
软件行业:Computer Science
软件行业征才的时候,你们在C++,Data Structure,Algorithm,。。。。,那一门行呢?
wjun520 于 2010-06-25 14:00:47发表:
狂顶Torvalds!!!!!
zcf115 于 2010-06-25 13:55:45发表:
不管如何,先支持Linus。
shenhao0129 于 2010-06-24 18:17:18发表:
其实任何一种语言都有一个适合的作用范围的。或者说都有自己的长处的
zhangsir 于 2010-06-24 17:52:25发表:
这个可不可以理解为愤怒状态下的语言,不能完全当真的。
himila 于 2010-06-24 14:48:10发表:
原文地址???
iamxzg 于 2010-06-24 13:01:23发表:
我目前也只会C
shenhao0129 于 2010-06-24 09:26:06发表:
唉,我也是学C的,C++太难,学不会
yreqab 于 2010-06-24 08:27:07发表:
何必要引起争论呢