Edward Kmett 于 Haskell 之评价

Haskell使我今仍为程序员。

十年前,我身为计算机科学家之信仰,遭逢些许危机。环顾四望,方觉,很大程度,我 ,以数年前使用至今之相同工具之不同变种,解决相同问题。

某些程度上,我遭遇瓶颈,或许不似专家级初心者(Erik Dietrick 所称)般低级,然而最终察觉,即使我积极努力构建一个由我可以从头到尾编译的正确代码组成的大型代码库,也只是发觉自己眼睁睁看着沙堡以远快于建造的速度崩塌,甚至更糟,作为开发者我并无任何进步。目之所及,并无银弹。

面向对象编程旨在提供代码重用。但借鉴 POSIWID (the Purpose Of a System Is What It Does)观点来看,其旨在逼迫开发者放弃对改进生产力并平衡代码重用与特定问题的精确的抽象层的企盼。

在此启发下,我决心返回并获取学位。沿这条路,于完成数学硕士学位后流离于语言学与生物信息之际,我偶遇了 Haskell。

彼时,玩耍般写着自己的编程语言已十五载之久,其皆似 Perl、Python、C++ 之子(因所知仅至此),掺杂些许不变性。发现 Haskell 时,我察觉到,这门语言非但完成了所有我想尝试去做的事情,甚至,它做得更好。

Haskell 社区总有比我更好的答案。

此刻,我必须抉择:或原路折返,鸵鸟般埋头于沙般装作从未遇见Haskell;或皈依 Haskell,接纳隐藏其后的思想。

此番信仰转变余波绵延数月。但,我从未回首。

其后,我学习了范畴论,潜心研究函数式编程与类型理论。进阶到可工作于 Coq 与 Agda 中后,我以自己独特编程风格下最具生产力的功重比返回 Haskell 层面休憩。

回到正轨后,我投身于做任何可以帮助 Haskell 社区繁荣兴旺的事,且终于我可以开始着手实现建立一个我可从头到尾构建的软件库的目标。客观上,我相信此时我比任何人维护的 Haskell 代码都要多,仅仅靠写 Haskell 代码,我就登顶了 Github 最活跃用户前五名。呜呼,我随波而溯,回到了青少年,相较于单纯地写代码,更多地专注于社区的发展。

为何是 Haskell?

在严格求值语言中,最初推算算法的时间空间占用比较简单,但如此肤浅的简单必有代偿。严格求值算法的组合常耗费时间计算你并不需要的东西。

考虑这个经典例子:take 10 . sort

在严格求值语言中这将会排序整个序列,而我仅需查看其中前十个,但在非严格求值语言中,比如 Haskell 带有默认惰性求值的数据结构,仅仅会排序出前十个元素。若你的排序算法是”惰性快速排序“或是在 Haskell 实践中使用的树排序,你的算法会被提升至“快速选择”,有更好的渐近线性能。

你不必足够聪明勤奋去融会贯通所有算法细节就可以获得渐近线性能优势。严格求值语言会使你停顿注意性能并离题去修复性能问题终为速度牺牲代码重用同时为代码重用牺牲速度。我不愿为此般进退两难之角所悬吊。

今,大多情形使你可能已在严格求值设置下通过特定惰性值或副作用写出惰性算法,但实践中人们不会这样做,因直白明确的惰性大规模使用太有害。他们尝试,他们挫败,之后他们停止。最好结果,你得到似生成器或流之类写成的一些代码。

其他 Haskell 优势不仅止于使惰性算法更好结合,而且纯代码允许平凡的并行或扩展。其使对单线程解决方案进行并行改进更简单,鉴于其他语言中我惧于忘记妥善处理事件发生序(happens-before)语法或忽略限制之类。

最后使我无法离开 Haskell 的因素是社区。(irc.freenode.net) 的haskell频道有1200余用户,且其为我在因特网中所见最一贯和蔼聪明的一群人。

Edward Kmett 著于 2013年四月廿一日
转载自Quara

你可能感兴趣的:(Edward Kmett 于 Haskell 之评价)