`
zuroc
  • 浏览: 1307865 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

[转载]C++之父访谈

阅读更多
1998年的元旦,Bjarne Stroustrup(C++之父)接受了IEEE《计算机》杂志记者的专

访。编辑很自然的认为他会对于过去七年来使用他创建的语言进行面对对像设计做一个

历史性的回顾。而在这个专访中,记者获得了更有价值的新闻,但是最后编辑决定为了

整个IT产业,这个稿子不能发表,但是就像其它被砍掉的新闻,往往还是弄得路人皆知

的。

这一篇适当时专访的完全拷贝,没有被编辑、删改或者做过什么润色处理,也没有发布

过,可能看起来不像常见的杂志文章,但这是实情。

你会发现真正引人入胜的地方... ...

记者: 您在几年前你改变了软件设计世界的面貌,现在再回首往事您有什么感想?

Stroustrup: 事实上我在你到来之前的这些天里一直在考虑这件事,你还记得几乎所有

的人都在写 C程序那会儿吗?麻烦的是这些人写得太好了,而且那些个大学也都在努力

的传授 C编程技术。的确他们是十分的成功——我要特别的指出“成功”这个词——因

为这种显著的 C程序员的培养效率,这就是产生问题的原因。

记者: 这难道是个问题吗?

Stroustrup: 当然,你记得大家都在用Cobol语言写程序的时候吗?

记者: 哦,当然,当时我也一样。

Stroustrup: 在一开始的时候,这些人简直象半个上帝似的拿着高工资,享受着贵族一

样的待遇。

记者: 唉,那些日子多么的让人怀念,是吧?

Stroustrup: 当然了。但是接着发生了什么?IBM觉得这样不舒服,就投资了数百万来培

养程序员,直到程序员多得一毛钱就可以雇一打。

记者: 这就是为什么当时我撤出来了,工资在一年里就降到人们在说做个记者都比程序

员强的地步。

Stroustrup: 对啦!那时侯相同的事情发生在了C程序员身上了。

记者: 这个我明白了,可是您要说的是……

Stroustrup: 有一天,我坐在办公室里就在想如何能把这件事挽回一些。我想知道如果

有一种特别复杂而且难以学会的语言,是否就没有人可以又把程序员们搞到市场的泥潭

里去呢?我用了从X10里瞭解到的东西,,噢,就是X-Windows,真是一个该死的图形系

统,只能运行在那些个SUN 3/60的机器里,哈!它具有所有我想要的特征:可笑而复杂

的语法,含混的功能描述,还有伪装的OO结构,就算是在现在,还是没有人愿意用那些

东西,如果你不想发疯的话,Motif才是唯一解决方案。

记者: 你是在开玩笑吗?

Stroustrup: 没有,事实上还有另外的一个问题,UNIX是用C写的,就是说任何一个C程

序员都可以很容易的成为系统程序的开发者。还记得一个大型的主机系统应用的开发者

通常能挣多少钱吗?

记者: 你肯定是知道我当时就是干这个的。

Stroustrup: 好吧,因此这个新的语言一定要通过隐藏所有的系统调用来和UNIX分离开

来,这样可以使那些个就只是知道DOS的人也可以活得很体面。

记者: 我不大相信您说的这个……

Stroustrup: 而且到现在时间也够长的了,我相信有很多的人已经指出了C++是对时间的

浪费,我要说的是,这个过程比我想像的要长的多了。

记者: 那么您又是如何做到的呢?

Stroustrup: 那只是一个玩笑,我真的没有想到人们会对那本书那么认真。任何人只要

长了半个大脑也应该明白面对对像编程是荒谬而不合逻辑的,而且效率低下。

记者: 什么?

Stroustrup: 再说代码重用,你什么时候听说过有公司重用他的代码?

记者: 事实上从来没有,但是……

Stroustrup: 那么我提醒你一下,在早期有很多的例子。哦,有一家叫Menter Graphic

s的俄勒冈州公司,我认为他们应该是感冒了,竟然在90年或者是91年把所有的代码用C

++重写了一遍,对不起,我实在是想不起确切的时间了,我看大家应该从这个事件中吸

取教训。

记者: 没有人真正的吸取了教训吗?

Stroustrup:

没有,而且还有很多公司犯同样的错误,还向他们的股东解释说那3亿美圆的损失是正常

的,他们就是做了这样的事情。

记者: 真的?可是这也只能证明OO方法是能够工作的,不是吗?

Stroustrup: 也许吧,执行文件是那么大,在一台有128M内存的HP工作站上只是装载到

内存中就要用5分钟时间,然后将象毛毛虫爬树一样的运行。事实上我在第一个礼拜就发

现了这个缺点,奇怪的是好像没人在乎这个,Sun和HP好像只在乎买出那些功能强大的各

种玩意儿,而不在乎在上面跑什么程序。在AT&.T的时候我编了一个“Hello World”程

序,简直是难以置信,执行文件有2.1M。

记者: 那么大?是啊,就是从那时候开始的编译程序产生大个的文件的。

Stroustrup: 就是这个样子,如果你不信的话,可以用最新版的g++试一下,你得到的东

西不会小于0.5M,而且就在最近也有一些在各个国家的例子,比如在British Telecom公

司发生的灾难,但是幸运的是他们把原来的计划废弃了,又重新开始,他们就比Austra

lian Telecom公司幸运,现在我又听说Siemens公司又在造“恐龙”了,他们目前是越来

越担心要用来加速执行软件所要使用的昂贵的高速硬件,难道你真的认为那些个多态继

承是一种乐趣吗?

记者: 噢,但是C++的确是一种可靠的语言啊!

Stroustrup: 你是真的相信的,对吧?你有没有真的坐下来用C++开发过项目?我来告诉

你会发生什么:首先,我会加入足够的缺陷来让那些微不足道的模块先执行,让工作超

载,在工程扫尾的阶段,你回发现几乎所有的模块都会有这种缺陷,这是因为人们以为

就是应该这样做,因为在C++的教程中就是这样写的。在相同的模块中执行不同对象的相

似操作意味着:有一些东西在各个模块中是完全不相同的。当你有了互不相同的上百个

这样的模块,就可以把他们集成在一起了。其次,我再说说所谓的数据隐藏,上帝啊,

当我听说了有的小组实现了什么对像协同通信,我真的是憋不住想笑!我看,OO方法中

的“协同”这个词可以把项目经理的肋条累断。

记者: 我不得不说着太可怕了!你还说这是用来提高程序员的工资,这太龌龊了!

Stroustrup: 龌龊?不是这样的,任何人都有选择的权利。我是并不想让事情发展成这

个样儿的。不管怎么说,我基本上还是成功的。C++现在已经不行了不是?而且程序员现

在还是能挣到高工资的——特别是那些还要维护这些该死的“++”东西的那些程序员。

你应该明白如果你去维护一个不是由你开发的C++模块是不可能的。

记者: 怎么会这样的?

Stroustrup: 你糊涂了?还记得typedef吗?

记者: 噢,当然。

Stroustrup: 知道要在头文件里发现象'RoofRaised'这样的变量是一个双精度数要用多

长的时间吗?想像一下要在一个工程里所有的类定义里寻找那些typedefs

... ...

... ...

记者: 那么你为什么认定你已经成功了呢?

Stroustrup: 还记得一般一个C程序项目要多长时间吗?一般是6个月。这对于一个要养

活妻子孩子的程序员是不够的。如果是一样的项目,但是用C++来开发,会怎么样呢?我

告诉你:要一两年才能做完!这不好吗?就是一个小小的编程语言选择的决定,语言程

序员就不会轻易的下岗了不是?而且那些个大学已经很久没有传授C了,现在是对C程序

员的短缺。特别是对UNIX编程熟悉的程序员。在使用了这么多年的“new”以后,而且一

直以来一直都不用担心返回值的问题。还有多少程序员知道使用“malloc”?事实上,

大多数的C++程序员舍弃了返回值,无论什么样的结果,甚至于返回了“-1”,其实用不

着什么'throw'、'catch'、'try'之类的东西,至少你应该知道产生了错误。

记者: 但是继承的确不是可以节省很多时间的吗?

Stroustrup: 是吗?你注意过C项目计划和C++的项目计划之间的不同吗?在进行了三次

系统功能分解后,要确定所有的东西都可被继承到,如果没有那么说明还是有错,但是

有谁在C编程里听说过存储渗漏这个说法?现在你可以在业界的大厂商的产品中发现了!

有很多的公司不得不放弃了,并且把工程转包出去,他们知道最后可能像筛沙子似的把

内存站用完,他们才不想遭那份罪呢!

记者: 也有一些工具来……

Stroustrup: 大多数的防渗漏的工具不还是用C++写的。

记者: 果把这些东西发表了,我们可能在这个行业里无法立足了,你知道吗?

Stroustrup: 我不相信,就像我所说的,现在C++已经是在垂死挣扎了。任何公司只要清

醒,就会认识到用C++来做项目简直是一场灾难。如果还没认识到这些,那就是活该!有

一段时间我使劲的劝Dennis Ritchie用C++重写UNIX。

记者: 啊?天哪!他是怎么说的?

Stroustrup: 我不得不承认他的洞察力,我想他和Brian在很早的时候就清楚的明白了我

的意图,但是从来没有说出来,他说如果我愿意的话,他可以帮我用C++写

个DOS。

记者: 那么你写了吗?

Stroustrup: 事实上,我写了,我完成后可以给你一个DEMO,我在机房里的一台4个CPU

的Sparc 20上做的,运行得特别的快,而且只占了70M的硬盘空间。

记者: 有For PC的版本吗?

Stroustrup: 现在你在开玩笑了,难道你没见过Windows 95吗?我认为它是我成功标志

之一,

记者: 我也总是在想关于Unix++,还是有人在试着搞这么个东西的。

Stroustrup: 那是因为他们还没有看到这个采访手迹。

记者: 对不起,不过依我看,我们恐怕不会刊发这些东西的。

Stroustrup: 但是这是个世纪故事,我只是想让我的程序员夥伴们记住我为他们做了什

么,你知道这些个日子里C++程序员可以挣多少钱吗?

记者: 我所听说的是一个顶尖的C++程序员一小时可以挣到70~80美圆。

Stroustrup: 知道了吧!而且我打赌他肯定可以挣那么多!!单步跟踪我放在C++里面的

那些gotcha,并不是容易的事了。在在项目中使用C++的所有特性即使是有经验的程序员

也会感到困惑. 事实上有时侯我也是觉得挺难受的,虽然这个特性是为我的初衷而做的

,我几乎喜欢上了这个语言。

记者: 你的意思是说你以前是不喜欢的?

Stroustrup: 我是狠它的!难道你不同意它是挺笨重的吗?但是当那本书的版税源源不

断的…… 我想你能够明白这些。

记者: 等一下,关于参数的定义,请您一定要回答,您是否真的改良了C的指针。

Stroustrup: 呵,我也是总是想知道这个。一开始我认为我做了,但是有一天我和一个

刚开始学习 C++的程序员讨论了这个问题。他说:“他从来就不知道他的变量是否被引

用了,所以我还是在使用指针,那个星号总是在提醒我。”

记者: OK,一般在这个时候我一般是说:“Thank you very much.”,但是现在用在这

里好像还是不够。

Stroustrup: 答应我一定要发表。

记者: 好的,我会通知您的,但是我已经知道了我的编辑会说什么了。

Stroustrup: 谁会相信呢?你能把这盘录音带给我拷一个吗?

记者: 可以。

PS:
98年吧,愚人节的玩笑。Bjarne在他的网站上做过解释了。
分享到:
评论

相关推荐

    基于servlet+jsp+mysql实现的影视管理系统课程设计

    【作品名称】:基于servlet+jsp+mysql实现的影视管理系统【课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于servlet+jsp+mysql实现的影视管理系统【课程设计】 基于servlet+jsp+mysql实现的影视管理系统【课程设计】 Java Web课程设计,基于servlet+jsp+ajax+mysql做的影视管理系统 运行环境: Tomcat 9.0 JDK 1.8 MySQL 8.0 后台管理账号密码均为:root,项目依赖:lib 目录 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    kernel-5.15-ky10-x86.tar.gz

    kernel-5.15-ky10-x86.tar.gz

    基于AT89C51 单片机为核心器件,程序设计采用C 语言,Keil 软件编译程序,配以相关外围接口电路,实现了方波、锯齿波、正弦波、三角波、梯形波五种特定波形的产生【论文+源码】

    【作品名称】:基于AT89C51 单片机为核心器件,程序设计采用C 语言,Keil 软件编译程序,配以相关外围接口电路,实现了方波、锯齿波、正弦波、三角波、梯形波五种特定波形的产生【论文+源码】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:本设计中的波形发生器系统要求基于51单片机,因此选用以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个波形发生器的硬件系统。使用C 语言对单片机编程可产生相应的正弦波,方波,三角波,锯齿波梯形波波形信号。在程序运行时,当接收到按键信息后,需要输出某种波形时,调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出即可得到要求的波形。 当需要改变频率时只需要改变单片机的波形发生程序中的递增或者递减变量即可。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    基于java的法律咨询系统设计与实现.docx

    基于java的法律咨询系统设计与实现.docx

    适用于元营销 API 的 Python SDK.zip

    适用于元营销 API 的 Python SDK适用于 Python 的 Facebook Business SDK 介绍Facebook Business SDK是一站式服务,可帮助我们的合作伙伴更好地服务于他们的业务。合作伙伴正在使用多个 Facebook API 来满足其客户的需求。采用所有这些 API 并在各个平台上保持最新状态可能非常耗时,而且最终会造成高昂的成本。为此,Facebook 开发了 Business SDK,将其许多 API 捆绑到一个 SDK 中,以简化实施和维护。Business SDK 是 Marketing API SDK 的升级版,其中包括 Marketing API 以及来自不同平台(如 Pages、Business Manager、Instagram 等)的许多 Facebook API。快速入门商业SDK入门指南Python 目前是我们第三方开发人员最常用的语言。是一个 Python 包,它提供了您的 Python 应用程序与Business SDK 内的 Facebook APIfacebook_business之间的

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 公交车调度的运作数学模型 共12页.pdf

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 公交车调度的运作数学模型 共12页.pdf

    基于smart-socket实现的轻量级http服务器

    smart-http 是一款可编程的 Http 应用微内核,方便用户根据自身需求进行 Server 或 Client 的应用开发。支持GET、POST的 HTTP 请求。提供了 URL 路由组件,可以快速搭建一套静态服务器。支持部分 RFC2612 规范,后续会逐渐完善。支持 Https 协议,由 smart-socket 为其赋能。具备文件上传的能力。支持 websocket、Cookie支持 Server、Client 开发

    新闻资讯系统 微信小程序+SpringBoot毕业设计 源码+数据库+论文+启动教程.zip

    新闻资讯系统 微信小程序+SpringBoot毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1oiBpYcEBp

    高校师生工作室-JAVA-基于微信小程序的高校师生工作室管理系统的设计与实现

    高校师生工作室-JAVA-基于微信小程序的高校师生工作室管理系统的设计与实现

    基于java的常见小儿疾病中医护理系统设计与实现.docx

    基于java的常见小儿疾病中医护理系统设计与实现.docx

    本教程播放列表涵盖了 Python 中的数据结构和算法 每个教程都有数据结构或算法背后的理论、BIG O 复杂性分析和可供练习的练习 .zip

    本教程播放列表涵盖了 Python 中的数据结构和算法。每个教程都有数据结构或算法背后的理论、BIG O 复杂性分析和可供练习的练习。使用 Python 的数据结构和算法本教程涵盖了 Python 中的数据结构和算法。每个教程都包含数据结构或算法背后的理论、BIG O 复杂度分析以及可供练习的练习。要观看视频,您可以访问播放列表https://www.youtube.com/playlist?list=PLeo1K3hjS3uu_n_a__MI_KktGTLYopZ12订阅 codebasics youtube 频道https://www.youtube.com/c/codebasics

    数学建模学习资料 蒙特卡罗方法课件教程 第2章.随机数 共29页.pptx

    数学建模学习资料 蒙特卡罗方法课件教程 第2章.随机数 共29页.pptx

    python实现基于CNN网络的新闻数据集文本分类源码+数据集(Python期末大作业)

    python实现基于CNN网络的新闻数据集文本分类源码+数据集(Python期末大作业),个人大三学期的期末大作业、经导师指导并认可通过的高分大作业设计项目,评审分98分。主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。 python实现基于CNN网络的新闻数据集文本分类源码+数据集(Python期末大作业)python实现基于CNN网络的新闻数据集文本分类源码+数据集(Python期末大作业),个人大三学期的期末大作业、经导师指导并认可通过的高分大作业设计项目,评审分98分。主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。python实现基于CNN网络的新闻数据集文本分类源码+数据集(Python期末大作业),个人大三学期的期末大作业、经导师指导并认可通过的高分大作业设计项目,评审分98分。主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业。python实现基于CNN网络的新闻数据集文本分类源码+数据集(Python期末大作业),个人大

    中小学知识产权教育试点学校申报表.doc

    中小学知识产权教育试点学校申报表.doc

    基于django的音乐推荐系统.zip

    基于django的音乐推荐系统.zip

    在建工程涉及专项行动情况检查表.docx

    在建工程涉及专项行动情况检查表.docx

    毕设源码-python-django基于python技术的学生管理系统的设计与开发-期末大作业+说明文档.rar

    本项目是一个基于Python技术的学生管理系统,采用Django框架进行开发,旨在为计算机相关专业的学生提供一个实践性强、功能全面的管理系统,以帮助他们完成毕业设计或进行项目实战练习。 系统实现了对学生信息、课程信息、成绩、考勤等多方面的管理功能。学生信息管理包括学生基本信息的增删改查;课程信息管理允许管理员设置课程信息,包括课程名称、授课老师、学分等;成绩管理功能使学生和教师能够录入、查看和修改成绩;考勤管理则方便教师记录学生的出勤情况。 该项目采用B/S架构,前端使用HTML、CSS、JavaScript等技术,后端使用Python语言和Django框架,数据库采用MySQL。Django框架提供了强大的后台管理功能,使得系统管理更加便捷。 通过开发这个项目,学生不仅能提升自己的编程能力,还能学习到如何构建一个实际应用的系统,对于即将步入职场的学生来说,具有很高的实用价值。

    适用于 Python 的 Splunk 软件开发工具包.zip

    适用于 Python 的 Splunk 软件开发工具包参考文档适用于 Python 的 Splunk Enterprise 软件开发工具包版本 2.1.0适用于 Python 的 Splunk Enterprise 软件开发套件 (SDK) 包含库代码,旨在使开发人员能够使用 Splunk 平台构建应用程序。Splunk 平台是一个搜索引擎和分析环境,它使用分布式 map-reduce 架构来有效地索引、搜索和处理大型时变数据集。Splunk 平台深受系统管理员的欢迎,用于聚合和监控 IT 机器数据、安全性、合规性以及各种其他场景,这些场景都需要有效地从大量时间序列数据中索引、搜索、分析和生成实时通知。Splunk 开发者平台使开发人员能够利用 Splunk 平台所使用的相同技术来构建令人兴奋的新应用程序。开始使用 Python 版 Splunk SDK开始使用 Python 版 Splunk Enterprise SDKSplunk Enterprise SDK for Python 包含库代码,其示例位于splunk-app-examples存储库

    分布式事务练习.zip

    分布式事务练习

    家庭财务管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    家庭财务管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

Global site tag (gtag.js) - Google Analytics