体系的にプログラミング言語を選択する[非公開]


24

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

当社のCEOは、利用可能なすべてのWebベースの言語、それらが派生した親言語(たとえば、jspはjavaから、c / c ++から)についての完全なホワイトペーパーを求めています。特定の言語のすべての重要な要素とその特定の言語の欠点を含むマトリックスを作成する必要があります。言語はプラットフォームによって制限されていますか、関数型プログラミング、手続き型またはオブジェクト指向向けに設計されていますか?または、プログラミングパラダイムで使用できますか?

また、特定の言語の人材プールのサイズや、そのプールの給与の中央値など、技術的ではない情報も必要です。マーケットプレイスは私たちの選択をどのように見ますか?

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

私はこのタスクに圧倒されており、CEOが求めているものを考えると、学界の世界を見て、実際の開発経験のない教授を雇って私たちを「教える」ことが最善の行動であると感じていますすべての可能な言語について。

他の誰かがこの演習を行わなければなりませんでしたか?持っている場合、プロセスを実行するために使用した手順や方法論を共有できますか?


21
CEOは、実際にこのマトリックスを使用して、「$ {language}を使用して$ {nextBigProject}を構築します!」などのことを決定する予定ですか?これに実際に役立つ可能性のあるものを構築するには(おそらくそれが真剣に役立つかどうかはわかりませんが)おそらくかなりの時間がかかり、継続的なメンテナンスも行われるでしょう。
FrustratedWithFormsDesigner

3
プロジェクトの言語/環境を選択するための一般的なガイドは、最初にプロジェクトが解決しようとしている特定の問題をより深く理解しようとすることです(言語に依存しない方法で)、ツール/ライブラリを探しますその時点でそれを解決するのに最も役立ちます。次に、それらのツール/ライブラリを操作するために知っておく必要がある言語を調べます。...など、予算をそれはおそらく言語の最終候補リストあなたを与えるだろうし、そこから、あなたは彼らとあなたの習熟に基づいてそれを選り抜くことができ、ベンダーのサポート
FrustratedWithFormsDesigner

9
非常に最初の答えへの質問は「私たちはまったく変更する必要がありますか?」であり、現在選択している言語で解決さ​​れていない問題は何ですか?
ジョンボード14年

4
Stack Overflowは、開発者がテクノロジを評価するのにどのように役立ちますか? 「今朝、私は私が使用しますどちら決定しようと、私の目の前で8つのフレームワークについて持っていた...」
ブヨ

7
実際には、ダーツを投げることもできます。Webアリーナ(特にJavaScriptなど)には、さまざまな長所、短所、親和性、および非互換性を備えた数十(数百ではないにしても)のオプションがあります。それを分析して死に至らしめるか、または経験に基づいた推測を行い、前進し、必要に応じて途中修正を行うことができます。
ダニエルRヒックス14年

回答:


53

@FrustratedWithFormsDesignerは、上記のことをほのめかしました。もっと率直に言って、あなたは高価だが役に立たない仕事で告発されました。

CEOは、彼の言語選択を裏付ける反論のない客観的な証拠を探しているのではないかと思う。問題は、言語の嗜好には、ホワイトペーパーが意味のあるものであるだけでなく、有用であるにはあまりにも多くの主観的および外的要因が多すぎることです。

別の言い方をすれば、理想的な言語があれば、誰もが「客観的に」欠陥のある言語の代わりにそれを使用するでしょう。それはまた、それを機能させなければならないエンジニアの州であるはずの、ある程度のミクロ管理を言います。Erlangは「客観的に最も良い」かもしれませんが、誰も知らない場合は、6か月/エンジニアのスタートアップコストと6か月/エンジニアを追加して、コンピテンシーを獲得してください。

私はあなたの仕事を持っていないので、あなたがそうするかもしれないけれども、私はそれを失うことを心配しません。私は、CEOに物理的な教会とチューリングのテーゼに関する論文を渡します。それから私は上級エンジニアと一緒になって、何を使うべきかについて厳密ではなく、客観的でない意見をもらい、CEOにそれを使うべきだと伝えます。その代わりに、エンジニアが取締役会、CFO、会計方法、VPの選択などを行わないことを約束します。私たちが専門とする理由があり、彼はあなたが彼のドメインで行うよりもエンジニアリングの好みでそれ以上の場所を持っていません。


