12

As far as I know (not much I'll admit), the currently popular programming paradigms are Object Oriented (Java, C#, Ruby) vs functional (F#). As someone who is mostly familiar with the first paradigm, I have several questions:

  • Can a programmer simply stick with one paradigm all of his/her life? Or in other words, can all problems be reduced to nails for one hammer?
  • If not, which tool is suited for which type of task? For instance: web-based vs desktop, creating beautiful and responsive interfaces, able to crunch data quickly, etc.
  • Have people ever needed to learn a new paradigm? For my past two jobs, my workplaces required Java and C#. Are there workplaces that specifically use non-OO languages?

Obviously, there are no "best" languages, but I'm wondering whether it's worth the investment of time and energy to learn a new paradigm. Thanks in advance!

4

8 に答える 8

12

「つまり、すべての問題をハンマー 1 本分の釘に減らすことができますか?」はい。限目。遭遇する可能性が高いプログラミング言語は、他のすべてのプログラミング言語と同じくらい完全です。実際、プログラミング言語の「完全性」には正式な定義があります。

「新しいパラダイムを学ぶ必要があったことはありますか?」いつも。

「パラダイムシフト」の浮き沈みを追うには、実はコツがあります。過去 30 年間のキャリアで、プログラミングが比較的単純化された命令型/手続き型モデルから、プロセスとデータのより良いバランスを含む、より豊富なモデルへと成長したことを目の当たりにしてきました。

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

推進力の一部は、人工知能コミュニティです。これらの「新しいモデル」の多くは、AI の知識表現スキームとして始まりました。彼らはそこで牽引力を獲得し、その後、より主流のアプリケーションに少しずつ浸透しました。

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

これが私の結論です。

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

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

「この問題を最もよく表現するにはどうすればよいですか?」

問題にオブジェクトと関係がある場合、OO. 問題にアルゴリズムと変換、マップ、フィルター、リデュースがある場合は、機能的です。問題が動的で、変化し、柔軟である場合は、動的です。問題が静的で、急速にスケールアップする場合は、静的。

于 2008-10-10T13:09:07.830 に答える
9

別のパラダイム (オブジェクト指向、関数型、手続き型、動的など) を学習することは、問題をさまざまな方法で考えるのに役立つため、学ぶ価値があります。

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

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

于 2008-10-09T19:59:02.600 に答える
7

パラダイムは言語に依存しません。C で OO スタイルで開発できます (GTK を見てください)。Java でプログラミングするときは、主に関数型スタイルを使用します。

できるだけ多くのパラダイムを知る価値があります。いくつかの問題は、あるパラダイムでは簡単に解決できますが、別のパラダイムでは繊細な作成が必要です。

(簡単な) 例として、次のページで Java と Ocaml、または Haskell でのクイックソートの実装を比較してください: http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(これは、機能が優れているという意味ではありません。オブジェクト指向でよりよく解決される問題があります)。

于 2008-10-09T20:10:48.800 に答える
5

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

はいはい。ハンマー1本で問題を解決できます。そのドアを半分に切断するだけで、はるかに時間がかかります。

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

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

手続き型 VBA で記述された Access ベースのシステムを使用する中小企業の業界全体が確実に存在します。(そして、私はそれらのほとんどのために働いたと思います)。従来の ASP 開発者は、ASP.NET について学習する必要があります。Perl 開発者は Python を学んでいます。バッチ駆動開発は、イベント駆動開発に道を譲りました。

于 2008-10-09T20:40:58.943 に答える
2

答えはいたるところで見つかると思います。仕事をすればするほど、他の人のことを知っていると「役立つ」ことがわかります。C#/VB/SQL Server の開発者として、F# やその他のいくつかの言語について少し学んで、幅広い知識を得て、どのツールが適切かを実際に把握する方が役立つと思います...

于 2008-10-09T19:57:57.313 に答える
1

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

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

OO を使用すると、大量のコードを簡単に理解できます。大規模なチームまたは複数の大規模なチームがあり、概要をすばやく説明する必要がある場合、OO を使用すると、特定の機能の説明と分離がはるかに簡単になります。CORRECTLY CODED OO! と言わざるを得ません。

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

于 2008-10-09T21:52:16.990 に答える
0

他のほとんどの人が言っているように、一般的に、どの言語でも問題を解決することができ、あるパラダイムのスタイルで別のパラダイムを書くことができます。

時間をかけてさまざまなパラダイムを意図したとおりに使用することを学ぶと、知識の表現と問題解決についてさまざまなことを学ぶことができ、将来どのようなパラダイムを使用する場合にも役立つ可能性があります。

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

  • 複数のデスクトップ プラットフォームで実行する必要がありますか?
  • デスクトップ アプリケーションの場合、ネイティブのルック アンド フィールが必要ですか?
  • 設計の迅速な反復が重要か
  • どのように維持されるのですか?
  • どのサードパーティ システムと連携する必要がありますか?
  • 既存のプログラマーの知識 / スキル / 好み。
于 2008-10-30T19:01:56.353 に答える
0

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

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

于 2008-10-09T20:04:45.943 に答える