C语言已经死了 5个需要忘却它的理由

现在,有很多C/C++程序员总是自命不凡,看不起其他开发人员。其实,或许别人更看不起他呢!

学生时代,我也曾醉心于C/C++,但时至今日,始终无法写出无懈可击的C++代码,所以我始终认为我不会C/C++。这些年,我一直在寻找编写C++代码的最佳模式。但是,老实说,我还没有见到过哪个称得上高手的C++程序员,也没有见到过写得Very good的C/C++代码。C/C++代码总是丑陋不堪,BUG丛生!

我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&R和Steele的书。我太了解C语言了,但是,我讨厌他。十分讨厌!

当我读到一篇博客,题目是“为什么每个程序员都应该学习C语言?”时,我真是鸡皮疙瘩满地。如果你真的是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。

1、内存分配

仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存,在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。

2、多线程

我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每一个直觉、经验,用在多线程的时候都是错误的。至少JAVA有表示同步的关键字和备有证明文件(但是是个很奇怪的文件)的记忆体,但即使是这样,除非你使用新的javax.concurrent,否则也只能在那些巨大的平行摆放的机器们面前崩溃。回到C语言上:在模拟生产的环境下,坚持一个星期在数据中心调试一个死锁(这事真的发生过)。而JAVA却只需要Ctrl+Break!天哪!!!

3、指针

指针太难以控制了,太阴险了;我甚至没有委婉一点的方式去形容它。我生命中每年都有几个月被用来调试那些奇怪的指针问题。我过去常常努力获取所有的诀窍,比方说难以理解的构成符、联合体和偏移量,以及重用最后两位做标记,还有所有其他的诀窍。但我发现这么做根本不值得。其他语言的静态引用就可以解决了。

4、过早的优化

说到诀窍,你是否曾经浪费脑细胞去研究究竟*p++是不是比p[i]快?你是否曾经花时间去试着做点变化来代替乘法,或者去尝试使循环中的倒置运行更快的方法?还在为传递一个参数的速度和反对添加结构,并且传递它的速度一样而苦恼不已?停吧!算法是速度的关键,程序员的水平决定了他会使用那些算法。知道这一点能让你的程序更好,更快一点并且让你的脑袋少扭几个筋。好吧,有一些例子也许可以这样做的……不,你就别那么做就行了!

5、测试

你最喜欢的C的单元测试的工具是哪个?嗯…一个也想不到?单元测试一定是一点也不重要,是吧?或者是太麻烦了,很难跟上进度,浪费时间。你可以把这个时间用到更加有用的事情上,让它只占用工作时间的1%,那还比较合适。或者在数据中心,通过优化的没有标记的图形来调试这个仅仅由100个同时在线使用者引起的问题。

我本来应该继续再说一些原因的,但是5个现在就足够了;说完这些,现在感觉好点了。C以前是非常棒的…那是在1984年的时候。直到今天,那些用C写的新代码都让我感到惊喜…如果你让我比较的话,我觉得C++只是比C稍微好点。如果你想要学些老一点的语言,不妨尝试Forth,Lis,或者APL。这些老式的语言起码能教会你,用不同的而且优雅的方式去思考你的程序。

作者简介

Ed Burnette是一位有着丰富编程经验的程序员。他现在致力于使用JAVA和C来开发OLAP客户端和服务器。他业余时间喜欢研究Java、Eclipse和开源软件。他写了很多关于Eclipse的文章和书籍,另外他还是EclipseZone.com的主编。

时间: 2024-09-21 18:13:06

C语言已经死了 5个需要忘却它的理由的相关文章

并非偏见 也驳“驳'C语言已经死了'”

>> 有偏见的永远只是个体,而不是群体.作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正是他自己. 错了,真理是站在少数人这边的,当一种变革将发生的时候,带有偏见往往是大众是传统力量. >> 这段话更加荒谬了.没见过优秀的C/C++代码? C++标准库(STL)如此优雅.况且,有那么多经典的C/C++开源作品,以及无意之中泄漏的Windows NT核心源码,哪一样不是绝世之作?我为作者浅陋感到难过. STL的代码并不优雅,缺乏functional programming

浅薄与偏见 驳“C语言已经死了”

现在,有很多C/C++程序员总是自命不凡,看不起其他开发人员.其实,或许别人更看不起他呢! >> 有偏见的永远只是个体,而不是群体.作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正是他自己. 学生时代,我也曾醉心于C/C++,但时至今日,始终无法写出无懈可击的C++代码,所以我始终认为我不会C/C++.这些年,我一直在寻找编写C++代码的最佳模式.但是,老实说,我还没有见到过哪个称得上高手的C++程序员,也没有见到过写得Very good的C/C++代码.C/C++代码总是丑陋不堪

