2012年と2013年を独学に費やしました。
予定した2年が終ったので、試行錯誤していたやる気対策の話と、お世話になった本のリストを書いて、打ち上げにします。
やる気対策
2年分の時間と教材は確保していたので、あとはやる気をどう生成するかが問題でした。
「やらなきゃ」って気持ちは役に立たないどころか邪魔になることも多かったです。
脳という、意志だけでは制御できない他人みたいな存在に、できるだけやる気をだしていただこうと、いろいろ気を使いました。
試してみた中から、効果を感じられた習慣を挙げます。
運動する
体調とやる気の相関は強く、体調を整えるためにもコンスタントに運動するように心がけてました。
歩くの好きなので、2日に1回は1時間くらいウォーキングする、みたいな感じです。
歩いてる間、血行が良くなるおかげか頭が回りやすく感じていたので、問題を解いたり考え事をする時間にしてました。あと謎にやる気が湧いてきたりするので、帰ったら何しようかワクワク計画したり。
隔週ぐらいで、遊びも兼ねて自転車での遠出もしてました。
日光を浴びる
午前中、できればまだ通勤の人が多くない時間帯が一番好きで、天気の良い日はよく外に出てブラブラしてました。
原理はよく知らないけれど、日光を浴びてるとストレスが解けてく感じがします。
広いところに行く
自分の部屋で勉強してると眠くなりがちでした。
部屋にはベッドがあるのも良くないと思うのですが、そもそも狭い所だと眠くなる傾向があるように思いました。心理的なものか酸欠なのか…
プログラミングではあまり眠くならないので問題無いのですが、読書する時や数学やる時は自習室とかの広めなスペースに良く行ってました。
数値で成果を測る
頑張ったら、その頑張りで自分が成長したことを実感して次のやる気につなげたいところです。
自分が前に進んでることを感じたり、学習のやり方が間違ってないと確信するために、TopCoder(競技プログラミング)やTOEICなど能力を数値で表してくれるテストはとても頼りになりました。
数値で進捗を計りづらい学習(設計の勉強とか)も多いですが、そういうのは次に挙げる累積学習時間を成果と考えることにしました。
(自慢ですが、TopCoderの成績はこの2年で上位35%から上位3%まで伸び、その過程でやる気も自信も大きく充填されました。これ無しでは漠然とした不安感が集中の妨げになったりしたのではないかと思います。競技プログラミングの勉強法についても色々考えながらやったつもりなので、別エントリで書こうと思います。)
時間を測る/区切る
自分が頑張ったことを自分で認めて褒めてあげるために、頑張りによって単調増加する「集中して学習していた時間の累計」を記録・参照できるようにしてました。
本を読んでる間とかによく時間を測っていて、測ってる間は別に読み急いだりはしないものの、SNS見たりといった関係ないことは一切しないのをルールにしてました。
プログラミングや数学の問題を解く時は全力で急ぎました。ストップウォッチを持って、「何分何秒で解けた!」とか「30分経ったのでタイムアップ…」みたいな事を記録してました。ダラダラやればやるほどやる気がしぼんでいくのを感じたので、ダラダラできないよう何か制約をかけるのは効果的だと思います。
1日の勉強は、軽いの->重いの->楽しいの の順でやる
「やればやる気が出るし、やらなければやる気が出ない」というやっかいなフィードバックに対応するために、起き抜けとか長めの休み時間の後は、軽い気持ちですぐ取り掛かれる短時間の勉強を入れてました。
簡単な問題を1問解くとか、読みやすい本を1章分読むとか、10分15分で終わるようなものです。その後何するか(あるいは何もしないか)は、15分の勉強が終わってから考えることにしてました。
加えて、一日の終わりに楽しげな勉強を入れておくことで、それを早くやりたいから重い内容の勉強を頑張って終わらせよう!というモチベーションを作りました。
お世話になった本
読んだ本のうち、良かったなと印象に残ってる本を並べてみました。基礎の幅を広げたいという方針があったので、何かの入門的な本が大半です(どれも僕には十分難しかったですが…)
一度は最後まで読んでいて、時間の記録をしていた本は、読むのにかけた時間も併記しました。
数学
アルゴリズム
アルゴリズムクイックリファレンス | 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年間に、今はとても満足してます。
これから?どうしようかな… 目下めっちゃ考え中です!
素敵なエントリー!
うれしいです。ありがとうございます!
私も時間を記録して見える化することに大きな価値を感じている一人です。
起業準備中なので、何かコラボできると嬉しいです!
半年前に退職し、独学で勉強に専念中です。
「やる気対策」に試行錯誤していたところ、偶然こちらにたどり着きました。元気が出ました!ありがとうございます。
すごいです!!
素晴らしいです。私はふきーにょさんのファンです。勉強のモチベーションが下がったときは、その都度このエントリを見て、勇気をいただいています。お時間があるときで結構ですので、競技プログラミングの勉強法についても、ご教示いただけますでしょうか。よろしくお願いします。