Rをもっと勉強したいなと思って、『R言語徹底解説』を買ってみました。・・・が、ちんぷんかんぷん。クラスとか、オブジェクト指向とか、遅延評価とか、さっぱりわかりません。
これはいかんと思い、ここ2ヶ月ほど、プログラムを基礎から勉強していました。以下、手をだした言語と、役に立った書籍です。他にもいろいろ買ったのですが、自分の中で「これいい!」と思ったものだけ挙げています。
まずC言語から
最初は、『新・明解C言語入門』をひたすら書き写しました。1冊終わった次点では、これが何の役に立つんだろう?と思っていましたが、このあとC++に進んだときに、「基本は一緒だ」と気づいたので理解が一気に進みました。
他にも何冊か手をだしましたが、結局、これが一番分かりやすかったと思います。
ここまで1ヶ月くらい。
C++に手をだす
まず『やさしいC++』をやりました。例が淡白すぎて、あまり面白くはなかったのですが、Cから入ったためか中盤くらいまではすぐに理解できました。
次に手をだしたのが、”beginning c++ game programming”。英語ですが、「なぜこうするのか」「なぜクラスが必要なのか」といったあたりをコードで丁寧に説明してくれていて分かりやすかったように思います。
このとき、手元に『基礎からしっかり学ぶC++の教科書』を置いて、よくわからないところを補完していました。
この辺から、だんだんRのコードの書き方が変わってきました。うまく言えないのですが、「同じことを繰り返さない」「その言語っぽさを意識して書く」ということができるようになってきた気がします。
ここで勉強をはじめて2ヶ月くらい経っていました。
pythonを復習してみる
ここで久しぶりに『みんなのpython』を手に取ってみました。
で、読み始めた瞬間に「なにこれめっちゃわかりやすい!」「pythonすげー」って感動している自分がいました。前に読んだときは「オブジェクト指向とかクラスとか何言ってんだ?」って感じだったのに。
「初心者にはpython」という方もいますが、私はC++を勉強しないとpythonの良さがわからなかったので、人によるのだろうと思います。
ふたたびR言語・・・の前にhaskell
ここで再び『R言語徹底解説』を読んでみると、だいぶわかるようになっていました。クラスとか、オブジェクト指向とか出てきてもビビらない程度には・・・ですが。
ただ「遅延評価」「すべてが関数」といったあたりがイマイチわかりません。これはたぶん関数型言語も勉強しなければならないのでしょうね。
というわけで今はhaskellです。
正直、かなり難しくて、ぜんぜん進みません。ただ、haskellはおもしろい。C言語やpythonとはぜんぜん違った哲学があるように感じます。歩みは非常にゆっくりですが、もう少し勉強してみたいところです。
結論
他の言語を勉強したことで、Rのコードの書き方が変わった気がします(グローバル変数が怖いなんて前はぜんぜん考えていませんでした)。それと、これまで意味がわからなかったRの書籍の表現(クラスとか遅延評価とか)が何となくわかるようになりました。
正直、もっと若いうちに勉強しておくべきだったと思うのですが、後悔しても仕方がありませんよね。コツコツこれからも勉強していきます。
追記
私はふだんからLinuxを使っているので、環境構築はかなり楽でした。apt-getやyumで必要なものがあっさり揃うのは便利です。文字コードもあまり悩まなくていいですし。
Windowsではどうやるんだろう?と思って調べてみると、いろいろ面倒くさそうだったので、プログラムを勉強するときはLinuxのほうがいいような気がします。