プログラミング学習を効率化するための情報整理の方法

# 1. はじめに
どうも、プログラミング初心者です。**只今、絶賛絶望中**です。

プログラミング学習をするにあたり、以下のようなことを思案します。

「思ったより前に進まない」「なぜなら学ぶことは膨大だから。しかも聞けば3年前に学んだ知識が陳腐化するくらい技術の進歩は早いらしい」「どこまで学べばいいの！！！！？」「自分は今どこにいるの！？何を学習してるの！？！？」「この技術はどの分野の技術！？この言葉はどの分野の言葉！？」「この技術のメリットは？どう使うの！？」

錯乱に次ぐ錯乱。精神異常、自暴自棄、圧倒的興奮状態。金切り声を上げて今日も夜道を這い回る。狂気。

モルヒネがほしい。モルヒネを寄越せ。身体を狂気に支配されたこの俺様を止めてくれ。



とこのような状況です。help me。

IT業界に足を踏み入れたはいいが、上記のような思案をしながら日々勉強をしています。そして、やっていくうちに**「膨大な技術情報をなんとなくこういう風に仕分けたら見やすいんじゃね？」**ということに気づいてしまいました。たった今、私は蓮舫を超越し、現神人へと進化を遂げたのです。民衆よ、崇め奉れ。

この記事は「初心者」や「私と同じ脱初心者したいが伸び悩む人」に向けた、**情報の整理の仕方についての一つの答えを提示する記事**となっております。いざ刮目。

# 2. 情報の整理とは「コンパスと地図を持つこと」である。

タイトルの通りです。**情報の整理とは「コンパスと地図を持つこと」である。**

なんだ、コンパスって。なんだ地図って。

まずはこの記事における「コンパスと地図」とは何か？を示します。

先ほど「情報の整理の仕方についての一つの答えを提示する」と発言した通り、この記事は、皆さんの頭の中の**「情報の整理」**を目的とした内容となっております。

そして先ほどの

>「思ったより前に進まない」「なぜなら学ぶことは膨大だから。しかも聞けば3年前に学んだ知識が陳腐化するくらい技術の進歩は早いらしい」「どこまで学べばいいの！！！！？」「自分は今どこにいるの！？何を学習してるの！？！？」「この技術はどの分野の技術！？この言葉はどの分野の言葉！？」「この技術のメリットは？どう使うの！？」

の発言は

**①「学ぶことが膨大故に、自分が今どの地点にいて、何を学習しているのかが分かっていない。」「具体的には学習する技術や言葉はどこの分野の技術や言葉なのかが分かっていない。曖昧。」**

**②「技術のメリット、活用方法」**


といった内容に仕分けすることができます。**「情報の整理をしたいが、学ぶことが膨大故に、自分が今どの地点にいて、何を学習しているのかが分かっていない。」**というのが現在の状況です。

その問題点を解決するための方法として「コンパスと地図を持とう」という解決方法を提示しました。コンパスと地図さえあれば**「情報の整理をすることで自分が今どの地点にいて、何を学習しているのかを理解すること」**ができるのです。(メリット)
つまり、**「コンパスと地図」とは「情報の整理をすることができるため、自分が今どの地点にいて、何を学習しているのかを理解できる考え方の概念」**のことを指します。（定義）

砕けた言い方をすると、**学習をする際にはわかりやすいロードマップが必要！**だということです。

昔、高校の数学の先生が数Ⅱの単元を始める際にこのようなことを言っていました。
「まずは目次を見なさい。自分がどの分野のどの勉強をしているのか。受験というゴールに行くためにどんな敵を倒せばいいのかという全体像をまずは把握すること。そうなれば闇雲に受動的に勉強することがなくなり、前進している感覚を得ることができ、モチベーションが保つことができるし、頭の中の地図がどんどん埋まっていくのが分かり勉強がどんどん楽しくなる。」

**プログラミングも同じではないでしょうか。**

プログラミングに魅せられた天才を除き、大多数の人間はプログラミングに対するモチベーションを24時間保つことができないと思います。そして、膨大な専門用語や英単語の羅列をただの記号と受け取りがちな初心者は特にその魅力に気づくのが遅くなりがちです。

