筆者は「日経ソフトウエア」というプログラミング雑誌で記事の執筆と編集をしている。先日,C言語にターゲットを絞った特集を企画・担当した。記事は無事校了し,今はこの特集を収録した2008年11月号が書店に並んでいる。

 C言語の特集を企画した理由はただ一つ,C言語を学ぶことによって,プログラミングに関するより深い知見を得られると強く感じたからだ。筆者自身,C言語に不案内で苦手意識を感じていたので,その思いは余計に大きかった。同時に,だからこそ,筆者同様にC言語の経験が比較的少ない人,そしてこれからC言語を学ぼうという人に役に立つ特集に仕立てられるのではという気持ちもあった。

 日経ソフトウエアとしては,C言語にターゲットを絞った特集をここ3年ほど掲載していなかった。その間にアプリケーション・ソフトウエアの大きな流れとしては,デスクトップ・アプリケーションからWebアプリケーションへの比重が高まり,ソフトウエア開発者の関心が高いプログラミング言語もPHPやRuby,JavaScriptといった,Webアプリケーションと関係が深い言語に移り変わっていった。C言語の特集を企画するにも,3年前とは状況は大きく異なっており,一見するとC言語の重要性は低下しているように感じられるかもしれない。それでもC言語の特集を掲載すべきという思いは変わらなかった。

C言語は時代遅れか?

 弊誌がITproと共同で実施した「プログラミング/プログラマに関するアンケート」からもわかるように,C言語は現在もかなりの人気を博している。LinuxをはじめとするUNIX系OS用のアプリケーションの多くはC言語で記述されているし,組み込み機器のプログラムやデバイス・ドライバなどもC言語で記述されているものは数多い。

 ただし,これらの事実だけでは,「だからプログラミングに関する知識を深めるには,C言語の習得が必要だ」ということにはならない。パソコンで動作するプログラムを作る言語としては,ほかにも様々な選択肢がある。JavaもCOBOLに置き換わる恰好で業務系プログラムに広く使われているし,前述したようにWebアプリケーションではPerlやPHP,Rubyといったスクリプト言語が重宝されている。こうしたことからパソコンで使えるアプリケーションを作るためのプログラミング言語としてはC言語は時代遅れになりつつあるようにも見える。

 それでも,C言語の特集を企画したのは,C言語の初歩に加えて「ポインタを用いたメモリー領域へのアクセス」および「メモリー領域の確保と解放」についてわかりやすく解説できれば,多くのプログラマの役に立つと確信していたからだ。

 ポインタを用いたメモリー領域へのアクセスやメモリー領域の確保と解放は,C言語を学ぶ人の多くがつまずくところである。特集を編集しているときは,できる限り丁寧にわかりやすく解説するように努めた。そうすることで,「プログラムがメモリーを使う方法を理解できる」,より広く言い換えれば,プログラム(ソフトウエア)とパソコンのリソース(ハードウエア)の関係に関する知識を身に付けることができる。これは,C言語を使う必要に迫られたプログラマだけでなく,より多くのプログラマのスキルアップにつながるのではないだろうか。こうした意味で,C言語の知識は時代遅れではなく,多くのプログラマにとって普遍性を持つように感じる。

C言語を通して初めて見えるもの

 ご存じの方も多いと思うが,JavaやC#,Rubyなど,現在人気のプログラミング言語は,プログラマがメモリー管理(プログラムが必要とするメモリー領域へのアクセスや領域の確保,解放)を強く意識しなくてもすむよう,メモリー管理機構を自動化している。確かにこれらの言語でプログラムを作るときは面倒が減って,比較的簡単にプログラムを作れる。

 一方,C言語ではメモリー領域の確保,解放はプログラマの責任となる。ポインタ操作を誤ると,実行時エラーが発生してプログラムが止まることもある。C言語ではプログラマはプログラムとメモリー空間の関係をきちんと理解したうえで,メモリーの操作については細心の注意を払わなければならない。

 その分,手間がかかるのは事実だが,プログラミングについて詳しく学んでいくためには,プログラムがハードディスクからやネットワーク経由でメモリー空間に読み出されて,実行されるという基本はもとより,プログラムがメモリー空間にどのようにアクセスし,メモリー領域をどのように消費するのかということも覚えておきたい。

 もちろん,プログラムとメモリーの関係を理解しなくても,プログラムは作れる。しかし,この点を押さえておかないと,必要以上にメモリーを消費するプログラムを作ってしまったり,動作が遅いプログラムを作ってしまうことがあり得る。

 繰り返しになるが,C言語を学べば,プログラマがメモリー空間を利用する方法を実際に学べ,体で覚えることができる。オブジェクト指向言語では,メモリーの使用法が多少異なるが,それでも,C言語を通して学んだ基本は役に立つはずだ。そして,メモリー空間を有効に活用できれば,メモリー消費量が少なく,高速に動作するプログラムも作れる。逆に言えば,C言語以降に登場した,より手軽に使えるプログラミング言語だけを使っていたのでは,メモリーを上手に利用する方法が身に付きにくいのだ。

第二,第三の言語でもいい

 パソコンやサーバーで動作するプログラムをC言語で作成する機会は,以前よりも減ってきているかもしれない。手軽に使えるプログラミング言語の種類が増え,アプリケーションの形態も多様化している現在,より簡単にプログラムを作成できる言語でプログラミングを始めるのもよいだろう。そのうえでC言語を学び,ポインタやメモリー管理に関する知識を深めることで,プログラマとしての守備範囲が広がるのではないだろうか。特集を終えた今,筆者は,ちょっと極論かもしれないが,「C言語はプログラマがたしなむべき教養になったのではないか」と考えている。