不再推荐 Haskell

三日月綾香

以前看到《不再推荐 Haskell》,我没有放在心上。现在,我也用血的教训写一篇《不再推荐 Haskell》。Haskell 语言就是一场忽悠骗局。我要揭掉 Haskell 的伪高贵面纱。

当初接触 Haskell,他们用排序代码向我洗脑,你看 Haskell 只要两行!我看了以后,想起了数据结构课,想到了调试指针的泪水,于是义无反顾地入坑了。

刚开始我写的代码确实很短,别的语言几十行,我只用短短几行。但是,我发现事实不总是这样。有的东西,用我学过的 Haskell 知识表达不出来!这时他们又向我洗脑,说这是因为我没有学过类型论,是因为我没有学过范畴论,学了以后就会写了,你看这些多么高端!我看着书上的数学公式,想到学了这些自己有朝一日也能学会数学,就想起了看着高数试卷的绝望心情,于是又义无反顾地入坑了。

入坑 Haskell 一时爽,一直入坑一直爽,但是,我发现事实又不总是这样。鄙视链的尽头不是人生巅峰,而是另一条鄙视链!数学家们根本不在意类型论,因为太底层;不在意 Proof Assistant,因为有同行评审;程序分析根本不在意 Dependent Type,因为形式化方法太多不缺这一个;范畴论完全是数学领域的内容,要是数学家们知道我用他们研究的函子写程序,肯定会向我投来同情的眼神。

当我写的 Haskell 程序越来越复杂,他们还在给我洗脑:要去学 Lens,因为它跟 Profunctor 有关;要去学 Recursion Schemes,因为它蕴含了 F-代数的深刻思想。突然我醒悟过来,我为什么要用 dynamorphism?它不能自动导出需要的数据结构,只是把动态规划问题用数学字体重新排版。我为什么要用 Lens 操作数据结构?为什么不让我用指针?我回想起调试指针的那些日子并不全是苦涩的泪水,当程序终于正常运行的时候,阳光正温暖地照在窗棂上。

我终于明白,程序员应该用合适的工具解决问题,但 Haskell 不是合适的工具!像 Python 这样的语言才是真正的编程语言,Haskell 是实验品,我就是小白鼠。类型论都是他们玩剩下的,我什么都没有。他们把新人骗入坑,看新人困惑地学着他们玩剩下的东西,并以此为乐。我曾经想,Haskell 有什么真正优于 Python 的东西?难道一个编程语言的优势,要靠晦涩的数学概念来体现吗?

上次,我和好友讨论一个随机抽奖的程序,其中 Haskell 代码比等价的 JavaScript 代码要长很多。虽然这不再出乎我的意料,但是当我看到 Haskell 代码的时候,我还是觉得似乎有简化的空间,于是决定动手试一试。但是,在我查找资料的过程中,我发现用 Python 只要一行就能实现等价的程序!这更加坚定了我不再推荐 Haskell 的决心。也许有人认为,Python 的简短只是由于标准库把操作封装了一下;但是标准库的设计正体现出 Python 的实用性,而 Haskell 的特性则注定了它不实用!

我认为,Haskell 不能称为函数式编程语言,因为它只是函数式,但不是编程。真正的编程,应当在函数式简洁的时候使用函数式,在命令式简洁的时候使用命令式。编程是一项实际的工程,而不是简单的二者择一。

现在,我只想写别人看得懂的程序。

(作于 2019 年 3 月 14 日,修改于 2020 年 3 月 1 日。修改内容:删除称赞 C++ 的语句)

后记(补充于 2021 年 10 月 4 日):这是吐槽的文章,希望大家不要当真 XD