Javaの代わりにscalaが良い選択でしょうか?


11

Java(frameworks / ECOシステムなど)のすべての.net開発者をトレーニングする新しいプロジェクトを開始します。C#で記述された多くのコードがあり、すべてJavaで書き直す必要があるため、これらはすべて無駄になるようです。私が見る問題は、最初の1年かそこら(おそらく2年)は以前のものが今はJavaであったものを再現するためにほとんどの時間を費やすため、何も提供できないことです。

私たちのチームは世界中のさまざまなオフィスに分散しており、多数のJava開発者(20から30)と10人の開発者が.netを使用しているため、すべての開発者が同じ言語/プラットフォームを使用して、コンポーネント/モジュールを再利用します。だから私は経営者の視点を理解できます。

昨日、Scalaに出会い、現在の製品(C#で記述されている)でこれを使用する方が良いかどうか疑問に思っていました。少なくとも1年で機能する製品ができます。また、製品の他の部分を移行しながら、1年でJavaの世界で使用できるモジュールがあります。

私たちが達成しようとしていることを考えると、ScalaはJavaよりも良い選択でしょうか?


2
別の言語ですべてを書き換えますか?そして、何も提供するものがない2年?ひどい経営判断のように
聞こえ

ええ、それは考慮されました。どこから探し始めてC#に固執するべきかわからない:)
JD01

1
あなたの程度のようなの音が何をしているあなたがするべきではありません事を
back2dos

回答:


15

考慮すべき点:

  • Scalaは素晴らしい言語です。しかし、正しく学習して使用することは非常に難しい言語でもあることは注目に値します。私の意見だけでなく、経験豊富なScalaの専門家でさえそう言っています。チームのスキルのレベルにもよりますが、おそらく最も経験豊富なエキスパート開発者向けのツールとして最適です。
  • JavaとC#は多くの点で非常に似ています-訓練を受けた開発者が移動するのに長くはかかりません(構文は似ていますが、ほとんどはそれぞれの癖を学び、異なるライブラリを理解するだけです多くの場合、同様の機能を備えていますが、パッケージが異なるか、名前が異なります。個人的にJavaからC#に切り替え、問題なくJavaに再び切り替えました。
  • また、すべてのJVM言語(JavaとScala、さらにJRubyとClojureなど)は非常に互換性があり、同じ基本的なJVMプラットフォームを共有し、コード/ライブラリを非常に簡単に共有できることにも注意してください。

このすべてを考えると、賭けをヘッジし、Java / Scalaの混合戦略を採用することをお勧めします。つまり、JVMプラットフォームに移行し、最初はJavaに焦点を合わせますが、開発者が安心している場合やScalaを使用するオプションを開いたままにする手元の問題に適合します。

管理の観点から、これには多くの利点があります。

  • 引き続きすべてのライブラリを共有できるため、投資が安全になります
  • 経験の浅い開発者はC#-> Javaを非常に迅速に転送できます。
  • 経験豊富な開発者は、Scalaの高度な機能を最大限に活用できます。
  • すべてのツールは互換性があり、共有できます(ビルドシステム、IDE、展開ツールなど)
  • JVM上のライブラリの非常に広範なオープンソースエコシステムに無料でアクセスできます(クロスプラットフォームの移植性と並んで、これが間違いなくJVMプラットフォーム上にある最も良い理由です)
  • 開発者は、スキル/手元のタスクを考慮して最も生産性の高い言語を使用できるようになります(場合によってはJava、他の場合はScala、将来的にはClojureのような他の言語)

欠点は、サポートする主要な言語がまだ2つあることです。しかし、実際には既に2つ以上のシェル(シェルスクリプト、ドメイン固有のXML形式、構成ファイル、ルールエンジン、HTML、Javaスクリプトなど)が既に存在するため、実際にはそれほど大した問題ではないと主張できます。


情報のおかげで。最善の方法を見つけようとしているだけで、素晴らしい情報を提供してくれました。現時点では、優れたオブジェクト指向開発者がいますが、関数型プログラミングに精通している人はいません。
JD01

1
喜んでお手伝いします!Scalaはマルチパラダイム/ OOPベースの言語であることに注意してください。Scalaでは確かにFPを実行できますが、より明確に機能する言語に焦点を合わせたい場合は、HaskellまたはClojureがおそらくマークに近いでしょう。
mikera

コードの再利用については、初日からClojureまたはScalaを使用した場合、または混合戦略で言ったように、Clojure / Scalaコードを.netとJavaの両方で再利用できますか?これが経営陣にとって良いセールスポイントかどうか疑問に思っています。このようにして、製品(新機能を備えた古い製品)を引き続き入手することができ、clojure / scalaモジュールのコード再利用を使用して、Javaで既存のコードを書き換える道を歩むこともできます。ここで考えていることは正しいですか、それとも他の問題を引き起こしていますか?
-JD01

1
必要に応じて、Clojure / Scala機能をWebサービスまたはRESTインターフェイスとして公開できます。これは、ライブラリを直接構築するよりも多少高いオーバーヘッドです(Java /別のJVM言語から機能を呼び出したい場合に最適なオプションです)が、それは確かにあなたが好きなクライアントからコードを呼び出す柔軟性を与えます(。ネット、Java、Rubyなど)
mikera

マイクありがとう。コードの再利用パスは、少なくともScala / Clojureオプションでは完全な再書き込みが不要であることを管理者に示すと思います。Netscapeのようにはなりたくない:)。ライブラリの構築に戻り、Webサービスなしで.netおよびjavaでライブラリを使用することはできませんか?
JD01

