質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.96%

コードリーディングについて

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 6
  • VIEW 3,801

score 25

要点:超初心者にコードリーディングは有効なのか、そして初心者がコードリーディングをするコツおよびちょうど良いレベルのソースコードを手に入れる場所とは

閲覧ありがとうございます。
当方プログラムは初心者なのですが他分野の経験から「他人(先人)の成果をじっくり観察して真似して自分のものにする」のが最初のうちは最も効果的だと考えていて、プログラムの学び始めて最初の入門書一冊を読み終えたあとまっさきにオープンソースのソフトウェアを漁ろうと画策したのですがあまりに複雑で愕然としました。
コードリーディングについて検索したらすごくよいものとして扱われているので自分のしていることは大きくは間違ってないのだと感じましたが、プログラマのみなさんの実際の意見を頂戴したくこれを投稿しました。

まったくの筋違いだと笑われるかもしれませんが私は効率的に学ぶ方法を考えること自体にも楽しさを覚えるたちなので、生温かい目で見てください。

率直なご意見をお待ちしております。どうぞよろしくおねがいします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mattn

    2017/07/07 11:50

    レビューはまた違う気がします。

    キャンセル

  • m.ts10806

    2017/07/07 11:51 編集

    似た種類の質問がないか調べてみたら割といいタグが出てくるのでタグ付けの際にはキーワード検索オススメです。一通り言語を並べている質問も結構ありますね。 例:https://teratail.com/questions/66951

    キャンセル

  • d-gate

    2017/07/07 12:00

    複数言語を並べてみました。ありがとうございます。ほかにも色々タグ探してみます。

    キャンセル

回答 6

checkベストアンサー

+10

超初心者に対してはコードリーディングよりコーディングのほうがいいと思います。

ソースコード読んで5割以上理解できる(例えば、日本語で設計書が起せる)くらいであれば
コードリーディングは有意義なものになるかと思いますが、
3割しか分からないのにソースコード読んでどうするの??って感じます。

論理的思考を構築させることも考えると、自身でコーディングしたほうがいいです。
そのほうが覚えるのも理解も早くなります。

無作為にコードリーディングするのであれば、
7割は日本語で説明できるコードを選ばれるといいかと思います。

他分野の経験がどのような分野か分からないですが、
ソフトウェアは初期コストがかかりません。(PC代くらい)
わざわざ人の成果を見て真似るより、自分でやるほうが手っ取り早いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/07 12:19

    回答ありがとうございます。
    より客観的に考えさせられる内容です。やはりリーディングにも弱点がありそうですね。。

    他の回答者様含めてですが、質問に回答をいただけることに感謝ばかりです。

    キャンセル

+4

超初心者にコードリーディングは有効なのか

個人的な見解としては「人によっては有効」だと思います.

私も質問者さんと同様に『「他人(先人)の成果をじっくり観察して真似して自分のものにする」』に近いことが得意な方なので,そういう人間にとっては有効かと.
ただし,もちろん基本的な文法や制御構文の意味は理解している必要があるとは思います.(英単語・英文法がわからないのに英語の本読んでも身につかないよねって話と同じで)

初心者がコードリーディングをするコツおよびちょうど良いレベルのソースコードを手に入れる場所

コツとしては,まずは本当に簡単なものから読むとかでしょうか…
場所については,teratail や stackoverflow なども割といい場所だと思っています.
時々ですが,質問者が書いたコードがあって,回答者が修正したコードが上がっていたりすると,両者の違いから良い書き方などを学べる場合もあります.

同様に Qiita も結構いいかと思います.
情報共有が主な目的のサイトなので,小さな要求に対して簡単なコードを示すような記事も時々アップされます.

こちらも,もちろん「基本的な文法や制御構文の意味は理解している必要がある」し,稀に質問者の要求・投稿者の意図が全くわからず,なぜそのコードになるのかが理解できない場合があるというデメリットもありますが…

オープンソースのソフトウェアを漁ろうと画策したのですがあまりに複雑で愕然としました

特に規模の大きなものとかだと,入門には向かないですね.
上にも書きましたが,最初のうちは「小さな要求に対する簡単なコード」を探すところから始めた方がいいと思います.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/07 12:05

    早速の回答に感動しております。
    具体的な例が多くて非常にありがたい限りです。
    >>小さな要求に対する簡単なコード
    これは今からでも意識していく所存です。

    ありがとうございました。

    キャンセル

+4

こんにちは。

