連載:熱血VBプログラマ応援団


第10回 初めて触れるプログラミングをVBで

―― Visual Basic 2005 Express Editionによって切り開かれる古くて新しい可能性 ――

株式会社ピーデー 川俣 晶
2004/08/04
 

− 今回のご相談 −

 はじめまして。私はVBプログラマですが、最初に触れたプログラミング言語もVBでした。1990年代前半のVBブームのときにVisual Basic 2.0に触れて、プログラミングの面白さに目覚めました。最初はプログラムのことなど何も知らなかったのですが、マウスでフォーム上にコントロールを並べて、プロパティを少し変更するだけで、自分でもプログラムを作ることができ、感動したのを覚えています。あの当時、VBがブームだったのは、きっとわたしと同じように感動した人が多かったのだと思います。

 私にVBに触れるように進めてくれた師匠は、1980年代のマイコン・ブームのとき、最初に触れたプログラミング言語がBASICだったそうです。その当時もBASICがブームで、BASICを学んでいる仲間が多かったそうです。

 なぜこんな話を書いたのかというと、最近は、VBを勉強している若い人が少ないように思えるからです。話を聞くと、Javaを勉強したという人が多いように感じられます。もし、あなたがおっしゃるとおり、VBが取り組む価値がある言語だとしても、若者たちが取り組まないとすれば、VBプログラマ人口が先細りになってしまうのではないかと思うのです。もし、少数派の年配者しか使わないプログラミング言語になってしまうと、あまり胸を張って使えなくなってしまうのではと危ぐしていますが、どう思いますか?

V10-4-10-10 より

初めて触れるプログラミング言語

 初めてプログラミングに触れるのはドキドキする体験ですね。コンピュータがあまりに身近になったいま、物心ついたときからパソコンがあって当たり前の若者たちが同じようにドキドキするかは分かりません。しかし、自分が最初に書いたプログラムが、意図したとおりに動作したときの感動は、時代を超えて共有される何かがあると思います。

 さて、残念ながら私が最初に触れたプログラミング言語は、インテル8080(Pentium 4の遠い祖先に当たる8bit CPU)のマシン語だったので、初めてがBASICというわけではありません。

 しかし、初めてBASICに触れたときの鮮烈な印象はよく残っています。具体的に、どこで、どんな機種を相手にしたときかは正確には覚えていませんが、恐らく場所は秋葉原あたりの専門店かショールーム。当時、パソコンは非常に珍しく、しかも高価なものでした。子どもが所有するのは困難で、店頭の展示品を、店員に怒られないかと心配しながら触れるしか手がないような状況でした。そこで、パソコン雑誌で仕入れた知識を使って、恐る恐る、「PRINT 1+2」というようにタイプしてリターン・キーを押してみたら、「3」という数字が出てきた(Visual Basic .NETではコマンド・ウィンドウのイミディエイト・モードで「? 1+2」「リターン」と入力することに相当)、恐らくは、そんな経験だったと記憶しています。

 なぜ、この程度のことで感動ができたのか――まず、自分が入力していない「3」という数字が出てきたことが新鮮な衝撃です。何かを入力し、それに対する答えが出てくる、ということは対話が成立したことを意味します。

 ほかのたいていの機械には、対話が成立したと思える瞬間はありません。たいていの機械は、何かの操作を行っても、あらかじめ決められた単純なリアクションしか行いません。しかし、パソコンのリアクションは単純ではありません。コンピュータは、自分で答えを作り出してそれを返してくるある種のインテリジェンスを備えた存在です。このような単純なプログラムとすらいえないような操作でも、数式を複雑高度なものにすれば、とっさに結果を予測できない数値をいくらでも返してくることができます。つまり、ほかの多くの機械からは得られない「対話」している感じがBASICパソコンからは得られたのです。

 そしてもう1つ。「3」という数字は、こちらが入力した「1+2」という式の計算結果です。これは、コンピュータに対して命令を送り、それをコンピュータが実行したことを意味します。「3」という数字を見た瞬間、コンピュータが自分のしもべとなり、命令に従ってくれたことが実感されたのです。

 このような感動は、どんなプログラミング言語を使っても得られるというものではありません。例えば、当時BASICと並んでよく使われたマシン語でプログラムを作成する場合、無味乾燥な文字の羅列であるソース・コードをコーディング用紙に書き、命令表を見ながらそれを16進数に置き換え、そして、それをコンピュータに入力してから実行する必要がありました。簡単なプログラムでも数十分は必要とします。

 しかし、「PRINT 1+2」とタイプして「3」という結果を見るには、キーボード入力に慣れていないとしても1分もかからないでしょう。このような短い時間であれば、コンピュータと対話しているという感じと、コンピュータが自分の命令に従ったという強い印象を残すことができたのです。しかし、それが数十分もかかっては、対話したというよりも、コンピュータが要求する手順を強制されたという印象しか残りませんでした。両者の印象には、かなりの隔たりがあったような気がします。