6
ハ、私は最後の段落の無謀な熱意が大好きです。あなたが言ったその厄介な6ヶ月のために、私はそれがCEOのドメインであると言うでしょう。
ネイサンクーパー14年

1
「物理的な教会とチューリングのテーゼ」行きません。正式なセマンティクスを備えたプログラミング言語はほとんどなく、チューリングを完成させるための前提条件となっています。(1
つが

4
Lispを選択して、それで完了です。
エリック

1
Lispとは、もちろんClojureScriptを意味します。:-)
ブライアンノブラウフ

1
+1。これが良いアプローチではない理由をCEOに伝えるのは、エンジニアとしてのあなたの仕事です。これは一種の良いアプローチのように見えるので難しいかもしれませんが、それは必要です。
djechlin 14年

25

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

言語の人気

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

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

問題領域への適用性

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

一方、主に研究ベースまたは数学ベースのソフトウェアを作成する場合は、おそらく機能的なパラダイムを取り入れた言語に引き寄せられるでしょう。

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

表現力と生産性

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

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

多言語の時代

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


7
最後のポイントに追加するのは、複数の言語を使用したい場合、それらの言語(.Net CLRまたはJVM)間の簡単な相互運用をサポートするプラットフォームを検討することです。
svick 14年

9
@NathanCooper:Webアプリケーションを書いたことがないということですか?小さなものでも?または、モバイルアプリを複数のプラットフォームに移植する必要がありましたか?または組み込みで働いていましたか?または、SQLデータベースからデータを取得しましたか?
ロバートハーヴェイ14年

10
@ NPSF3000:当然、あなたは魔術の方法を開示することを気にしませんでした。私はシェナンガンと呼びます。
ロバートハーベイ14年

9
@ NPSF3000 C#はあなたの仕事に適した選択肢かもしれませんが(Unityを使用すると、多言語のすべての面倒な作業を行うように明示的に設計されているため、確かに少し物事が伸びますが)確かに大部分の非自明なプロジェクトは、SQLと別のテクノロジーを使用するという意味で多言語ですが、それ以上に、多くは異なるプログラミング言語を並行して使用するか、アプリケーションをある言語で記述し、ツールを別の言語で記述します。主張に異議を唱えないでください。
クリスヘイズ14年

7
@ NPSF3000それがあなたの問題なら、それを言ってください。あなたが何を意味するのかを理解しようとするこの厳格さを経験させてはいけません。「問題のあるドメインが特定の言語を必要とすることに同意しない」と断言した場合、ロバートは喜んで編集を行うでしょう。とはいえ、ここでは、複数の言語での作業が「デフォルトで有益」であるという意味はまったくありません。
クリスヘイズ14年

5

言語を選択することにはビジネス上の理由があり、言語を選択することにはエンジニアリング上の理由があり、トウェインは常に一致するとは限りません。学問的な理由で投げることは事態を悪化させる可能性があります。教授があなたの必要な方法であなたを助けることができるとは思わない。

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

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

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

バックエンドカテゴリの大まかなリストは次のとおりです。

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

フロントエンドで:

  • OOPスタイルのJavaScript
  • アンダースコアのような機能スタイルのJavaScript
  • ベーコンのようなリアクティブスタイルのJavaScript
  • Google Web Toolkit
  • エルム

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

これはビジネスレポートであるため、「<company>が使用する言語」など、賞賛に値するさまざまな企業を代用するのにも時間をかけます。彼らの多くは、特定の言語を選択した理由について独自のホワイトペーパーを書いています。


4

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

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

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

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

ただし、収益性がここでの主要な目的でない場合は、最先端であるという名誉に対して旧式であると見なされるというスティグマを考慮する必要があります。方程式のこの部分に使用するドルの値については、上司に尋ねてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.