質問

企業におけるプログラミング言語の選択について、インターネットでいくつかの記事を読みました。最近、多くの動的型付け言語が人気を集めています。Ruby、Python、PHP、Erlang。しかし、多くの企業は依然として C、C++、C#、Java などの静的型付き言語を使い続けています。

確かに、静的型付き言語の利点の 1 つは、プログラミング エラーが実行時ではなくコンパイル時に早期に検出されることです。しかし、動的型付け言語には利点もあります。(詳細はウィキペディアで)

企業が Erlang、Ruby、Python などの言語を使い始めない主な理由は、それらの言語が動的型付けであるという事実のようです。それが、StackOverflow の人々が Erlang に反対する主な理由のようです。見る なぜ Erlang に「反対」したのですか.

しかし、企業内では動的型付けに対する批判が強いようですが、なぜそうなるのかよくわかりません。 それ 強い。

実のところ、なぜ企業内で動的型付けに対する批判がこれほど多いのでしょうか?それは本当にプロジェクトのコストにそれほど影響を与えるのでしょうか?しかし、もしかしたら私は間違っているかもしれません。

役に立ちましたか?

解決

はい、私は彼らがそうすると信じています。

新しいプロジェクトの言語の選択で考慮する必要があるいくつかの理由があります。

  • ランタイム速度。 C/C ++/FORTRANと比較して、PerlとPythonは非常に遅いので面白いです。
  • 初期化速度。上記の高速言語と比較して、 ジャワ JVMがロードとロードを続けていると、転倒して泣きます...while(1)....
  • プロトタイプ能力。 C ++またはJavaに必要な宣言/定義作業を徹底的に通過して実行すると、LOCが増加します。 それだけ バグカウントと確実に相関する既知のメトリック。また、時間がかかります。また、タイプと接続についてもう少し考える必要があります。
  • 内部のfiddlability。あなたがあなたの内部を動的にいじっているのはあなたがあなたのデバッグを始めるまで素晴らしいことです 自己修正コード. 。 (Python、Lisp、Perl)
  • 正しさの検証。コンパイラは、c ++でコードの半分の容易さを1回迅速に提供できます。これは 本当 良い。
  • 静的分析の詳細。 CとJavaにはかなり優れた静的分析があります。 Perlは、aで完全に静的に分析できるわけではありません 理論的 レベル(おそらくPythonも)。 Lispも合理的に確信しています。
  • 奇妙なプラットフォームは、一般的にCのみを取ります。
  • サポートチェーン。あなたがあなたの契約を持つことができるなら 意思 あなたのバグを見て、取り組んでいます、それは 巨大.

あなたが一緒に働いている組織には「前進する」という原則があると推測できる場合(これについては会計用語があります)、そして しない ランダムにソフトウェアで作業しないことを決定するだけで、ソフトウェアを使用するためのはるかに優れたケースがあります。主要なビジネスがないので 販売 (それを維持する責任を負うことの意味を持ち込む)python/perl/$ dynamic_language、それはリスクを大幅に減らします。

私の経験では、オープンソースメンテナーは、バグフィックスに対して完全に責任を負い、更新をリリースすることに問題があることがよくあります。 「それは無料です、あなたはそれに取り組んでいます!」は いいえ ほとんどの企業に受け入れられる答え(とりわけ、コアコンメンションではありません)。

もちろん、私はWebApp/Startupの世界について話しているのではありません。 非常に テクノロジーの泡立ちの端にとどまることができます。

他のヒント

エンタープライズの意思決定者に技術的なクレジットが多すぎます。 「IBMを購入するために解雇された人はいない」という古いことわざがあります。別のルートに行き、物事が岩だらけになった場合(彼らはいつもそうします)、誰も非難される危険を冒したいと思っていません。基準に固執し、他の誰かを非難します。

最終的に明日の企業になり、それらの言語を使用する若い企業がたくさんあります。

そして、VBAで書かれたバギリオンのコードラインを忘れないでください!

企業が C、C++、C#、Java を使用する理由は、それらが (少なくとも直接的には) 静的に型付けされているからではありません。企業の意思決定者は、型システムの客観的な比較に基づいてこのような選択をしているわけではないことは断言します。

