0

編集

うわー、この質問に対する最初の反応はかなり否定的でした。「最高」という言葉を使って、かなり強い感情を引き起こしたのではないかと思います。何人かの人々がその言葉に引っ掛かり、私の質問をすぐに却下したようです。

明らかに、単一のアプローチが「最善」ではないという状況は非常に多くあります。少なくとも、ある問題に対する最善の解決策が、他の同様の問題に対しては最善の解決策ではないことがよくあります。わかりました。しかしここで、私が実際に求めていることの背後にある理由について詳しく説明してみましょう。

私は類推を使って自分自身を説明するのが最も簡単だと思う傾向があるので、ここに行きます. 現在の仕事では、ほぼ専ら .NET を使用しています。.NET には、フレームワークに組み込まれた多くの機能があります。代表的な例は名前空間です。これには、非常に優れた実装が既に存在するSystem.Collections.Genericため、正気の .NET 開発者がゼロから再開発することは (ほとんど) ありません。双方向リンク リストを必要とする問題に取り組んでいる場合、「よし、双方向リンク リスト クラスを作成する時間だ」と決めるつもりはありません。既に存在する を使用するか、せいぜいそれを拡張するか、いくつかの追加機能を追加する独自のクラスでラップします。LinkedList<T>

双方向リンク リストの「最良の」バージョンはLinkedList<T>.NET のものだと言っているのでしょうか。もちろん違います。それはばかげているでしょう。しかし、.NET の実装がLinkedList<T>、同じ目的 (二重リンク リストの目的) を果たすことを目的とした他のほとんどの確立されたライブラリのコレクションの実装とは大幅に異なるとは思えません。一方で、自分自身の実装をゼロから作成する場合は、比較的自信があります。、堅牢性、パフォーマンス、柔軟性などの点で、かなりの数の問題があります。理由は1つだけです。私が愚かでも、怠け者でも、良いコードを気にしないからでもありません-単純に私は 1 人の人間であり、リンク リストの専門家ではありません。また、リンク リストを設計する際に考慮する必要があるすべてのことを考えたこともありません。

しかし、私はたまたま、物事が内部でどのように実装されているかに興味を持っている開発者です。したがって、リンクされたリストのよく考え抜かれた設計のいくつかの変形、または堅牢で効率的な実装書かれているかなり確立された概念のページをチェックアウトできればいいと思います。 . (ちなみに、私は .NET のソース コードLinkedList<T>が利用可能であることを認識しています。私はそれを例として使用しているだけです。実際には、適切で機能する実装が存在するソリューションに関するすべての問題について話しているのです。)

さて、私はこれがオープンなものであると話しました。それについて詳しく説明しましょう。SourceForge.net、CodePlex、Google Code などのサイトについて話しているのではありません。これらはすべて、プロジェクトをホストするためのサイトです。つまり、特定の業界や分野、または分類可能な目的に合わせて調整されたアプリケーションやライブラリです。私が話しているのは、次のようなものです。

http://en.wikibooks.org/wiki/Category:Algorithms_and_data_structures

おそらく、これまでに書いたものよりも優れていることを示しているので、最初にそのリンクを提供する必要があったのかもしれません。しかし、私が尋ねていることを私が見た他のサイトと区別する主なポイントは、新しい問題に取り組む方法があるのではないかと具体的に考えていたことです。リンクされたリストの例のように、よく知られた確立された実装である必要はありません。ウィキのような方法で共同作業を行いますが、特定のオープンソース プロジェクトには結び付けられません

ですから、ある種の結論として、私は次のような状況を想像していました: 私は自分自身が新しい問題に直面していることに気づきました. .NET のようなフレームワークで対処できるほど一般的ではないかもしれません。しかし、あちこちの一部の開発者が独立してそれに取り組んでいることは十分に一般的です。私が想像しているような Web サイトが存在する場合、ある時点で、問題に取り組んでいる開発者の 1 人がその Web サイトにアイデアを投稿し、時間の経過とともに他の人がそれを発見して改善/変更を提案し、十分な時間と参加が与えられる可能性があります。 、このすべてのコラボレーションから、非常に優れた実装が得られる可能性があります。そしてそこから、最終的には、この実装のようなものがかなり「標準」と見なされるようになるかもしれません。リンクされたリストの実装、またはクイックソートの実装、またはよく知られていない疑似乱数ジェネレーターのようなものです。

