当你只有一把断线钳和一瓶伏特加时,一切看起来就像 Wolf Blitzer 船库门上的锁。(如果您不阅读 xkcd,请用锤子和钉子替换它)
我目前编程 Clojure、Python、Java 和 PHP,所以我熟悉 C 和 LISP 语法以及空格。我知道命令式、函数式、不可变、OOP 和一些类型系统以及其他东西。现在我想要更多!
哪些语言采用不同的方法并且对实际工具选择或理论理解有用?
我不想学习另一种函数式语言(Haskell)或另一种命令式 OOP 语言(Ruby),我也不想练习像 Brainfuck 这样不切实际的有趣语言。
我发现自己的一件非常有趣的事情是基于单一堆栈的语言,例如 Factor。
只有当我觉得我理解了大多数概念并回答了所有问题时,我才想开始思考我自己的玩具语言,以包含我所有的个人喜好。
实用性问题是非常主观的,所以我会简单地说,学习不同的语言范式只会让你成为一个更好的程序员。还有什么比这更实用的呢?
功能性,Haskell - 我知道你说过你不想这样做,但你真的应该重新考虑。您已经接触过 Clojure 甚至 Python 的一些功能,但如果没有 Haskell,您还没有充分体验过它。如果你真的反对 Haskell,那么好的折衷方案是 ML 或 OCaml。
声明式,Datalog - 很多人会在这个位置推荐 Prolog,但我认为 Datalog 是声明式语言的一个更干净的例子。
Array, J - 我才刚刚发现 J,但我发现它是一种令人惊叹的语言。它会把你的思想扭曲成椒盐脆饼。你会为此感谢 J。
Stack, Factor/Forth - Factor 非常强大,我计划尽快深入研究它。Forth 是 Stack 语言的鼻祖,作为额外的好处,它很容易实现自己。关于通过实施学习有一些话要说。
Dataflow, Oz - 我认为 Oz 的影响力正在上升,并且在未来只会继续增长。
基于原型,JavaScript / Io / Self - Self 是每一种基于原型的语言的祖父和极有影响力的。这与基于类的 OOP 不同,不应如此对待。很多人来到原型语言并创建一个临时类系统,但如果你的目标是扩展你的思维,那么我认为这是一个错误。充分利用语言。阅读没有类的组织程序以获取想法。
专家系统,CLIPS - 我总是推荐这个。如果您了解 Prolog,那么您可能会在加快速度方面占上风,但它是一种非常不同的语言。
Frink - Frink 是一种通用语言,但它以其单位转换系统而闻名。我发现这种语言非常鼓舞人心,因为它坚持不懈地努力做到最好。另外……真的很好玩!
功能+可选类型,Qi - 你说你有使用过一些类型系统的经验,但是你有使用过“可换肤*类型系统”的经验吗?没有人有......但他们应该有。Qi 在很多方面都像 Lisp,但它类型系统会让你大吃一惊。
Actors+Fault-tolerance, Erlang - Erlang 的进程模型引起了很多关注,但它的容错和热代码交换机制正在改变游戏规则。在 Clojure 中你不会学到很多关于 FP 的知识,但是它的 FT 特性会让你想知道为什么更多的语言似乎不能正确地做到这一点。
享受!