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

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

新規登録して質問してみよう
ただいま回答率
85.48%
teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

Q&A

解決済

8回答

8667閲覧

プログラム参考書の読み方について

退会済みユーザー

退会済みユーザー

総合スコア0

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

1グッド

5クリップ

投稿2015/12/05 07:59

プログラムの参考書の読み方について相談させてください。
よく覚えてないですがプログラムを初めて2年半くらいが経ちます。

私は新しい言語を習得するとき基本をしっかり抑えたくて、参考書で勉強するスタイルなのですが、その読み方が間違っている気がして少し悩んでいます。

私は普段、載っているコードを手打ちして動作確認して、納得がいくまでじっくり考えてしまうのですが、なかなか先のページに進まず、時間がかかるあまり納得して進んだはずの内容を忘れてしまいます(再度理解するのは1回目よりもはやい)。

他の方の読み進め方を聞くと「何周もする」「なんとなく理解して先へ進む」という意見が多いのですが、自分はどうしてもちゃんと理解しないまま先へ進みたくないみたいです。

これから学んでいくべき言語はまだまだあり(喜ばしいことですが)、このスタイルでは集中力も続かないだろうと悩んでいます。

正直、「なんとなく理解して何周もする」読み方にシフトしたいです。
みなさんは普段どういう読み進め方なのか意見をお聞かせください。

pelutata_ppw21👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

muro

2015/12/07 02:00

こちらの質問が他のユーザから「プログラミングに関係がない質問」という評価を受けています teratailでは、プログラミングに関して困っていることがないと思われる質門を推奨していません。 具体的に困っている理由や解決したいことを明確に記入していただくと、回答が得られやすくなります。
guest

回答8

0

ベストアンサー

###0. 前置き
プログラミング言語の仕様だけを覚えても実用的なプログラミングはできません。ネットワークやサーバーなどについての周辺知識をも習得する必要があります。それらは非常に幅広く、かつ個々のテーマも奥深いので、実用的なレベルで身に着けるのは一朝一夕に出来ることではありません。しかも、それらの知識は互いに関連しており、必要な分野の全てを一度に「納得がいくまでじっくり考えて」というスタイルでやっていては、いくら時間があっても足りません。

一方、自分の経験からすると、業務上の理由で切羽詰まり、必死に調べて実際に使いながら習得した技術は、結構短時間である程度身に着きます。この場合は、参考書をイチから順番に納得行くまで理解している暇はないので、

  • 知りたい事柄のキーワードを元に、役立ちそうな参考書やWebの記事を探す
  • 入門的な参考書等で、基本的な概念・機能の使い方を確認する
  • 具体的な実装例を参考に、実際にプログラミングしてみる
  • 不具合があればさらに調べてデバッグする

のようなステップを取る場合が多いように思います。

とはいえ、経験の浅い分野は「基本的な概念・機能の使い方」に手間取る事が多く、それが不十分なまま次のステップへ進んでも試行錯誤が増えて返って時間が掛かったり、プログラムは何となく動くようになったものの知識が体系的に理解できていないために応用が利かなくなってしまうケースも有ります。

ですので、状況や目的に応じて 学習方法を変えるのが実際的なアプローチ方法だと思います。
0. 基礎知識がほとんどない場合
0. 基礎や周辺分野についての知識をある程度持っている場合

###1. 基礎知識がほとんどない場合
まずは 参考書選び が最重要です。ただ詳しければ良いというものではありません。必要以上に詳しくて分厚い参考書は、入門時の学習を妨げる場合さえあります。

  • 根本となる概念を、手抜きせずにしっかり説明してある
  • 基本機能の使い方については、「良質の」サンプルが示されている
  • 要点のまとめがある
  • 目次や索引も手抜き無く作られている

未知の分野なので、良質の参考書を選ぶのも難しい場合がありますから、最初は なるべく薄いものを斜め読み して概要を把握し、次に 参考書をしっかり選んで精読 するのが良いと思います。

たとえ新しい言語を学ぶ場合でも、言語仕様の全てを理解する必要があるかといえば決してそうではありません。基本的な概念を習得した後は、リファレンスを参照しながら 実際にコーディングする作業に進んだ方が速いです。
参考書が用意した サンプル の例題(チュートリアルの類を含む)は、

  • 具体的なテーマが決まっていない
  • 一通りの機能について手早く理解したい

