做一个能胜任的scala程序员是否需要你成为一个有能力的java程序员?

我非常喜欢Scala的美学风格,还有很多概念性的工作,比如打字系统和图书馆。

然而,当我开始修改Scala(并且看到我的一些同事修补它)时,我发现自己不得不挖掘越来越多的Java知识(特别是以库的方式)。

这给我带来了一些问题:

  • 从来没有一个Java程序员,我不熟悉或不熟悉Java标准库或其他stream行的库(如Apache Commons)。
  • 我在Java领域的google-fu很薄弱。 很难知道要search什么东西 – 一个问题因编程新手的大量无关的或基本的Java教程而加剧。

在这一点上,我不确定我是否应该咬紧牙关,尝试通过Javafind最快最全面的游览来追赶自己20年的Java开发,或者是否合理地继续尝试逐步补丁知识,我在周围徘徊scala。

Scala在我们当中所能提供的任何智慧都将不胜感激。

PS我毫不怀疑自己熟悉Scala语法的能力,而且我对函数式编程和scala社区中的范例感到满意和满意。 但程序员的能力不仅仅是以自己的能力为基础,而且也是一个人学习的能力,以及从别人那里采用工具和技能的能力。

你应该采取lazy方式来学习Java。 在你需要的时候学习它。

在我看来,很多旧的Java知识已经过时了,大部分新的教程都是多余的。 例如,您当然不想打扰Java的过时Collections 。 许多基于Java的框架可以被安全地忽略。 重要的JavaEE堆栈可以安全地绕过,直到你被迫使用它的一部分。

Java中的许多常见模式在Scala中要简单得多,前者的代码繁多。 核心逻辑应该始终在Scala中实现。 我相信你可以直接在Scala中完成大部分工作,而只需要在构buildSwing或与Spring集成等方面深入Java。

关于select和使用Java库,我个人的指导方针是:

  1. 如果Spring能做到的话,请使用Spring
  2. 如果Spring太重了,可以使用Spring使用的东西。
  3. 如果Spring不能这样做,请检查github项目
  4. 如果github上没有任何东西,请检查Apache项目
  5. 如果Apache没有任何东西,请检查sourceforge(t)。
  6. 最后,谷歌随机或自己build立它。

这有点让人感到惭愧,但是在过去12年完成Java之后,第三方库的成熟度和稳定性让我印象深刻。

如果你想学习西class牙语,开始学习西class牙语,而不是拉丁语。 编程语言也一样。 Java有两个很好的知识:

首先是API。 但是你只需要对存在的东西进行总体概述。 即使很长时间,Java程序员也不知道所有的细节。 为Javafind正确的API或lib通常很容易,因为Java很常见,甚至Google Fu也不会有任何问题。

你需要知道的第二件事是Java和JVM的一些基本原理和局限性(包括如何构build和运行),这有助于你理解一些Scala的问题和devise决定。 一个典型的例子是“types擦除”:如果你不明白Javagenerics的这种限制,那么在Scala中使用generics时会遇到问题。

正如你所看到的,你真正需要知道的东西是有限的。 其他的一切都可以在路上find。

这完全取决于你的“有能力的Java程序员”的定义。

对Java内存模型和垃圾回收策略有一个很好的理解将会有所帮助。 正如将会遇到各种各样的第三方零件库一样。

另一方面,如果你深入到像Spring这样的图书馆使用的getter / setterdependency injection中,那么在你正确地处理不可变性之前,你将不得不忘掉许多坏习惯 – 在这种情况下,事先Java暴露可能会阻碍你学习Scala。

有很多来自ruby / python,lisp / scheme,C#的scala和clojure的人,他们需要接受:

原始人,自动装箱

JVM启动选项,热点如何工作,32位与64位,使用openJDK?

基准,分析,如何阅读堆栈跟踪;

无数可能的需求的testing库。

java.util.concurrent中

Swing API调用; 类path; Maven,ant; 哈德森,接口

命名空间/包/目录布局,以及所有其他事情自动化:

intelliJ,netBean或eclipse


http://news.ycombinator.com/item?id=1508609

http://www.mired.org/home/mwm/papers/simple-clojure.html

+ UseConcMarkSweepGC -XX:+ CMSIncrementalMode -XX:,EscapeAnalysis等http://groups.google.com/group/clojure/browse_frm/thread/c8f69037b26e2856#

压缩的oops, http://blog.juma.me.uk/2009/10/26/new-jvm-options-and-scala-iteration-performance/

http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

http://groups.google.com/group/jvm-languages/topics

面向Clojure用户的Java

学习Clojure – 我应该对Java和更多知识有所了解

http://copperthoughts.com/p/clojurists-guide-to-java/