私はソフトウェアデザインのクラスで、ソフトウェアデザインの観点から分析するオープンソースソフトウェアを選択する必要があります。
それは大きなプロジェクトでなければなりません:100,000行以上のコードです。
私は本当に、優れたソフトウェア設計に関する優れた洞察を持つように非常によく設計され、設計されたソフトウェアを選択したいと思います。
優れた設計とは、意味のあるクラスとアーキテクチャ、(設計)パターンの適切な使用、抽象化の適切な使用、コンポーネントの適切な構成、コンポーネント間の高い凝集性と低い結合などを意味します。
私に提案するソフトウェアはありますか?
ソフトウェアは良いデザインを持っている必要があるだけで、デザインを文書化する必要はないことに注意してください! :)
エンドユーザー向けのアプリケーションである必要はありません...ライブラリ、ツールなどにすることもできます...
優れた設計とは、意味のあるクラスとアーキテクチャ、設計パターンの適切な使用、抽象化の適切な使用、コンポーネントの適切な構成、コンポーネント間の高い結合力と低い結合などを意味します
まず、ソフトウェアは、良いものも悪いものも、孤独ではありません。人間が問題と考える現実のシナリオをモデル化しているため、常に「アプリケーションドメイン」と呼ばれるものと密接に関連しています。したがって、ソフトウェアについて話すときはいつでも、まずドメインを知って研究してください。そうしないと、善と悪の裁量を得ることができません。
git –良いだけでなく、素晴らしいデザイン。これは、コアのバージョン管理ではなく、単なるファイルシステムです。コアの上に薄い単板の機能を備えているため、バージョン管理システムになります。 gitの内部を理解してください。そうすれば、ソフトウェア設計の感覚が明らかになります。
jQuery –十分に(内部で)文書化されたライブラリではありませんが、クライアント側のJavaScriptコードが不思議に振る舞う方法を示す刺激的なソース。
NodeJS –サーバーを作ることに夢中なら、このプロジェクトは提供する新しいアイデアとパターンを新たに持っています。
v8 –非常に優れたC++コード、仮想マシンの実装を学習/研究するための素晴らしいライブラリ。
NoSQLプロジェクト – Couch、Mongo、Redis、Cassandra –これらのプロジェクトはスマートな方法を示しますまた、持続性の問題を解決するために、ポリグロットの持続性の概念を採用しています。
Boost libraries – C++の適量。
OpenStack –クラウドコンピューティングと仮想化に関する非常に優れたプロジェクト。
Apache Software Foundation –プロジェクトを選択して調査します。 HTTPdのモジュール構造は、コンポーネントがどのように組み合わされるかを確認したい場合に最適なソースです。 APR(Apacheポータブルランタイム)–非常に優れたライブラリでもあります。
mod_wsgi –私が出会った中で最高のCプログラムの1つ。
「設計パターンの適切な使用」–コードが既知の設計パターンに対応することは重要ではありません–問題を「賢く」解決することがより重要です–保守可能、再利用可能、そして読み取り可能であることが重要です。コードが特定の「形状」に詰め込まれている場合-単にデザインパターンに固執するために-それは悪いコードである可能性があります。
「10万行以上のコード」–行数がいつ高品質の評価基準になったのか–「よく設計された/設計されたソフトウェア」の味を得るために、それが重要である必要はありません。
繰り返しますが、まず問題ドメインの性質とニュアンスを研究し、それからコードを読むことを忘れないでください。
更新:2015年10月
InfluxDB- https://influxdb.com/ このGoプロジェクトは活発に開発されており、それほど複雑ではありません。したがって、OpenStackのようなものよりも比較的簡単にコードを掘り下げることができます。
コインを投げます。すべての大規模なオープンソースプロジェクトは、生き残るためには見事である必要があります。 Apache、Linux、GNUプロジェクトはすべて素晴らしいです。
Python。具体的には、CPythonが主要な実装です。バージョン3.2の場合、インタプリタは約50kのCコードのコード、400kを超える標準ライブラリのPythonコードを実行します。非常に高品質の言語と、読みやすさの原則と優れたデザイン、私はこのコードのすべてがかなり良いだろうと思います。
TeXとMetaFontは、検討する価値があります。 http://www.tug.org/
ローカルライブラリは、ソースの印刷バージョンを支援します。
オープンソースプロジェクトを選択する前に、次の本を読むことをお勧めします。これにより、良い/悪いコードと見なすことができるものへの洞察が得られます。
グレッグ・ウィルソン
ソフトウェアを実際に機能させること、および私たちが信じる理由
オープンソースアプリケーションのアーキテクチャ
彼を調べる前に作者の話を聞くことに興味がある場合は、ここにも彼のブログスタック交換インタビューがあります。
http://blog.stackoverflow.com/2011/06/se-podcast-09/
全体的に高品質のソフトウェアと見なされるものは何ですか?質問自体は非常に主観的です。ユーザーは品質の測定方法が異なります。技術的なメリットによっては、1人のユーザーがソフトウェアパッケージを高品質であると見なす場合があります。別のユーザーが、ユーザーインターフェイスの美学と全体的なユーザーエクスペリエンスに基づいて品質を評価できる場所。
ビジネスの観点からは、クライアントの期待に応えるか、クライアントの契約上の義務を満たしているかに応じて、通常、ソフトウェアの品質を測定します。専門的な行為もありますが、それはフェンスのどちら側から見るかによって異なります。
プログラマーの観点から見ると、ソフトウェアが作成されたときのAPIの設計と構成はどれほどエレガントなのか。プログラマーの態度や見方が時間とともに変化する場合、同じ設計またはコード標準は専門家ではないと見なされる場合があります。
私はそのようなプロジェクトを自分で探していて、CLang
に落ち着きました。
そこには多くのデザインパターンはなく、あちこちに数人の訪問者がいますが、それはそれについてです。クラス階層は単純で単純です...実際、私はsimplicityが目標だと思います。過剰なエンジニアリングは行われていないようです。
とはいえ、パフォーマンスが重要であるため、多くの設計上の決定は不審に思えるかもしれません(多数のオブジェクトの仮想関数を避け、RTTI /例外なしでコンパイル)。
あなたはソフトウェアツールが好きだと言っているので、IntelliJ Community Editionを提案します。
私がそれについて好きなこと:
(確かに私はJetBrainsのファンです)
ブレンダーはよく構造化され、よく設計されています。
だから、もう一つの変種- Nemerleプログラミング言語 はどうですか?
それはそれほど人気ではありません(しかし、GitHubはNemerleの強調表示を追加しただけです)。そこには多くの良い点があります。
Joomla、とてもよくできました。しかし、その10万行かどうかはわかりません