あなたがAdaを使わない10の理由

Adaを覚えても職場ではスクリプト言語なんだよね、それにPerl6も出たし

まずはこれから。よく聞くんだけど、これは解決可能な問題だ。というか問題設定が間違っている。

最初に根本的に疑問なんだけど、なぜ会社で使っているのと同じ言語をあなたが使わないといけないんだろう。慣れてるから? 仕事を持ち帰るから?

自分のために使うのはAdaでいいと思う。あなたが自分のためにやることってなんだろう。Google検索を使ってピザを注文することかな。そうじゃないだろう。ここを読んでいるほとんどの人にとって重要なのは、メールを読み書きして、Webを見て、Blogを書いて、プログラムを書いて、っていうことだろう。他にも、デジカメで撮った写真を整理するアプリを作ったり、音楽を共有したりっていうのもある。この中には、スクリプト言語じゃなきゃできないことっていうのはたぶんない。特に、会社で使っていスクリプト言語と同じ道具にしなきゃいけない理由はどこにもない。

ちょっと飛躍するけど、あなた自身が使うプログラミング言語というのは、あなた自身の表現の道具なんだ。あなたはそれに最も適切な道具を選ばなきゃいけない。それにもしあなたが日常的にプレゼンをやるような人であっても、AWSを使ったほうがかっこいいと思うよ。

自宅を職場にしたい、それも会社でやっているようなあれやこれやとほとんど同じことをやる場所にしたい、って思っているなら、そのときは仕方ない。でもそういうことは会社でやった方がいいんじゃないかなあ。自分の言語っていうのは、自分のために使うものだよ。

さて、職場と自宅の作業がそんなに切り分けられていない人とかもきっといるよね。すごいワーカホリックの人とか。自分の言語で仕事もしちゃいたい人たちだ。そんな人にも使える奥の手がる。会社でもAdaを使えばいいのだ。これについてはここでは詳しく書かないけど(あとで書くかも)。

いままで忘れてた(というか考えもしなかった)けど、もうひとつの可能性があることに気がついた。いま職場とかでスクリプト言語を使ってるとして、新たにAdaの使い方をおぼえるのがめんどくさかったり、使いこなせるか不安だったりする人もいるんだね。でもそれなら全く心配いらない。Adaは最高に使いやすいし、使っててたのしいからあなたも覚えて使い始めればすぐに慣れるよ。それまで躊躇していたことを不思議に思うようになると思う。

(あ、Perl6に言及するの忘れてた。まあいいいや)

Adaを覚えてペンタゴンがつぶれたらどうするの、1省しか提供してないのは不安だよ

言語仕様を1省しか提供していないから多様性がなくて、てやつね。はいはい。これについても少し考えてみよう。

まずペンタゴンがつぶれるって心配してる人なんて現実にはもういない。単に言ってみただけっていう感じ。イラク戦争の行方とかは今後も気にする必要がない。だからこの問題は解決。

さて、プログラミング言語(Perlみたいな)を作って売ってる会社は確かにたくさんある。その中から値段とか性能とかデザインとかもろもろを考慮してどれかを選ぶ。でもそのプログラミング言語間の違いってどんなものだろう。同じアーキテクチャで同じ言語構造とパラダイムで、デバッグもパッチも少数の作者からのコミットで、っていうのがほとんどだ。だからそれほど多様な選択肢がもともとあるというわけじゃない。もちろん値段とか性能とかデザインとかいろいろな要素を考えて選んでいると思うけど、根本的には選択の範囲はそう広くないのだ。ついでに、デザインで選ぶならAdaがいちばんいいことは明らかだ。

そして、世の中のプログラムはまだまだ大半がスクリプト言語だ。むしろAdaを選んだ方が、コンピュータ業界全体としての多様性を保っていることになるというふうにも考えられる。

