[这是《 Lucid the Dataflow Programming Language》一书中臭名昭著的部分,在这里我取笑所有使用命令式语言的人。它很受欢迎,但是即使没有个人名字也被很多人讨厌。在同伴帖子中,我将其作为职业限制举动的示例。尽管没有帮助,但并没有完全杀死我的职业。我敢肯定,我没有被邀请参加过许多会议,因此我被排除在计划委员会之外。嗯……那真的是一件坏事吗?]
[已故的埃德·阿什克罗夫特(Ed Ashcroft)是该书的合著者,但没有参与撰写本节。聪明人。]
甚至最热衷于命令式语言的支持者也会承认有些错误。但是,对于“软件危机”和“并行性问题”有许多不同的态度。以下是一些较常见的观点(略作模仿)。 [略!]
按照这种“崎Western的西方”观点,编程是一项艰巨而艰巨的活动,而且将永远如此,但仍然“程序员必须做程序员必须做的事情”。根据“牛仔”的说法,实际的问题是缺乏足够的聪明和坚韧的真正程序员来完成工作。牛仔们艰难地学习了编程,经过了长时间的“骑在马鞍上”(即在终点站),并期望其他所有人也能做到这一点。如果您犯错,那是“您自己的错”。牛仔们通常不信任“书呆子”(理论)和“新奇”语言。他们嘲笑那些抱怨PL / I的“绿角”
[PL / I?由IBM设计的一种大型复杂语言,早已不复存在。比C ++更复杂,并且像ADA这样笨拙。 ADA? …不要问。]
[是的,C,今天仍然流行的C。基本上没有变化,就像克林特本人一样]
对他们来说,PL / I没有足够的功能,C不够脏。他们想要的是功能更强大的工具,这些工具可以使他们更接近计算机并使其“跳舞”。
牛仔队当然值得我们钦佩。他们中最好的(真正的“直射手”)可以产生令人印象深刻的软件,而普通程序员甚至都不敢尝试。尽管如此,我们必须问自己,是否有足够多的真正强悍的牧马人来游玩。几乎可以肯定没有,我们不得不屈服于这样一个事实,即大多数软件将由普通,不起眼的Trail Hands编写
[我只是将典型的软件工程师描述为“足迹之手”。我确定一切顺利。]
[巫师先生是几十年前著名的电视科学普及者。他是当时的比尔·奈(Bill Nye)。]
奇才队在许多方面与牛仔队相反,但是他们同意一件事:编程和编程语言本质上非常复杂。正如奇才队所看到的那样,问题在于我们对这些语言缺乏很好的理论/数学理解。奇才队搜寻了许多尘土飞扬的远古传说。他们已经学会了魔术艺术,Logyck Symbolyck和Lambda演算。他们想出了塔斯基(Tarski),教堂(Church)和咖喱(Curry)的名字。
[著名逻辑学家。我实际上是在伯克利读研究生时遇到的前两个。实际上,我是从塔斯基(Tarski)参加的研讨会。]
奇才队的终极梦想是进行正式程序验证的系统。这将使程序员(在Wizards的帮助下)可以提供给定程序正确的气密证明,无论该语言或程序多么糟糕。因此,程序验证是一种哲学家的石头,它将把基本程序变成金子。正如LISP的发明者John McCarthy(1965,p。219)所说,
如果我们能够发展出合理的数学计算理论,那么所要赢得的大奖就是消除调试。取而代之的是,程序员将提供计算机检查的证明,证明该程序具有所需的属性。
当然,问题在于巫师的魔杖挥舞无量,无法改变冯·诺伊曼[命令式]语言的基本性质。巫师确实成功地制定了正式的规范,但是这些规范也占据了电话簿的比例,充满了无法理解的lambda表达式。
[这是编程语言的语义,在当时很重要。现在像PL / I一样死了]
同样,证明“真实”程序的正确性也是不切实际的。 [仍然有特殊的例外。]向导遇到了提到的“脏”功能(副作用,goto语句,别名)的麻烦。当然,这些正是牛仔们最喜欢的功能。
但是,还有第三个人以自以为是的眼光看待牛仔和巫师的滑稽动作。该小组的成员是狂野的狂热者,即结构化编程福音的传教士。
传教士订阅了原罪学说的计算机科学版本。他们认为,人类天生具有粗心大意,犯错误的倾向(懒惰的罪过),承担着超出凡人的微薄力量(骄傲的罪过)的固有倾向。罪恶的工资当然是虫子。如果要避免错误(和一般的软件问题),程序员必须放弃邪恶的方法,而采用正义的方法。鼓励程序员采用一些严格的编程学科(方法学),这些行为的仪式将阻止软件被邪灵所拥有。
[没有人再谈论“结构化编程”,因为每个人都在实践它。但是还出现了其他邪教。]
结构化编程的门徒确实在与不良软件的斗争中取得了重要的成功。然而,事实证明,隐藏在男人和女人心中的邪恶比预期的要难得多。弃权在传教士的教导中起着重要作用-弃用goto语句和指针变量之类的功能,那些被禁止的苹果会诱使程序员变得邪恶。但是,正如我们已经注意到的,程序员在避免这些禁果方面有很大的困难。传教士们梦想着一种纯洁圣洁的语言,从中消除一切邪恶的特征。但是实际上,这些“结构化编程”语言的设计者总是最终被迫以效率为名而损害其原则。因此,忠实的信徒面临着一个可怕但不可避免的困境:他们可以选择做一个有道德的人,编写正确但效率低下的程序,或者他们可以选择邪恶的人来编写高效但臭虫缠身的程序。传教士必须问自己:“为什么魔鬼拥有所有快速程序?”
但是,还有第四种和更乐观的观点,它与传教士对无人驾驶能力的低观点相同,但它提供了更为切实的解决方案。我们指的是“我们拥有技术”学派。
博芬人同意,人的软弱是软件危机的根本原因,因此,单凭人类就不能裸露和徒手生产软件。
[“ Boffin”是英国人的tech语-记住,这本书是在英国撰写和出版的。雷达是Boffins发明的。]
但是,布芬提供的武器是物理的和机械的,而不是道德的和精神的。他们的目标是为程序员提供功能强大的编程工具的完整选择:结构化编辑器,诊断编译器,巧妙的类型检查器和复杂的调试系统。他们的目标是生产一种仿生编程器,这是一种技术增强的超级英雄,可以平等地与虫子战斗。
[仿生人是美国电视台的角色,是一名网络增强型男子,带有望远镜的眼睛,钢腿等。有点像机器人或钢铁侠。]
当然,不可否认的是,在“程序员的工作台”上找到的巧妙的设备可能非常有用。问题在于它们可以扩大程序员的弱点和长处。百万美元程序员小工具中的小工具
[关于仿生人的程序称为The Million Dollar Man。那时候一百万美元是一大笔钱。]
实用程序带[这里有一些混合比喻]可以很容易地让他们的用户制作出大量受bug困扰的程序,然后让他浪费大量的资源进行调试。新一代的超级程序员产生的超级程序是否会引发可怕的超级错误的新种族?结果程序员会需要更强大的工具吗?这些工具会产生更可怕的错误吗?这个过程可能没有尽头!
[没有。我在行业中有两个朋友,每个朋友都维护着数百万行的旧程序]
相比之下,我们所谓的“ DIY”或“ Fixit先生”学校的野心要小得多。根据这种观点,软件危机是命令式语言中严重缺陷的结果。但是,这些缺陷并不是整个冯·诺依曼方法固有的缺陷的结果。而是设计错误的产物。所需要做的只是进行一些修补,在这里和那里添加一些新零件,删除一些麻烦的功能,并且一切都会很好。
现在确实可以改善命令式语言,而且通常相当简单的更改也可以带来巨大的好处。问题在于,一种变化会导致另一种变化,而一个领域的改进会给另一个领域带来灾难性的后果。我们已经看到,修改ALGOL和FORTRAN并不总是成功。
[ALGOL? PL / I的前身。 FORTRAN仍然是FORTRAN,尽管现在看起来像C]
当尝试使用“并发”甚至“数据流”功能时,尤其如此。
[总之,我认为这很好,甚至包括文化参考。牛仔,巫师,棺材等都提出了一些很棒的东西,但是软件项目通常仍较晚(或未完成),比计划的要大得多,超出预算,并且有很多错误。]
[下一节基本上是一个琐的道歉,在这里我解释说这些批评只是“ funnin”。 不幸的是,我使用了“批评”一词,这是大多数CLM的核心。 职业-有限]