PHP之后要学习什么? Scala还是Clojure?

时间:2009-12-03 23:48:50

标签: php scala clojure

我有一个沉重的Web开发背景与PHP。我学习函数式编程语言的原因是:

  1. 提高我的编程技巧。强烈建议学习FPL有帮助。这是首要任务,因为我希望自己变得越来越好。
  2. 学习通用编程语言来解决脚本(OS脚本,文本操作等)等任务。
  3. 在Web开发中用作PHP的替代方案。
  4. 还有更好的社区支持,教程和书籍以及更好的Web应用程序框架?

    随意推荐其他语言。

17 个答案:

答案 0 :(得分:46)

对于函数式语言,同时学习ScalaClojure 。您将从两者中学习新的思维方式。去学习一些 Reia Erlang

说真的,你掌握的语言越多,无论你最终使用哪种语言,你作为程序员的感觉都会越好。

Rant:“我应该学什么语言?”问题变得令人厌倦。每次答案应该是相同的,但没有人给出正确的圣人建议。相反,每个人都传播FUD,并建议他们恰好用于日常工作的语言是你应该学习的语言。胡说。

答案 1 :(得分:24)

我最近尝试过Scala和Clojure,基于类似的动机。这是我发现的:

Scala非常多才多艺而且功能强大; Scala允许您以极高的精度定义类型,并允许您定义简洁且干净的DSL。 Scala有许多人希望Java拥有的很酷的结构,包括一堆功能扩展。但是当它出现时,我最终用Scala语言编写命令式Java,因为所有那些很酷的东西的复杂性让我不知所措。

我在大学里做了一些Lisp,并且总是渴望再次回到它。一些非常酷的尖端东西是由Lisp中非常聪明的人完成的,并且只有极少数几行。我想成为那些聪明人之一,或者至少尝试像他们一样。但我从来没有真正理解Scheme,而且我错过了Java的“无限库”。我无法看到自己在Scheme中编写GUI,并且无法设想Web应用程序。

然后我尝试了Clojure,似乎所有内容都被点击了。故意使Clojure更加局外友好:试图减少括号并在不同情况下使用不同的括号标点符号。将数组,文本和XML等事物作为序列处理,结合一组强大的序列函数,使得很多问题变得非常简单,对数组和哈希映射的支持也是如此。它(故意)就像功能Java一样。功能性mindeset需要一些习惯,但我发现它在Clojure中是平易近人的或令人愉快的。我的代码几乎不再需要循环了,但它更清楚的是循环/排序的位置,更简洁。如果我真的需要,我可以做可变状态,但我必须明确它;作为交换,该状态受Clojure的并发机制保护。因此,并发性几乎变得毫无疑问,有时我的代码会在没有自己的意识努力的情况下安全地执行。

不是来自Java,这对您来说似乎没有用,但Clojure可以做任何Java可以做的事情,包括完全兼容的.class文件。最重要的是,它可以与所有Java库进行交互,只有这种能力才能使PHP看起来像是一种玩具语言。

答案 2 :(得分:24)

我的建议是学习JavaScript。

我的意思是,真的学习它。

答案 3 :(得分:12)

这是一位自称为Clojure的倡导者对Scala所说的话。当然,要自己构思,但你可能会发现他的观点很有用。

您可能也对他对PHP vs Clojure所说的内容感兴趣。

答案 4 :(得分:9)

这是一个非常困难的电话。就个人而言,我认为Scala作为Web开发人员的通用语言更有用。它有许多Web框架,或适应它。例如,在非常快速和肮脏的一面,有Play。在完美的Comet支持方面,有Lift

但是你谈到学习以功能方式编程。在这方面,Scala无法与Clojure竞争。 Scala可以在功能样式中使用,但它确保您不必使用。另一方面,使用Clojure,除了功能风格之外的任何事情都是痛苦的。

所以,如果你想要替代PHP,我会打赌Scala。如果你想真正学习函数式编程,Clojure。

最后,让我说我认为Clojure不是一种通用语言,或者它不能用于Web开发。我只是认为Scala在这方面都更为重要。

答案 5 :(得分:7)

