オンライン学習 2013 Q1

尊敬するmootohさんに勧められて、僕もこの6週間アルゴリズムの勉強に取り組みました。錆びついたマシンガンどころか、そもそも竹槍しかもってない状態で飛び込んだにしては頑張ったほうじゃないかと思いますので、自分を褒めてあげたいと思います。

あわせて読みたい

所感

そもそもアルゴリズムとデータ構造、ちゃんと教科書で勉強したことなくて、大学の講義でチラッと聞いたのと情報処理の資格の勉強の時にかじった程度の僕に取っては、新鮮なことが多くて大変ためになりました。ちなみに、なぜかこれの直前にいきなり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の講義が公開されているのでこれを自分のペースで進めようかなと思います。初めてやるクライアントサイドのプログラムなので授業形式がだいぶいい感じです。本を読むだけだと挫折するし、ググりながら適当なものを作ると自分のやりたいことしかやらないですからね。ただこの講義ボリュームがでかい。。。やり遂げられるだろうか。。。