2年間の独学をふりかえって

2012年と2013年を独学に費やしました。
予定した2年が終ったので、試行錯誤していたやる気対策の話と、お世話になった本のリストを書いて、打ち上げにします。

やる気対策

2年分の時間と教材は確保していたので、あとはやる気をどう生成するかが問題でした。
「やらなきゃ」って気持ちは役に立たないどころか邪魔になることも多かったです。
脳という、意志だけでは制御できない他人みたいな存在に、できるだけやる気をだしていただこうと、いろいろ気を使いました。
試してみた中から、効果を感じられた習慣を挙げます。

運動する

IMG_0420
体調とやる気の相関は強く、体調を整えるためにもコンスタントに運動するように心がけてました。
歩くの好きなので、2日に1回は1時間くらいウォーキングする、みたいな感じです。
歩いてる間、血行が良くなるおかげか頭が回りやすく感じていたので、問題を解いたり考え事をする時間にしてました。あと謎にやる気が湧いてきたりするので、帰ったら何しようかワクワク計画したり。
隔週ぐらいで、遊びも兼ねて自転車での遠出もしてました。

日光を浴びる

IMG_0527
午前中、できればまだ通勤の人が多くない時間帯が一番好きで、天気の良い日はよく外に出てブラブラしてました。
原理はよく知らないけれど、日光を浴びてるとストレスが解けてく感じがします。

広いところに行く

322260_2978695467546_1325038387_o
自分の部屋で勉強してると眠くなりがちでした。
部屋にはベッドがあるのも良くないと思うのですが、そもそも狭い所だと眠くなる傾向があるように思いました。心理的なものか酸欠なのか…
プログラミングではあまり眠くならないので問題無いのですが、読書する時や数学やる時は自習室とかの広めなスペースに良く行ってました。

数値で成果を測る

topcoder-graph
頑張ったら、その頑張りで自分が成長したことを実感して次のやる気につなげたいところです。
自分が前に進んでることを感じたり、学習のやり方が間違ってないと確信するために、TopCoder(競技プログラミング)やTOEICなど能力を数値で表してくれるテストはとても頼りになりました。
数値で進捗を計りづらい学習(設計の勉強とか)も多いですが、そういうのは次に挙げる累積学習時間を成果と考えることにしました。

(自慢ですが、TopCoderの成績はこの2年で上位35%から上位3%まで伸び、その過程でやる気も自信も大きく充填されました。これ無しでは漠然とした不安感が集中の妨げになったりしたのではないかと思います。競技プログラミングの勉強法についても色々考えながらやったつもりなので、別エントリで書こうと思います。)

時間を測る/区切る

スクリーンショット 2014-01-14 7.29.57 AM
自分が頑張ったことを自分で認めて褒めてあげるために、頑張りによって単調増加する「集中して学習していた時間の累計」を記録・参照できるようにしてました。
本を読んでる間とかによく時間を測っていて、測ってる間は別に読み急いだりはしないものの、SNS見たりといった関係ないことは一切しないのをルールにしてました。
プログラミングや数学の問題を解く時は全力で急ぎました。ストップウォッチを持って、「何分何秒で解けた!」とか「30分経ったのでタイムアップ…」みたいな事を記録してました。ダラダラやればやるほどやる気がしぼんでいくのを感じたので、ダラダラできないよう何か制約をかけるのは効果的だと思います。

1日の勉強は、軽いの->重いの->楽しいの の順でやる

IMG_0850
「やればやる気が出るし、やらなければやる気が出ない」というやっかいなフィードバックに対応するために、起き抜けとか長めの休み時間の後は、軽い気持ちですぐ取り掛かれる短時間の勉強を入れてました。
簡単な問題を1問解くとか、読みやすい本を1章分読むとか、10分15分で終わるようなものです。その後何するか(あるいは何もしないか)は、15分の勉強が終わってから考えることにしてました。
加えて、一日の終わりに楽しげな勉強を入れておくことで、それを早くやりたいから重い内容の勉強を頑張って終わらせよう!というモチベーションを作りました。