拿一袋水泥,硬化并Learn You a Haskell, for Great Good!

  1. 纯粹功能,所以你不能从船上掉下来。
  2. 它是通用的,包含大量的库(包括Web应用程序堆栈),并且没有VM启动时间损失(JVM语言对于OS脚本等不是很好,因为每次都必须启动JVM)。 / LI>

答案 6 :(得分:5)

从PHP跳转到Scala或Clojure将是一个巨大的文化冲击。 PHP非常注重快速/肮脏的完成任务(或者使用最后10%的脏(或:)来完成90%的清理,而函数式编程语言会强制你思考一定的正确性和抽象性。在你到达Scala或Clojure之前,你我想要介于两者之间。如果是我,我会

  1. 选择我的最终目标作为Clojure,因为(根据我的理解),你可以使用Clojure获得整个Java标准库,使其立即比纯粹像Scala更有用

  2. 我花了一些时间用Java构建一些东西,只是为了感受一种强类型的OO语言。我选择Java而不是C#(甚至是ZendFramework风格的PHP),因为一旦你到达Clojure它就会很有用。 Google Web Tools可能是一个很好的开始。这是一种Web开发,但非常像Java,而不是像PHP / HTML那样。

  3. 花一些时间查看jQuery的内容,并开发自己的jQuery模块或添加核心功能。这将使您习惯于思考功能,同时将其应用于您熟悉的问题。

  4. 最后一点建议:尝试接受您选择的语言/平台的常用方法。不要试图将您的PHP编码风格用于任何一种语言。虽然一开始看起来会更容易,但是你会得到一些结果,但你会错过这个练习的重点,即对问题进行不同的思考和更广泛的思考。

    祝你好运!

答案 7 :(得分:5)

如果您正在寻找PHP的替代方案,我建议使用Python和Ruby。如果您需要一种能够为Web开发提供良好支持的功能语言 - 请学习Erlang。以下是一些项目/框架,可帮助您在Erlang中创建高度可伸缩的Web应用程序:

  • Yaws - 一个特别适合动态内容网络应用的Erlang网络服务器。 (另见this Apache vs Yaws benchmark
  • Erlyweb - 一个面向组件的Web开发框架,用Erlang编写,旨在与Yaws一起工作。
  • Erlang Web - Erlang Web是基于HTTP协议的应用程序的开源框架,使开发人员能够更好地控制内容管理。
  • Nitrogen - Erlang的事件驱动的Web框架。

它也是为构建容错的分布式软件而专门设计的少数几种语言之一。

答案 8 :(得分:4)

虽然它的报道范围比Clojure和Scala少,但我真的建议你去看看Fantom:http://fantom.org/

这就像两个世界中最好的一样,真的值得更多关注。

答案 9 :(得分:3)

我是 Clojure 的新转换。它让我扩展自己的思想,但它足够平易近人,充满乐趣和高效。我是一个快乐的客户。

<强>但是

PHP和Clojure生活在不同的宇宙中。在使用Clojure之前,我已经对FP语言进行了一些介绍性的尝试,并且在其他Lisps中有一些错误的启动。对于直接来自PHP的经验不足的开发人员来说,Clojure可能过于文化冲击。

作为两者之间合理的妥协,以及一种脚本足以让你以渐变而不是暴跌来接近FP的语言,我推荐 Ruby 。红宝石现代,干净,优雅。在它的JRuby版本中,它甚至更快。学习Ruby和使用Rails是愉快和有益的。

答案 10 :(得分:3)

虽然现在Scala是我最喜欢的语言,但我认为这不是学习FP的最佳选择。它主要是OOPL并得到FP的良好支持。我建议从Haskell开始快速进入FP。您将了解FP的以下概念如何工作(不仅支持,而且在Haskell中强制执行且无处不在): 1)具有类型推断的强大的静态类型系统 2)懒惰的评价 3)副作用自由计算

在动态输入“实用”PHP和纯功能“学术”Haskell之后,您将对编程语言环境有相当全面的了解。

答案 11 :(得分:2)

