どのプログラミング言語のパラダイムがどの仕事に適していますか?

StackOverflow https://stackoverflow.com/questions/188934

  •  06-07-2019
  •  | 
  •  

質問

私が知っている限り(あまり認めない)、現在人気のあるプログラミングパラダイムは、オブジェクト指向(Java、C#、Ruby)対機能(F#)です。最初のパラダイムにほとんど精通している人として、いくつか質問があります:

  • プログラマは自分の人生のすべてで1つのパラダイムを維持できますか?または、言い換えると、すべての問題を1つのハンマーの釘に減らすことができますか?
  • そうでない場合、どのツールがどのタイプのタスクに適していますか?たとえば、Webベースとデスクトップ、美しくレスポンシブなインターフェイスの作成、データの高速処理など、
  • 人々は新しいパラダイムを学ぶ必要がありましたか?過去2つの仕事について、私の職場ではJavaとC#が必要でした。 OO以外の言語を特に使用する職場はありますか?

明らかに、「最高」はありません。言語ですが、新しいパラダイムを学ぶのに時間とエネルギーを投資する価値があるかどうか疑問に思っています。事前に感謝します!

役に立ちましたか?

解決

"または言い換えると、すべての問題を1つのハンマーの釘に減らすことができますか?」はい。期間。実行される可能性のあるプログラミング言語は、他のすべてのプログラミング言語と同様に完全になります。実際には、「完全性」の正式な定義があります。プログラミング言語用。

"人々は新しいパラダイムを学ぶ必要がありましたか?"常に。

実際には、「パラダイムシフト」の浮き沈みを追跡するコツがあります。私のキャリアの最後の30年間で、プログラミングが比較的単純な命令型/手続き型モデルから、プロセスとデータのバランスが改善されたはるかに豊富なモデルに成長したことがわかりました。

次のことに気付きました...

原動力の一部は人工知能コミュニティです。これらの「新しいモデル」の多くはAI知識表現スキームとして開始されました。彼らはそこに牽引力を発揮し、その後、より多くの主流のアプリケーションにトリクルしました。

エンティティリレーションシップモデルは元々、ビジネストランザクションではなく、知識表現用でした。同様に、オブジェクトモデルは知識表現用でした。それからシミュレーションの人々はそれを見つけました。今、私たちの残りはそれを持っています。

これが私の結論です。

ソフトウェアは知識表現です。

パラダイム、モデル、アプローチ、またはスタイルの選択は、次の質問への回答に基づいています。

"この問題を最も適切に表現するにはどうすればよいですか?

問題にオブジェクトと関係がある場合、オブジェクト指向。問題にアルゴリズムと変換、マップ、フィルター、削減がある場合、機能的です。問題が動的で、変化し、柔軟であれば、動的です。問題が静的であり、急速に拡大する場合は、静的。

他のヒント

さまざまな方法で問題について考えるのに役立つので、代替パラダイム(OO、機能、手続き、動的など)を学ぶ価値があります。

たとえば、ツリートラバーサルを線形に解決すること(最初に行った方法)と再帰を使用することの違いについて考えてください。または、GoogleによるMapとReduceの組み合わせにより、インターネットのインデックス作成を支援します。

古い問題に適用される新しい考え方は、最も難しい問題のいくつかを打破するのに役立ちます。

パラダイムは言語に依存しません。 Cでオブジェクト指向スタイルで開発できます(GTKを見てください)。 Javaでプログラミングするときは、主に機能的なスタイルを使用します。

可能な限り多くのパラダイムを知ることは価値があります。一部の問題は、あるパラダイムでは簡単に解決できず、別のパラダイムでは繊細なクラフトが必要です。

(簡単な)例として、このページのJavaとOcaml、またはそれ以上のHaskellのクイックソート実装を比較します。 http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(これは、機能が優れているという意味ではありません。OOで解決する問題があります。)

  

1つのハンマーですべての問題を釘に減らすことはできますか?

はいはい。 1つのハンマーで問題を解決できます。そのドアを半分に見ただけでは、それよりもはるかに時間がかかります。

  

人々は新しいパラダイムを学ぶ必要がありましたか?過去2つの仕事について、私の職場ではJavaとC#が必要でした。 OO以外の言語を特に使用する職場はありますか?

開発者は15〜20年ごとにこれを行う必要があります。

手続き型VBAで記述されたAccessベースのシステムを備えた小規模企業の業界は間違いなくあります。 (そして、私は彼らのほとんどのために働いたと思う)。 従来のASP開発者はASP.NETを習得する必要があります。 Perl開発者はPythonを学んでいます。バッチ駆動型開発は、イベント駆動型開発に取って代わりました。

あなたは全面的に答えを見つけると思います。仕事をすればするほど、「役に立つ」ことがわかります。他のいくつかを知るために。 C#/ VB / SQL Serverの開発者として、F#や他のいくつかの言語について少し学ぶことで、より多くの知識を得ることができ、どのツールが適切かを実際に把握できます...

動的なものは私をがっかりさせますが、Ruby on RailsはWebのものとして見た中で最高の開発システムです。既存のコンパイル済みの完成したコードの意味を変更するのは簡単すぎるため、本当に大規模で重いメンテナンスプロジェクトに使用することに抵抗を感じます。また、ある人のコーディングスタイルでは新しい言語にするには簡単すぎます。

動的/スクリプティングは、システム管理者やLinuxシステムを実行しているすべての人にとっても有益です。 BASHまたはRubyで簡単なスクリプトを書くと、同じ機能をJavaまたはC ++で実装しようとするのに勝ります。

OOを使用すると、大量のコードを理解しやすくなります。大規模なチームまたは複数の大規模なチームがあり、概要をすばやく提供する必要がある場合、OOを使用すると、特定の機能を簡単に説明および分離できます。正しくコーディングされたオブジェクト指向と言うべきです!

すべては不変である傾向があるため、機能はマルチスレッドプログラミングに適していると理解しています。

OOPを念頭に置いて設計および設計スキルを開発することは、優れた言語にとらわれないキャリアにとって最も望ましいスキルセットです。

Oopsでコーディングする場合のメリットは、他のチームメンバーと組織全体の両方に当てはまります。コードはすべての人が理解できるため、開発者が仕事を辞めても、会社はあまり心配する必要はありません。それ以外の場合、機能的なスタイルに従うと、他の人があなたが何をしたかを理解するのが本当に難しくなります。

他のほとんどの人が言ったように、一般的にはあらゆる言語を使用して問題を解決でき、通常はあるパラダイムのスタイルで別のパラダイムのスタイルで書くことができます。

さまざまなパラダイムを意図したとおりに使用することを学ぶ場合、知識表現と問題解決についてさまざまなことを学びます。これは、将来使用するパラダイムで役立つ場合があります。

パラダイムとドメインの間にはある程度の整合性がありますが、通常、ソフトウェアが動作するために必要な環境の詳細に基づいて言語を選択するのが最善です。

  • 複数のデスクトッププラットフォームで実行する必要がありますか?
  • デスクトップアプリケーションの場合、ネイティブのルックアンドフィールが必要ですか?
  • 設計の迅速な反復は重要です
  • どのように維持するのですか?
  • どのサードパーティシステムで動作する必要がありますか?
  • 既存のプログラマーの知識/スキル/好み。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top