2010-11-20 15 views
40

私はScalaの美学的なファンであり、多くの概念的な作業はタイピングシステムやライブラリのようなものに組み込まれています。有能なスケーラプログラマであることは、有能なJavaプログラマであることが必要ですか?

しかし、私はScala(と私の同僚のいくつかはそれを使って見たことがあります)に触れ始めているので、自分自身がJavaの知識(特にライブラリの方法)を掘り起こす必要があります。

は、これはいくつかの問題を私に提示:

  • は、私はJavaの標準ライブラリ、または(Apacheのコモンズのような)追加的な人気のあるライブラリに精通か慣れていないよ、Javaプログラマではありませんでした。
  • Java-sphereの私のgoogle-fuは弱いです。何が検索されるのかを知ることは難しい。初心者向けプログラミングのための無関係な多数の無関係なJavaチュートリアルによって悪化する問題である。この時点で

しかし、私は弾丸をかむとJava開発の20年に自分自身をキャッチアップするためにJavaを通じて最速かつ最も包括的なツアーを試してみて、見つける必要があるかどうかわからない、またはそれに合理的かどうか私がスカラの周りを歩き回るにつれて、知識を段階的に修正しようとし続けます。

私たちの間でスカラーヘッドが提供できる知恵は大いに感謝されます。

P.S. 私はスカラの構文に慣れ親しむ能力に疑いがなく、私はスカラコミュニティの機能プログラミングとパラダイムに非常に満足して満足しています。しかし、プログラマーの能力は自分自身を教える能力に基づいているだけでなく、自分の能力を学び、他の人のツールやスキルを採用する能力も持っています。

+5

*いいえ、私は誰もがJavaを触れることなくScalaを学んだり使用したり書くことができると思っていますが、Javaを知っているのはなぜいいと思いますか? )Javaからオブジェクトを "使用可能"にする方法(必要な場合)2)Scala固有のインタフェースや置換をしないでJava APIを利用する方法(ただしjavadocがこれを利用します)3)JVMのロックセマンティクス4)Ant/Maven/etcなどの「Java Ecosystem」ツールを使って作業する方法は少なくなっていますが、 - だから**すでにそれをやってください**:p http://scala-lang.orgには多くの出版物が掲載されています。 –

+0

それは確かに助けになります。 –

+1

初めて私は大きな英語でSOの投稿を読む。 :) –

答えて

26

Javaの学習にはlazyのアプローチが必要です。必要なときに学びます。

私の意見では、古いJavaの知識の多くは時代遅れです。多くの新しいチュートリアルは冗長です。たとえば、Javaの古くなったCollectionsを使用すると、気にしなくてもいいでしょう。多くのJavaベースのフレームワークは安全に無視できます。そして、重量のあるJavaEEスタックは、あなたがその一部を使用するまで安全にバイパスすることができます。

Javaの多くの一般的なパターンは、より多くの定型的なコードが付いているScalaではるかに簡単です。コアロジックは常にScalaで実装する必要があります。私はあなたがScalaで直接仕事の大部分を行うことができ、SwingやSpringとの統合のようなものを構築するときにJavaに浸る必要があると信じています。Javaライブラリの選択と使用に関して、私の個人的なガイドラインは次のとおりです。

  1. 春には、それを行う春があまりにもヘビー級であれば春
  2. を使用し、春が使用するものを使用することができます。
  3. 春はそれを行うことができない場合は、githubのは、Apache、チェックsourceforgeの(T)から何もない場合はgithubの上の何もない場合は、チェックApacheは
  4. を投影し
  5. 投影し確認してください。
  6. 最後に、Googleはランダムに、または自分で作成します。

これはちょっとしたことですが、過去12年間Javaを実行した後の第三者図書館の成熟度と安定性に関する印象です。

+8

Javaの 'Collections'をなぜ古き良き色にしているのかわかりません。これらは基本的なデータ構造であり、必要に応じて更新されています(しばしばそうではありません)。 'Vector'と' Stack'は古くなったと言えるでしょう。 – erjiang

+2

最初にgithubを検索するのはなぜですか?彼らはjavaのライブラリ/プロジェクトを構築する "父"であったので、私は最初にApacheを検索します。多くのライブラリは、少なくとも1つのApacheライブラリで構成されています。 –

+1

