再入門のススメ

このところ普段使いの言語はC++になってきている。
STLもある程度は使えるようになってきたし、レファレンスさえあれば大丈夫……などと思っていたのだが、やはりどうも駄目だったようだ。
今日一緒にアルバイトをしている友人に演算子オーバーロードを教えてもらった。
たまにソースで見かけるoperator()というこの関数はなんだろう、と思っていたがどうやらこれは()の演算子オーバーロードさせていたらしい。
……知らなかった。
なんというか、とても恥ずかしい思いをするとともに、やはりきちんと勉強し直さなくてはいけないと強く感じた。

元々僕はアルバイトを始めた当初はPythonを使えるようにと勉強していて、プログラムを書いていく内にどうしても実行速度の事情からC++へ乗り換えた身だ。
Pythonの方ははじめてのPythonなど入門書を読んだりして比較的しっかりと勉強していたが、C++の方は習うより慣れろの経験が多かった。
とりあえずざっと初心者向けの記事を流し読みして(しかも何故かboostの)、それからemacsにflymakeを入れて気合で書いていった。
バグを直していれば必然と構文は覚えるので、「最低限これは知っとかないとそもそもプログラムが動かない」 レベルの構文はこれでなんとかなった。
そこから更にステップアップするにあたっては准教授の先生からSTLの本を貸していただいて、ライブラリの扱いを覚えていった。
「あれ、これはどう書いたらいいんだったっけ」という時はネットのライブラリないしブログを漁り、「この関数はどういう動作をしているんだろう」という時はそのSTLの本をめくるといったように使い分けている。

だがこの学習方法では言語仕様の方がさっぱり身につかなかったらしい。
そういうわけなのでこれからまたC++のサイトを巡ったり本を読んだりして身につけていこうと思う。
C++は学習コストが異常に高く、またそのハードルを何とか乗り越えたとしても一般レベルもしくはそれ以下のプログラマでしかないと聞いたことがある。(アンサイクロペディアが顕著)
STLを使うようになってからは「なんだ、そんなことないじゃないか。むしろあれやこれやが簡単にできてコーディングしやすい言語じゃないか」と思っていたが、「学習コストが高い」の本当の意味がわかりつつあるような気がする。

どれか一つの言語でもいいから早くマスターしたいと思っているけれど、その道のりはまだまだ長そうだ。