R语言试用开源数据分析平台的4个不错的理由

R 已证明自己是不断成长的大数据领域的一个有用工具,并且已集成到多个商用包中,比如 IBM SPSS® 和 InfoSphere®,以及 Mathematica.本文提供了一位统计学家对 R 的价值的看法. 您可能已经听说过 R.或许您阅读过类似于 Sam Siewert 的 "云中的大数据" 这样的文章.您或许知道 R 是一种编程语言,而且知道它与统计学有关,但它是否适合您呢? 为什么选择 R? R 可以执行统计.您可以将它视为 SAS Analytics 等分析系统的竞争对手,更不

苹果这一棍打不死宏达电

东方早报记者 是冬冬 虽然苹果发起了诉讼,但显然要等到开庭审判还要很长一段时间,何况是判决结果.宏达国际也表态,不会影响其短期内的业绩.苹果.宏达和谷歌,大家完全可以继续开展自己的业务. 假如法院真遂苹果之意,全面禁止宏达国际在美国的销售业务,显然不可能.知识产权律师Stephen Lieb表示,近段时间法院已经明显收紧了颁布禁令的政策,因为要考虑到市场的状况.产品的影响和公众的利益.而且,不排除宏达国际或者谷歌学习去年苹果反诉诺基亚一案,对苹果提起反诉,那样苹果自己也将惹来麻烦. 苹果此次诉讼

基于组件的.NET软件开发(1)

基于组件的.NET软件开发 前言 随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式.以成熟的CBD(Component Based Design:基于组件的系统设计)理论为指导,在对系统的分析与设计完成之后,系统开发体现为复用已有组件.开发新组件以及将所有组件装配起来的过程.J2EE大规模地使用各种组件构照复杂的企业信息系统,获得了巨大的成功. 作为后来者,.NET framework汲取了J2EE的成功经验,在组件化开发方面有着自己独到的设计,在本文中,我们将介绍.NE

C#首席设计师Anders Hejlsberg专访(一)

设计 C#首席设计师Anders Hejlsberg专访 作者:John Osborn 译者:荣 耀 [译序:精彩技术,不容错过!限于时间和能力,译文倘有讹误,当以英文原版为准.] 7月,O'Reilly 编辑John Osborn参加了微软职业开发者会议.在此,他对著名的工程师.微软.Net框架设计师.C#程序语言首席设计师Anders Hejlsberg进行了采访.Anders Hejlsberg因设计PC上最早的语言之一-Turbo Pascal而出名.他把Turbo Pascal授权给B

C#首席设计师Anders Hejlsberg专访(1)转

设计 作者:John Osborn 译者:荣 耀 [译序:精彩技术,不容错过!限于时间和能力,译文倘有讹误,当以英文原版为准.] 7月,O'Reilly 编辑John Osborn参加了微软职业开发者会议.在此,他对著名的工程师.微软.Net框架设计师.C#程序语言首席设计师Anders Hejlsberg进行了采访.Anders Hejlsberg因设计PC上最早的语言之一-Turbo Pascal而出名.他把Turbo Pascal授权给Borland公司,后又率队开发了Delphi-一个极

汇编语言第4周学生总结反馈

汇编语言程序设计课到第4周.这周的课后总结中,让同学们写下"我的疑惑".这倒好,真引出了一大堆好问题,其实,这也就是大家学习的最真实情况. 为同学们的解答公布如下.下一周,老贺不做这种一对多的事情了,我们开启互评模式,靠同学们的多对多,完成更有意义的深入交流. 学号 学生小结 老师点评 (14)1147 我得到的知识: loop指令和[bx]指令的运用及其相关的内容,还有源程序文件.目标文件和可执行文件的相互转换.我得到的技能: 用editplus去编写源程序,使用masm进行编译.我

Python粉都应该知道的开源机器学习框架:Scikit-learn入门指南

对Python语言有所了解的科研人员可能都知道SciPy--一个开源的基于Python的科学计算工具包.基于SciPy,目前开发者们针对不同的应用领域已经发展出了为数众多的分支版本,它们被统一称为Scikits,即SciPy工具包的意思.而在这些分支版本中,最有名,也是专门面向机器学习的一个就是Scikit-learn. Scikit-learn项目最早由数据科学家 David Cournapeau 在 2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器