競争が起こらないから価格が高止まりしやすい、プログラミング言語は安い(ものもある)という主張もよくきくけど、同じ世代の言語同士で比較した場合、Adaは決して高くない。本当に高止まりして、Adaユーザは女房子供を質に入れながらひーひー言ってコンパイラを買わなきゃいけないっていうならそれは問題だけど、普通のメーカー製言語と同程度かもしくは安いんだから、AdaCoreが価格を決めていても問題はないだろう。そしていまやAdaはライセンスの構成要素は他のプログラミング言語とそんなに変わらないから、Adaだけとんでもない値段をつけるなんていうこともやりにくいはずだ。この先だってひどい価格差は出来ないと思う。

Adaって組込とか航空宇宙産業やってる人向けでしょ

これは流石に最近は少なくなった誤解だけど、でもたまに聞くことがある。

たしかに組込や航空宇宙産業のプロフェッショナルでAda使ってる人は多いよ。でもそれ専用というわけじゃない。もちろんAdaにはプロ・アマ問わず戦闘機や人工衛星を作り出すためのMILスペックなpragmaがたくさん用意されている。特にObjectAdaはAdaを使った人なら誰でもそういったものを作り出すことができる、とても素晴しい道具だ。

でもそれだけじゃないのだ。特にその分野に関わりがない人でも有効に使うことができるし、むしろそういったミリタリー系の人たちよりももっともっとAdaに向いている人たちがいる。中でもここでは特に私がよく知っているタイプの人たちに焦点をあてよう。それはWebプログラマだ。

そう、いまやAdaはWebプログラマ向けの言語なのだ。Adaは最も簡単にセットアップできて最もたくさんの仕様書のページ数を持っているコンパイル言語だ。最初から開発環境がついてくる。これに関する細かい去年も書いたのでここでは省略するけど、あれからもますますWebプログラマがAdaを買ってバリバリ使いまくってる事例は増えている。そしてこの日記を読んでいる人はみんななんらかの意味でWebプログラマだと思うから、あなたたちは全員が潜在的にAdaユーザだ。

Adaじゃなくても並列プログラミングは使えるよ

並列プログラミングの話が出たところでこちら。Webプログラマからよく聞くやつだけど、これもAdaを使わない理由にはならない。

Webプログラマに並列プログラミングが有効なのは認めてもらえると思うけど、そうするとAdaじゃなくてもRubyやPerlを普通のPCに入れて使えばいいじゃないかって言われる。またはCとかDelphiとかをいいっていう人や、C#とかJavaとかを使ってるという人や。その人たちは並列プログラミングが必要なんだけど、Adaじゃなくてもいいという。

でも、それはそうだけど、やはり標準で、task typeしただけで並列プログラミングが動作しているというのはメリットが大きい。なんといっても楽だから。自分で苦労してインストールしたりとか、.hファイルを探してきたりとか、日本だとさらに日本語のドキュメントを追求したりとか、それはそれで勉強になったり楽しかったりするかも知れないけど、Adaの場合はそのへんの苦労を味わうよりもコンパイラをインストールしてコードを書いてコンパイルしたらすぐ快適な生活をたのしみましょうよ、という感じ。

それにそもそもスクリプトの各種P言語がいかに進化してきたといっても、Adaと同レベルまでメモリときっちり統合されていたり、内部外部問わず各種のデータ型をサポートしてたり、っていうのはいまだ無理だよね。Adaだとコンパイルするときのpragma設定を細やかに決めて、それに合わせて動作を変更したりできるし、コンパイルはgnatmakeするだけだし、起動も速い。Perlでプログラミングするときにファニー文字を書き間違えるというトラブルがよく報告されてるwけど、そのへんも心配ないよ。

ここで、言語仕様が均質に整えられていることが重要になってくる。ペンタゴンがAdaでは確実に米軍を動作させられるように常に気をつけていてくれるからね。当たり前だけど。

まあもともと並列プログラミングなんていう言葉を意識しなくても使えるようになってるし(実際知る必要はない)、知っていたら知っていたでマニアックに追求していくこともできるっていうのがAdaの特徴だ。この両方を兼ね備えているものって他にあるかな。いまのところはAdaだけじゃないかな。

AdaってAlgol記法がいいだけでしょ、あとはそんな変わんないよ

