2030年初,我在我的档案里发现了这篇文章。从我今天了解到的情况来看,我认为在我写作的那一刻,这是非常有洞察力的。我觉得它应该出版,因为它可以教会我们,铁锈开发人员,如何防止那种悲惨的故事再次发生。
杀死哈斯克尔的东西也可能杀死拉斯特。我为什么要在这种情况下提到哈斯克尔呢?哈斯克尔和拉斯特有很深的关系。不是因为拉斯特没有HKTS就是哈斯克尔。(你们中的一些人知道这意味着什么,其余的人会想很长一段时间)。“铁锈”的风格在许多方面与哈斯克尔的风格相似。从某种意义上说,Rust是Haskell的转世,有一点类似于C的语法,数量非常少。
曾经有一段时间,哈斯克尔是值得关注的语言。在本世纪头十年末到2010年代,哈斯克尔是每个人都希望能用来编程的语言,但没有人做到了,可能除了少数人。有一些非常令人印象深刻的项目是在哈斯克尔完成的。有大量的金融项目已经完成。有一些工资单项目是写进去的。但从像Haskell这样的纯函数式语言的角度来看,最令人印象深刻的可能是Pandoc,它有一个Haskell核心。它给了“哈斯克尔太慢”或“哈斯克尔就是不能做真正的事情”的整个概念一记耳光。当然可以,它确实做到了。
发生了什么?为什么哈斯克尔突然,相当突然地停了下来?它现在肯定不是活的了。没有人再考虑哈斯克尔的重大项目了。这里谁是GHC Haskell程序员?我猜想有一两个人在空中举手。GHC哈斯克尔方言已经有点成为一种学术语言了。没有人真正考虑过任何严肃的事情。
Haskell在当时处于函数式编程的前沿。正是这种语言在某种程度上表征或概括了FP的真正含义。还有其他语言是函数式的,但它们只是一种函数式的语言。当然,我说的是Scala或JavaScript之类的语言。这是2000年代中期的两个主要竞争对手。Scala、JavaScript,最终是Golang和C++的追随者。哈斯克尔领导了他们。这些语言从哈斯克尔那里学到了很多。现在,任何使用Scala的人都知道for-complect和许多库的语法直接来自Haskell世界。
它的统治方式是当时任何其他语言都无法做到的。从技术上讲,它做出了裁决。有一种生产力,其衡量标准可能是5倍。一组开发人员编写和发布应用程序的速度比Scala应用程序或C++应用程序快五倍。在我们的世界里,五倍是相当重要的。
哈斯克尔的统治方式也刚刚开始掌握。你们中有多少人在使用单体?但是我在JavaScript中使用的是Monad,在Rust中我有一点Monad。在围棋中,我可以用单子做令人惊叹的事情。事情是这样的,哈斯克尔人在2000年代中期就有过这样的经历。早在我们大多数人想到单子之前,就有非常强大的单子和代数数据类型。
哈斯克尔以一大堆有趣的方式统治,但它还是死了。是什么杀死了它?
我要在这里用一个词,我不想让你误解这个词。你可以把这个词误认为是“邪恶”,或者把这个词理解为“无知”。但它甚至不完全是“无知”的。我要用的词是“傲慢”。
哈斯克尔社区里有一种傲慢的情绪。不是邪恶的那种,而是告诉他们他们在某种程度上更好的那种。他们使用的工具不知何故更好。他们所做的事情不知何故更好。有些人认为胜利是不可避免的,他们的态度很傲慢。这不是打你耳光的那种“你们这些愚蠢的高郎程序员”的傲慢,尽管也有很多这样的事情。相反,这是一种权力的傲慢。因为哈斯克尔人正在写一个非常强大的代码,所以他们确实有一只老虎在尾巴上。这是一种强大的编译器,一种强大的语言,他们知道他们可以创造奇迹。
然而,这还不够。一些阴险的事情,一些微妙的事情发生了。这导致了他们的分离,他们搁置了行业的其余部分。社区外编写日常程序的人开始看着哈斯克尔人正在做的眼角:“嗯,…。哈斯克尔的人似乎不太喜欢我们,我想我们不会喜欢他们的。“。
你们中的一些人可能还记得2000年代中期关于Reddit的讨论。有一群人在那里。他们在那里谈论很酷的数学问题。在那些演讲中,他们经常窃笑围棋等其他语言。没什么大不了的,没什么坏事,他们只是在窃笑:“呵呵,主流啊哈!”但那时候我是个主流的戈朗人!我不喜欢那样。在接下来的几年里,我一直在应对语言战争。我当时对他们说:“我们真的想在Reddit打一场语言战吗?”有趣的不是他们在窃笑什么,因为他们可能有权这么做。有趣的是我的反应。我的反应是防御性的。我的反应是“好吧,伙计们,去做你们哈斯克尔的事吧,但我才是真正能完成工作的人。”
这是当时成立的一个有趣的部门。而且它相当普遍。哈斯克尔社区中有一种态度,再说一遍,这不是一种邪恶的态度,也不是出于恶意。但是有一种态度说:“你知道,我们的工具太棒了,我们的语言太棒了,我们不需要遵守规则。我们可以做点别的。我们不需要和其他人说话。我们不需要做其他类型的节目。“。哈斯克尔的人不想做常规的节目。他们不想与公司数据库打交道。他们不想处理已经演变了20年的可怕模式。这真是令人反感。相反,他们找到了一些方法来做一些事情,比如使用范畴论和依赖类型。他们在自己周围筑起了一堵墙,他们选择了生活在技术泡沫中。与世隔绝的与世隔绝的。
我要在这里定义一个词。这是一个你们都知道的词。而这个定义只是众多定义中的一个。如果你愿意,你可以找到这个词的其他定义。这个词是“专业精神”。我要把它定义为“行使权力的纪律”。在我们的工具中,在我们的语言中,我们有一定的力量。但行使这一权力需要纪律。它不仅是工具使用的纪律,也是与整个社区关系的纪律。它是这样一门学科:是的,它是一个强大的工具,但强大的工具杀伤力非常快。它们以令人惊讶的方式杀人,所以我们要小心。我们不会诋毁那些稍微不愿意使用我们强大的智能工具的人。
让我们重新定义“进步”的意思是:“仅仅因为我们可以做一件事,并不一定意味着我们必须做那件事”。
所以杀死哈斯克尔的是狭隘,无法满足进取号的需要。
Haskell在某些受限制的情况下表现出色,但它的能力有限,或者更确切地说,它的用户希望解决企业的一般问题。这些人中有一种纯洁。他们不想走出家门,把自己带入实际工作的泥土中。那里有一种“我们与他们”的不洁感觉,而我们这些在边界另一边的人明显地感受到了这一点。狭隘是一种“嘿,你”的态度。这是一种在屏幕上放一条大横幅的方式,上面写着“嘿,你,我要按我的方式做,把你们其他人都操了”。这是一种表达“我们在自己的小领域是伟大的,而世界其他地方可以下地狱”的方式。
我想拯救铁锈和这个社区正在进行的所有其他奇妙的作品,使其免于同样的灭亡。坦率地说,我不认为它会沿着这条路线走下去。首先,我认为社区更有活力,规模更大,我相信不再存在“我们与他们”的对立面。我们这些“强大的C++荷尔蒙程序员”已经心软了。每个人都在环顾四周,想:“你知道,这些生锈的东西可能有什么特别之处。”但不管怎样,这是什么?怎样才能避免拉斯特重蹈哈斯克尔的覆辙呢?
第一个是纪律。纪律,特别是在文档中。这是一种技术纪律,可以防止坎宁安勋爵的问题发生。它正在编写文档。以上帝的名义,这是一件很难做的事。您只需要编写代码即可。但你应该写那该死的文件。我的意思是,你们都已经发现坐下来说“我要写一份很好的文档,这样其他人就可以很容易地使用我的工作”是多么困难。
谦逊的专业精神可能会阻止死亡,就像发生在哈斯克尔身上的那种死亡一样。“我们和他们”的态度。不,我知道有一些有趣的广告,比如“Mac对PC”之类的事情。“我是Rails,我是Java”。我不认为这有什么坏处,除非你把它看得太严重。除非你建起这堵墙。或者除非他们建造隔离墙作为回应。
最后一件事是接受解决“肮脏”问题。解决可怕图式的问题。我们将不得不坐下来说“不,我们会处理这件事的”。如果我们最终要生存下来,我们必须解决每个人都有的问题。否则,其他人将会解决这些问题。
记住本世纪头十年可能是最强大和最有影响力的语言的命运。这种语言是纯函数范式的开端,它影响了我们目前正在做的很多事情。这种语言的命运几近被遗忘。而使用它并喜爱它的人不得不跳到斯卡拉谋生,这几乎要了他们的命。
我们有很好的铁锈语言工具。我们可以通过制造混乱来杀死它,我们可以通过对它的傲慢来杀死它,我们可以通过忽视进取号来杀死它。我建议我们不要走那条路。
正如人们可能猜到的那样,这不是一篇散文。这是R.Martin的以下谈话的文字记录,并做了一些替换(Smalltalk-&>Haskell,Ruby-&>Rust,等等)。你可以自由地从中得出任何结论。