我的$ .02是检查Perl。我可能听起来像一个geezer,但请记住,Perl有CPAN(http://cpan.org)和许多非常非常有用的在线资源。

答案 12 :(得分:2)

Ruby可能是最具功能性的主流语言,也适用于脚本编写。 Python紧随其后,但ruby习惯于隐式返回函数/块中最后一个表达式的结果,这对我来说是决胜局。

两者都有优秀的Web框架(分别是Rails和Django),在编写PHP之后,两者肯定会开阔视野。同时,他们将为增量学习提供大量机会。

他们都没有使用S表达式并且都允许命令式编程,所以没有任何东西可以迫使你放弃命令式的冷火鸡。

最后,备受好评的TCL基本上是Scheme作为脚本和扩展语言。我不确定这些日子在哪里,但ArsDigita社区系统是用TCL编写的。

答案 13 :(得分:1)

Web开发完全取决于:第一,Web框架的质量,第二,开发工具。我不知道你为什么要转向使用函数式语言来编写Web应用程序。

Python允许一些用于编程的功能构造,它具有框架和工具。 Lua允许相同级别的函数式编程,并且它没有用于Web开发或工具的高质量框架,但其简单性/原始性质是它的优雅。

现在作为清教徒,我会说看看haskell,但这会适得其反:D,。你我的朋友正在寻找Python。我没有评估Ruby,但它可能有一些功能结构。

答案 14 :(得分:1)

可能看起来不那么花哨,但我强烈建议使用JavaScript。

很多年前,我在PHP开发方面很有实力,但后来转向Java,C#,C,Objective-C。在我的Java时间里,我深入研究JavaScript并用它做了一些非常酷的事情。我认识的人开发了一个完整的客户端临时轻量级DBMS。只需看看Ext.js他们用JavaScript做什么。它被低估了,但不值得。我建议你谷歌“道格拉斯克罗克福德视频”。在Yahoo,他创建了几个关于JavaScript的优秀演示文稿,我建议你从Douglas Crockford那里得到“Javascript - The Good Parts”这本书,以及“JavaScript - The Definitive Guide”。两本最好的JavaScript书籍。而且你会惊讶于它的可能性以及它实际上是多么美妙的语言。事实上,你可以用它来做AI,它有Lambda,实际上并没有什么比这更“酷”!它只用于客户端脚本是多么可怜。很少有人知道JavaScript也可以用于服务器端编程,但这种情况非常罕见/没有很好的记录。

感谢Adobe Air,您可以将JavaScript带到桌面。

这将是您PHP知识的最佳补充。做相关的东西总是好的。您可以成为最好的Web开发人员,也可以是最好的桌面软件Architekt。但是我们的大脑太慢了,无法掌握现在所需要的所有忏悔,成为多个方向的大师。我想,Beeing the Guru对成功至关重要。我的一些朋友只做了一件事:躲避大师。他们一生都在研究一个小题目,并且非常成功。在四分之一的时间内,他们的收入是我所能做到的5倍,只知道5% - 只有5% - 这个主题 - 开发人员。

所以我也建议:在之前写一篇600页的PHP书籍你在完成不同的事情时忘记了你的PHP知识。

确实忘记了我所知道的关于PHP和JavaScript的几乎所有内容,但在那些早期我绝对是向其他人展示了很多内容的专家之一。现在这是一种痛苦,我必须再次提出这么多基础知识,以便在我的小脑中回忆它们。通过编写您的书,即使在做了几年不同的事情之后,您也会非常快速地回想起您的PHP专业知识,因为这是您的书,适合您的大脑,从您的大脑。即使经过几年的其他事情,你也不会失去你的PHP专家身份。

祝你好运。

答案 15 :(得分:0)

我尝试过Scala并且发现它有点多(大量的操作员,你必须回忆起如何使用)。但那可能只是我。我听说Clojure功能更纯粹,更接近Lisp,但还没有检查出来。

F#是微软对功能语言的看法,您可能需要查看它。我听说它已被用于工业中的几个项目。

答案 16 :(得分:-2)

我建议学习具有超出Web前端的框架的语言,例如Java EE(Java EE [JSP / JSF] + Java)或.NET(ASP.NET + C#等)。这将为您提供更多的职业选择余地,并且您可以(相对)轻松地将服务器组件连接到Web前端。