web-dev-qa-db-ja.com

体系的にプログラミング言語を選択する

言語を選択する方法論を探しています。私は言語についての意見を求めているのではありません。私は当店の現在の言語を他の利用可能な言語と比較するプロセスを任されています。弊社はウェブ開発ショップです。

私たちのCEOは、利用可能なすべてのWebベースの言語に関する完全なホワイトペーパーを希望します。たとえば、それらの派生語である親言語(たとえば、jspはJavaはc/c ++からのものです)。特定の言語のすべての主要な要素とその特定の言語の短所を含む行列を作成します。言語はプラットフォームによって制限されますか、それは関数型プログラミング、手続き型、またはOOまたはどのプログラミングパラダイムでも使用できますか?

また、特定の言語のタレントプールのサイズやそのプール内の給与の中央値など、あまり技術的でない情報も必要です。市場は私たちの選択をどのように見ますか?

私たちはこれらすべてを理解するのに役立つコンサルタントを探し始めましたが、ほとんどのコンサルタントは開発のバックグラウンドから来ており、答えは「xxxが最良の言語である」と思われることが多いことがわかりましたこれは、過去n年にわたって最もよく使用したものであり、決して失望させられていないため、フロントエンドにyyyを追加して使用することができます- zzzライブラリ "

私はこの課題に圧倒されており、CEOが求めていることを考えると、最高の行動方針のように感じます。学界の世界を調べ、実際の開発経験のない教授を雇い、私たちに「教える」ことです。可能なすべての言語について。

他の誰かがこの演習を行わなければなりませんでしたか?プロセスを進めるために使用したステップや方法論を共有できますか?

24
Lance

@FrustratedWithFormsDesignerは、このことをほのめかして、もっと率直になります。あなたは、高価だが役に立たないタスクを課されてきました。

私は、CEOが彼の言語の選択を支持する反駁できない客観的な証拠を探しているのではないかと思います。問題は、ホワイトペーパーが有用であるだけでなく有用であるためには、言語の好みがあまりにも多くの主観的および非本質的な要因で満たされていることです。

別の言い方をすれば、理想的な言語があれば、「客観的に」欠陥のある言語の代わりに誰もがそれを使用することになります。それはまたそれを機能させなければならないエンジニアの州であるべきであるある程度のマイクロマネージメントを言います。 Erlangは「客観的に最高」かもしれませんが、誰もそれを知らない場合は、能力を獲得するために6か月/エンジニアの初期費用と6か月/エンジニアを追加します。

私にはあなたの仕事がないので、失ってもかまいません。私は、CEOに教会のチューリングの物理学に関する論文を贈ります。それから私は上級エンジニアと一緒になって、何を使うべきかについて厳格で客観的ではない意見を得て、CEOにあなたが何を使うべきかを伝えます。その代わりに、エンジニアが理事会、CFO、会計方法、VPの選出などを行わないことを約束します。私たちが専門とする理由があり、彼はあなたが彼のドメインで行うよりもエンジニアリングの好みに他なりません。

53
msw

考慮すべきいくつかの広範なブラシストローク:

言語の人気

人気は必ずしも生産性、表現力、またはその他の重要な言語の品質と同じであるとは限らないため、これは実際には問題になりませんが、この考慮事項は他のすべての考慮事項よりも優先されます。

  1. 一般的な言語でソフトウェア開発者を見つける方が簡単です。
  2. 一般的な言語でツールやライブラリを見つける方が簡単です。
  3. 意思決定者は言語のトレードオフを理解していないため、安全な決定を下します(「多くの企業がこの言語を使用しているため、適切である必要があります」)。

問題ドメインへの適用性

どのプログラムも任意のチューリング完全プログラミング言語で記述できますが、一部の言語は他の言語よりも特定の問題領域に適しています。 Webアプリケーションを作成している場合、おそらくそれに適した言語とツールに引き付けられ、それらはおそらくオブジェクト指向言語でしょう。

一方、主に研究ベースまたは数学ベースのソフトウェアを作成する場合は、おそらくfunctionalパラダイムを採用する言語に引き付けられるでしょう。

そしてもちろん、その間にすべてがあります。多くの言語は複数のパラダイムをサポートしており、一部のソフトウェアパターンは、特定の機能やパラダイムを欠く言語の制限を克服するためにのみ存在します。

表現力と生産性

一部の言語は他の言語より表現力があります。 1000行のコードを使用して1つの言語で記述できるものは、100行のコードを使用してより表現力のある言語で記述できます。トレードオフは、何百行ものコードが、より専門性の高い人々によって、あまり人気のない言語でおそらく記述されていることです。