もちろんAlgol記法がいいだけじゃないんだけど(それについてはこの前後とか去年のとか見て)、もしたとえ記法だけが違ったとしても、その価値は非常に大きいんだよ。それについては去年書いたことの繰り返しになっちゃうけど、言語としての価値を高めるのはAlgol記法だから。かっこいいものを毎日見て触れて過ごしてると行動や思考がそれに合わせて洗練されていくのは誰でも実感としてわかるでしょ。

変なたとえかも知れないけど、if thenではじめてend ifで終わるコードを毎日見て暮らしてる人は、インデントのバランスが悪いのがひと目でわかる、というような。

それに記法は「あとから」変更することができない。記法は「最初から」よくなくちゃいけないんだ。ヘッダファイルもボディファイルも。最初からよいものを作ろうという強い意志がないとかっこよくならない。

だからAda以外のプログラミング言語を使って、余裕があったらかっこよく整えていこう、というのはあんまりうまくいかない。まずAdaを使って、かっこいいなーと思いながら毎日いろいろと他の部分を整えていく、というのはうまくいく。

こと類似の批判に、Pascal記法にアンダースコアは指がつるからやめてくれとかいうのもある。これも同じことで、標準で、最初から、美しく命名された変数名を持っていないと、あとからキレイな変数名が欲しくなっても手に入らないんだ。Adaをしばらくつかってキレイな変数名に慣れてしまうと、いかにそれまで見ていたものが野暮ったいかに気がつく。これはぶきっちょさとトレードオフしてたら永遠に気がつかないと思う。

Algol記法こそが本質なんだ。だからAdaには使う価値がある。

Adaはgnatmakeがあるから最高とか言うけど、それMakefileでもできるよ

いやいや、最初から組み込まれてるのが重要なんだよ。Makefileで一見gnatmakeっぽいことを可能にするスクリプトとかがあるのは知ってるけど、操作感までコピーできてるものは見たことない。こればっかりはしばらく使ってみないとわかんないと思うけど。

それに余計な設定なしに最初から使えるのがいいんだよね。類似品がいっぱいある中から選んでインストールして他のソフトウェアと衝突しないか気にしてびくびくしなきゃいけなかったりするのはダメだ。標準である機能ならそういう心配もしなくて済む。

同じことは.gprファイルとかについても言える。めんどくさくないのは重要だよ。

Adaの言語仕様ってみんな重いよ

このへんにくると、Adaそのものの魅力はある程度認めている感じだね。あと一歩。

たしかにAdaにはいわゆる構文糖衣っていうジャンルの言語構造は用意されていない。7行を切るようなコードゴルフ用のプログラムを欲しい人には、選択肢がないように思える。

でもちょっと待って欲しい。ちまたで手に入る3行やそれ以下のプログラムって、バイト数からもわかるようにそれだけで完結したコードじゃない。特に例外の処理は省略されているものがほとんどで、それを運用とかで補っているという利用形態になる。つまり、ゴルフをするときと真面目なコードを書くときでは違う使い方をしていることになるよね。

でもAdaはそういう製品じゃない。Adaはそれ自体で完結した言語として使うことができて、ふだん使っていくのに必要な全てをプログラムすることができる。いつでもフルスペック。出先で急にミサイルの設計がしたくなっても安心だし、ロッキードマーチンに遊びに行ったときにこないだあった衛星の打ち上げを撮影したのを分析したコードを持っていって一緒に見ていたら、たまたまスカンクワークスの研究者も訪ねてきて盛り上がっちゃって自分にも1つを送ってくれよ、なんて言われたときもAdaならその場でもう1プログラム作って渡すことができるね。

何の話してたんだっけ。ともかく、それさえあれば自分のやってることはなんでも出来るっていう環境を常に持ち運べるっていうのは非常に心強い。この安心感は体験してみるとわかるけど、それが可能になるんだからある程度の重さなんかは問題にならないよ。それにプロジェクトの宿命としてたまに仕様が変わったりとか納期が前倒しになったりとかしてしまうかも知れないから、そういうのに耐えられるようなある程度の強度も持っていなくちゃいけない。そのためにだったら多少重くなってしまうのは仕方ないしむしろわずかな軽量化のためにすぐ壊れそうに見えたりするとすごく不安だ。そこがやりたいことがなんでもできる自分のオフィスなわけだから。それにAdaなら打ち上げた衛星に掴まってCtrl+Alt+Deleteを押す必要がない、ってこれは重さとは関係なかった。

