せめて普通のC/C++プログラマに

某社で作られた某C++プログラムのデバッグを引き受け、そのコードがあまりにヘタレていて修正不可能と結論、非常な短期間で作り直すことになり突貫工事を実施、ようやく終了した。

ここで得た、というか再確認した教訓。

「バカはC/C++を触るな」

いや、C/C++に限った話ではないのだが、こいつらについては特に気をつけねばダメだ。Cは危険だが、C++はもっと危険だ。やれることが多すぎるゆえ、素人は混乱しまくって、ろくなコードを残さない。シビアなメモリ管理が要求されるこの言語で堅牢なプログラムを書くためには、相応の勉強をして、文法と構造と文化を飲み込み、そのうえ入念に設計をしてかからねばならない。さもなくば、保守で死にそうになる。さらに悪いことは、腐ったコードを書く使えない奴はそのうち他所に飛ばされ、俺みたいな普通のプログラマにその死にそうになる保守作業が回ってくることだ!

これまで何度かC/C++で書かれたコードの保守を請け負ったことがあるが、マトモなプログラムが出てきたことはないし、マトモな環境が構築されていたこともあまり無い(ま、だから保守を依頼されるわけなんだが)。こうしたソースや環境は、ろくに勉強せずに現状に満足している、ザブリスカのフォンテマ並みの知能しかないカスの手によるものだろう。また、それがそのままこちらに来ると言うことは、内部でソースレビューも行っていないということだ。社員教育、品質向上、当然行うべきこれらの努力を怠っている。その組織もソース書いたカス共々消えて無くなれ。

少なくとも、UNIXでのC/C++開発でMakefileを書かないプログラマなど信用するに値しない。毎回フルコンパイルしろとでもいうのか。それでは効率が低すぎて作業が進まない。ただC/C++の文法を理解していることと、実際に開発できることはまったく違うレベルである。当然ながら、C/C++プログラマを名乗ってよいのは後者のレベルに到達した人間だけだ。

C/C++を使用する人間は勉強することだ。UNIXならばcc(gcc/g++), make, gdb(dbx), lint(splint), そしてviかemacsをおさえる。WindowsならVisual StudioC++ Builderを徹底的に使い込む。CUIに抵抗がなければBorland C++ Compilerを使ってもよい。そして、K&Rに出てくる演習を全て解けるようになった上で、Effective C++とかCプログラミング診断室プログラミング作法といった中級者向けの技術書を隅から隅まで読み込む。名高いC FAQも目を通しておくべきである。C++を使う者は、これに加えてオブジェクト指向を理解するために追加の学習が必要だ。STLも忘れてはいけない(書き方はもちろんだが、むしろ使いどころを知るのだ)。そして、もちろんプログラムをかきまくる。書いたプログラムはCVSSubversionで管理することが望ましい。実際の開発現場では必ずこの手のツールを使う(使わない?勇気あるね。無謀ともいうけど)から、いい練習と習慣付けになる。

ここまでやって、ようやく「普通のC/C++プログラマ」の仲間入りである。上級プログラマになろうと思えば、このうえで多様な経験を積まねばならない。環境にもよるが、automakeとautoconf、各種プロファイリングツールなど、追加で使えたほうがよいツールもたくさんでてくる。これはC/C++に限らないが、数学知識もあったほうが良い。ゆえに、絶えず学習を続けていかねばならない。

少なくとも、「普通のC/C++プログラマ」になるための努力も怠るようならば、この言語を触ってはいけない。というか、プログラミングを生業としてはいけない。努力はしているが、どうしても上達しない、そういう奴も可哀想だが別の仕事を探してくれ。頑張ってます、という言い訳が通用するのは小中学校の運動会までだ。勉強することも頭を使うことも不向きな人間でも、プログラミングセンスが無い人間でも、行くとこにいけば活躍できるだろう。別にこの仕事にこだわることもあるまい。もっと自分が幸せになれるところに行ってくれ。というか迷惑だから消えろ。

こんなことを偉そうに書く俺は、目下Javaプログラマと化しているため、上記したことの、そうだな、80%ぐらいしか満たしてないな。足りない20%は勇気Javaによる開発経験で得たオブジェクト指向知識とテクニック、および昔勉強して錆付きつつあるC/C++知識で補っている。ひとつ言語を抑えておけば、あとは応用が効くものである。

・・・たくさん書いたら、いくらかスッキリした。今回の仕事で得た俺の利益は、上級エンジニアと一緒に仕事して新たなテクニックを学んだ点と、C++の文法を思い出した点、そして設計を頭から実施して新たな経験を積んだ点(突貫工事であろうとも、最低限の設計はすべし)、この3点である。しかし、投入した時間と労力にまったく見合わない。やはりこの手のつまらん仕事がきたら拒否するのが得策のようだ。