ビジュアルを通して得るVB体験

 VBの初体験にも、鮮烈なものがありました。英語版のVisual Basic 1.0だったと思いますが、フォーム上にラベルやボタンを貼り付けるだけでフォームが完成し、ちょこちょことわずかなコードを書き足すだけでプログラムが動きだす世界は鮮烈な印象がありました。

 それまでのWindowsプログラミングといえば、C言語とWindows APIを組み合わせて、複雑な呪文のような文字列の山と格闘するものでした。C言語のソース・ファイル、リソース・ファイル、リンカ用のモジュール定義ファイルなど、複数の異なる文法を持つファイルをすべて正しく記述し、複数のコマンドを実行させて初めて実行可能なファイルを手に入れることができたのです。それと比較して、VBがもたらした手軽さは、衝撃的なほどでした。

 このようなVBがブームになるのは必然だったといえるでしょう。そして、このような経験を、初めてのプログラミング体験とした多くの人たちが、その後もずっとVBプログラマであり続けようとしているのは当然のことといえるでしょう。

素早いフィードバックの重要性

 初めてのBASIC、初めてのVB、この2つの事例には1つの共通する特徴があります。それは、極めて迅速なフィードバックが得られているということです。つまり、わずかな操作を行っただけで、それに対するリアクションが得られたということです。例えば、初期のBASICでは、「PRINT 1+2」「リターン」と、わずか10のキーを叩くだけでリアクションが戻ってきています。VBの場合でも、フォームをデザインするビジュアル操作と、わずかな文字入力で簡単なプログラムが完成しています。

 このような素早いフィードバックは、右も左も分からない初めての体験では重要な役割を果たすと思います。初めてプログラミングを体験しようとしている人は、たとえ本から得た知識があるとしても、感覚的には何がどうなっているのか分からず、戸惑っていると思います。戸惑いを解消するには、意図したとおりの結果という形で、「君は正しいプログラミングを行ったのだ」という合図を受け取ることが必要です。戸惑いが解消されれば、力強く次のステップに踏み出すことができます。

 それだけではありません。素早いフィードバックは、コンピュータと対話しているという雰囲気を生み出しやすいといえます。フィードバックが遅いと、教科書に書かれたとおりの命令を入力すると、教科書に書かれたとおりの結果が出てくるということを確認するだけで精いっぱいかもしれません。しかし、フィードバックが素早ければ、ちょっと違うことを入れてみたらどうなるだろうか、と試す余裕が生まれます。

 例えば、教科書に「PRINT 1+2」と書いてあったとしても、それじゃ「1+3」ならどうなるのだろうか、という疑問をすぐに試すことができます。それに対して返ってくる答えは、教科書には書いていない、あなた自身の問いに対する答えとなります。これは、教科書とは関係なく、あなたとコンピュータの間に発生した対話です。こうした対話がスタートすると、試行錯誤しながら豊富なさまざまな経験を積んでいくことが容易になります。つまり、実体験に裏打ちされて上達が早くなるということです。

 VBを含めBASIC系のプログラミング言語は、伝統的にこのような素早いフィードバックを特徴としているといえます。これは、最初に教育用という目的で生まれた伝統を、意識的にか無意識的にかは分かりませんが、受け継いでいるということだと思います。その点で、最初からプロが使用する業務用として生まれたほかのプログラミング言語とは明らかに性質が異なります。

 例えば、プログラミング初体験に多いプログラミング言語として、かつてはFORTRANが、いまはJavaが多いと聞きますが、どちらも最初からプロが使用する業務用のプログラミング言語として生まれたものです。それらに取り組むことは、BASIC系のプログラミング言語に取り組むことと、恐らく体験の質が違うでしょう。

 もちろん、理屈の上では、VBと同等の使い勝手を持ちながら、プログラミング言語としてはJavaを採用している開発ソフトはあり得るでしょう。しかし、VBの対抗馬と目される統合開発環境の多くは、たくさんの複雑高度な機能を与えられた代償として、VBほど素早くストレートなフィードバックは得られない印象を受けます。