15

3番目のオプションを追加します。あなたの組織の誰かがあなたのC#とJavaモジュール間の相互運用を検討しましたか?C#機能をどのように公開していますか?SOAPまたはRESTFul Webサービスはオプションですか?

2年間の書き直しは、組織にとって死の告白になる可能性があります(Netscapeに聞いてください)。ただし、既存のコードが相互にうまく機能している間に段階的に移行することは、ビジネスへの影響が少ない可能性があります。


3

C#をScalaに書き換えるのは、Javaに書き換えるのと同じくらい難しいでしょう。どの言語が「より良い」か、そのポイントは議論の余地がなく、各言語には独自のプラスとマイナスのポイントがあります。

あなたのコードベースがどれほど大きいかはわかりませんが、30人の開発者にとって2年は単純な書き直しのために巨大なようです。C#を知っているときにJavaを選択するのは簡単です。慣れるまでに1、2日かかりました。

私のアドバイスは、経営陣に道を譲らせ、スキルセットを拡大するために報酬を受け取るという事実を楽しむことです。


新製品の開発に携わる開発者は約10人だけです。私はただScalaを使うことの長所と短所が何であるかを見つけようとしています。
JD01

1
私はあなたのプロジェクトやScalaの詳細について十分に知らないので、あなたに明確な答えを与えることができません。しかし、誰も知らない第三言語を導入することは問題を複雑にするだけだと私には思えます。
トムスクワイアズ

あなたは正しいかもしれません。私は、1年ほどで製品をリリースすると同時に、.netとjavaでコードを再利用できるという点で考えていました。あなたのポイントはよく知られています:)
JD01

1

Java開発者にC#を習得させる方が簡単だと思います。どちらの言語も多くの点で非常に似ており、Java開発者がC#を習得するのにそれほど時間はかかりません。私はC#を学んだ多くのJava開発者と協力してきましたが、通常はスムーズな移行です。彼らがしばらく動けなくなるかもしれない1つの領域は、WebFormsプログラミングモデルです。Java開発者はMVCパラダイムにより良く適応します。この方法では、新しい機能の開発を開始する前に1年待つ必要はありません。Scalaに関しては、30人の開発者全員が新しい言語を習得しようとすると、まったく新しい問題が発生するのではないかと心配しています。


Javaで記述された製品は非常に多いため、C#を習得させるのは困難です。新しい製品ができたら、Java開発者はScalaを学ぶ必要なくライブラリをそのまま使用できると思いました。
JD01

2
Java開発者がJavaのすべての新機能を呼び出して開発できるサービスとして既存の.Netコードを公開しても大丈夫ではないでしょうか。
スリラム

これは過去に提案されていましたが、.netから離れることが決定されました。
JD01

うわー!それから私はそれをシンプルに保ち、Javaでコードを書き直します。Scalaを使用すると、管理がさらに複雑になり、管理が難しくなります。
スリラム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.