2009-12-31

C++プログラマのレベル10

レベル0

C++とかいう、Cにヘンテコな機能を付け加えた言語があることはしっているが、ワケ分からんので勉強する気にならない。

Cの何が不足なのか分からない。

レベル1

C++についてググったり、入門書を読んだりしてみる。文法はCに後から無理やり付け加えた感じだ。

でも文法がわかりにくすぎる。

レベル2

vectorとか便利すぎて涙がでる。もういちいちrealloc()を呼び出さなくてもいいんだ。でもイテレーターとかいうのが、ワケ分からんので、ポインタを使っている。

構造体の中に関数を書けるのは便利かもしれない。すくなくとも、わざわざ構造体のポインタを引数に渡さなくてもいいわけだ。

レベル3

テンプレートが分からなくて挫折中。テンプレートがわかれば、STLがもっと分かるようになる気がする。でも、いい参考書が見つからない。

継承とか仮想関数も便利だと気がつく。namespaceも地味に便利だ。

レベル4

ようやく、テンプレートについて解説している本やサイトを見つけた。

テンプレートコードの書き方を覚える。

レベル5

関数オブジェクトやイテレーターという概念を理解する。ようやくSTLをまともに使えるようになった。

先月書いた自分のC++のソースコードをみて、赤面する。

レベル6

日本語の参考書に見切りをつけて、洋書をあさる。C++ Templatesや、Template Metaprogrammingを読む。

ついに、テンプレートを完全に理解する。Dependant NameもTwo Phase LookupもArgument DeductionもSFINAEも理解する。

ADLは邪悪な機能だと気がつく。

先月書いた自分のC++のソースコードをみて、赤面する。

レベル7

メタプログラミングを理解する。覚えたばかりのメタプログラミングのテクニックや、Boostライブラリを使ってみたくて仕方がない。でも、職場がそれを許してくれない。

Boostの実装が知りたくてソースを読む。

C++の規格も、すこし読んでみる。

レベル8

仕事でBoostを遠慮なく使っても何も言われない。これはすなわち、以下のいずれかのケースを意味する。

  1. 数少ないC++を恐れることなく使う求人にうまくはまった。
  2. 高度なC++を教える仕事についた。
  3. 自分で立ち上げた会社なので、好きなコーディングルールを決められた。

レベル9

C++0xのドラフト規格を読む。C++0xのドラフト入りしている新機能について調べ始める。

C++について疑問が生じたら、まず規格を確認するようになる。

レベル10

C++界隈で自分の名前を知らない者がいない。知らない人から、「あ、先生。いつもC++でお世話になってます」と言われる。

C++WG JPのメンバーである。

レベル0xA

C++SCのメンバーである。

Bjarne Stroustrupとは、俺お前の仲である。

お断り事項

これは、C++の言語仕様を理解することに重点をおいたリストである。また、日本人限定である。C++で何か優れたソフトウェアを書いたということを意味するものではない。ただ、他のレベル10リストにインスパイアされたジョーク部分があるので、そのへんは、すこし変わっている。

C++WGに籍をおくというのは、かならずしも言語仕様を理解していることにはならない。というのも、実は、C++WGのメンバーになるために、C++の知識や経験などと言ったことはほとんど問われない。ただし、C++WGのメンバーになりたいと思った時点で、言語仕様については、それなりに理解しているはずであるし、相当の意欲があるはずだ。そうでなければ、C++WGの会議は苦痛でしかないだろう。

6 comments:

Anonymous said...

レベル8について。
Windowsのパッケージソフトを作ってますが、boostは最新版を追跡してます。
私の職場では、ここ数年で、STL化boost化を急激に進めています。
技術的な詳細について理解しきれているわけではありませんが、
使わないと損である、というか、早めに手を付けて置かないとこれはなにかヤバイぞ!、と判断できる程度には聡明であったようです。

というわけで、却ってレベル7までがハードル高いのではないかとw

江添亮 said...

その部分は、schemeプログラマのレベル10がネタなのです。
書きなおそうかなぁ。

Anonymous said...

10と0xAは同じなのでは

江添亮 said...

あとで聞いたら、C++WGも、標準化委員会と名乗っても問題ないらしくて、まあ同じです。

redboltz said...

ん?10進数のレベル10と、16進数の0xAが、数値的に同じでは?
というコメントかと思いましたが。

江添亮 said...

ええ、ですから、C++WGとC++SCのレベルは同じといってもいいのです。