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

sam*_*ung 20 php scala clojure

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

  1. 提高我的编程技巧.强烈建议学习FPL有帮助.这是首要任务,因为我希望变得越来越好.
  2. 学习通用编程语言来解决脚本(OS脚本,文本操作等)等任务.
  3. 在Web开发中用作PHP的替代品.

还有更好的社区支持,教程和书籍以及更好的Web应用程序框架?

随意建议其他语言.

Rya*_*ary 46

对于函数式语言,学习ScalaClojure.您将从两者中学习新的思维方式.去学习一些ReiaErlang吧.

说真的,你掌握的语言越多,不管你最终使用哪种语言,你作为一名程序员就越好.

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

  • 是的,这是唯一正确的答案.学习一切,选择你最喜欢的.这样做没有任何缺点. (9认同)
  • 我在Java工作,我喜欢Scala,但只有两种语言应该学习:Lisp和Haskell (2认同)
  • 我同意Ryan,但不同意Brian和GClaramunt.每个问题都有不止一个正确的答案,但有时选择最佳答案涉及使用不同的语言.这就是为什么你应该尽可能多的语言. (2认同)

Sco*_*den 24

我的建议是学习JavaScript.

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

  • 你没听说过Rhino我猜... http://ejohn.org/blog/bringing-the-browser-to-the-server/ (3认同)
  • 由于网络平台的缘故,对JavaScript的良好掌握似乎与PHP相得益彰.它对任何其他网络语言也很重要.我认为投入javascript是一个健康的步骤. (3认同)
  • 服务器端javascript,这不是很有效率.... (2认同)

Car*_*icz 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看起来像是一种玩具语言.


Joe*_*ler 12

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

您可能也对他对PHP与Clojure的看法感兴趣.

  • OP询问他是否应该学习Scala或Clojure,用scala和clojure标签标记问题,另外还特别说他想学习函数式编程,并且我得到了一个关于Scala和Clojure的比较的暗示?你为什么不让PHP程序员决定他想要什么? (6认同)
  • 我也强烈反对Vainstah的评论......不知情,礼貌地说.Clojure与JVM和Java库的集成非常顺利和完整.在许多情况下,从Clojure调用Java代码比从Java调用Java代码更加轻松! (6认同)
  • 如果您认为JVM上的Scala/Clojure与JVM上的Java相比会增加"间接级别",那么您根本无法理解您所说的内容.JVM执行字节码而不是Java.它可能是根据Java的需求量身定制的,但这是另一回事. (2认同)

Dan*_*ral 9

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

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

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

最后,让我说我不认为Clojure不是通用语言,或者它不能用于Web开发.我只是认为Scala在这方面更多.


Apo*_*isp 7

得到一袋水泥,硬化,学习哈斯克尔,为了好!

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


Ala*_*orm 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模块或添加核心功能.这将使您习惯于思考的功能,同时将其应用于您熟悉的问题.

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

祝好运!


Vij*_*hew 5

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

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

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


mon*_*ksy -2

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

  • 你推荐了两种与他的问题无关的语言。他想学习新的思维和编程方式。企业系统会腐蚀你的大脑,但它们不会扩展它。在企业系统上编程一整天后,我使用函数式语言来恢复理智。 (5认同)