という場合には適していますが、解決したい問題が具体的に決まっている場合には、自らの問題 にすぐに取り掛かった方が良いです。
結局、参考書選びの良し悪しに関わってくるのですが、参考書に掲載されている 例題 の中には、その文法や関数の使い方を説明するためだけに取って付けたような(=実際の現場では使われないような)ものもあれば、誤記さえもあるので、完全に理解することを目指す必要はありません。

###2. ある程度の前提知識が有る場合
たとえば、初めてJavaという言語に取り組む場合でも、オブジェクト指向プログラミングの経験が有るのと無いのでは、取り組み方が全く違って来るはずです。
全くの未経験ならば、言うまでもなく前項の「1. 基礎知識がほとんどない場合」が当てはまります。
しかし、たとえば仮に C# でオブジェクト指向プログラミングの経験があるのであれば、Java の詳しい入門書を逐一完全に理解して行く必要はありません。Javaの特徴を簡潔にまとめた参考書 を手掛かりに、C# と Java の相違点 および コーディングスタイルなどその分野での慣例 に着目しながら、実際のプログラミングをどんどん進めて行った方が速いです。

###3. まとめ
結局、現在のスキルレベルや目的に応じて、随時適切な学習方法を取るのが最善ということです。もちろん、どんな学習方法あるいは参考書が適切かは、学ぶ人の個性 によっても違って来ますので、一概にどれが最善とは言えないと思います。
ただ、どんな場合にも当てはまる原則があって、以下のポイントを肝に銘じておくことが特に重要だと思っています。
80対20の法則
色々な呼び方や解釈の仕方があるようですが、今の「学習方法」に関するテーマにザックリと当てはめれば、概ね2割程度の理解が得られた時点で、自分がやりたい事の8割程度は実現出来るということです。ですから、細かい点は実際に必要が生じてから深く学べば良い という認識に立って学習を進めて行けば、学習の方法論にあまりこだわらなくても良いのだろうと考えています。

投稿2015/12/06 02:16

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自分の場合はなんとなく理解したら実際に手を動かしてプログラミングしてみます。
そうすると、何かしらの問題にぶつかるのでそこで改めて本などを見返して勉強します。
何が分からないか分からないまま勉強を進めるよりも、分からないことが分かっている状態で勉強を進めたほうが理解が深まりますよ。
また、使わない知識は忘れて当たり前なので自分で手を動かしながら身に着けるのが最善だと思います。

投稿2015/12/05 09:21

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/05 13:49

回答ありがとうございます。 >何が分からないか分からないまま勉強を進めるよりも、分からないことが分かっている状態で勉強を進めたほうが理解が深まります その通りだと思います。 私の場合、何が分からないのか知るためには、手を動かしてみないと分からないのが問題かなと思っています。 1.コードを読む -> 2.コードの説明を読む -> 3.なんとなく理解できる -> 4.手打ちしてみたら分からない文法・関数がたくさんあった -> 5. ググる -> 6. 1へ戻る この繰り返しをしてると時間ばかりが過ぎていきますが、自分の場合4の段階が必ずあるので手打ちしないと100%読み飛ばしてスルーしてしまいます。 プログラムの参考書において、何周も読んで学習する人は4の工程を飛ばしてるということでしょうか? プログラムの専門書は学校の教科書とは違い、何度も読んでも手を動かさないと覚えられないんですかね。 方法として「何周読むこともするし、手を動かすこともする」 個人差はあると思いますが、両者のバランスがいい勉強方法は何なんでしょうか?
TaroToyotomi

2015/12/05 16:06

>私の場合、何が分からないのか知るためには、手を動かしてみないと分からないのが問題かなと それで問題ないと思いますよ。学校の勉強でも教科書読むだけでばっちりなんて人はそんなに居なかったはずです。漢字の書き取りや練習問題やったりする人がほとんどですよね。 自分でコードを書かずにプログラミングが出来るようになる人なんてまず居ないでしょう。 専門書の読み方は人それぞれだと思いますが、自分の場合は1回目はざっと目を通して全体の概要を把握して2回目以降は興味をひかれたところを精読するやり方が多いですね。 後は問題解決のために辞書的に参考にしたりとか。
guest

0

