ちょっとひと言
VB6 とナックルボールの技術
2 年前、Visual Basic 6 の現役期間の驚くべき長さについてコラムを書きました (msdn.microsoft.com/magazine/jj133828)。このコラムは、今まで執筆してきた中で最も多くのコメントが寄せられました。最近確認したところ 145 件でしたが、今回のコラムを書いている今もコメントが書き込まれています。とても強い感情に触れたのは確かです。
私はよく Visual Basic 6 (VB6) の生命力を不思議に思います。昔、私の生徒が、VB6 を Windows エコシステムに巣くう「なかなか退治できないゴキブリ」と言いました。そのため、17 年のキャリアを誇る大好きなレッドソックスのナックボール ピッチャーについて、ボストンのスポーツ アナウンサーが「大災害の後、生き残るのはゴキブリとティム・ウェイクフィールドだけだろう」とコメントしたのを聞いてピンときました。VB6 はナックルボールに似ているのです。
ナックルボールはメジャー リーグ屈指の変化球の 1 つです。ボールが速くてバッターが空振りする速球と違って、ナックルボールは球速が遅く、空中でふらふらと不規則な動きをしてバッターを戸惑わせます。ピッチャーが爪を立ててボールを握り、弾くように指を前に突き出して投げる無回転のボールです (ja.wikipedia.org/wiki/ナックルボール 参照)。投球モーションは他の投球よりも腕への負担が大幅に少ないため、ナックルボールを習得した数少ないピッチャーは、剛速球投手よりも長い間活躍します。VB6 もこれと同じく、単純でプログラマが感じるストレスが少ないため、結果としてキャリアが長くなります。
似ているのはそれだけではありません。多くの (おそらくほとんどの) 剛速球投手は、ナックルボールをスポーツマンらしくないボールで、「真のピッチャー」にはふさわしくない曲芸のような投球だと考えています。最初の VB6 コラムに寄せられた「VB6 なんておもちゃだ。本物のプログラミング言語じゃない。VB6 を使うのは本物のプログラマとは言えない」というコメントを見ると、IT の現場にも同じような考えがあることがわかります。私も C++ COM に夢中だった時期は同じことを言っていましたが、今は反省しています。
大きなプロジェクトを VB6 だけで完成できることはめったにありません。VB6 では、C++ をそのまま使って操作するよりもはるかに簡単に多くのプログラミング操作が可能になりますが、一部の操作 (バックグラウンド スレッドなど) は本質的に不可能です。私の VB6 開発の経験則ではいつも、「10 分でできなければ、それは不可能」と考えるようにしていました。私は VB6 開発チームに、Visual Basic では不可能ないくつかの操作を実現するために、COM オブジェクトを記述する C++ プログラマが 1 人必要だ、といつもアドバイスしています。
同様に、ナックルボール ピッチャーは、特にランナーが 3 塁にいてキャッチャーがパスボールしたら点が入る場面では、バッターが投球を深読みするように 20% は速球を投げる必要があります。多くのキャッチャーは、捕球が難しいナックルボールに苦労します (ブリュワーズのキャッチャーボブ・ユッカーは「ナックルボールをキャッチする方法は、回転が止まるまで待ってから拾うことだ」という名言を残しています)。
VB6 プログラマを目指してコンピューター サイエンスを専攻した人には会ったことがありません。知り合いの VB6 プログラマのほとんどは、別の分野の専門家としてスタートし、問題領域知識のコンピューター処理を開始する最も簡単な方法として Visual Basic を学んでいます。同様に、ナックルボールからキャリアをスタートしたピッチャーもほとんどいません。ブロガーの Peter Duffy によると、多くのナックルボーラーは、型にはまったピッチャーのようなプレイができなくなり、「自暴自棄になって、生涯の夢の残がいを引き揚げるように」、ナックルボールを投げ始めるそうです (bit.ly/1lazWvS (英語) 参照)。
ナックルボールが決まれば打てません。しかし、ピッチャーの爪が滑ってナックルが変化しなければ終わりです。バッターの前にゆっくりと投げられたボールは、場外ホームランになります。VB6 も機能すれば活躍します。しかし、深刻なエラーが発生する (“0x80014005 — 不明なエラー”) と、内部が分からない分デバッグは困難です。
ナックルボールの ピッチャーと VB6 のプログラマにはもう 1 つ重要な共通点があります。それは、団結心です。ドキュメンタリー映画『Knuckle-ball!』(bit.ly/1jfv5JU、英語) は、現役メジャー リーガーで唯一のナックルボーラー R.A. デイッキーのコーチを務めるティム・ウェイクフィールドを支援する引退したナックルボーラー (ジム・バウトン、チャーリー・ハフ、フィル・ニークロ) の姿を映しています。彼らによる支援が功を奏し、デイッキーは 2012 年にナショナル リーグで最も活躍したピッチャーとして、サイ ヤング賞を獲得しました。今度はデイッキーが、今年のメジャー リーグ入りを目指してレッドソックスの AAA に所属するナックルボーラーのスティーブン・ライトをコーチしています。VB6 コミュニティでも、今ではマイクロソフトによる働きかけがないにもかかわらず、このような協調関係が見られます。
最近、器具の制御用プログラムを書く必要がある科学者に .NET プログラミングを教えました。最大限努力しましたが、Windows Presentation Foundation、モデル - ビュー - ビューモデル (MVVM: Model-View-ViewModel)、および Microsoft .NET Framework の複雑さのために、彼ら科学者の意識は学問から大きくそれることになりました。.NET 開発用のシンプルなツールがあればいいのにと、私も彼らも思っています。ナックルボールの投げ方を教えてあげたいものです。
David S. Platt は、ハーバード大学の公開講座や世界中の会社で .NET のプログラミングの講師をしています。『Why Software Sucks...and What You Can Do About It』(Addison-Wesley Professional、2006 年) や『Microsoft .NET テクノロジ ガイド』(日経BPソフトプレス、2001 年) などの、11 冊のプログラミング関連の書籍の著者でもあります。2002 年には、マイクロソフトから Software Legend に指名されました。David は、8 進法で数える方法を学べるように、娘の 2 本の指をテープで留めるかどうか悩んでいるところです。連絡先は rollthunder.com (英語) です。