为什么我讨厌编程语言倡导(2000)

2021-06-09 20:52:08

我认为编程语言倡导是一个大问题,而不仅仅是为了Perl社区,而且为更大的编程社区。

我将从不同的社区中的一个例子开始,然后致力于编程语言。在他的棒球摘要1985年,詹姆斯写道:

为什么我们的信息系统是关于管理者的那么落后?因为我们已经被困在一个关于经理是否“好”或“坏”的未解决问题。粉丝从有问题的经理的善良或不良的位置开始,鉴于该参考,解释每个行动,并使他的每个问题都是第一个原则的延伸......从比尔·韦尔顿臭味的前提下,每个其他问题都成为为什么比尔·韦尔顿发臭的为什么。

詹姆斯试图通过对不同经理风格的简单,定性评估进行简单,定性评估来开始评估棒球管理人员的问题。他把问卷放在一起问题,就像“他和起动器一样留在初学者,或者快速去牛角?”和“他是捏息,如果是这样的话?”然后他分发了调查问卷,要求棒球迷描述与他们最熟悉的人的管理人员。

詹姆斯有一个惊喜:问卷用虚拟作用对管理行为的诉讼抱怨:“这就是我们看到比尔·韦伯的真实偏好的地方:与他摔倒的起动器一起去。地狱,Virdon让Billy Martin看起来像一个WIMP,SIMON LEGRE就像一个乳蛋白。“他和一个正在挣扎的起动器待多久? ``恰好一个击球手过长,或者直到他晕倒,以先到者为止。“等等。

这根本没有帮助詹姆斯。他正试图定性地了解棒球经理,如果他们是“好”或“坏”。 ``斯坦用管理盒的形式完成了什么,“詹姆斯写道”,正是我设计的东西,以便努力领导讨论的东西。判断,他们不再知道如何以其他任何条款讨论管理者。即使粉丝制造了简单,描述性陈述,其他粉丝也不可避免地理解这些是一种起诉或赞誉。关于管理风格的话语本质上是不可能的,除了在这个非常低水平的“比尔·韦尔顿是一个很棒的经理!”“不,他不是!``

我认为这同样的事情发生在编程语言讨论中。宣传对我们来说,我们忘记了讨论编程语言的任何其他方法。即使我们不忘记,其他人也无法理解我们,因为他们听到倡导是我们是否希望它们。

