「これからプログラミングを始めたいのですが,どのプログラミング言語/ツールがいいですか?」----筆者が所属する日経ソフトウエア編集部では,こんな質問を受けることが少なからずある。

 こうした質問に対しては,まずVisual Basic(VB)を薦めてみる,というのが一般的かつ無難な対応だろう。筆者自身は普段C/C++言語を使うことのほうが多いのだが,それでも質問者が迷っている場合にはとりあえずVBを薦めることにしている。ほかのどの言語よりも敷居が低いというのがその理由だ。

 VBは,短期間でプログラミングを覚えられるという点で右に出るもののないツールである。参考書を買ってきて最初の数十ページも読めば,GUI(グラフィカル・ユーザー・インタフェース)画面を備えた簡単なアプリケーションを作れるようになる。

 またその参考書も,ほかの言語と比べて圧倒的に数が多いので,自分にあったものを見つけられる可能性が高い。言語仕様があまり細かいことを意識しなくても済むようになっているのも,初めてプログラミングをする人には大きなメリットだ。

 これがC/C++の場合,ウィンドウを一つ表示するだけのプログラムを組めるようになるまでの道程があまりにも長い。そこに至るまでに,「Cの文法書」「C++の文法書」「Windows APIやMFC(Microsoft Foundation Classes)の解説書」と何冊もの参考書を読破しなくてはならない。「とりあえずプログラミングなるものをやってみよう」といった軽い気持ちで挑戦してみても,途中で投げ出してしまうのがオチである。

まずはVisual Basicを奨めるが・・・

 しかし,5年,10年といった長い目で見た場合に,VBでプログラミングを始めるのが果たしてよいことなのか,という点については少々疑問を感じている。理由は,よく言われる「Visual Basicがオブジェクト指向言語でないから」ではなく,もっと基本的(低レベル)なものだ。

 VBはとっつきやすさを優先したためか,言語仕様を厳密に意識せずにコードを書いても,プログラマが意図した通りに動作するようになっている。そのために,ほかの言語を使っていれば自然と身に付くはずの基本的な概念や「言語仕様にしたがってものを考える」といった姿勢が,VBではおろそかになりやすい。

 例えば,変数の型や暗黙の型変換,符号拡張,変数の寿命といった概念は,すべてとは言わないまでも,多くのプログラミング言語に共通する基本的なものである。C/C++やJavaなどである程度プログラミングをしてきた人なら,当然こうした知識を習得しているはずだ。これらの言語では,誤ったコードを書けばまともに動かないので,プログラマはプログラミング言語の基本を骨身にしみて覚えることになる。

 ところが,VBでは,こうした点をいいかげんに扱っても,とりあえず動作することが多い。例えば,現在のVBは変数の値に応じて自動的に型変換を実行する機能を備えている。このため,整数型の変数に“1234”といった文字列を代入しても,自動的に型を変換してくれる。

 「日時を表すDate型変数に浮動小数点数の1.0を代入する」といった,どう見てもバグとしか思えないコードを書いてもエラーにはならない。VBが「1.0」を「1899年12月31日午前0時」と解釈する仕様になっているからだ。関数リファレンスに引数や戻り値の型がまったく記載されていない,などというのはC/C++やJavaプログラマには信じられないことかもしれないが,それでも困ることがないのがVBである。

 割り算の扱いもそうした例の一つだ。C/C++やJavaで「double a = 1 / 2;」と書いた場合,変数aの値はプログラマの意図に反して0になる。これらの言語のプログラマなら,「除算演算子(/)は二つのオペランドがともに整数型の場合は整数を返すんだったな」と考えて,整数型定数の1や2をdouble型の1.0,2.0に書き直すはず。

 ところがVBでは,整数型同士の除算(/)の結果がDouble型になるので,1 / 2は意図した通り0.5になる。このため,2項演算子がオペランドの型によって異なる型を返すということを意識しないまま,何年もプログラムを組み続けるような人もいる。

 VBはこうしたことを意識する必要がないのだから,あえて学ぶ必要はない,という意見もあるだろう。別の言語を使う際に,必要になったらそのときに覚えればよいというわけだ。しかし一般にプログラマは,最初に覚えた言語をベースにものを考える傾向があることを忘れてはならない。VBのこうした仕様は,ほかの言語を学ぶ際にむしろ障害となる可能性すらある。教育用として見た場合,不適切なコードを記述したときは,そのことをプログラマに知らせるような仕様のほうが望ましいのではないだろうか。

何よりも学ぶ姿勢が重要

 企業の新人研修に目を向ければ,最近多いのはJavaである。また大学の情報教育でもJavaを教えるケースが増えていると聞く。その背景には,現場でJavaを使う機会が増加していることがあり,またオブジェクト指向を学ばせたいという意図もあるだろう。

 10年先を考えたとき,Javaがその時点でも使われている保証はないし,ひょっとするとオブジェクト指向も別のパラダイムにとって代わられているかもしれない。しかし,たとえそうなったとしても,Javaを通じて身に付けた知識は,VBでコントロールを操作する方法よりも必ず役に立つはずだ。

 もちろん,Javaを学ぶにしても,単にどう書けば動くかを覚えるだけでは,VBの場合と変わらない。逆に,こうしたことを意識して学ぶのであれば,使用する言語が何であってもかまわないとも言えるだろう。VBの次期バージョンでは,ここで述べた型の扱いなどが変更される予定である。1年後には筆者の意見も変わっているかもしれない。

 要は,どの言語を学ぶかよりも,それをどう学ぶかのほうが大切であるということなのだ。

(山本 哲史=日経ソフトウエア)