私の会社は長年Java(言語およびプラットフォームとして)を使用しています。サイズ、目的、複雑さが大きく異なる製品がたくさんあります。要件が何であれ、答えは常に同じ-Java。このスタンスには明らかに長所と短所があります。プラス面では、異なるプロジェクトでの作業割り当てを切り替えるコンテキストがなく、会社のすべての開発者は多くのプロジェクトで比較的生産的である可能性があります。マイナス面では、小さなツールです。 Hibernateによって「押しつぶされ」てしまう可能性があります。一方で、パッケージ化、展開、実行環境を標準化することもできますが、一方で、常に「Javaで考える」ことで、頭の敏捷性を失い、最適なソリューションを逃してしまう可能性があります。私は何度も何度も行くことができました。
私が観察できる限り、多言語プログラミングは最近非常に一般的になっています。 「仕事にぴったりの道具」のようなことわざは、いつも私の耳にも大きく響きます。より多くの「適切なツール」に自分自身を開放して公開したいという願望は非常に強いですが、どこに問題があるのでしょうか。さらに良いことに、中庸はどこにありますか?ある極端から別の極端に移動することは常に危険です。 Java、Groovy、Python、Ruby、PHP、Scalaなどの巨大な山とそれに対応するすべてのツール、フレームワーク、サーバー、哲学の理解できない混乱に目覚める日が怖いです。
言語とプラットフォームのポリカルチャーで少なくとも2年間働いた実務経験がありますか?あなたの主な観察は何ですか?あなたはまだ何に興奮していて、何を恐れていますか?
私たちは同じような状況にあり、既存の言語では達成したいことが実際的な方法で実行できないときに、別の言語をミックスに追加しました。
しかし、そのポイントに到達するのに年かかりました。
仕事の比喩のためにあなたの正しい道具を拡張するために、ハンマーを買うために町を横切って店に運転するよりも、ドライバーのハンドルで釘を打ち込む方が良いかもしれません。しかし、木を切り倒す必要があるときは、店に向かう時間です。
私は1つの会社に約4年間在籍し、C++で重い作業を行っていました。約1年後、私はソフトウェアインフラストラクチャ(主にCVSとGnats)の実行に割り当てられ、「実際の」作業として考えていたものに加えて、Perlを広範囲に使用することになりました。 Cで書かれたライブラリもいくつかありましたが、少なくともいくつかはC++と重複しています。
何の問題もありませんでした。私はC++になるものとPerlになるものを知っていたので、他のみんなもそうしました。私たちの十分な数は、私を置き換えることは問題にならないことをPerlに知っていました。
さまざまな言語をさまざまな目的で使用することをお勧めします。したがって、通常、C++とPerlのどちらを使用するかについては疑問の余地はありません。そのためには、一般的にさまざまなことに適した、明確に異なる言語を使用すると便利です。
標準のツールセットを使用します。
この全体の組み合わせは、私がここで働き始める前に解決されました。私が知る限り、私たちの仕事に最適です。それは機能し、誰もがそれを理解しています。
これらは社内アプリであるため、要件が変更されることはめったにありません。ですから、私たちのニーズはすでにカバーされているので、物事を行うための新しい方法を探す必要はありません。
飛躍せずに水をテストしてみませんか?
Javaおよびその他のVM(仮想マシン)言語は、プライマリ言語(Java)を接続されているVM(JVM)から切り離すために日々進化しています。 JVMの場合、Java)と一緒に実行できる多くの言語から選択できるようになりました。 =共通の基盤となるインフラストラクチャ(JVM)を共有するためのコード。
いくつかのJVM言語の短いリストを次に示します。
など...完全なリストのチェックアウトについて ウィキペディアのJVM言語のリスト 。
Java devsのチームを持つことの利点は、JVMがJavaコードよりもはるかに多く実行されるように拡張されていることです。したがって、Java、Pythonを実行できます。 、およびJavaScriptをすべて一緒に。
基本的なユーティリティスクリプトにJythonを組み込んでみてください。または、サーバーサイドJavaScriptを実行するRhinoもあります。必ずしも特定の言語をターゲットにする必要がなくなったため、投資のリスクはあまりありません。これにより、アプリケーションを壊すことなく、チームがスキルセットを練習および拡張できるようになります。
あなたの会社がウェブ開発への侵入を考えているなら、PHPをスキップして、Pythonフレームワーク(pylons、Django)のいくつかを見てみるのが最善かもしれません。Web開発の飛躍はおそらく最も劇的なものになるでしょう。Web開発は異なります...いくつかの概念は形式化されていませんが(それでも野生の西のように感じます)、効率的なものを探している場合はスタイルがはるかに厳しく制限されますパフォーマンスの高いWebアプリケーション。さらに、Webサイトを最適化するためのツールと概念は、デスクトップアプリで期待するものとはロット異なります。
Microsoftは、最初に.NETでC#、VB、およびC++をリリースすることにより、VMの世界で大きなリードを獲得しましたVMしかし、Java世界は非常に急速に追いついています。
SideNote:興味があれば、ここに 。NET CLI言語のリスト 。があります。
コンサルタントとしての私の経験(> 5年)では、言語にとらわれない基本的なスキルと開発技術に最初に焦点を当てている組織は、開発プロジェクトで大きな成功を収めています。デザインパターン、開発手法、アジャイル手法はすべて、実装言語に関係なく適用されます。メッセージバス、Webサービス、SOAパターンなどのアーキテクチャパターンは、すべてのプロジェクトに再び適用できます。継続的インテグレーション、ユニットテスト、テスト容易性。おそらくもう少し長く歩き回ることができます。
開発者がソリューションを提供するときに最高のツールを提供できるようにすることの利点は、過小評価されるべきではありません。開発者は、問題に最適なツールを適用し、テクノロジーを融合するときに批判的思考を活用する自由を手に入れます。幸せな開発者は通常、より良い製品とより成功したチームに匹敵します。
とはいえ、特に成熟度の低いチームには、制約も適用する必要があります。自由に対する高レベルのガイダンスや制約がなかったため、適合性が低く、誤解され、異種のテクノロジーが大量に存在する組織を見てきました。