ちょうど1年前に日経ソフトウエアというプログラミング雑誌の編集部に異動になって以来,「プログラミングって一体何だろう?」とずっと考えて続けている。今度,日経ソフトウエア6月号で“プログラミングをしたことのない人向けの超入門記事”を書くことになり,プログラミングの本質について考えてみるいい機会だと思った。そこでふと気が付いた。「プログラミングをしたことのない人が考えていることが,自分にはわからない」ということに。

 私には職業プログラマの経験はないし,長いプログラムを書いた経験もない。いわゆる「コードが書ける」人間だとはお世辞にも言えない。自分が記事の中で書いたサンプル・プログラムをあとで見返して,不自然な部分を発見して赤面するなんてことはよくあるし,最近よく参加している勉強会(注1)では演習問題が解けなくて苦しんでいる。

注1:「素人くさいSICP読書会」といいます。SICP(Structure and Interpretation of Computer Programs,邦題:計算機プログラムの構造と解釈)は,コンピュータのプログラムに関する古典的名著。この本の中で説明に使われているプログラミング言語は,Lispの方言の一つであるScheme。

 それでも,プログラミングとの付き合いだけは長い。BASICというプログラミング言語の文法を知ったのは確か中学生のときだし,高校生のときにはシャープの「MZ-80K2E」というマイコンで簡単なゲームのプログラムくらいは書いていた。自分にとっては,「変数」という概念一つとってみても,当たり前すぎて,それが学校の数学の授業で普通に習うものなのか,プログラミングに特有な概念なのかということさえ思い出せない。

 そこで身内に応援を頼むことにした。この身内は,パソコン雑誌の編集の経験があり,コンピュータについてまんざら知らないわけではない。ただしプログラミングは一切したことがない。今回の記事が想定する読者のサンプルにまさにうってつけだ。

 まず「なぜ君はプログラミングをしないの?」と聞いてみた。返ってきたのは「野菜を作ったり魚を捕ったりすることと同じなんじゃない?」という答え。「自分は野菜を利用するけど畑を耕すわけじゃない。魚も食べるけど捕ったりはしない」。同じように,自分はソフトウエアは使うけど自分でプログラミングはしない,というわけだ。なるほど。どんなことでも,仕事でする人もいれば,全くしない人もいる。その中間に趣味でする人がいる。例えば,市民農園で野菜を育てる人とか釣りをする人とか。日経ソフトウエアも,読者の3分の1は趣味でしかプログラミングをしない人たちだ。趣味なら,やるもやらないもまさに本人の“趣味”である。

 プログラマに対するイメージも聞いてみた。「最先端だけど不安定」「学歴不問でハイIQ」。実力主義っぽいイメージだ。これはこれで当たっている気がする。“学歴不問”というのは,きっと大学を中退したBill GatesやSteve Jobsのことが頭に浮かんだのだろう。「オブジェクト指向とか,普通の単語を普通でない意味で使っている」とも言った。これもわかる。“普通の人とはちょっと違っている”ことは,よくも悪くもプログラマのアイデンティティの一部になっている。すばらしいプログラムを書くには,ある種の特別な能力が必要であるのはまぎれもない事実だ(注2)。ただ,それはプロフェッショナルが存在する仕事ならどんな仕事にも当てはまるが。

注2:プログラマが「プログラミングに特別な能力が必要であること」を強調したがるのには理由がある。現在の日本のソフトウエア業界には「プログラミングをしない人のほうが立場が上である」というケースが往々にして見られ,そのせいでプログラムの質が上がらないという構造的な問題があるからだ。この問題に関しては「Life is beautiful」というブログの「ソフトウェアの仕様書は料理のレシピに似ている」というエントリが参考になる。

で,何がわからないのだろう?

 身内への取材の主題は「プログラミングをしない人は何がわからないか」である。そこで,プログラミングに関するいろんな事項について知っているかどうかを尋ねてみた。

 個人的に最も新鮮だったのは,「プログラミング言語には様々な種類がある」ことを知らなかった点である。コンピュータ雑誌の元編集者が知らないということは,プログラミングに縁の薄い人はまず知らないと考えて間違いない。「人がしゃべる言語と同じで,いろいろなプログラミング言語があるんだよ」と説明すると「結構,アバウトなんだね」という答えが返ってきた。何か理路整然とした美しい世界を想像していたらしい。プログラミングがそうした世界であるという理解はあながち間違いではないが。

 それでも,いくつかのプログラミング言語の名前を挙げると「聞いたことがある」というものもあった。固有名詞と“プログラミング言語”という概念が結びついていなかったようだ。具体的には

  • 聞いたことがある:COBOL,BASIC,C/C++,Java,Ruby,Perl
  • 聞いたことがない:FORTRAN,Lisp,Pascal,Smalltalk,Python,PHP

という結果だった。もちろん,1個人の話なので意味のあるデータではない。ただ,言語のメジャー度や個人的な経験が加味された結果だと思うと興味深かった。

 会話の中では,様々な鋭い指摘が飛び出し,楽しかった。「プログラムは字が書いてあるだけなのにどうして絵が動くの?」「パソコンを動かすソフトを,特別な機械ではなくパソコンを使って作れるのはなぜ?」「ソフトを開発するためのソフトがあるのが不思議」。こうした疑問は私ひとりでは出てこない。「早く作業を進めるために面倒なプログラミングをするのはかえって段取りが悪いんじゃないの?」と言うのを聞いたときには,自分が最近Webに書いた,自動化に関する講演の記事(参考リンク)を思い出した。

 根元的な問いも出た。「なんでプログラミングしないとソフトウエアができないの?。もっと簡単に作れたほうがいいのに」。もっともである。もし,人間が普通の言葉で指示すると,その通りにコンピュータがやってくれるようになれば,プログラミングは不要になる。

 私も実は4年ほど前,プログラミング言語Rubyの開発者にして日本一のプログラミング言語オタクでもあるまつもとゆきひろ氏に,同じようなことを聞いてみたことがある。今はなき日経バイトの取材でのことだ。そのときの回答は「いつかはコンピュータが人間の言葉を理解して動作するようになるだろう」ということだった。ただし,遠い遠い未来のことだという注釈付きだったと記憶している。

 それからも「プログラミングが不要になることはあるのか」ということについて考え続けているが,むろん答えは出ていない。未来のプログラミングで,今のように英単語と数式をちりばめたようなプログラミング言語が依然として主流であり続けるのかどうかもよくわからない。ただ最近,一つだけ確かなことがあると思うようになった。「形態がどんなに変わっても,プログラミングは創造的な作業であり続けるに違いない」ということだ。ソフトウエアが「誰かを幸せにする」ことを目指している限りは。