成为一名称职的scala程序员是否要求你成为一名称职的java程序员?

kno*_*ory 40 java scala libraries

我是美学上Scala的忠实粉丝,并且在很多概念性工作中都投入了诸如打字系统和库之类的东西.

然而,当我开始修改Scala(并看到我的一些同事修补它)时,我发现自己不得不挖掘越来越多的Java知识(尤其是图书馆的方式).

这给我带来了一些问题:

  • 从来没有成为Java程序员,我对Java标准库或其他流行的库(如Apache Commons)不熟悉或不熟悉.
  • 我在Java领域的google-fu很弱.很难知道要搜索什么 - 这个问题因为大量无关紧要或基本的Java编程新手编程教程而加剧了.

在这一点上,我不确定我是否应该咬紧牙关并尝试通过Java找到最快最全面的游览来吸引自己20年的Java开发,或者是否合理继续尝试逐步修补我的Java知识,因为我在斯卡拉附近徘徊.

斯卡拉在我们中间所能提供的任何智慧都会受到高度赞赏.

PS我毫不怀疑我能够熟悉Scala语法,并且我对scala社区中的函数式编程和范例非常满意.但程序员的能力不仅仅基于一个人自我教育的能力,还有一个人的学习能力,并采用其他人的工具和技能.

Syn*_*sso 26

您应该采用一种lazy方法来学习Java.在需要时学习它.

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

Java中的许多常见模式在Scala中要简单得多,前者需要很多样板代码.核心逻辑应始终在Scala中实现.我相信你可以直接在Scala中完成你的大部分工作,只需要在构建Swing或与Spring集成等东西时深入研究Java.

关于选择和使用Java库,我的个人指南是:

  1. 如果Spring可以做到,请使用Spring
  2. 如果Spring太重了,请使用Spring使用的东西.
  3. 如果Spring无法做到,请检查github项目
  4. 如果github上没有任何内容,请检查Apache项目
  5. 如果Apache没有任何内容,请检查sourceforge(t).
  6. 最后,谷歌随机或只是自己构建它.

这有点狡猾,但在过去的12年里,在我完成Java之后,我对第三方图书馆的成熟度和稳定性印象深刻.

  • 我不确定为什么你把Java的'Collections`染成"过时".它们是基本的数据结构,并且在需要时仍然在更新(不应经常更新).`Vector`和`Stack` otoh可以称为过时. (8认同)
  • 不,不要从春天开始!这是让*更难学习良好,惯用Scala的最可靠方法...... (7认同)
  • 为什么先搜索github?我会首先搜索Apache,因为他们一直是在java中构建库/项目的"父亲".许多库至少包含1个Apache库. (2认同)

Lan*_*dei 13

如果你想学习西班牙语,开始学习西班牙语,而不是拉丁语.编程语言也是如此.Java中有两件事要知道:

首先是API.但是,您只需要对存在的内容进行概述.即使很长一段时间,Java程序员也不了解所有细节.为问题找到合适的API或lib通常很容易,因为Java非常常见,即使使用弱的Google Fu,也不应该有任何问题.

您需要知道的第二件事是Java和JVM的一些基本原则和限制(包括如何构建和运行),它们可以帮助您理解Scala的一些问题和设计决策.一个典型的例子是"类型擦除":如果你不理解Java的泛型的这种限制,那么在Scala中使用泛型时会遇到问题.

如您所见,您真正需要知道的事情是有限的.其他所有东西都可以在途中被拾取.


Kev*_*ght 8

它完全取决于您对"Competent Java Programmer"的定义.

很好地理解Java内存模型和垃圾收集策略将有所帮助.与各种第三方库一起体验.

另一方面......如果你被深深地灌输到像Spring这样的库所使用的getter/setter依赖注入,那么在你能够正确处理不变性之前你必须忘掉许多坏习惯 - 在这种情况下,事先Java暴露可能会阻碍你学习Scala.


Gen*_*e T 8

很多人都会来自ruby/python,lisp/scheme,C#,他们需要接受:

原语,自动装箱

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

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

为各种可能的需求提供数以万计的测试库.

java.util.concurrent中

Swing API调用; 类路径; Maven,蚂蚁; 哈德森,接口

命名空间/包/目录布局,以及通过以下方式自动化的所有其他事项:

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/

  • 啊,这很有用.那么,为什么我应该知道scala的actor libs上的java.util.concurrent?我正在尝试了解JVM的知识,以及所有类路径魔术和启动选项.最后,我对复杂的IDE绝对过敏.如果我无法通过在REPL中加载并用棍子戳它或者编写孤立的脚本测试来弄清楚它的作用,我会担心. (2认同)