@TEGフェアー!それは私の意見です。 @erijiang私はScalaのコレクションのほんの一部のユーティリティしか持っていないので、古くなったと言います。実際、私にとってScalaのコレクションを使ったプログラミングは、私にとって素晴らしい新しいパラダイムでした(そして他の多くの人にとっても、私は疑います)。 – Synesso

8

"Competent Java Programmer"の定義に完全に依存します。

Javaメモリモデルとガベージコレクションの戦略をよく理解することが役に立ちます。同様に、第3部のライブラリの幅広い経験があります。

一方、Springのような図書館で使われているゲッター/セッター依存性注入について深く教えているなら、不変性を適切に処理する前に、多くの悪い習慣を忘れる必要があります。この場合、以前のJavaのエクスポージャーはおそらくScalaの学習を妨げているでしょう。

13

スペイン語を学びたい場合は、ラテン語ではなくスペイン語を学び始めます。プログラミング言語でも同じです。 Javaには知っておいてほしいことが2つあります。

まずはAPIです。しかし、あなたは何が存在するかについての一般的な概要だけを必要とします。長い間、Javaプログラマはすべての詳細を知りません。そして、問題の正しいAPIまたはlibを見つけることは、Javaが非常に一般的であり、Google Fuが弱い場合でも問題はないはずですから、通常は簡単です。

2番目に知っておくべきことは、JavaとJVM(ビルドと実行の方法を含む)のいくつかの基本的な原則と制限であり、Scalaの問題と設計上の決定を理解するのに役立ちます。 1つの典型的な例は「タイプ消去」です.Javaのジェネリックのこの制限を理解していないと、Scalaでジェネリックスを使用するときに問題が発生します。

ご覧のとおり、実際に知る必要があるものは限られています。途中で他のすべてを拾うことができます。

+0

皮肉なことに、私は高校でラテンを取ったので、おそらくそれは私の人生に役立っているラテンを知っていると思いますさまざまな方法で;)つまり、私はJavaを迂回するのではなく、Scalaで耕し続けるべきだと私は確信しています。それでも私は人々がJavaから知る必要があると考えるものが不思議です。 (私はタイプ消去を参照してくださいよ)ありがとう:) – knowtheory

8

にピックアップする必要がありルビー/ pythonのからスカラ座とのClojureに来民俗たくさんの、lispの/スキーム、C#の、あります

JVM起動オプションのオートボクシング、

プリミティブは、どのようにホットスポット作品、32ビットvs. 64ビット、openJDKを使用しますか?

ベンチマーク、プロファイリング、スタックトレースの読み取り方法。

考えられるすべてのテストライブラリの数。

java.util.concurrent

スイングAPIコール。クラスパス; Maven、ant;ハドソン、インタフェース

によって自動化

名前空間/パッケージ/ディレクトリのレイアウト、および他のすべてのもの:

のIntelliJ、netBean、または


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#

圧縮おっと、 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

Java for Clojure users

Learning Clojure - What should I know about Java and more

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

+2

ああ、これは便利です。だから、スカラの俳優のライブラリよりjava.util.concurrentを知っているのはなぜですか? JVMの知識は、私が拾おうとしているものであり、クラスパスのマジックとスタートアップのオプションです。最後に、私は絶対に複雑なIDEにアレルギーです。私がREPLでそれを読み込んでスティックでそれを突き刺すか、隔離されたスクリプトテストを書くことで何ができるか分かりません。 – knowtheory

+1

@knowtheory、私はあなたがメッセージングやスレッド化されたアプリケーションで作業しているなら、あなたはscala actorsとakka、j.u.c、clojureとhaskell、erlang processes、およびzeroMQのSTMに精通している必要があります。そして、C#/ F#asynchフレームワークがどのように進化しているのですか(それについてはあまりよく分かりません)そしてちょうどheckuvitのためのnode.js。 –

+0

@knowtheory:IDEは、あなたが理解している/好きな機能だけを使用するようにあなたを再確認していません。 IDEAのためには、少なくとも、ヒープとpermgenを(もっとはっきりと)再ジャンギングしなければならないかもしれませんし、32ビットJVMにリッピングしてリフトのような大きなリポジトリを実行させるかもしれませんが、かなりうまく機能します。そして、たくさんのブログやリストの活動があります:http://www.delicious.com/tag/scala+intellij; http://dir.gmane.org/gmane.comp.lang.scala.tools –

関連する問題