オンライン学習 2013 Q1
尊敬する mootoh さんに勧められて、僕もこの 6 週間アルゴリズムの勉強に取り組みました。錆びついたマシンガンどころか、そもそも竹槍しかもってない状態で飛び込んだにしては頑張ったほうじゃないかと思いますので、自分を褒めてあげたいと思います。
-
- Kevin Wayne and Robert Sedgewick, Princeton University
あわせて読みたい
所感
そもそもアルゴリズムとデータ構造、ちゃんと教科書で勉強したことなくて、大学の講義でチラッと聞いたのと情報処理の資格の勉強の時にかじった程度の僕に取っては、新鮮なことが多くて大変ためになりました。ちなみに、なぜかこれの直前にいきなり Ruby で B+Tree を実装してたのは何かの縁でしょうか。
2-3 Tree からの Red-Black Tree の所は結構衝撃で、こんなシンプルなアイデアでツリーのバランスがとれるのかーということにびっくりでした。学生の頃にチラッと見聞きしたときは基本的なツリーの概要だけ聞いて、あとは偉い人がバランスがよくなるやつとか考えてくれてるので実際はそれ使えばいいよ、ってだけで終わってたので、実際どうやって構成されてるのかをその偉い人から聞けて大変勉強になりました。
あと、優先キューは全く知らなかったのですが、これは色々と応用できそうで素晴らしいですね。優先キューのアプリケーションとして紹介されてたシミュレーションも、こういうやり方があるのかーとかホント感動的でした。
英語については、すごくゆっくり喋ってくれてるのでほとんど躓かなかったです。用語がわからないのがだいぶありましたが、それを調べるのもいい勉強になりました。
エクササイズは紙やエクセル(方眼紙代わり)を使いながら解きました。プログラムの課題は今までほぼ書いたことも読んだこともない Java でしたが、niw さんに教えてもらった IntelliJ をインストールしてプロジェクト作ったりするのを試行錯誤しながら書きました。最初は動くのを書くので精一杯でしたが、途中からは JUnit でテスト書いてから課題の方を書いたりできてよい勉強になりました。正直、ジェネリックって何のことかさっぱり知らなかったのですが、分かるようになりました。Java 好きです Java。
取り組み方
平日のスキマ時間で講義を聞いて、休日に残った講義とエクササイズと課題をやる感じでした。僕はダメ学生なので全然復習はできなかったので多分全然身についてはいないんだと思いますが、また人生の折をみてちゃんとやろうと思いました。
反省
プログラムの課題は動くのを作るので精一杯で全然チューニングとかできてない感じなのが悔しいです。仕様を理解するのにすでに苦労してるからなぁ。。。
フォーラムとかも(意図的に)あまり活用しなかったんですが、テストコード共有してくれてるのはいいですよね。テスト書くのも練習だと思って頑張ってなるべく自分で書いてたんですが、いかんせんテストの経験はコードの経験以上に足りてないのでどうやって書いたらいいのかさっぱり分かりませんでした。
今後
Q2 も mootoh さんの真似して Algorithm Part2 を取ってます。今回はさすがにゆっくりすぎるなと思ったので、講義は 1.5 倍速で聞いてますがちょうど良さげ。もっと Java をうまく書けるようになりたい。
あと、iTunes U で Stanford の iOS の講義が公開されているのでこれを自分のペースで進めようかなと思います。初めてやるクライアントサイドのプログラムなので授業形式がだいぶいい感じです。本を読むだけだと挫折するし、ググりながら適当なものを作ると自分のやりたいことしかやらないですからね。ただこの講義ボリュームがでかい。。。やり遂げられるだろうか。。。