そんなモチベーションを24時間保つことができない凡才、ないしは才能のない人間、ないしはプログラミング初心者がそれでも前に進みたいと思う時には、**ただ闇雲に世界を歩くのではなく、情報を整理するために「コンパスと地図」を持つことが重要**なのではないでしょうか。

次に、情報を整理するための**「コンパスと地図」**を使った情報整理の具体例を紹介していきます。

# 3. 全体俯瞰図
この項では「コンパスと地図」を使った情報整理の具体例を紹介します。

内容は

①情報技術の全体俯瞰図(大見出し)の提示
②情報技術の全体俯瞰図(中見出し)の提示
③上記を使った実務面での情報整理の方法

となっております。

これから行うことを簡単にいうと、「目次を作って自分だけの辞書を作ろう」ということです。

イメージで表すと以下の画像のようなものを作ります。

![https___qiita-image-store.s3.amazonaws.com_0_7465_cbc50a23-db31-8cde-21eb-b5c20365bdca.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270132/b80c0e1f-f6db-3178-3537-ee04dfe5a738.jpeg)
![IMG_4552.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270132/4de8dbda-5492-0fd1-c3cd-a28047386020.jpeg)
![bft_infra05_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270132/58947347-0f1d-0d8d-b3ef-e26788c679f0.png)
![challenge-for-statups-cto-from-big-company-nagaaki-hoshi-19-638.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270132/079e209e-b8f2-9ce1-2764-d52bbbe7da60.jpeg)


## 3.1 情報技術の全体俯瞰図(大見出し)
まずは情報技術の全体俯瞰図(大見出し)の提示をします。