最近こんなことがありました。
・参考書①を読む。「プログラミング言語はコンパイラ型とインタプリタ型がある」⇒ふぅん。⇒参考書①最後まで読む。全体の50%位しか理解できていないが、とりあえず基本は抑える。
・Javaの問題が載ってあるサイトがあったので、それを解いていく。javacコマンドでコンパイル、Javaコマンドで実行を繰り返していく。
・参考書②を読む。「JavaのプログラムはJVM(Java仮想マシン)によって実行される」⇒ふぅん。
・もう一回参考書①を最初から読む。よく読むと「プログラムを実行するにはインタプリタというソフトウェアを使います。インタプリタを起動するには、javaというコマンドを入力してください」「JavaのインタプリタはJVMという名前で呼ばれることもあります。」と書かれてある。⇒

あ! 今まで何気なくやっていたjavaコマンドがインタプリタで、それがJVMなのか!⇒点と点がつながる。

というわけで、私は複数の参考書を読んでいくスタイルです。

投稿2015/12/05 10:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/05 13:27

回答ありがとうございます。 なるほど、複数の参考書を読むことで断片的な知識の点が繋がるんですね。 私は今まで複数の参考書を読むにあたって、一冊目を50%くらいの理解で済ませるというのがなかなか難しいんですよね。 でも、何度も同じ参考書に帰ってくるという読み方は一つ参考にさせていただきます。
guest

0

他の方の読み進め方を聞くと「何周もする」「なんとなく理解して先へ進む」という意見が多いのですが、自分はどうしてもちゃんと理解しないまま先へ進みたくないみたいです。

正直、「なんとなく理解して何周もする」読み方にシフトしたいです。 みなさんは普段どういう読み進め方なのか意見をお聞かせください。

今までのやり方が、ご自身の中で正しいという結論が出ているのだと思います。
浅く理解していく人を羨ましいと思う反面、「上辺だけの浅い勉強法だ」と軽蔑しているのではないですか?

もちろん質問者さんが他人を見下しているという話ではなく、
自分が勉強する姿勢として、そんな態度で勉強したくない!…みたいなポリシーを感じます。
それはそれで、とても良い事なので視野が狭いと批判されていると誤解しないでくださいね。

ですので、方法論よりは思想にフォーカスしてご説明したほうが良いのかなと思いました。
納得は出来ないが、そういう奴も居るんだ程度に理解していただければと思います。
「この部分は取り入れてもみよう」と思うのであればそうしてみてください。

読み飛ばす人の戦略

まず、なんとなく読み飛ばしているのは頭の中で地図を作っている段階だと思ってください。

例えば、見知らぬ土地で一人暮らしを始めることになったとしましょう。
引っ越しが終わりました、今日から貴方の新しい生活が始まります!
ただし、来週から仕事(学校)が始まります。

まずは地図を開き必要な情報をインプットしていきます。
一番大事な事は生活が出来ることなので、自宅付近のコンビニの場所、病気になった時の内科、スーパー、家具なんかはどこに行けば買えるのか…
実際にその場所へ歩いて行く事は大事ですが、交差点の景観をちら見する程度で浅く広くインプットしていきます。

次に通勤(通学)経路を調べます。
最寄り駅は何処にある?どう歩けば良い?どんな路線やバスを使おう…

あっと、住民票の手続きがまだでしたね、役場へ行くついでに付近を軽く散歩してみましょう。
これが読み飛ばす人の勉強の戦略です。

新生活と新しい概念(言語)の対応

新生活を始めるにも、新しい概念を理解するには地図が必要です。
新しい言語の勉強は地図の代わりにリファレンス本等を使うことになるかと思います。
この時、地図に相当するものは目次です。

しかし、本物の地図は全国共通で同じ記号で学校や病院等の建物が表されていますが、
新しい言語は似たような記号でも意味が違ったり、新しい記号だらけで翻訳しなければならない…
これが新生活と新言語習得の最も違う壁です。

なので更に詳細に調べていく作業が必要となります。
具体的にはこのように対応していると考えると理解がし易いのではないでしょうか。

  • ページを開く:交差点をちら見
  • 行を縦に読む:建物の景観を眺める
  • 1行ずつ読む:その建物が何かを外から見る
  • コンソールで叩いて実行:その建物の中まで調査