お世話になった本

読んだ本のうち、良かったなと印象に残ってる本を並べてみました。基礎の幅を広げたいという方針があったので、何かの入門的な本が大半です(どれも僕には十分難しかったですが…)
一度は最後まで読んでいて、時間の記録をしていた本は、読むのにかけた時間も併記しました。

数学

論理学 31.3時間
1対1対応の演習/数学1 新訂版 (大学への数学 1対1シリーズ) 35.3時間
1対1対応の演習/数学A 新訂版 (大学への数学 1対1シリーズ) 25.4時間
1対1対応の演習/数学II 新訂版 (大学への数学 1対1シリーズ) 72.2時間
1対1対応の演習/数学B 新訂版 (大学への数学 1対1シリーズ) 30.7時間
無限論の教室 (講談社現代新書) 5.3時間
新装版 集合とはなにか―はじめて学ぶ人のために (ブルーバックス) 9.0時間
数学ガール フェルマーの最終定理 (数学ガールシリーズ 2) 4.9時間
数学ガール ゲーデルの不完全性定理 (数学ガールシリーズ 3) 7.2時間
数学ガール 乱択アルゴリズム (数学ガールシリーズ 4) 8.1時間
数学ガール ガロア理論 (数学ガールシリーズ 5) 10.2時間
高校数学でわかる線形代数―行列の基礎から固有値まで (ブルーバックス) 7.9時間
線形代数学(新装版) 79.5時間
集合と位相 (数学シリーズ)
解析入門 原書第3版
はじめての数論 原著第3版 発見と証明の大航海‐ピタゴラスの定理から楕円曲線まで
離散数学「数え上げ理論」―「おみやげの配り方」から「Nクイーン問題」まで (ブルーバックス) 19.5時間

アルゴリズム

アルゴリズムクイックリファレンス 25.4時間
プログラミングコンテストチャレンジブック [第2版] 181.3時間
Introduction to Algorithms 234.6時間
最短経路の本 レナのふしぎな数学の旅
ゲーム制作者のための物理シミュレーション 剛体編 7.2時間

プログラミング、その他

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) 7.8時間
入門git 10.6時間
すごいHaskellたのしく学ぼう! 35.8時間
Effective Java 45.2時間
Effective STL 23.1時間
パーフェクトJavaScript (PERFECT SERIES 4) 34.3時間
はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する- 25.1時間
iOS Programming: The Big Nerd Ranch Guide, Third Edition (3rd Edition) 85.3時間
初めてのRuby 12.5時間
Ruby on Rails 3 アプリケーションプログラミング 24.5時間
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道 17.5時間
30日でできる! OS自作入門
[24時間365日] サーバ/インフラを支える技術 12.4時間
プロセッサを支える技術  --果てしなくスピードを追求する世界 (WEB+DB PRESS plus)
[Web開発者のための]大規模サービス技術入門 10.9時間
Amazon Web Services クラウドデザインパターン 設計ガイド 7.9時間
アジャイルサムライ−達人開発者への道− 9.5時間
CODE COMPLETE 第2版 上
Arduinoをはじめよう 第2版 (Make:PROJECTS)
「レベルアップ」のゲームデザイン ―実戦で使えるゲーム作りのテクニック 17.8時間
ノンデザイナーズ・デザインブック [フルカラー新装増補版] 10.7時間
モバイルデザインパターン― ユーザーインタフェースのためのパターン集 8.3時間

Conclusion

楽しかったー!
感想として、やっぱり2年という時間で何か特別なことがやれる訳では無いんだなぁと思いました。4年サボった分を2年で取り返すことは出来ないです。2年は2年なり。
ですが、この2年分は今後のための基礎としてどうしても欲しかった部分でした。自信も少しついたと思います。主に「飽きずに勉強できたし、これからも続けていけそう」という点で。
この2年間に、今はとても満足してます。

これから?どうしようかな… 目下めっちゃ考え中です!