書籍やネット上で情報として勉強するのも大事ですが、やっぱり実際に稼働してるソースを見るのはまた違った発見がありますよね。
WebでもアプリでもOSでもジャンルも言語もなんでもいいので、プログラマーなら一度は読んだ方がいいと思うOSSのソースがあれば教えて下さい。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答8件
0
実際に稼働してるソースを見るのはまた違った発見がありますよね。
全く同感です!
とはいえ、自分自身はまだ具体的な取り組みがほとんど進んでいないのですけれども…
ただ、プログラマーなら
という前提はちょっと乱暴過ぎるというか、範囲が広すぎませんか?
使用する言語や開発するアプリのタイプなどに応じてオススメは変わってくると思いますし、
また、コードリーディングのスキルによってもオススメは変わってくると思います。
それと、歴史があり有名なOSSはどれも、優秀なコミッターがソースコードの品質を厳しく管理していますけれども、
- スキルの異なる大勢のプログラマーによって開発されている
- 歴史の長いシステムほど、内部にレガシーなコードを引きずっている場合が多い
という事情からすると、最初から 長編の古典 に取り組むのも効率が悪いと思っています。
そこで最近思い至った、(自分のような)初心者向けの取り組み方は、(決して宣伝ではないのですけ
れども)まずは下記のような書籍やサイトを取っ掛かりにするというものです。
Code Reading―オープンソースから学ぶソフトウェア開発技法
コードリーディングを始めよう
コード リーディング
なぜかというと、これらには、コードリーディングのスキルそのものの解説が載っているのと同時に、そのスキルの説明や練習のために是非とも読みたい優れたコードの実例(全文もしくはサンプル)が添付されているからです。
これらを参照すると、Apache や Rails のソースはオススメのようですね。
自分も早く挑戦しようと思っているところ(以前に一回挫折を経験…)ですが、opoonabstさんも是非ガンバってくださいね!
投稿2015/09/10 20:05
総合スコア5936
0
実際に使用するOSSで、特にご自身が作ってみたいジャンルのソフトのソースを読んでみると良いと思います。
加えて、opoonabstさんがつけられているタグを基準に挙げてみます。
Rubyなら、Ruby自体のクラスライブラリー、RailsやRedmine、それとRuby処理系自体(CRuby)。
Javaなら、Java自体のクラスライブラリー、Apacheの特にCommons辺り、それとJava処理系自体(OpenJDK)。
いきなり全部を理解する必要はありません。
まずはどういったディレクトリー構成でどういったファイルがあるのかをざっと見てみて、それから機能ごとに少しずつ掘り下げてみるとか、ランダムに選択したファイルを眺めてどういったコーディングスタイルで書かれているのかを見てみたりとか。
それでもピンと来ないと感じたら、pi-chanさんの挙げられている書籍を読んでみるのも良いでしょう。
特に処理系は難易度が高いと思いますので、慣れてきたら挑戦してみてください。
投稿2015/09/10 21:45
総合スコア9390
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ぼくは「作ってみたいジャンル」よりも、「これ、どうやって動いているの?」と気になるOSSがあればガンガン読んでみるのをオススメします。例えばJavaのOSSを読むと、GoFの1人Erich Gammaが「デザインパターンというのは適用するものではなく、『良いプログラマが書いたコード』は自然とデザインパターンのような構造を取ることが多い」という事を実感できるでしょう。
「これ、どうやって動いているの?」というOSSがあれば、デバッガなりログを出力するなりで、どのクラスが実行されているかアタリをつけます。その後、構造をクラス図や関数の呼び出し関係を図に落としながら読み進めると良いです。大体コードを読んでいると、「どこから呼ばれていたのか?」とかわからなくなる事が多々あります。そういう時に図を見れば、どこから呼ばれているのか一目瞭然なので、道に迷わずに済むでしょう。参考になるかはわかりませんが、僕がJenkinsのJDK自動インストール機能はどう実現されているのか、記述したメモを紹介します。(この記事に書きましたが、Jenkinsもコードに概念を定義するいわゆるドメインモデルが明確で面白いです。)
最初にどっぷり浸かったOSSはSpring Frameworkでした。当時仕事でSpringを扱っていたので、日本語で詳説されたSpring入門という本が出る前からSpringのコードを読み進めていました。出版後、自分の理解と詳説された内容を比較するのが中々面白かったです。
Springは英語ですがコメントが詳しく書かれており、例えばDependency Injectionという仕組みがどのように実現できているのか追いかけやすかったです。
JUnitなどテストライブラリのコードもリフレクションが登場する上、プロジェクトの大きさもそれほど大きくはないのでコードリーディングの素材としては手頃でしょう。ただ、Erich Gamma氏やKent Beck氏のコードが読みたいのであれば、最近は携わっていないようなので、v3.8等のコミットに戻る必要があるでしょう。SOLID原則を提唱しているUncle BobことRobert C. Martin氏のコードが読みたいのであれば、Fitnesseというプロジェクトがあります。単一責務の原則(SCP)とかどんなもんか垣間見る事ができるでしょう。
ところで最近はGitHubやBitBucketを介し、Gitリポジトリで公開されているので、最新版のソースコードだけでなく、「最初のコミットがどんなコミットだったか」が簡単に見られます。最新版のソースコードは育ちきっているのでどこから追いかけたらいいのか難しい面があるでしょう。そういう時は、プロジェクトが小さいうちのコードを読んでみるといろいろと示唆が得られるのでオススメです。コミットのコメントやその粒度も重要な情報です。
最後に、コードリーディングの初心者には、Rubyのような動的言語のライブラリはあまりオススメできません。なぜならRailsのように存在しないメソッドが呼ばれた時の処理
まで実装されているなど、動的言語だとコードを読み進める上で想定しないといけない事が多いからです。慣れてきたら挑戦してみると良いと思います。
ということで、レッツコードリーディング!
投稿2015/09/14 13:35
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
実際に使用するOSSで、特にご自身が作ってみたいジャンルのソフトのソースを読んでみると良いと思います。
私も、そう思います。ま、私の場合は、必要に迫られて読んでいたといった方が良いかもしれませんが。。。
仕事で利用していた、apache, bind など脆弱性が発表されるたびに覗きに行っていました。。。
githubにアカウントを作ってコレいいなと思ったらforkしてみては如何でしょうか。
投稿2015/09/10 22:04
総合スコア1768
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
もしどのような言語でもいいから、ということであれば、
jQuery
のソースをおすすめします。
jsやDOM周りには、ちょっと扱うだけではお目にかかることのないような機能をややり方がたくさんあり、
そういったギミックをjsのライブラリは多量に使用しています。
中でもjQueryはその役割がはっきりしています。
また、jQueryのソースは単一であり、ファイルの中から飛び出すことはなく、すべてはその中で完結しています。
なので、とりあえず「わからなくてもいいや」という部分はあるはずがないという前提があります。
わからない部分があれば、それは自分自身がわかっていないやり方である、と断言できるわけです。
ならばそれを学ぶきっかけになり、非常に割り切りやすいのです。
また、読みやすいdeveloper用のソースも共有されています。
jQueryのソースを読むことで、
ソースコードリーディングの楽しさと実用性
が身にしみてわかると思います。
jQueryのソースが理解できるならば、jsの理解がかなり深まっていると思って、過言ではないわけですから。
その経験を踏み台にして、他のライブラリや、処理系に進んでいくのが、スムーズではないかと思います。
投稿2016/06/06 03:16
総合スコア216
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
少し違うかもしれませんが、C++のSTLは勉強になりました。
投稿2016/05/28 13:33
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
とある勉強会の懇親会で、
自称プロの酔っぱらいの方に
「Gitのソースコードは読んだ方がいいよ!」
と言われたことがあります。
gitのコードがgitで管理されててちょっと「????」
ってなりますw
この質問を見て思い出したので、
私もこれから読みます。
投稿2015/09/15 13:05
総合スコア65
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。