地図作りがどう勉強に影響するか

生活していく上でマストなのは、通勤手段の確保とコンビニの位置だけです。
早く最低限生活出来る環境を整えるなら、とにかく早く地図を入手して、上空から見下ろす事が最重要です。

何かしらの目的があって勉強するのであれば、
目的の処理をどう実現するのか?…と、各種頻出文法、アウトプット、インプットの仕方さえ知っていれば十分です。

目次を読む、繰り返し読むという行為は上空から俯瞰して確認する、
自転車や自動車を走らせて、沢山の交差点を一気に確認する行為に相当します。
(その中で必要そうな建物や、気になる建物を見つける)

1ページずつパワーを掛けて読むのは、私の隣は山田さん、その隣は田中さんと覚えていくやり方に近いでしょう。
それが終われば町内会…もちろん!長く住むなら近所付き合いも大事ですね!

ですがこの時、人間の脳みそは必要のない情報と判断するとすぐに消し飛ばします。
何度も同じ事を繰り返し叩き込む事で、脳みそもどうやらこの情報は本当に必要らしいからちゃんと覚えよう…と理解するそうです。
この手法は相当パワーを使うので、浅く広く覚える人は「必要になったら詳しく読もう」と読み飛ばしているわけです。

俯瞰して見る、門戸を叩いて中身をチェックする。
使い分けながら生活する必要があると思います。
その配分は人によって異なるので、最適な配分を見極めながら勉強していくのが良いと思います。

投稿2015/12/06 03:33

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/07 03:55

回答ありがとうございます。 >浅く理解していく人を羨ましいと思う反面、「上辺だけの浅い勉強法だ」と軽蔑しているのではないですか? 確かにその通りだと思います。ただ、使うエネルギーを考えたら前者のほうが遥かに合理的ですので私の集中力と兼ね合い、その方法へシフトしたいと思った次第であります。 「読み飛ばす人の戦略」の例えはとても納得しました。 読み飛ばすやり方の人がどのように情報み身に着けていくのかよく分かりました。 とても参考になりました。ありがとうございます。
miyabi-sun

2015/12/07 13:41

かなり重い文章になったかと思います。 まずは読んでくださって、そして真摯に受け止めてくださって 本当にありがとうございます。 あえて最初では悪い書き方をしましたが、完璧を目指す姿 そしてより良いやり方を模索する心構え、とても美しいと思ってます。 katoyさんも仰ってる通り、プログラム参考書の読み方にも正解はありません。 効率だけを求め過ぎると、いざ内部の深い所の知識を求められた時に、わからず、また勉強の仕方もわからないということになりかねませんので、それが原因でいつか後悔するでしょう。 逆もまた然りというわけです。 偉そうに語りましたが、私もまだまだ若輩者です。 お互い勉強を続けて、立派なエンジニアとして切磋琢磨していきましょう!
guest

0

参考書は一般にコンピュータの基礎的な部分から説明してありますので、既に基本を理解していた場合、他の言語の「参考書」を読むのは、同じことの繰り返しが多いように思います。 集中力も続かないし、飽きが来やすいということはないでしょうか?
少なくとも私はそうでした。実は、お恥ずかしいことに参考書を最後まで読んだことないです。途中であきてプログラム作り始めてしまいます。

私の場合、新しい言語を学ぶ必要がある時って既に課題が存在してますので、その課題に向けてまっしぐらです。課題を実現するにはどの開発環境を用意すべきか調べて、まず開発環境を整え(ここで簡単なサンプルを走らせて整ったことを確認)、複数の要件に対して1つ1つどうやればその言語で記述できるのか調べて、分かったものからお試し実装してみます。
一通り要件を解決できる方法が見つかったら、課題解決に向けて設計し、真面目な実装をするって感じですね。

この流れの初期段階では「参考書」を見ることもありますが、最近はネットで親切かつ優秀な人が解説してくれていることが非常に多いので、ググって解説サイトを見つけてそこを熟読してます。

投稿2015/12/05 09:14

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/05 13:57

