kno*_*ory 40 java scala libraries
我是美学上Scala的忠实粉丝,并且在很多概念性工作中都投入了诸如打字系统和库之类的东西.
然而,当我开始修改Scala(并看到我的一些同事修补它)时,我发现自己不得不挖掘越来越多的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库,我的个人指南是:
这有点狡猾,但在过去的12年里,在我完成Java之后,我对第三方图书馆的成熟度和稳定性印象深刻.
Lan*_*dei 13
如果你想学习西班牙语,开始学习西班牙语,而不是拉丁语.编程语言也是如此.Java中有两件事要知道:
首先是API.但是,您只需要对存在的内容进行概述.即使很长一段时间,Java程序员也不了解所有细节.为问题找到合适的API或lib通常很容易,因为Java非常常见,即使使用弱的Google Fu,也不应该有任何问题.
您需要知道的第二件事是Java和JVM的一些基本原则和限制(包括如何构建和运行),它们可以帮助您理解Scala的一些问题和设计决策.一个典型的例子是"类型擦除":如果你不理解Java的泛型的这种限制,那么在Scala中使用泛型时会遇到问题.
如您所见,您真正需要知道的事情是有限的.其他所有东西都可以在途中被拾取.
它完全取决于您对"Competent Java Programmer"的定义.
很好地理解Java内存模型和垃圾收集策略将有所帮助.与各种第三方库一起体验.
另一方面......如果你被深深地灌输到像Spring这样的库所使用的getter/setter依赖注入,那么在你能够正确处理不变性之前你必须忘掉许多坏习惯 - 在这种情况下,事先Java暴露可能会阻碍你学习Scala.
很多人都会来自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
http://copperthoughts.com/p/clojurists-guide-to-java/