基幹業務アプリケーションの記述に使用されるオブジェクト指向言語に存在するコード行の多くは、儀式です。このセレモニーは、開発に時間と労力を費やしますが、他の方法ではより表現力豊かな言語では容易に明らかにならない目に見える構造を提供します。これにより、リスクが軽減されたコードで作業する必要がある場合よりも専門知識の少ない人が使用できます。

多言語の時代

単一の言語を決定したいという欲求は誤ったジレンマであるかもしれないと断言することで結論を述べます。今日のアプリケーションは、多くの場合、1つではなく多くの言語で記述されています。各言語には独自の長所があり、(理論的には)使用するタスクのために特別に設計されています。一部の問題のあるドメイン(Webブラウザーのロジックやデータベースアクセスなど)では、特定の言語が必要です。

25
Robert Harvey

言語を選択するのにはビジネス上の理由があり、言語を選択するのには工学上の理由があり、2人は常に会うわけではありません。学問上の理由で投げると、事態が悪化する可能性があります。教授があなたが必要とする方法であなたを助けることができるとは思えません。

言語の祖先と機能に関する事実は、簡単に見つけることができます。ウィキペディアで1日を費やして、そのほとんどを埋めることができます。人材プールのサイズと給与は、ほとんどの人が自分自身を単一言語のプログラマーだとは考えていないため、さらに難しくなっています。 Scalaなどのあまり人気のない言語を使用する企業は、言語固有の経験がない一般的なプログラマーを雇うことを期待しています。私が見たいくつかのプレゼンテーションから判断すると、その戦略はうまくいったようですよく。

事実を知っていても、かなり主観的な選択ができます。あなたのCEOは、機能ごとのドルのような大まかな指標に要約することを望んでいます。正確な画像を取得するには、いくつかのプロトタイプを作成する必要があります。次に、簡単に習得できること、基本を習得したらプロトタイプを作成するのにどれだけ速く、メンテナンスが簡単になるかについて話します。 、そしてあなたがそれをあなたが通常行う仕事の種類にどれほど広く適用できると思うか.

すべての言語を網羅するのではなく、さまざまなプログラミングパラダイムやフレームワークのタイプから代表者を集め、それぞれにプロトタイプを実装したいと考えています。

バックエンドカテゴリの大まかなリストを次に示します。

  • マイクロソフト。 (サブカテゴリがある場合があります。それらについては何も知りません。)
  • Drupalのようなヘビー級のOOP。
  • pythonボトルのような軽量のOOP。
  • Scalaを使用して再生/リフト/スカラトラ。
  • Javaを使用して再生/リフトします。
  • 春らしい。
  • ストラットのような。
  • Railsのような。
  • Haskellベース。
  • Node.js

フロントエンドで:

  • OOPスタイルのJavaScript
  • アンダースコアのような関数型のJavaScript
  • BaconのようなリアクティブスタイルのJavaScript
  • Google Web Toolkit
  • エルム

単純なプロトタイプを実装して各カテゴリに1〜2日費やすと、数か月かかります。その後、それぞれの長所と短所をよりよく理解できます。おそらく、会社の文化や経験に基づいて、いくつかをより迅速に除外することができます。

これはビジネスレポートなので、「<会社>が使用している言語」など、尊敬しているさまざまな会社の代わりに、少し時間をかけて検討します。彼らの多くは、なぜ彼らが特定の言語を選択したのかについて独自のホワイトペーパーを書きました。

5
Karl Bielefeldt

$ Aとして、既存の開発プロセスに固有の欠点を特定してコストをかけます。他の開発プロセスに切り替えるコストを$ Bとして特定します。

$ Aが$ Bより小さい場合、停止します。

既知の欠点が変更のコストを上回っている場合(そしてそれは大きな問題です!)、欠点を詳細に分析し、それらに対処する言語/開発環境/開発プロセスの変更を探し始めます。

正直に言うと、現在FortranでWebアプリを開発しようとしているのでない限り、使用する言語が与える影響は、ギャップを埋めるために使用する請負業者のコストだけです。メインストリームと成熟した言語/ツール/開発プロセスは、最も高額で最新で最もセクシーなツールが最も高価なトレーナーと請負業者に付属しているものの、成熟度が最も低いソリューションとして直面する可能性のある問題のほとんどをすでに解決しています。そして、そのような変更を正当化する欠点がある場合、言語の選択がそれらに完全に対処することはまずありません。

ただし、収益性がここでの主な目的ではない場合は、時代遅れであると見なされているという汚名を、エッジを削っているという賞賛に対して考慮する必要があります。方程式のこの部分に使用するドルの値を上司に尋ねます。

4
Paul Smith