これは今、誰にとっても意味がありますか?私が話していることはばかげたことではないと確信していますが、人々がそう考えているなら、それはおそらくそうです.


オープンソース プロジェクトは非常に人気があります。これらのいくつかは、特定の目的に適したライブラリであり、その最良のものには、非常によく書かれたコードが含まれています。

ただし、オープン ソース プロジェクトへの貢献に関心がある場合、自分のスキルに適したプロジェクトを見つけるのは非常に難しい作業です。同時に、自分の仕事でオープンソース プロジェクトを使用することに興味がある場合、ニーズに適したプロジェクトを見つけるのも難しい場合があります。たとえば、オープンソース ライブラリ X にライブラリ Y と同様に、使用できる多くの機能があり、これら 2 つのライブラリの機能が重複しているため、両方をコードに統合するのは面倒です。

ここ Stack Overflow や Web 上の他の場所で、ある開発者が投稿した「このアイデアをどのように実装しますか?」という質問を見たことがあるでしょう。多くの場合、多数のサンプルコードが付随しています。これらの回答は、投稿者が求めているものと同様の機能を提供するオープン ソース プロジェクト/ライブラリにリンクしている場合があります。

私の質問は次のとおりです。本質的にオープンであり、一般的な (またはそれほど一般的ではない) プログラミングの問題に対して「最もよく知られた実装」を提供するが、特定のオープン ソース プロジェクトとは関係のない、よく知られた Web サイトまたはその他のソースはありますか? ?

一般的な例として、X を実行するアルゴリズムが必要であるとします。SO または他のサイトに質問を投稿してアイデアを求め、それを実装する最善の方法について提案を求めます。ある人が、このアルゴリズムと非常によく似た何かを実行するコードを含むプロジェクト P1 を教えてくれました。別の人が私にプロジェクト P2 を教えてくれました。他の誰かがサンプル コードを書いて、「このようにできるかもしれない」と言っています。

私には、このアイデアのさまざまなバージョンが世界中に出回っている場合、準「公式」実装 ("公式」という言葉は適切ではありません。現在、より良いものを考えるのに苦労しているだけです)、改善が開発/発見されたときに公開および変更できます.

過去にこのようないくつかの異なるサイトに出くわしたような気がしますが、他の誰かが私が説明しているようなリソースを見つけたかどうか知りたいです.

4

2 に答える 2

1

まさにその考えはばかげています。これは、他の人がより良いアイデアを持っていることに基づいて変更を加えずに、「最もよく知られている実装」について 1 つの単一の意見があることを意味します。

これは、ベスト プラクティスが静的であり、単一のリポジトリに蓄積できることを意味します。

それらを収集できれば Google はそれらを取得し、単にアクセスに対して料金を請求します。

興味深いことに、彼らはすべてのベスト プラクティスを持っているわけではありません。興味深いことに、より多くの情報を探すために膨大な計算能力を費やさなければなりません。次に、人々は(あなたのような)読んで、考えて、判断して、決定しなければなりません。

読んで、考えて、判断して、決定するプロセスをなくすのは本当に難しいです。もちろん、誰かに考えてもらいたい場合を除きます。その場合、考える必要のない単一のソリューションを持っている企業がたくさんあります。Microsoft、Oracle、または IBM に連絡してください。すべてが 1 か所にまとめられたソリューションがあり、ベスト プラクティスが統一されており、読んだり、考えたり、判断したり、決定したりする必要はありません。

オープンとは、定義上、単一の信頼できる情報源を持つことが不可能であることを意味します。

于 2009-11-20T21:13:58.603 に答える
0

ここに何かがありますが、おそらく最良の実装ではありません。しかし、 Design Patternsという本には、多くのプログラマーが従うべき最良のパターンと考えているものが含まれています。

于 2010-11-04T17:57:20.327 に答える