我喜欢 C#。我大学毕业后的第一个真正的编程项目是用 Unity 编写的游戏。我立刻爱上了这门语言。只是觉得很新鲜。它就像 Java……如果 Oracle 真的关心它的话。这是在 Java 7 天。我听说他们从那时起转向了更快的发布周期,所以事情可能会发生变化。
原话是“除了轰炸,我知道没有比租金控制更有效的城市摧毁方法”。我没有改变轰炸,因为我不知道编程语言的等价物是什么。但是轰炸是行不通的。我的意思是你可以轰炸公司的总部,但它不会杀死该语言,只会停止它的开发。我希望我不会被恶魔化。
因此,特征蠕变的问题在于它使编程语言更难学习和掌握。如果您想看到这样的例子,请参阅对 C++ 发明者 Bjarne Stroustrup 的所谓采访。如果您从未看过,这里是整个采访。是假的,不过挺好笑的。
1998 年 1 月 1 日,Bjarne Stroustrup 接受了 IEEE 的“计算机”杂志的采访。
自然地,编辑们认为他将使用他创建的语言回顾七年的面向对象设计。
到采访结束时,采访者得到的比他预想的要多,随后,编辑决定隐瞒其内容,“为了行业的利益”,但与其中许多事情一样,存在泄密。
这是所讲内容的完整记录,未经编辑,未经排练,因此不如计划中的采访那么整洁。
采访者:嗯,你改变了软件设计的世界已经有几年了,回顾过去,感觉如何?
Stroustrup:实际上,我在想那些日子,就在你来之前。你是否记得?每个人都在写“C”,但问题是,他们非常擅长。大学也非常擅长教授它。结果证明他们是有能力的——我强调“有能力”这个词——以惊人的速度毕业。这就是导致问题的原因。
采访者:问题?
Stroustrup:是的,问题。还记得每个人都写 COBOL 的时候吗?
采访者:当然。我也是。
Stroustrup:嗯,一开始,这些家伙就像半神。他们的薪水很高,被当作皇室对待。
采访者:那些日子,嗯?
Stroustrup: 对。所以发生了什么事?IBM 对此感到厌烦,并投资数百万美元来培训程序员,直到他们变成一毛钱。
采访者:这就是我出去的原因。薪水在一年内下降,以至于成为一名记者的薪水实际上更高。
Stroustrup: 没错。嗯,同样的情况也发生在 'C' 程序员身上。
采访者:我明白了,但重点是什么?
Stroustrup:嗯,有一天,当我坐在我的办公室时,我想到了这个小计划,它可以稍微调整平衡。我想‘我不知道会发生什么,如果有一种语言如此复杂、如此难以学习,以至于没有人能够让程序员淹没市场?实际上,我从 X10,你知道,X windows 那里得到了一些想法。那是一个非常糟糕的图形系统,它只能在那些 Sun 3/60 的东西上运行......它们拥有我想要的所有成分。一个非常复杂的语法、晦涩的函数和伪 OO 结构。即使是现在,也没有人编写原始的 X-windows 代码。如果您想保持理智,Motif 是唯一的出路。
采访者:你在开玩笑吗?
Stroustrup: 一点也不。事实上,还有另一个问题。 Unix 是用“C”编写的,这意味着任何“C”程序员都可以很容易地成为系统程序员。还记得大型机系统程序员过去的收入吗?
采访者:你敢打赌,我就是这样做的。
Stroustrup:好的,所以这种新语言不得不将自己与 Unix 分开,通过隐藏将两者很好地结合在一起的所有系统调用。这将使那些只知道 DOS 的人也能过上体面的生活。
采访者:我不相信你说……
Stroustrup:嗯,现在已经够久了,我相信大多数人已经意识到 C++ 是在浪费时间,但我必须说,他们花费的时间比我想象的要长得多。
记者:那你具体是怎么做的呢?
Stroustrup:这只是个玩笑,我从没想过人们会认真对待这本书。稍微有点脑子的人都可以看出面向对象编程是违反直觉的、不合逻辑的和低效的。稍微有点脑子的人都可以看出面向对象编程是违反直觉的、不合逻辑的和低效的。
采访者:什么?
Stroustrup:至于“可重用代码”——您什么时候听说过一家公司重用其代码?
采访者:嗯,从来没有,实际上,但是……
Stroustrup: 那么你来了。请注意,在早期尝试过一些。有这家俄勒冈州的公司——我想他们被称为 Mentor Graphics——在 90 年或 91 年左右试图用 C++ 重写所有东西时真的感冒了。我真的为他们感到难过,但我认为人们会从他们的错误中吸取教训。
采访者:显然,他们没有?
Stroustrup: 一点也没有。问题是,大多数公司都隐瞒了他们所有的重大错误,并且很难向股东解释 3000 万美元的损失。尽管给他们应得的,但他们最终还是成功了。
采访者:他们做到了?好吧,你就在那里,它证明了面向对象的工作原理。
Stroustrup:嗯,差不多。可执行文件非常庞大,在具有 128MB RAM 的 HP 工作站上加载需要 5 分钟。然后它像糖浆一样跑了起来。其实,我以为这会是一个主要的绊脚石,我会在一周内被发现,但没人在意。Sun 和 HP 非常乐意出售功能强大的机器,拥有大量资源来运行琐碎的程序。您知道,当我们在 AT&T 拥有我们的第一个 C++ 编译器时,我编译了“Hello World”,并且无法相信可执行文件的大小。2.1MB
采访者:什么?好吧,从那时起,编译器已经取得了长足的进步。
Stroustrup: 他们有吗?在最新版本的 g++ 上试试——半兆字节不会有太大变化。此外,还有来自世界各地的几个最近的例子。英国电信遭遇了一场重大灾难,但幸运的是,他们设法放弃了整个事情并重新开始。他们比澳大利亚电信更幸运。现在我听说西门子正在建造一个恐龙,并且随着硬件的尺寸变得越来越大,以容纳可执行文件,我越来越担心。多重继承不是一种乐趣吗?
采访者:是的,但 C++ 基本上是一门健全的语言。
Stroustrup: 你真的相信,不是吗?你有没有坐下来研究 C++ 项目?事情是这样的:首先,我已经设置了足够多的陷阱,以确保只有最琐碎的项目才能第一次运行。以运算符重载为例。在项目结束时,几乎每个模块都有它,通常是因为人们觉得他们真的应该这样做,就像在他们的培训课程中一样。相同的运算符在每个模块中意味着完全不同的东西。当您有一百个左右的模块时,尝试将这些组合在一起。至于数据隐藏。天啊,当我听到公司在让他们的模块相互交流时遇到的问题时,我有时会忍不住笑。我认为“协同”这个词是专门发明来扭转项目经理肋骨上的刀的。
采访者:我不得不说,我开始对这一切感到震惊。你说你这样做是为了提高程序员的工资?那太淫秽了。
Stroustrup: 不是真的。每个人都有选择。我没想到事情会变得如此失控。反正我基本成功了。C++ 现在正在消亡,但程序员仍然获得高薪——尤其是那些不得不维持所有这些废话的可怜的魔鬼。您确实意识到,如果您不实际编写,就不可能维护大型 C++ 软件模块?
采访者:怎么会?
Stroustrup:你失联了,是吗?还记得 typedef 吗?
采访者:是的,当然..
Stroustrup:还记得花了多长时间摸索头文件才发现 'RoofRaised' 是一个双精度数吗?好吧,想象一下在一个主要项目的所有类中找到所有隐式 typedef 需要多长时间。
记者:那你觉得你成功了吗?
Stroustrup:还记得平均规模的“C”项目的长度吗?大约 6 个月。对于一个有妻子和孩子的人来说,时间还不够长,足以过上体面的生活。拿同一个项目,用 C++ 设计它,你会得到什么?我会告诉你。一到两年。那不是很好吗?所有的工作保障,只是通过一个判断错误。还有另一件事。大学已经很久没有教授“C”了,现在缺少像样的“C”程序员。尤其是那些对 Unix 系统编程有所了解的人。有多少人知道如何处理 'malloc',当他们使用了这么多年的 'new' 时——而且从不费心去检查返回码。事实上,大多数 C++ 程序员都扔掉了他们的返回码。好人''-1'怎么了?至少你知道你有错误,
采访者:但是,当然,继承确实节省了很多时间?
Stroustrup:是吗?您是否注意到“C”项目计划和 C++ 项目计划之间的区别?C++ 项目的规划阶段是其三倍。正是为了确保应该继承的所有东西都是,不应该继承的东西不是。然后,他们还是弄错了。谁听说过“C”程序中的内存泄漏?现在找到它们是一个主要行业。大多数公司放弃,并将产品发送出去,知道它像筛子一样泄漏,只是为了避免跟踪它们的费用。
采访者:有工具……
Stroustrup:其中大部分是用 C++ 编写的。
采访者:如果我们发表这个,你可能会被私刑,你意识到了吗?
Stroustrup:我对此表示怀疑。正如我所说,C++ 现在已经过了它的顶峰,没有任何一家头脑正常的公司会在没有试点的情况下启动 C++ 项目。这应该让他们相信这是通向灾难的道路。如果没有,他们应得的..你知道,我试图说服丹尼斯·里奇用 C++ 重写 Unix..
采访者:天啊。他说什么?
Stroustrup:嗯,幸运的是,他很有幽默感。我想他和布赖恩早早地就知道我在做什么,但从来没有放过。他说如果我有兴趣,他会帮我写一个 C++ 版本的 DOS。
采访者:是你吗?
Stroustrup:实际上,我确实用 C++ 编写了 DOS,当我们完成时我会给你一个演示。我让它在机房的 Sparc 20 上运行。就像 4 个 CPU 上的火箭一样,只占用 70 兆磁盘空间。
采访者:在PC上感觉如何?
Stroustrup: 现在你在开玩笑。你没见过 Windows '95 吗?我认为这是我最大的成功。不过,在我准备好之前几乎把游戏搞砸了..
采访者:你知道,Unix++ 的想法真的让我思考。在外面的某个地方,有人会尝试一下。
Stroustrup:在他们读完这篇采访之后就不会了。
采访者:我很抱歉,但我不认为我们能够发布任何这些。
Stroustrup: 但这是世纪故事。我只想让我的程序员同事记住我为他们所做的一切。你知道现在一个 C++ 人能得到多少?
采访者:上次我听说,一个真正顶级的人每小时价值 70 到 80 美元。
斯特劳斯特鲁普:看到了吗?我敢打赌他赚到了。跟踪我在 C++ 中的所有问题并不是一件容易的事。而且,正如我之前所说的,每个 C++ 程序员都被某种神秘的承诺所束缚,他们会在每个项目中使用该语言的每一个该死的元素。事实上,有时候这真的让我很恼火,伊芙。过了这么久,我几乎喜欢这种语言。
采访者:你的意思是你以前没有?
Stroustrup:讨厌它。它甚至看起来很笨拙,你不同意吗?但是当图书版税开始进来时……好吧,你明白了。
采访者:就一分钟。参考文献呢?您必须承认,您改进了“C”指针。
斯特劳斯特鲁普:嗯。我一直想知道这个。本来,我以为我有。然后,有一天我和一个从一开始就编写 C++ 的人讨论了这个问题。他说他永远记不起他的变量是被引用还是被取消引用,所以他总是使用指针。他说那个小星号总是提醒他..
采访者:嗯,在这一点上,我通常会说“非常感谢”,但似乎还不够。
Stroustrup:答应我你会发布这个。这些天我的良心越来越好。
采访者:我会告诉你的,但我想我知道我的编辑会说什么。
Stroustrup: 反正谁会相信呢?不过,你能把那盘磁带的副本发给我吗?
采访者:我可以做到。