[情報技術の全体俯瞰図](https://ja.wikipedia.org/wiki/基本情報技術者試験)

このURLは基本情報技術者試験のWikipediaです。その中の**「出題範囲」**の見出しが、我々が今後学んでいく**情報技術の目次**であり、

>「学ぶことが膨大故に、自分が今どの地点にいて、何を学習しているのかが分かっていない。」「具体的には学習する技術や言葉はどこの分野の技術や言葉なのかが分かっていない。曖昧。」

という葛藤・疑問に対する**大まかなアンサー**となっております。



## 3.2 情報技術の全体俯瞰図の詳細(中見出し)
3.1では、情報技術の全体俯瞰図の目次を作りました。


ですが、先ほど作った目次はあくまで目次の中でも**大見出し**にすぎません。法律でいうと、憲法、教育法、社会法、民事法、刑事法といった大雑把な分け方にすぎないのです。3.1の要領で今度は民事法でいうところの民事訴訟法、仲裁法、民事執行法、民事保全法といった**中見出し小見出し**を作っていかなければなりません。

3.2では[上記のURL](https://ja.wikipedia.org/wiki/基本情報技術者試験)の基礎理論>アルゴリズムとプログラミング>プログラム言語の見出しから派生させ、RubyとRailsの情報技術の全体俯瞰図を[@jnchito](https://qiita.com/jnchito/items/063e332cbe3023f52f93)氏の記事を参考にして作っていきましょう。


##Ruby言語

**オブジェクト指向プログラミング**
クラス＆モジュール
属性＆メソッド
継承＆ミックスイン

**関数型プログラミング**
ブロック
Proc＆ラムダ

**フロー制御**
順次処理
条件分岐
繰り返し

**REPL(対話型評価環境)＆デバッグ**

**メタプログラミング**



**Ruby gems**
RVM＆rbenv
Gem
ファイル構成
オープンソースのエチケット
Bundler＆依存関係の管理


##Railsフレームワーク

**MVC**
Assetパイプライン＆プリプロセッサ
UJS（jquery-ujs）
パフォーマンス
監視
キャッシュ＆ページネーション
バックグラウンドタスク

**REST**
ルーティング
API
JSON＆XML
ハイパーメディア
ネストしたリソース＆ネームスペース

**ORM（オブジェクト・リレーショナル・マッピング）**
リレーショナルなスキーマ
マイグレーション
正規化
外部キー
インデックス
ドキュメント・ストア（ドキュメントデータベース）
関連
依存関係
イーガーローディング（Eager loading）
バリデーション＆コールバック

**ユーザー管理**
認可
認証
マルチテナント機能

**規約＆ベストプラクティス**
I18n（国際化）＆タイムゾーン
ActiveSupport
セキュリティ＆デフォルト設定

**CLI（キャラクタユーザインタフェース）**
Railsコンソール
Railsジェネレータ
Rakeタスク




これをすることによって、プログラミング言語におけるどの技術要素を学習しているのかを俯瞰してみることができます。

したがって、

>「学ぶことが膨大故に、自分が今どの地点にいて、何を学習しているのかが分かっていない。」「具体的には学習する技術や言葉はどこの分野の技術や言葉なのかが分かっていない。曖昧」

という悩みを解決することができます。

そして、小見出しでもおそらく情報の粒度は大きい方なので、
https://gihyo.jp/book/2017/978-4-7741-8883-6
https://www.amazon.co.jp/dp/toc/4774193976/ref=dp_toc?_encoding=UTF8&n=465392
などの書籍を使用して、細かい粒度の全体俯瞰図を実務を通して埋めていきましょう。



## 3.3 上記の全体俯瞰図を使った実務面での情報整理の方法

3.2では、民事法でいうところの民事訴訟法、仲裁法、民事執行法、民事保全法といった中見出し小見出しを作りました。最後に民事訴訟法でいうところの第5条125項のような詳細を作る方法について記載していきます。


全体俯瞰図は「大量の情報を整理することで、自分が今いる位置を理解したり、一度やったことを忘れない」ために作成しています。そのため、実務面では逆引き辞典的な使い方をしたいです。

具体的な情報整理の手順については

①　勉強中、わからない技術用語やサービス、エラーメッセージなどを調べる

②　調べたら技術情報と記事のURLをメモ帳などに貼り付けましょう。

の手順で情報整理をします。

そして、

具体的な整理の仕方については以下のように行います。

**ORM, DB系**
**[Rails]カラム名を変更したい**
https://qiita.com/libertyu/items/93acd8733e34b1d0a63c
**[Rails]シードを作る**
https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-sample_users
https://teratail.com/questions/73713
**[Rails]マイグレーションファイルを削除する**
https://qiita.com/tanaka-t/items/cd6aa0526725e88f5024
.
.
.

これは、「マイグレーションファイルを削除したい！」という悩みに対して、その悩みを解決したURLを貼り付けるという形で整理しています。

これを行うメリットとして

**「以前同じ内容・エラーをやったけど、どのWebページを参照にしたか思い出せない」となった際の時間ロスを防ぐことができる点**と、

**全体俯瞰図に情報が蓄積していくため、長期的な技術習得において心理的安心感を養うことができる点**

が挙げられます。

(2020/07/26追記)
この記事の方法を用いて、RailsTutorialの内容を情報整理しました。
[RailsTutorialチートシート](https://qiita.com/zizynonno/items/45d84489fb300afc06d0)

# 4 まとめ

これで全体図を使った、日常的な情報の整理方法についての話を終わりにします。

まとめますと、

**「自分が今どの地点にいて、何を学習しているのかを把握できていること」が業務効率化において重要な要素の一つである。しかし、従来の場合だと「情報の整理をしたいが、学ぶことが膨大故に、自分が今どの地点にいて、何を学習しているのかが分かっていない。」状態だった。**



**自分だけの「コンパスと地図」を持つことで情報の整理が可能になった。具体的な方法として、基本情報のWikipediaの大見出しや、Ruby学習者であればRubyやRailsの中見出しをメモ帳に貼り付け、自分だけの辞書の目次を作ること。これが「情報の整理&学習における技術の立ち位置の把握」の方法として非常に重要である。**

**業務をする中で具体的な疑問とそれを解決した記事を目次以下に貼り付けることによって、自分だけの逆引き辞典を作る。これにより、一度やった内容をもう一度一から調べ直す時間ロスを防ぎ、長期的な技術習得において心理的安心感を養うことができる。**

という内容になりました。

これでモルヒネを週8で打たずに済みます。それでは次回、決闘者編でお会いしましょう。さようなら。