文字を経由しないプログラミング

 もう1つ、BASIC系言語の中でも特にVBが重要だと考える理由は、フィードバックの素早さのほかに、対話の性質の違い、という特徴があるためです。

 例えば、1980年代のBASICは、「PRINT 1+2」というような、知らない人には意味不明の呪文を使って対話しました。VBにも同じように呪文はありますが、呪文の役割は1980年代のBASICほど大きなものではありません。1980年代のBASICでは、プログラムはもとより、開発環境の操作まで含めて、すべて呪文によって実現されました。

 しかし、VBではまずビジュアルなフォームのデザイナを使い、呪文抜きでフォームのデザインが出来上がります。VBの呪文は、ビジュアルなデザイナでは指定できない機能を実現したいときになって初めて登場します。しかも、多くの場合、それほど長い呪文を書き連ねる必要はなく、最低限の短い呪文を書き込むだけで足りるのです。

 非常に不正確な用語を使って説明するなら、文字を並べた呪文を使用することは論理的なプログラミングであり、ビジュアルなデザイナでコントロールを並べていくことは直感的なプログラミングといえます。論理的なプログラミングは、自分が実現したいものを、一度呪文に組み直す必要があります。間接的な呪文を経由すると、操作と結果の関係が分かりにくくなります。

 例えば、コントロールの幅を変更したいとします。呪文を使ってこれを実現する場合は、Widthプロパティに幅を示す数値を代入することになりますが、どんな数値を入れれば意図した幅になるか、直感的には分かりません。サイズを数値で把握したり、どんな単位系が設定されているか調べたりしなければなりません。しかし、ビジュアルなデザイナでマウスを使ってサイズを調整すれば、直感的に見たままのサイズを容易に指定することができます。

 もちろん、これは直感的なプログラミングの方が常に優れているという話ではありません。大量のコントロールの幅を一律に変更する場合などは、すべてマウスで指定するよりも、それを実行するプログラムを論理的に記述した方が楽に済みます。しかし、右も左も分からない初心者には、結果が直感的に分かりにくい論理的なプログラミングに取り組むよりも、具体的な動作を見て理解しながら作業を進める方が、「より素早く納得」できるのではないか、と思うわけです。

 BASIC系言語の中でも、特にVBにはこの「より素早く納得」することができる特徴があるのではないかと思います。それによって、「分かった」「面白い」といった感想を持つことができれば、もっと知りたいという気持ちも起こり、学習の効率も上がることでしょう。こういう気持ちの問題は、論理的な正しさとは別の次元で、重要な意味があると思います。

いまこそExpressでドキドキする初体験の復権を

 このように初めて体験するプログラミング言語としてのVBには価値があると思っていますが、残念ながらここ最近は、そのような目的のためにVBを勧めにくい時期が続いていました。

 それはVBの大ブームの結果として、VBが本格的業務用ソフトの開発ソフトへの進化を続け、結果的に初めて使う人には大掛かりでありすぎる環境に進化してしまったためです。バージョン2.0あたりまでは、コンパクトで初心者にも扱いやすいプログラミング言語だったと思いますが、バージョン6.0やVisual Basic .NETを初心者に安心して勧められるかというと、ややためらいがあります。

 しかし、かつての伝統に復活の兆しが見られます。VBの次バージョンである「Visual Basic 2005」に、「Visual Basic 2005 Express Edition」という、特に初心者向けのバージョンが加わるという発表がなされています。そして、そのベータ1がすでに無償で公開されています(Express Edition ベータ1については「マイクロソフトの次世代開発環境VS 2005を体験するを参照」)。

 筆者もこの新しいVBを軽く使ってみました。昔を思い出して、ボタンをクリックすると「ぐー」「ちょき」「ぱー」のどれか1つを乱数で選んで表示するというプログラムを作成してみました。

Visual Basic 2005 Express Editionベータ1での開発画面

 このプログラムのソース・コードはこんな感じです。

Public Class Form1
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim 乱数 As Single = Rnd()
    If 乱数 < 0.3 Then
      Label1.Text = "ぐー"
    ElseIf 乱数 < 0.6 Then
      Label1.Text = "ちょき"
    Else
      Label1.Text = "ぱー"
    End If
  End Sub
End Class

 このソース・コードを見ると実は確率が均一ではないことが分かると思いますが、ま、それはよいでしょう。変数名に日本語が使えるところなどは、明らかに昔のBASICに比べて進化した部分です。論理的なプログラミングの分かりやすさもアップすることでしょう。

 さて、これぐらいなら5分ほどであっという間に完成してしまいましたが、なかなか楽しい体験でした。本格的なVB(現行のVisual Basic .NET)の「迷うほど数が多かった」機能が整理され、すっきりと見通しがよくなっています。しかし、素早いフィードバックが得られる直感的な使い勝手は完全に再現されています。これを使えば、質の高い直感的な体験が得られると思います。まさに、これこそが、初心者に勧めるべき最初のプログラミング言語の有力な候補になる、という印象を受けました。

 頑張れVBプログラマ予備軍、君たちが将来使うであろうVisual Basic 2005 Express Editionは取り組む価値のある可能性に満ちたプログラミング・ツールだ!End of Article

インデックス・ページヘ  「熱血VBプログラマ応援団」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH