プログラムの参考書の読み方について相談させてください。
よく覚えてないですがプログラムを初めて2年半くらいが経ちます。
私は新しい言語を習得するとき基本をしっかり抑えたくて、参考書で勉強するスタイルなのですが、その読み方が間違っている気がして少し悩んでいます。
私は普段、載っているコードを手打ちして動作確認して、納得がいくまでじっくり考えてしまうのですが、なかなか先のページに進まず、時間がかかるあまり納得して進んだはずの内容を忘れてしまいます(再度理解するのは1回目よりもはやい)。
他の方の読み進め方を聞くと「何周もする」「なんとなく理解して先へ進む」という意見が多いのですが、自分はどうしてもちゃんと理解しないまま先へ進みたくないみたいです。
これから学んでいくべき言語はまだまだあり(喜ばしいことですが)、このスタイルでは集中力も続かないだろうと悩んでいます。
正直、「なんとなく理解して何周もする」読み方にシフトしたいです。
みなさんは普段どういう読み進め方なのか意見をお聞かせください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア5936
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
自分の場合はなんとなく理解したら実際に手を動かしてプログラミングしてみます。
そうすると、何かしらの問題にぶつかるのでそこで改めて本などを見返して勉強します。
何が分からないか分からないまま勉強を進めるよりも、分からないことが分かっている状態で勉強を進めたほうが理解が深まりますよ。
また、使わない知識は忘れて当たり前なので自分で手を動かしながら身に着けるのが最善だと思います。
投稿2015/12/05 09:21
総合スコア1430
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/05 13:49
2015/12/05 16:06
0
最近こんなことがありました。
・参考書①を読む。「プログラミング言語はコンパイラ型とインタプリタ型がある」⇒ふぅん。⇒参考書①最後まで読む。全体の50%位しか理解できていないが、とりあえず基本は抑える。
・Javaの問題が載ってあるサイトがあったので、それを解いていく。javacコマンドでコンパイル、Javaコマンドで実行を繰り返していく。
・参考書②を読む。「JavaのプログラムはJVM(Java仮想マシン)によって実行される」⇒ふぅん。
・もう一回参考書①を最初から読む。よく読むと「プログラムを実行するにはインタプリタというソフトウェアを使います。インタプリタを起動するには、javaというコマンドを入力してください」「JavaのインタプリタはJVMという名前で呼ばれることもあります。」と書かれてある。⇒
あ! 今まで何気なくやっていたjavaコマンドがインタプリタで、それがJVMなのか!⇒点と点がつながる。
というわけで、私は複数の参考書を読んでいくスタイルです。
投稿2015/12/05 10:01
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/05 13:27
0
他の方の読み進め方を聞くと「何周もする」「なんとなく理解して先へ進む」という意見が多いのですが、自分はどうしてもちゃんと理解しないまま先へ進みたくないみたいです。
正直、「なんとなく理解して何周もする」読み方にシフトしたいです。 みなさんは普段どういう読み進め方なのか意見をお聞かせください。
今までのやり方が、ご自身の中で正しいという結論が出ているのだと思います。
浅く理解していく人を羨ましいと思う反面、「上辺だけの浅い勉強法だ」と軽蔑しているのではないですか?
もちろん質問者さんが他人を見下しているという話ではなく、
自分が勉強する姿勢として、そんな態度で勉強したくない!…みたいなポリシーを感じます。
それはそれで、とても良い事なので視野が狭いと批判されていると誤解しないでくださいね。
ですので、方法論よりは思想にフォーカスしてご説明したほうが良いのかなと思いました。
納得は出来ないが、そういう奴も居るんだ程度に理解していただければと思います。
「この部分は取り入れてもみよう」と思うのであればそうしてみてください。
読み飛ばす人の戦略
まず、なんとなく読み飛ばしているのは頭の中で地図を作っている段階だと思ってください。
例えば、見知らぬ土地で一人暮らしを始めることになったとしましょう。
引っ越しが終わりました、今日から貴方の新しい生活が始まります!
ただし、来週から仕事(学校)が始まります。
まずは地図を開き必要な情報をインプットしていきます。
一番大事な事は生活が出来ることなので、自宅付近のコンビニの場所、病気になった時の内科、スーパー、家具なんかはどこに行けば買えるのか…
実際にその場所へ歩いて行く事は大事ですが、交差点の景観をちら見する程度で浅く広くインプットしていきます。
次に通勤(通学)経路を調べます。
最寄り駅は何処にある?どう歩けば良い?どんな路線やバスを使おう…
あっと、住民票の手続きがまだでしたね、役場へ行くついでに付近を軽く散歩してみましょう。
これが読み飛ばす人の勉強の戦略です。
新生活と新しい概念(言語)の対応
新生活を始めるにも、新しい概念を理解するには地図が必要です。
新しい言語の勉強は地図の代わりにリファレンス本等を使うことになるかと思います。
この時、地図に相当するものは目次です。
しかし、本物の地図は全国共通で同じ記号で学校や病院等の建物が表されていますが、
新しい言語は似たような記号でも意味が違ったり、新しい記号だらけで翻訳しなければならない…
これが新生活と新言語習得の最も違う壁です。
なので更に詳細に調べていく作業が必要となります。
具体的にはこのように対応していると考えると理解がし易いのではないでしょうか。
- ページを開く:交差点をちら見
- 行を縦に読む:建物の景観を眺める
- 1行ずつ読む:その建物が何かを外から見る
- コンソールで叩いて実行:その建物の中まで調査
地図作りがどう勉強に影響するか
生活していく上でマストなのは、通勤手段の確保とコンビニの位置だけです。
早く最低限生活出来る環境を整えるなら、とにかく早く地図を入手して、上空から見下ろす事が最重要です。
何かしらの目的があって勉強するのであれば、
目的の処理をどう実現するのか?…と、各種頻出文法、アウトプット、インプットの仕方さえ知っていれば十分です。
目次を読む、繰り返し読むという行為は上空から俯瞰して確認する、
自転車や自動車を走らせて、沢山の交差点を一気に確認する行為に相当します。
(その中で必要そうな建物や、気になる建物を見つける)
1ページずつパワーを掛けて読むのは、私の隣は山田さん、その隣は田中さんと覚えていくやり方に近いでしょう。
それが終われば町内会…もちろん!長く住むなら近所付き合いも大事ですね!
ですがこの時、人間の脳みそは必要のない情報と判断するとすぐに消し飛ばします。
何度も同じ事を繰り返し叩き込む事で、脳みそもどうやらこの情報は本当に必要らしいからちゃんと覚えよう…と理解するそうです。
この手法は相当パワーを使うので、浅く広く覚える人は「必要になったら詳しく読もう」と読み飛ばしているわけです。
俯瞰して見る、門戸を叩いて中身をチェックする。
使い分けながら生活する必要があると思います。
その配分は人によって異なるので、最適な配分を見極めながら勉強していくのが良いと思います。
投稿2015/12/06 03:33
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/07 03:55
2015/12/07 13:41
0
参考書は一般にコンピュータの基礎的な部分から説明してありますので、既に基本を理解していた場合、他の言語の「参考書」を読むのは、同じことの繰り返しが多いように思います。 集中力も続かないし、飽きが来やすいということはないでしょうか?
少なくとも私はそうでした。実は、お恥ずかしいことに参考書を最後まで読んだことないです。途中であきてプログラム作り始めてしまいます。
私の場合、新しい言語を学ぶ必要がある時って既に課題が存在してますので、その課題に向けてまっしぐらです。課題を実現するにはどの開発環境を用意すべきか調べて、まず開発環境を整え(ここで簡単なサンプルを走らせて整ったことを確認)、複数の要件に対して1つ1つどうやればその言語で記述できるのか調べて、分かったものからお試し実装してみます。
一通り要件を解決できる方法が見つかったら、課題解決に向けて設計し、真面目な実装をするって感じですね。
この流れの初期段階では「参考書」を見ることもありますが、最近はネットで親切かつ優秀な人が解説してくれていることが非常に多いので、ググって解説サイトを見つけてそこを熟読してます。
投稿2015/12/05 09:14
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/05 13:57
0
... 読み方が間違っている気がして少し悩んでいます。...
小説の読み方、音楽の聞き方に正解なんてないように、プログラム参考書の読み方にも正解はないと思います。
受験勉強時の参考書だって、人によっていろいろな読み方・利用方法があったはずです。
参考書を読む目的が、果たせればよいのです。
本屋で本を選ぶ時は、目次, 中身をバラ読みするでしょう。
それは、その本の内容、書き方、描かれている情報が今 自分が求めているものとあっているか、値段に相応な内容かを調べる為の読み方です。
自分にとって初めてのプログラミン言語を入門書で学ぶなら、実際にコード入力して、動作を確認しながら読んでいくでしょう。
目からの情報だけでなく、手を動かすことで記憶に残りやすくする為の読み方です。
じっくりと読みすすめる、
多少わからなくても全体をよみとおしてから再読して不明点を埋めていく,
など、読み方について悩む必要はありません。
読み方は問題ではなく、xx 機能を xx 言語で実装するために、書籍, web 上のリソースを入手・アクセスして利用するための資金・技術をどうやって得るかが問題です。
おそらく英語を読める(すべての単語がわからなくても、大意をつかむ) 技術は、技術者にとってとても重要と思っています。
(コンパイラやアプリケーションがだす英語のエラーメッセージの大意をつかむ事も含んでいます)
投稿2015/12/06 10:30
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
入門書ではどのような機能があるかを知ることが重要だと思っています。そのため一度目は読みながら進め、二度目から横道にそれながら読んでいます。
投稿2015/12/05 09:40
総合スコア18155
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/05 13:35
0
それは勉強のスタイルというよりむしろ、参考書のレベルが質問者さんに合っていないことが問題かと思います。
どのような箇所で悩んでいるかによりますが、あまりにも悩む箇所が多かったり、書いてあることが全く理解できない場合はもっと簡単な書籍を選んだほうがいいと思います。
もし独学であれば、特定の言語を完璧に使いこなせるようになるより先に、オブジェクト指向やネットワークに関する基礎知識を付け、その後設計のセオリーを覚えるためになにかのフレームワーク(情報が多いのでrailsがお勧めです)を2〜3個、概念程度でいいので理解することをおすすめします。
私もひとつひとつの書籍を100%理解できるまで勉強しますが、それでもその言語を100%理解することはできません。
投稿2015/12/05 10:43
総合スコア30
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/05 13:22
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。