web-dev-qa-db-ja.com

オープンソースプロジェクトは、設計やアーキテクチャに関する文書なしでどのようにして成功することができますか?

有名なオープンソースプロジェクトを研究してプログラミングスキルを向上させたいのですが、ソースコードにジャンプするだけで迷子になりがちです。

そこで、私は彼らの設計やアーキテクチャ(UMLダイアグラムなど)に関するドキュメントを読んで、最初にコードの編成に関する一般的なアイデアを得ることにしました。しかし、驚いたことに、Hibernate、Spring、ASP.NET MVC、Railsなどの大規模なオープンソースプロジェクトのアーキテクチャドキュメントが見つかりません。

だから私は不思議に思い始めました:新規の開発者が読むためのアーキテクチャ/設計ドキュメントがない場合、またはプロジェクトマネージャーがソースコードを開いただけでそのドキュメントを閉じた場合、オープンソースプロジェクトを成功させるにはどうすればよいでしょうか?

11
TomCaps

初心者の開発者が読むためのアーキテクチャ/設計ドキュメントがない場合、オープンソースプロジェクトが成功するのはなぜですか?

あなたは自分が何をしているかを知っていて、何を見ようとしているのか(そして期待しているのか)についてかなり親密に理解しているという仮定が常になされます。

たとえば、SymfonyフレームワークのPHPコードを調べると、依存関係の注入、イベント、モデル/ビュー/コントローラーパターンなどについてすでに知っているはずです。

同様に、LinuxカーネルのCコードに飛び込んだ場合、モジュール性、シグナル、プロセス、スレッドなど、実際には能力がないと想定されます。また、1日中16進数を食べて、巨大なシャベルを使ってコアダンプを掘り出すコツが必要です。

アーキテクチャーは事実上問題なので、メンテナーはアーキテクチャーの文書化の問題を経験しません。時々、ソースツリーのどこにあるかの概要を見つけるでしょう。ただし、より一般的には、ソースツリーの編成方法によって、説明がわかりやすくなります。

要するに、メンテナがコードをのぞくまでにあなたが知っていると期待するスキルのいずれかが不足している場合、おそらく給与水準を大幅に超えているものを掘り下げていることになります。最初に概念を理解してください-MVCモデルとは何ですか?依存性注入とは何ですか?あとはダイビング。

10

何よりもまず、プログラムが印象的であるか、または他のプログラムがその当時はできなかった何かをしたため、最も成功したオープンソースプロジェクトが成功しました。それは、ソースが十分に文書化されていることを必ずしも意味しません。なぜなら、プロジェクトを最初から始めたプログラマーは、コードを必要としないほど十分に知っているからです。オープンソースプロジェクトを詳細に文書化する必要がないのは残念なことです。それは良いプログラムか平凡なプログラムでなければなりませんが、プログラマーがそれに興味を示すために十分に文書化されています。

17
Neil

オープンソースの開発者は通常才能があり、専門分野でもプロジェクトを選択するため、頭蓋骨内にはすでに「ドキュメント」があります。少し誇張して、これらのいずれかが不足している場合にのみ、完全なドキュメントが必要です:o)

正直なところ、未知のコードベースに直面しているときは、「ドキュメント」を実際には読みません。簡単な紹介、おそらくいくつかの概念的なスケッチとコードに直接!実験して、小さな変更を試してください。適切に設計されたコードに対して完全に機能します。私がひどい混乱に直面した場合、それらを学ぶ最善の方法は、わかりやすくするために少しずつリファクタリングすることです(理想的にはユニットテストの助けを借りて)。

追加の理由は、これらのプロジェクトの明白な有機的なデザインのルーツである可能性があります。アーキテクチャは、「文書化された」エンティティーと言うよりも、開発者の心の中で進化したビジョンです。

12
MaR

そのようなドキュメントがしばしば存在しない理由はかなり単純です:プログラマーは、ドキュメントを書くのではなく、プログラミングすることを好みます。特に、オープンソースプロジェクトでは、開発者が自由/余暇に貢献することがよくあります。

基本的に、ドキュメントを書くのは楽しいものではありません。そして、彼らがそれのために支払われていないならば、誰が彼らの自由な時間を楽しくない何かをして過ごしたいですか?

8
GrandmasterB