回答ありがとうございます。 >集中力も続かないし、飽きが来やすいということはないでしょうか? かなり飽き性だと思いますが、私もChironianさんと同じように参考書を最後まで読んだことは少ないです。 というのも、何かモノを作っていて他の言語なら実装可能な機能があると分かって、新しい言語に手を出す訳ですが、いつも目的が達成できたら次の言語にチャレンジしてしまうからです。 ググッて解決の糸口を探して、その手がかりを理解するために初期段階として参考書で基本を抑えてるようですね。 参考書の読み進め方の一つとして参考にさせていただきます。 確かにおっしゃる通りサイトで解説してらっしゃる方々はみんな優秀な方ばかりで、課題を達成するためには参考せざるを得ませんよね。
guest

0

... 読み方が間違っている気がして少し悩んでいます。...

小説の読み方、音楽の聞き方に正解なんてないように、プログラム参考書の読み方にも正解はないと思います。
受験勉強時の参考書だって、人によっていろいろな読み方・利用方法があったはずです。
参考書を読む目的が、果たせればよいのです。

本屋で本を選ぶ時は、目次, 中身をバラ読みするでしょう。
それは、その本の内容、書き方、描かれている情報が今 自分が求めているものとあっているか、値段に相応な内容かを調べる為の読み方です。

自分にとって初めてのプログラミン言語を入門書で学ぶなら、実際にコード入力して、動作を確認しながら読んでいくでしょう。
目からの情報だけでなく、手を動かすことで記憶に残りやすくする為の読み方です。

じっくりと読みすすめる、
多少わからなくても全体をよみとおしてから再読して不明点を埋めていく,
など、読み方について悩む必要はありません。

読み方は問題ではなく、xx 機能を xx 言語で実装するために、書籍, web 上のリソースを入手・アクセスして利用するための資金・技術をどうやって得るかが問題です。
おそらく英語を読める(すべての単語がわからなくても、大意をつかむ) 技術は、技術者にとってとても重要と思っています。
(コンパイラやアプリケーションがだす英語のエラーメッセージの大意をつかむ事も含んでいます)

投稿2015/12/06 10:30

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

入門書ではどのような機能があるかを知ることが重要だと思っています。そのため一度目は読みながら進め、二度目から横道にそれながら読んでいます。

投稿2015/12/05 09:40

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/05 13:35

回答ありがとうございます。 「どのような機能があるか知ること」とはできることの幅を広げ引出しを作っておくということですね。 私もできればあまり手を動かさず読んで理解したいのですが、どうやら手打ちをしないとただ読むだけでは一つ一つの処理の意味を見落とし、結果プログラムが何をしたいのかを掴めなくなってしまうようです。 手打ちしてソースの細部まで見つめるとわかります。 また、知らない関数や筆者が使う文法の応用も見えてきて勉強になります。 ですがやはり他の方の言う通り、手打ちしないと理解できないというのは選んだ参考書のレベルが自分に合っていないということでしょうか?
guest

0

それは勉強のスタイルというよりむしろ、参考書のレベルが質問者さんに合っていないことが問題かと思います。

どのような箇所で悩んでいるかによりますが、あまりにも悩む箇所が多かったり、書いてあることが全く理解できない場合はもっと簡単な書籍を選んだほうがいいと思います。

もし独学であれば、特定の言語を完璧に使いこなせるようになるより先に、オブジェクト指向やネットワークに関する基礎知識を付け、その後設計のセオリーを覚えるためになにかのフレームワーク(情報が多いのでrailsがお勧めです)を2〜3個、概念程度でいいので理解することをおすすめします。

私もひとつひとつの書籍を100%理解できるまで勉強しますが、それでもその言語を100%理解することはできません。

投稿2015/12/05 10:43

uma

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/05 13:22

私はいつも、購入する参考書を決定する基準として、なんとなく以下のことは気を付けています。 1.ソースコードが分かりやすい 2.説明が多すぎず少なすぎずちょうどいい 3.興味を持てるサンプル なので買った参考書で、書いてあることが全くわからないというケースは稀です。 ですが、お恥ずかしながら参考書を買っても最後まで読破した本は数えるほどで、だいたいが途中で違う言語に手を出してしまいます。 そのため独学ですがいつも「何かを作りたい」という意識が先行して、目的を達成するために知識を掻い摘んで学習してきた結果、土台が安定していない事が最近気づきました。 なのでこれからは基本からしっかりやろうと思っていた矢先、こんな疑問が浮かんできて困っていました。 100%理解するまでの過程を教えて頂きたかったのですが、参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問