企業 する 気にする:

  • 長期的なメンテナンス費用:10 年後も物事がうまく機能し続けると合理的に期待できますか?(Java のように) 言語の進化が保守的で下位互換性があるのであれば、それは実際には良いことです。静的型付けは、本番システムに侵入する前にコンパイル時に主要なタイプのバグを検出するため、ここでは役立ちます。
  • 人材の確保 - ピカピカの新しいシステムを保守してくれる開発者を見つけることができるでしょうか?元の開発者が辞めたら、他の人はコードを理解できるでしょうか?これにより、「新しい」言語を導入する際に高いハードルが課せられます (特に、導入、構築システム、運用サポートなどに対する新しい要件も作成される場合)。これにより、広く使用されている言語 (C、C++、C#、Java) に大きな利点がもたらされます。
  • 統合コスト:すでに導入されている、または今後取得される可能性のある他のテクノロジーとの接続/統合は簡単ですか?すでにレガシー J2EE システムのスタックがある場合は、それらを統合する必要があります。この点については、新しい Java EE ソリューションの方が、たとえば Java EE ソリューションよりもはるかに実用的である可能性があります。パイソン。
  • 予測可能性 / 低リスク:プラットフォーム/言語は実証済みですか? 動作することを確信できますか?これは通常、 もっと 単純な生産性よりも重要です。マネージャーにとって、新しいシステムを構築するための人的資源に多額の予算を与えるよう上司を説得することは、後から戻ってそれがうまくいかなかったと言うよりもはるかに簡単です。
  • エンタープライズ支援/サポート - 主要な国際機関は言語とプラットフォームのサポートに取り組んでいますか?何か問題があった場合に誰かに相談できるように、サポート契約を結んでくれるのでしょうか?
  • ベンダーの中立性/プラットフォームの独立性 - 単一のサプライヤーに縛られることになるでしょうか?それとも、将来的に幅広いサプライヤーの選択肢や移行パスを利用できるのでしょうか?競合他社が昼食を食べている間、先に進むことができずに、アーキテクチャ上の行き止まりに陥ってしまうのは望ましくありません。エンタープライズ アーキテクトとして適切に仕事をしているのであれば、このことについて少なくとも 5 ~ 10 年先のことを考える必要があります。

個人的には、エンタープライズで動的言語を使用したい場合は、既存のエンタープライズ エコシステムに便乗した言語を使用するのが最善の方法だと思います。最も注目すべきは、新しい動的 JVM 言語です。例えばJRuby、Groovy、Clojure。IT 管理に関する限り、これらは Java エンタープライズ エコシステムの他の部分内で動作し、うまく連携するため、「安全な」動的言語の選択肢となります。

企業がErlang、Ruby、Pythonなどの言語の使用を開始しない主な理由は、それらが動的にタイプされているという事実のようです。

これは彼らの主な言い訳にすぎないと思います。本当の理由は、企業が実際にそれらを真剣に受け止めていないため、おそらく少しアマチュアだと感じているからです。 Javaと.NETは「大企業名」であり、優れた商業マーケティング、商業カスタマーサポートを持っているため、実際に非常に真剣に受け止められています。

残念ながら、大規模なビジネス名と同じくらい人気のある静的な型の言語が実際に存在しないことは残念です。オープンソース/フリーソフトウェアプログラミング環境がほとんど常に動的に型付けされるのはなぜですか?これは、静的にタイプの言語が実際にはそれほど簡単ではなく、ダイナミックなタイピングが「怠zyな男のハック」であることを示している可能性があります。その場合、動的にタイプの言語に反対することを決定するビジネスには、実際にポイントがあるかもしれません。

  • 動的にタイプされた言語は、静的にタイプされたいとこよりも遅くなる傾向があります。
  • エラーはキャッチが難しく、デバッグが難しくなる可能性があります
  • コンパイラ/インタープリターは、あなたができることとできないことについてはるかに気難しい傾向があります。つまり、コンピレーション段階で構文エラーのみをキャッチするだけです
  • 動的にタイプされた言語の設計にあまり注意していない場合は、JavaScriptになります。 コードスメルの言語

編集: 現時点での私の主なプログラミング言語はPythonであり、動的にタイプされていることに言及する必要があります。個人的には、私は変数を事前にする必要がないという自由が大好きですが、時にはそれは します (たとえば)関数が遅れではなく早期にエラーをキャッチするために機能するパラメーターの種類を(たとえば)指定してください。

動的にタイプされた言語は(一部のプログラマー/ボスによって)認識され、同様に機能しないコードを作成します。動的に型付けされたプログラムがコンパイルされているという事実は、その正しさについてほとんどわかりません。静的にタイプされた言語をコンパイルするという事実は、あなたにもっと多くを伝えます。 (一方で、コンパイルの間にはまだ長い道のりがあり、正しいことをするので、これはそれほど意味がないかもしれません。

動的にタイプされた言語は、言語のスクリプトであると認識されています。 BashまたはBatchファイルでアプリケーションを書き込むことはありません。動的にタイプされたすべての言語は、そのカテゴリにループされる傾向があります(不公平)。

動的にタイプされた言語は、静的にタイプされた言語が遅くなります。 (しかし、JITがどの程度うまく機能するかを確認します)

注:これは主に主観的であり、私の経験と印象に基づいています。

動的にタイプされた言語は、静的にタイプされた言語とは大きく異なります。これらの違いは、おそらく他のほとんどのアプリケーションよりもヘビー級エンタープライズソフトウェアの方が重要になります。

静的にタイプされた言語は非常に規範的である傾向があります。メソッドは、その署名と正確に一致する入力のみを実行します。アクセスレベルは非常に重要である傾向があり、インターフェイスは明示的に定義されており、これらの定義を実施するために冗長だが明確な制限が整っています。

一方、動的にタイプされた言語は非常に実用的です。タイプ変換はしばしば暗黙的に発生しますが、それが十分に類似して動作する限り、間違ったタイプの入力を提供する場合、関数は再生される場合さえあります。 Pythonのような言語では、アクセスレベルでさえ技術的な制限ではなく契約に基づいています(つまり、 private あなたはそれを使わないように言われているので、それは面白い名前を持っています)。

多くのプログラマーは、(間違いなく)迅速なプロトタイピングを許可するため、動的言語を好みます。多くの場合、コードはより短くなります(タイプ宣言が不足している場合にのみ)。迅速で汚れたソリューションが必要であるか、何かをテストしたいために適切なプロトコルに違反したい場合は、簡単に可能です。

現在、「Enterprisey」企業がしばしば静的にタイプされた言語を好む理由は、それらがそれらの制限についてより制限的で明示的であるためです。実際には、静的にタイプされたコードでさえ、コンパイラを使用して馬鹿によって破壊される可能性がありますが、多くの問題はプロセスのはるかに早く(つまり、ランタイムの前に)ずっと目に見えるでしょう。これは、コードベースが大きく、モノリシックで複雑である場合でも、コードを実行したり、QA部門に送信したりすることなく、多くのエラーを簡単にキャッチできることを意味します。

利益がその環境外の多くのプログラマーの欠点を上回らない理由は、これらがコードを徹底的に検査することによって、またはそれを実行しようとすることによってさえ簡単に捕まえるエラーであるためです。特に、テスト駆動型の方法論に従うとき、これらのエラーはしばしばキャッチし、簡単に修正するのが簡単になります。また、このような多くの企業がリリースサイクルをはるかに短くしているため、生産性は剛性よりも重要であることが多く、多くの(基本的な)テストが開発者自身によって行われています。

Enterprisey企業が動的にタイプされた言語をあまり使用しないもう1つの理由は、レガシーコードです。私たちのオタクに思えるかもしれない馬鹿げているように、大企業はしばしば、彼らが賞味期限を過ぎても、機能するソリューションに固執します。これが、非常に多くの大手企業がInternet Explorer 6を実施し、OSをアップグレードするのが非常に遅い理由です。これはまた、「古い」言語(古代バージョンのJavaの古代バージョン)で新しいコードを頻繁に書く理由でもあります。新しいソフトウェアに数行のコードを追加する方が、新しい書き込みの完全な書き直しの承認を得るよりもはるかに簡単です。言語。

tl; dr: 静的言語は官僚制度のように感じられるので、企業マネージャーはそれらをよりよく好みます。

いいえ、動的にタイプされた言語がすべての批判に値するとは思わない。 (または、あなたが望むなら、彼らは静的にタイプされた言語と同じくらい多くの批判に値する。)

私の経験(そして、私はこの声明を一般化しようとはしません)で、動的言語を批判するプログラマーはそれらを使用していません。会話は通常、「静的タイピングを行うと、コンパイラが非常に多くのエラーをキャッチします!」そして、私は「まあ、それは私の経験では問題ではない」と言います。 (通常、Java、Delphi、または同様の背景からの他のプログラマー。HaskellまたはMLプログラマーはわかりません。)

本当に私を悩ませている唯一のことは、誰かがそのテクニックができないと主張するときです おそらく 動的に型付けされた言語で行われる(または非常に難しいかもしれない)...そのテクニックが、動的に型付けされた言語で、およびそのテクニックが発明されたとき。アイデス?スモールトーク。自動リファクタリング?スモールトーク。 Callers-of/explentors-of?スモールトーク。

企業は、新しい言語やツールを十分に速く採用していないだけであり、それには十分な理由があります。しかし、C#のような主流のツールの1つがこれらの機能のいくつかを実装すると、それらは主流の企業に滴り落ちるでしょう。

ライセンス: CC-BY-SA帰属
所属していません softwareengineering.stackexchange
scroll top