久々にCを使うことに

高木です。おはようございます。

今回、仕事で久々にCを使うことになりそうです。

最近でも少しだけならCを使う機会はあったんです。
けれども、まともにCでプログラミングすることになるのは、おそらくは一昨年の冬以来かと思います。

もしかすると、私をよく知っている人たちの間でも誤解があるかもしれません。
プログラミング言語の中で、私が最も好きなのはCですし、最も得意なのもCです。

さすがに世界で一番できるとか、日本で一番できるとはいいません。
ですが、普通の技術者が一生のうちに遭遇する中で、最もCに詳しいのが私である可能性は十分にあります。

私は他人と話すとき、過度に誇張したり、自分をPRしたりすることはしません。
それでも、Cのスキルについて聞かれることがあれば、決まって次のように答えます。

「Cについて、私に聞いてわからなければ、他の誰に聞いてもわかりません」

そのように答えながらも、私は自分の無知を知っています。
能力の限界がわかっているからこそ、もし限界を超える必要がありそうな状況になれば、事前に手を打つこともできます。

近年では、Cというと、とにかくレガシーで、面倒くさいだけの言語と考える人も多いようです。
そのように考えてしまうのは、高級言語を用いて開発しているものを、そのままCで実装しようとするからです。
つまり、そもそもの出発点からして間違っています。

CにはCに向いた分野がありますし、開発スタイルがあります。
JavaやRubyに向いた分野や開発スタイルに、そのままCを当てはめるのは無理があるのです。
逆に、Cに向いた分野や開発スタイルに、JavaやRubyをそのまま当てはめるのも無理があります。

たとえば、ハードリアルタイムシステムをJavaやRubyで扱うのは無理があります。
ローエンドのマイコンのプログラムを開発するのも然りで、JavaやRubyの処理系を載せること自体ができないでしょう。
結果、そうした開発でJavaもRubyを使おうものなら「糞」以外の何物でもありません。

また、Cに長く馴染んだ人ほどオブジェクト指向に移行しにくいといった話もよく聞きます。
これはいかにもオブジェクト指向信者らしい発想であり、オブジェクト指向は優れているが他のパラダイムは劣っていることが前提になっています。

しかし現実には、開発する分野等によって、どのようなパラダイムを採用するのが適切であるかは変わってきます。
Cのような手続き型のほうが適していることも当然あるのです。

そして、オブジェクト指向言語に長く馴染んだ人ほど、手続き型の開発に移行しにくくなるのもまた事実です。
結果、Cを「面倒くさいだけ」とか「苦行だ」とか「糞だ」といった評価になるのです。

繰り返しになりますが、CにはCに適した分野や開発スタイルがあります。
Cに非常に近い存在であるC++でも、Cの代替になり得ないケースが実際にあるのです。

今回の仕事でも、C++を選択することは可能といえば可能なのです。
それでも私はCを選択します。
Cのほうが適していることは自明だからです。

以前、プログラミング言語を指定される仕事は卒業すべきことを書いたことがあります。
今回、お仕着せでC++を選ばされることなく、自らCを選べるのは本当に幸いだと思います。