(0:10) 今日もまた美術館で時間をつぶしてしまった。
オーディオブックなどを聞きながらとはいえ、時間をだいぶ使ってしまった。
今日もプログラミングのアルバイト。
もうすぐ1週間になる。
昨日エンバグしたところを printf で突き止めて修正。
今回は、デバッガに頼らない方針でいったのでそこまで時間を取られずにすんだ。
原始的だ。
基本的に C++03 で書いている。
現実は厳しい。
テンプレートの型名を死ぬほど書きまくらないといけない。
(もうちょっと typedef するべきだろうか)
それにしても、ぼくにはどうしても C++ が人間向きの言語であるようには思えない。
いくら C++11 で auto や foreach やちゃんとしたスマートポインタ(やっと!!)に標準で対応したといっても、それらを使いこなすにはそれらがなくてもプログラムが(書こうと思えば)書けるぐらいの知識が必要になる。
そうでなければ、とても危なっかしくて使えない。
そうすると、ぼくぐらいの「100人に1人の普通のプログラマ」以上じゃないと使えないということになってしまう。
頭の良さというか、脳内でどれだけイメージを思い浮かべられるかというところに依存するからだ。
K電社にいたころ、正規表現を使うと楽に実装できそうなところがあって、当時の tr1 の regex を使ったのだが、あれは本当にひどい体験だった。
何とか書いたのはいいが、ぼく以外の誰にもメンテナンスできないものになってしまった。
コードの汚さの問題ではなく、難しさの問題で。
たとえば、regex_search を使って何かを書いたとする。
そうすると、それを読む人は regex_search についてネットで調べるかもしれない。
それで出てくるのが、次のようなページだ。
C-strings (1)
template <class charT, class traits>
bool regex_search (const charT* s, const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
strings (2)
template <class ST, class SA, char charT, class traits>
bool regex_search (const basic_string<charT,ST,SA>& s,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
ranges (3)
template <class BidirectionalIterator, class charT, class traits>
bool regex_search (BidirectionalIterator first, BidirectionalIterator last,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
with match_results (4,5,6)
template <class charT, class Alloc, class traits>
bool regex_search (const charT* s, match_results<const charT*, Alloc>& m,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
template <class ST, class SA, class Alloc, class charT, class traits>
bool regex_search (const basic_string<charT,ST,SA>& s,
match_results<typename basic_string<charT,ST,SA>::const_iterator,Alloc>& m,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
template <class BidirectionalIterator, class Alloc, class charT, class traits>
bool regex_search (BidirectionalIterator first, BidirectionalIterator last,
match_results<BidirectionalIterator, Alloc>& m,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
99%のプログラマは、これを見ただけで考えることをやめてしまう。
そして、よくわからないまま適当に雰囲気で直すことになる。
しかし、C++ にアクティブに関わるような人間は、1万人にひとりの頭のおかしい人間だ。
彼らは仲間内で、「C++ってわけわかんないよね〜(でもそれを理解している自分ってすごいよね〜)」とキャッキャウフフしている(ように見える)。
現状の C++ が下々の人間に理解できないということが、真剣に受け止められることは少ない。
そういうわけで、ぼくは C++ を不幸な言語だと思っている。
Java はそのへんがだいぶ違う。
凡人にもだいぶ書きやすくなっている。
しかし、レガシーな環境でバイナリにコンパイルしてオーバーヘッドなしに動かそうと思うと、現状では C++ しか選択肢がない。
不幸だ。
まあ、そのおかげでアルバイトができているんだけど…。
明日はハローワークに行く。
次の就職先のメドは立っているんだけど、メドはどこまでいってもメドでしかない。
突然はしごを外されるかもしれない。
前の K電社の件で、人間を信用してはいけないことを痛感したので、万が一就職先がダメになった場合に3か月後に失業保険の給付が受けられるように行っておかないといけない。
アルバイトはできなくなるが、しかたがない。