这是一个例子,并行于棒球示例。大约两年前,我正在与当地的Perl用户组进行关于强大打字语义的本地Perl用户组。 (我无法在此处介绍详细信息,但完整的谈话可以在http://perl.plover.com/yak/typing/上获得)

我解释了什么类型,并说很多人都结束了,强大的打字是一个失败的实验,部分是基于弱类型的语言的成功,部分地基于百分之一的语言,部分是对二十的艺术状态的想法 - 过期的时间。

然后我给了一个反击范围:我讨论了标准ml中的键入系统,这是最近的,并且显示了它如何解决其他键入系统的许多大问题,也提供了很多意想不到的优势。部分方式通过解释,其中一位受众成员举起了手,问了``但是Perl的方式有什么问题?“

我被吃惊了。我没有说过任何错误的方式是错误的。事实上,我专门说Perl的方法取得了巨大的成功。但是,不知何故,我的观众中的人已经得到了这个想法,因为我指出标准ml的好处,我必须说标准ml是好的,并且perl很糟糕。显然,它可能是不可想象的,可能有两种正确的方式来做点什么。

在那个谈话中,我讨论了一定长度的帕斯卡型系统。只有一个原因,我抚养了帕斯卡。我需要说服人们在1968年帕斯卡的发明中已经向前移动了一点。我发现了多年的经验,当我提到强大的打字时,人们经常会说'你必须开玩笑。帕斯卡尔糟透了。“我知道如果我没有地帕斯卡地址,人们会被我的谈话弥补 - 他们可能会回家,我在提到我提到强大的打字时我正在倡导帕斯卡尔。所以我花了很多时间讨论了帕斯卡型系统的特定失败,以便我能够展示这些问题是如何克服的 - 帕斯卡不是全部和最终的全部打字,正如许多人都认为。我同时讨论了C,因为C和Pascal型系统如此相似,我不希望人们认为我正在挑选帕斯卡尔。

尽管如此,几个人写信给我抱怨我的谈话是'不公平的帕斯卡'。他们看到谈话作为对他们最喜欢的语言的攻击。我不明白这一点。即使谈话一直是关于帕斯卡的,它也不是,它不可能是一次攻击,因为我只讲了帕斯卡的真相。帕斯卡型系统确实存在大问题,其中许多人以各种供应商以各种不兼容的方式纠正,其中许多人以他以后的语言在帕斯卡的发明者中纠正。

你可以对一个人“不公平”,即使你只告诉真相,你也可以伤害他们的感受。但帕斯卡是一种编程语言,而不是一个人。它没有受伤的感情。批评Pascal的类型系统就像抱怨你的锤子有一个刮伤的脸。没有用处对此感到沮丧。你只需要做一个新的锤子或做。说批评对锤子不公平,无论出于何种原因,只是愚蠢。

我想我知道这里发生了什么,但我想稍后讨论它。

我几天前从茉莉花默克德的邮件获得了邮件,他们运行Perl归档网站。该网站的一部分已通过PHP实施,她从担心的人中获取信件,这是“让Perl看起来很糟糕”。

我猜一个隐含的录取,Perl可能不是每种可能工作的最佳工具可能被解释为使Perl看起来很糟糕,但似乎是一种非常奇怪的回应,除非你想象Perl和Php从事一场战争只有一个胜利者,除非你认为如果php对某事有好处,那么任何东西都是,那么perl必须是坏的。

我不记得Perl已经被广告为每项工作的一个工具。 Perl进入了一个充满了其他工具的世界,并成为自己的名称,可以帮助许多其他工具互操作。 Perl填充其他工具之间的空格。单独令人印象深刻和有用。在过去的十年中,越来越多,Perl已经妥善了解了其他工具;这更好。但是Perl的座右铭是``“有一个以上的方法来做它”,有时这意味着其中一个方式是使用PHP。如果PHP因某种原因出现了一点短,也许Perl可以填补空白。我明白PHP可以向Perl程序呼叫寻求帮助。如果这是真的,那就不承认失败;这是因为Rasmus Lerdorf,作者聪明。 Perl可以呼唤C寻求帮助,这也不是录取失败。最好的胶水可以坚持一切。

在我的世界里,PHP可以是一个很好的解决方案,并且Perl可以是一个很好的解决方案,因为可能有一个问题可以有多个好的解决方案。在我的世界里,你使用什么作品,并且使用PHP无法对Perl体现得非常重大。

这是另一个例子,我想起了同样的事情。如果您在Perlfaq4中查看,您会看到一个问题,该问题说``如何处理链接列表?“答案开始通过称为“一般”,您通常不需要Perl中的链接列表,“这正是正确的答案,然后继续解释Perl阵列如何服务于大部分链接列表的目的。例如,人们喜欢使用链接列表来表示C中的堆栈;在Perl中,正确的方法是在数组上使用PUSH()和POP()函数。

但在解释链接列表中很少有用于Perl,手册继续显示链接列表:``如果您真的,真的想要的,您可以使用结构......“然后代码跟随。 Avi最近询问了为什么它困扰展示一个实施,它在之前和之后,实现对任何东西都没有用。

我试图把自己放在常问答作者的位置,并问我为什么要做这样的事情。我想到的第一个答案是我可能会炫耀我的博学。但是,然后更好地想到了。

当然,这只是一个猜测,但如果我一直在写常见问题,我会害怕说'你不需要perl中的链接名单“并留下它,因为我会想象有人阅读那个回答和结论是,这是一个逃避,并且无法在Perl中完成联系单。 Avi似乎震惊地说,我可能是如此愤世嫉俗的,但我认为很多人确实思考。为什么有人会得出结论,答案是逃避?如果你的信仰是,普林手册的作者将永远不会对普遍的最差部分说出任何糟糕的事情,那么你将尝试在线之间读取。

我认为问题的根源是,我们倾向于将自己组织成部落。然后部落的人是我们的朋友,外面的人是我们的敌人。我认为这是这样的:有人使用perl,并喜欢它,然后他们更多地使用它。但是,发生了一些奇怪的事情。他们开始用Perl识别自己,好像Perl是他们身体的一部分,反之亦然。他们是大得到Perl部落的一部分。他们希望其他人加入部落。如果他们遇到不喜欢Perl的人,那么对部落的侮辱以及对他们的个人侮辱。

我认为这解释了对我写信给我的人的反应抱怨我对帕斯卡的不公平。我想也许他们就个人接受了,并觉得我对他们不公平。

让自己与编程语言混淆并不是一个理智的事情,但很多人都这样做,包括来自我们社区的人。

我不是唯一怀疑这一点的人。本节的标题(“喝了Kool-Aid”)来自Nat Torkington从去年的Yapc的伟大的谈话。 NAT的谈话标题是“是一个倡导者,而不是混蛋。” NAT的谈话有一个幻灯片,为什么人们倡导。他被问到的人给了一些不同的答案,他提到了。但是他说:“我的秘密怀疑是,很多第三方倡导只是:Perl是方式和光明,男人,所以喝kool-aid并提升到程序员天堂。”我不会把它放在那里,但我有同样的怀疑。

我们为什么要试图摆脱这种心态?什么是大问题?

思考和说话的一个大问题是这意味着我们无法学到任何新的东西。假设PHP对Perl有一些优势,它将引导茉莉花在她的网站上使用它来解决Perl。如果这是真的,如果Perl可以在下一个版本中复制该优势,它不会很酷吗?

如果您接近PHP的想法,它必须被摧毁或关闭,那么Perl是对的,其他一切都搞砸了,你不会找出PHP的优势。你不会处于一种心态,可以识别出PHP有些不好的事情。

也许在现代强大的打字系统中有想法,这些系统将来会改善Perl;也许不会。但是,如果您接近具有固定概念的强大打字讨论,那么它必须出现问题,因为它与Perl现在的工作方式不同,您不会学到任何内容。

Perl通过了从很多其他语言复制了很多东西来实现今天。 Perl最着名的特征,哈希和正式表达式,从USIX,Grep和Sed等Unix Utilities复制。 Perl的陈述修改程序从所有地方的基本加上借用。 Perl甚至具有从ADA借来的功能,包括您每天使用的功能。

如果Perl停止复制来自其他语言的东西,则Perl的增长不会停止,但它将减速。急剧上。并且perl可能会停止佩尔。我很高兴在过去的七年里,我并没有陷入困境4.036,我也不想在未来十年内卡在Perl 5.6.0中。从其他语言借用对Perl有利。为了继续这样做,我们必须能够查看其他语言,我们必须在我们看到它时识别好东西。

我发现最令人沮丧的事情的一件事是6 RFC进程是许多提交的狭隘主义。提交者将尝试解决一些问题,并会提出一个糟糕的解决方案。与此同时,在隔壁的语言中会有一个完全可维护的解决方案,只是等待重复使用。但它似乎只有很多人制作提案只知道Perl,而不是任何其他语言。

这是美国与他们话语的另一个问题。人们现在将我识别为“Perl程序员”。他们自动假设我嘴出来的一切都会被那个彩色,即我将热爱关于Perl的一切,并讨厌其他一切。如果我对Perl说任何负面的话,有些人认为真正的真相必须比我承认的那样差。我很难让自己理解。部落假设正在阻碍沟通。我不能成为这个问题的唯一一个。

我不认为自己是一个perl程序员。我经常编程了一半的语言,无论是方便的。自1978年以来,我一直是一个程序员。当人们称我是一个perl程序员时,十年前似乎永远不会想到他们会以为我是“c程序员”,二十年前我会是一个` `fortran程序员“。但是当我谈论强大的键入系统时,他们仍然不会认真对待我,因为Perl程序员知道强大的打字是什么?如果我制作一个简单的事实声明,就像“标准ml具有强烈的静态打字”,那么人们就会因我认为强烈的静态打字是一个坏主意,因为我说标准ml有它,而马克多米斯是Perl程序员,而不是标准ML程序员。

面对“他作为经理的最强烈点是什么”的问题,我为Sparky Anderson写了“他的记录”。我以为这是相当互补的......但如果你开始假设我将要撕裂闪耀,那么无辜的评论都装满了双重意义。

也许是“perl好的最大问题,其他人糟糕的”车辙是它会阻碍我们与自己沟通的能力。

如果我们认为Perl方式是真实方式,那么当有人出现并询问为什么长度(@a)做错的事情时,我们不会有一个聪明的答案。我们将想出很多关于长度()的论点,总是在标量上下文中,牦牛牦牛牦牛。听,Bub,我知道关于标量的上下文,我仍然认为长度(@a)是腐烂的想法和长度(%h)甚至更糟糕。 Perl赢得了大,因为它确实是你的意思,即使在不是正交的。没有办法长度(@a)正在做你的意思。

有人在comp.lang.perl.misc上出现了本周问为什么长度(@a)是错误的,没有人给任何人同意他同意的迹象。我猜他们都忙于卫冕部落草皮或其他东西。 RFC 212证明有人在那里同意这家伙。但没有人会承认它。

我很高兴你问道。美国 - 与他们不是一种有效的倡导者。说NAT:“激情不说服。激情让你看起来像个白痴或混蛋。“告诉有人,佩尔是伟大的,他们的东西很糟糕不会说服任何任何人。这种宣传风格可能很有趣和简单,但它没有效力。你必须引导人们,不要在你面前开车。

我真的不讨厌宣传。我只是讨厌我们大部分时间的方式。我们以愚蠢的方式做到这一点。而且我认为,我们认为的令人沮丧的习惯将妨碍长期进行编程语言的进度。

Perl具有强大的传统,与其他语言和其他系统相处(并借用)。 这是它最大的优势之一。 让我们不要扔掉它。 我在我的书架上有一本我从未阅读过的书,但这有一个伟大的头衔。 它说,“所有真相都是上帝的真理。” 而且我相信。 最可行的信念系统是能够伸出并融入新的想法,新模因,新的隐喻,新界面,新延伸,新的做事方式的人。 今年的目标是试图让Perl伸出援手并与Java合作。 我知道你们中的一些人可能很难吞下,但Java不是敌人。 也不是lisp,或python或tcl。 这并不是说这些语言没有良好和坏点。 我不是文化相对主义者。 我也不是语言相对主义者。 如果你没有注意到。 :-)