一例ですが、「普段利用しているアプリケーションのソースコードを読む」「使い慣れたライブラリのソースコードを読む」というのはどうでしょう。
既に使い方を知っている、既に実現されている機能から、その実装を辿る方向で学習することになるため、書いてあるものが「(最終的に)何をするためのものなのか」を知った状態でコードを読むことができ、コーディングに関するノウハウやテクニックを吸収する効率が良いです。

入門書レベルというとどの程度なのかが分かりませんが、自分は愛用していたツール系アプリの不具合を自前で解消することを目的に、いきなりコードリーディングからプログラミングデビューしたので、できないということはないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/07 12:09

    実際にいきなりリーディングからデビューしたという話を聞いて勇気づけられます。
    もっと親しい、挙動をよく把握しているアプリケーションやツールの周辺から探っていこうと思います。
    ありがとうございました。

    キャンセル

+4

Javaに偏ってますが(一応Javaタグ付いてたので)。他の方の回答にあまり具体的なプロダクト名がでてなかったのでとりあえず。
1.JUnit(XUnit系テストツール)
元祖のJUnitはデザインパターンで知られるガンマとか有名人たちのプロダクトです。
細かいところでいろいろケチがつけられているものの、基本的には設計のお手本としておすすめできます。
eclipseプラグインなのでこれ自体で完結しないのが難点ですが、これを機会にeclipseプラグイン開発をかじるのも良い。
まあJUnitレベルならそんなに難しくはない。
2.Eclipse-Collections(旧GS-Collections)(コレクションライブラリ)
これのコードリーディングで設計手法を勉強しよう、みたいな内容のセッションが昔勉強会であったような記憶がある。
私自身はそんなに読んではいないが、開発チームはソースに相当自身があるような感じだし、実際評判は良い。
他の言語でもコレクションライブラリは依存関係が少ないから扱いやすいかもしれない。
個人的な感想だがGS系のライブラリは概してセンスがいいと思う。
3.Struts(WEBフレームワーク)
まあDIの仕組みだったり、JDKが新しいもの対応だったりで普通にSpringMVCとかSpring系はおすすめなのですが、
分かりやすさでいえばStrutsかもしれない。いまさらStrutsかよ、なんですが単純なので読みやすい。
黒魔術的バイトコード操作もない。
WEBやるなら有名WEBフレームワークは読んでおいた方が良い。意外と"自分で書けばいいじゃん?"という感想を持つのでは?
Java以外ならRoR系は苦労してでも読んでおく価値はあると思う(Play FrameWork1.xはおすすめしない)。
4.log4j、logback/ログライブラリ
複数スレッドからの単一リソース更新は難しい。そういう問題意識をもって見ると面白いかもしれない。
5.hibernate(ORマッパー)
品質悪いんです。なので中知っておくと障害調査で知見が役に立つ。

最後に。ショートコードを読むのも良いが、ある程度規模のあるものを読むのも重要な技術(まずは構成を把握するところからはじめましょう)。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/07 14:25

    回答ありがとうございます!
    こういった具体的なことも知りたかったことでした。
    わかりやすい解説までありがとうございます

    キャンセル

+1

コードの良し悪しが、解るのは、自身の書いたコードを忘れた頃見返して
これダメじゃん、いけてるじゃん、って思える様になってからでしょうか。

C#であれば、

10 行でズバリ

でググってください。
マイクロソフトの、質の良いコード、悪いコード取り交ぜて
検索の糸口がみつかります。

hey scripting guy

では、結構いけているWindows用 Scriptを見つけることができます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/07 15:30

    回答ありがとうございます。
    hey scripting guyが特に面白くて回答頂いてからさっきまで読んでました(笑)
    参考になります。。

    キャンセル

  • 2017/07/07 15:40

    (^◇^)

    キャンセル

+1

インターネットのない時代からプログラマやってますが、その頃はコードに「飢えて」ました(笑)。
専門書や雑誌などで人のプログラムを眺めては、こういう風に書くのかとか、これはどうなんだろうとか、あれこれ考えながら。

余談ですが、ゲームしながらでも、この多重スクロールはどうやって処理してるんだろうとか考えながらやってましたね。当時は、専用のグラフィックチップは単純なものしか無くてほとんどがソフトウェア処理でしたからね。

なので、人のプログラムを読むのはそんな苦にはならない方で、今の自分もそのころ貪るようにプログラムを読んだ経験が少しは役に立っていると思っています。

なので、私の経験上から言えば役には経つと思います。

コツは、データの流れを頭のなかでイメージするようにすることかな。(分岐が多いと大変なことになるんですが^^;)。ただ、これは私のやり方であって人それぞれ意識の仕方や考え方や頭の使い方が違うので、自分にあった方法を見つけるのが良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る