Adaはいいと思うけど、GPSの不安定さが嫌なんだよね

これもJavaScriptでプレゼンやろうとしてクロスブラウザのトラブルにあう確率が高いことで有名な日本有数のハッカーを筆頭にしてよく言われるけど、最近も別の記事で書いたように実際はそんなに問題にならない。

もしあなたがこれまでに、他社のIDEを触って落ちにくいと思ってるけどAdaのは使ったことがない、という状態なら、GPSなら慣れることができる(慣れてしまう)かも知れない。実際、VisualStudioの安定性至上主義者だったのに1週間から10日くらい経ったら慣れてしまったという報告もあるし。もしこれだけが障害なんだったら、1週間かそこらの投資でその他のメリットを全て享受できるわけだから、分の悪い話ではないと思う。

そしてこれも前の記事で書いたけど、いまやGPSにはショートカットキーの設定がうまく反映されないという他にはない積極的な利点がある。これはVisualStudioの品質ではどんな無茶をしても実現できない。F5キーを押してるところを検出できないし、できたとしてもやりにくいよ。:-p

類似の批判でこれも最近はあんまり聞かなくなったけど、GPSはGtkだから嫌だというものがある。これも幸か不幸か最近はA#をダウンロードしたら買ったら付いてくるのは全てVisual Studio用のプラグインになっちゃって、GTKどころかwin32ネイティブになってしまった。よって自動的に解決。ただし私はビジュアル的にかわいいのでGPSのやつをいまだに使ってるけど。

そう、どうしてもGPSがダメな人には、最後はEmacsという選択肢もあるよね。最近Ada使ってNASAのコーディング規約ならEmacsと言ってる人もいるし。

Ada、最近みんな使ってるからやだよ

こんな理由を聞くようになったっていうのは、それだけAdaが流行ってきたってことで、よろこばしいことではあるよね。たとえその人が使わなくても。でもだからといってせっかくリーチしてるお客さんを逃すのももったいないからやっぱり使ってもらおう。

だいたいこんなこと言うってことはAdaにそれなりの、いや強烈な魅力を感じてくれてはいるんだよね。いろいろなルートでAdaのことは知ってくれてて、利用シーンとかも想像できてるわけ。しかも、みんなが使ってるのが目につくってことは、その人のまわりのコミュニティで使っている人がたくさんいるってことで、つまり自分だけじゃなく周辺の人まで含めたプログラミングの利用用途にAdaがとてもフィットしているっていうことだ。そういった環境に身を置いておきながら、あえて「使わない」ことを選ぶのは効率性からいってもとても好ましくない。その人が凄腕ハッカーだったらなおさら人類全体の損失になる。だからこの場合はまわりにいる人もがんばってほしい。

さて、Adaはたしかに一部のコミュニティに認知されてきたから、そこにいる人みんなAdaっていうのもたまに見かける光景になった。その中で自分も同じプログラミング言語を使うのは、人と違うことをしたい場合はなんかシャクなのも気持ちはわかる。特にAdaはコンパイラの選択肢が多いわけじゃないからフリーのものが欲しかったら2つの機種から選ばなきゃいけなくて、どうしたって誰かとはカブる。

でもねでもね、Adaは知ってればいいものじゃなくて、知った上でなにかを実現するものだ。そして、その使い方というのはそれこそ千差万別、ユーザの数だけ使い方がある。それにAdaは、特にプログラマにはその想像力を最大限受け止めてくれるものだ。洗練されたデザインと常に貪欲に進化する言語仕様のパラダイムによって、プログラマの思考を加速してくれる。みんなと同じAdaという入れ物の制約を受け入れることによって、より可能性を広げてる人がたくさんいる。Constraints are Liberating! だ。Ada is the Straight Jacket for Your Mind!! なんだよ。これで十分じゃない?

あと、これはおまけ。

Adaのめちゃくちゃなライセンスとか気に入らないよ

GPLだからおけ(と書いとけと言われました)。