4

最近、F# などの関数型プログラミング言語について多くの良いことを耳にします。さらに [そして無関係]、MVC が多くの露出を得始めていることにも気付きました - おそらく Silverlight/WPF の導入以来です。

私は、最初に調査を行わずに時流に乗るような人ではありませんでした。実際、.NET に移行するのに少し時間がかかりました。新しいテクノロジーの早期採用に関する以前の質問の 1 つに誰かがコメントしたばかりで、立ち止まって考えさせられました。

私は WPF を学ぶ時間を見つけようと戦ってきましたが、それが道なのかどうか疑問に思い始めています。F# や MVC プログラミング モデルなどの言語は今後も続くのでしょうか?それとも次の流行に過ぎないのでしょうか? それとも、これらが C#/VB や OOP の潜在的な代替品になると本当に考えているのでしょうか?

私の開発のほとんどは、イントラネットに展開するためのリッチ Web アプリケーション、または個々のマシンに配布するための winforms ユーティリティ アプリケーションのいずれかの形で、社内アプリケーションで行われています。これまで私が選んだテクノロジは、かなり標準的でした (T-SQL/PL*SQL、C#/VB、JavaScript/AJAX、CSS)。

私が判断するのに苦労しているのは、近い将来、これらのテクノロジーのどのブレンドが私のツールボックスに最も生産的/有用になるかということですか?

4

11 に答える 11

14

どちらも一時的な流行ではなく、すぐになくなることもありませんが、実際には、ほとんどの .NET 開発者がこれら 2 つのうちの 1 つだけを定期的に使用することを期待しています...

F# と ASP.NET MVC には大きな違いがあります。F# は関数型言語です。これにはいくつかのシナリオで多くの利点がありますが、ほとんどの基幹業務プログラミングでは、C# などの汎用言語の方が一般的に使いやすくなっています。ただし、プログラミングの関数型スタイル(特に再不変性)について知ることから得られることはたくさんあります。私は F# を調べましたが、F# で運用コードをまったく記述していなくても、C# が改善されることを願っています。幸いなことに、デリゲートとラムダのおかげで、正式には FP でなくても、C# を機能的に使用できます。

ただし、ASP.NET MVC はまったく別物です。MVC (より一般的に) は、次のような既知の確立された信頼できるパターンです。

  • プレゼンテーション層のテスト容易性を大幅に改善
  • UI層で懸念事項を論理的に分離する
  • ページの基礎となる html へのより直接的なアクセスを提供します
  • および他の多くのもの (モデル バインディングなど)

または別の言い方をすれば、多くの人にとって、ASP.NET が最終的に意味を持つようになります。来年は ASP.NET MVC が大いに活用されることを期待しています。

于 2009-01-09T05:11:07.753 に答える
8

関数型プログラミングとMVCを1つの質問にまとめるのは非常に奇妙だと思います。どちらも30年以上前のものであり、コミュニティで非常に確立されていることを除けば、それらはまったく関係がありません。関数型プログラミングについて何か知っているので、それについて話します。

関数型プログラミングはほぼ50年前のものであり、現在も存続していますが、それが主流になるかどうかは明らかではありません。明らかなことは、関数型言語がインキュベーターとして機能し、最終的に主流の言語への道を見つける機能の根拠を証明していることです。いくつかの例:

  • ガベージコレクション
  • ファーストクラスの関数クロージャ(1995年にPerlに追加され、それ以降のすべてのスクリプト言語で、Smalltalk-80に存在し、JavaおよびC#でさまざまな方法でエミュレートされています)
  • パラメトリック多型(C ++のテンプレート)

長期的には、ツールボックスに機能的なテクニックがあると、より優れたプログラマーになります。または、Eric Raymondが言うように、Lispを学びましょう。(LispとHaskellはどちらも、頭をさまざまな、比類のない、しかし便利な方法で爆発させる強力な新しいアイデアを搭載しています。F#は、関数型言語からの最も優れた実績のあるアイデアを統合したものであり、.NETFrameworkと結婚しています。 2009年の初めには、主流になる可能性が最も高いようです。)

于 2009-01-09T05:24:24.607 に答える
6

私は最近、SOでこの種のことをたくさん見ています。(いくつかの例については、ここここ、およびここを参照してください。)

ウィキペディアによると、Lispは今日でも一般的に使用されている2番目に古いプログラミング言語です(Fortranに打ち負かされています)。関数型プログラミングは、トランジスタ、マウス、コンピュータモニター、ハードドライブ、または実際には、1958年のLispの開始時に存在しなかったパーソナルコンピュータの概念と同じくらい流行です。プログラミングは、典型的なビジネス環境では特に有用ではないかもしれませんが、人気の上昇と衰退のレベルは、それを流行させたり、おもちゃにしたりすることはありません。コンピューティングサイエンスを深く理解しているプログラマーは、関数型プログラミングは発見であるほど発明ではなく、コンピューティングの基本的な性質に対する深い洞察であることを理解しています。

質問のポイントとして、プログラミングが(真の情熱ではなく)日常業務である場合、F#は時間の無駄ですか?それはおそらく、あなたの履歴書に含めることを正当化するほど人気になる可能性が低いという意味でです。また、F#を学ぶために時間を費やしても、同僚があなたの仕事を理解できない場合は、開発ツールとしてF#を選択することで、利益よりも害を及ぼす可能性があることにも注意してください。それでも「流行」にはなりません。:)

MVCに関しては、それは長い間、おそらく10年以上前から存在していますが、私は追跡していません。それは特効薬ではなく、把握するのも難しいことではありません。それは単なる別の開発パターンです。また、MVCは標準ではなく、非常に明確に指定された技術でもないという事実にも注意を払う価値があります。MVCを解釈する方法はたくさんありますが、正しい方法は複数あると言っても過言ではありません。

MVCは、Webアプリケーションが非常に厄介なフロントエンドコードを持っている傾向があるため(これらのさまざまなブラウザーのすべてをサポートすることは非常に苦痛です)、Web開発に特に役立ちます。最後に必要なのは、ビジネスロジックをフロントに組み込むことです。 -不必要に終了します。F#とは異なり、プログラミングが厳密に1日の仕事であっても、MVCの学習は時間の無駄ではありません。これは、Webアプリケーションで作業していることに気付いた場合、MVCを順守することで(単に順守を緩めるだけでも)お尻を節約できるためです。プロの恥ずかしさから。

于 2009-01-09T05:39:02.593 に答える
4

MVCについては、1979年に導入されました。1988/ 89年の時間枠で、Aldus Persuasion for Windows(Powerpointのかつての競合他社)でのキャリアの中で初めて実装したことを覚えています。MVCフレームワークは、Adobe FlexベースのWebプログラミング(Cairngorm、Mate、PureMVCなど)などのRIAアプリケーションで大流行しています。

私の会社では、最初のFlexアプリはMVCとして作成されていませんでしたが、モデルに対して複数のビューがありました。それはめちゃくちゃになりました。私たちはMVCにリファクタリングし、開発者の生活はずっと良くなりました。

私が知る限り、MVCについて不満を言っているのは、さまざまなWebフレームワークのいずれかを介してサーバー側にMVCを実装しようとしている人々だけです。分散コンピューティングの落とし穴は、プレゼンテーションレンダリングレイヤーがネットワーク接続の湾によって分離されているMVCを実行するのは悪い考えであると彼らに知らせていたでしょう。分散MVCは、分散オブジェクトと同じくらい悪いです。

FlexベースのアプリなどのRIAWebアプリでは、MVCは純粋にクライアント側で実行されます。これは、79年にSmalltalkグラフィカルワークステーションで導入されたのと同じです。その後、RIAクライアントは、非同期サービス呼び出しやメッセージングのみを使用してサーバー側と通信します。

単一のCRUDフォームをスローするだけのアプリの場合、そうです、MVCはやり過ぎかもしれません。しかし、かなりの複雑さが進行しているリッチGUIアプリの場合、MVCは採用するのに非常に賢明なパターンのままである可​​能性があります。

于 2009-01-09T05:17:59.750 に答える
2

開発コードでの関数型言語の実際の使用は、コーディング対象のドメインに完全に依存します。他の回答で述べたように、従来の「基幹業務」アプリの場合、C# を既に知っている場合、すぐに F# に切り替える可能性は低いでしょう。

でも:

  • 開発コードで使用しないからといって、それが他の場所で役に立たないというわけではありません (たとえば、データの分析や、OO ノイズにとらわれずにアルゴリズムのプロトタイピングを行う場合など)。
  • 関数型言語を学ぶと、コーディングについて考える別の方法を学ぶことができます。これはおそらく C# にとって有益です。
  • 関数型言語を学ぶと、C# の関数型の側面についての洞察も深まります。
  • 私のリストを完成させるために-これはSOの他の場所で繰り返され、繰り返されてきましたが-F#がC#に取って代わることを示唆している人は誰もいません。それはボックス内の単なる別のツールです. そのツールを今必要としない場合、そのツールを「購入」するのは高すぎるかもしれませんが、少なくとも、現在のツールセットでは不十分な場合に備えて、その機能を理解しようとする必要があります。
于 2009-01-09T07:48:04.893 に答える
1

MVC用のWebアプリの実行可能性については説明しません...明確なパターンを概説したフレームワークを開発している私たちにとっては、同じ猫の皮を剥ぐためのもう1つの方法です。私はASP.NETの全体像に苦労したことは一度もないので、MVCがどういうわけかそれを単純化すると考えるのは、しばしば誤称です。すべてのアプローチではなく、1つのアプローチに役立つ場合があります。したがって、ツールボックス内のさらに別のツールに分類されます。

本当に必要なのは別のツールですか?

于 2009-11-12T15:20:31.117 に答える
1

全くない。

関数型プログラミング言語は何十年もここにあります。

実際にはデザインパターンである「MVC」としてモデルをプログラミングし、数年前までにそれを使用する多くのフレームワークがあります。

おそらくここでの唯一の新しいことはあなたの視点です。あなたはそれらが存在することを知らなかった、あるいはそれらがMSの世界に来るまでそれらが非常に広く使われていた。

私の最初の仕事は、2000年にApplecompのWebObjectsFrameworkを使用することでした。これを使用して開発するのは非常に簡単です。

于 2009-01-09T05:38:03.127 に答える
1

関数型プログラミングには、パラダイムとして多くの利点があります。オブジェクト指向設計が小規模なチームで作業する場合と同じ多くの利点があります (データのカプセル化、ポリモーフィズム、コードの移植性など)。データの不変性、およびステートレスな性質。糸通しがしやすくなりました。

于 2009-03-13T16:32:00.717 に答える
1

いいえ、流行ではありません。いいえ、人々はこれらが C#/VB や OOP の潜在的な代替品になるとは考えていません。時間やお金を節約できれば、人々はそれらを使用します。

時流に飛び乗って、他の賢い人が何に興奮しているかを確認するか、目を閉じて、嵐が数年で過ぎ去ることを祈る必要があると思います。定着するテクノロジーもあれば、定着しないテクノロジーもあります。ただし、 MVCはオブジェクト指向と同じくらい古く、関数型プログラミングはプログラミングと同じくらい古いものです。

于 2009-01-09T05:03:07.707 に答える
0

私が関数型言語について持っている(非常に)基本的な知識から、それらは開発者としての私たちの将来において高い位置を占める可能性があります。多くの賢い人々は、プロセッサーが速くなっていないので、より多くのコアを使用する必要があるという事実についてコメントしています。したがって、並列プログラミングはより主流になるでしょう。関数型言語は、状態を維持しないため、並列タスクに適しています(ロックなど、並列プログラミング/スレッドに関連する一般的な問題のほとんどを効果的に排除します)。

この特定のポイントの詳細については、可変/不変データについて説明し、c#とf#のコードスニペットを比較するこの記事を参照してください。

于 2009-01-09T05:48:59.203 に答える
0

C# と VB は永遠に続くと確信していますが、多くの人が新しいテクノロジでエッジに向かうことになるでしょう。彼らはより少ないコードでより多くのことを実行できるようになり、あなたは既存のコードでより多くのことを実行できるようになります。公正な戦いになるので、心配しないでください。

とはいえ...もっと多くのことを学ぶことで、より良いプログラミングができるようになるので...それはあなた次第です!

私が言っているのは、より多くの言語を学習することが、各言語の能力を知り、そのすべての情報を使用してより良いコードを作成するのにどのように役立つかについて、多くの曖昧さが存在するということです。しかし、言語を支配するために同じ時間を費やすなら、あなたのゴナは大丈夫です.

于 2009-01-09T05:03:17.457 に答える