深き海より蒼き樹々のつぶやき

Sochan Blog---深海蒼樹

僕がプログラミングできない理由 --- 「まずは、言葉にしてみましょう」の意味

keyboard

 知らない人がいると困るので、真っ先に書いておくけれど、僕はプログラマーではない。まったくもって、違う。
 わずか、4年ほど前、退院後の自宅療養の時期にふと手にしたWeb関連の本に触発されて、HTMLやコンピュータ言語に少し興味をもつようになっただけのことだ。
 本気で、自分が複雑なプログラムを書けるようになると考えたわけではない。
 ひょっとしたら、僕にだってプログラムが書けるようになるかもしれない、少なくともそんなチャンスくらいはあるのかもしれないと、思っただけのまったくのど素人だ。

 50歳を目の前に控えた僕が、プログラムを学ぶために、学校に行くなんてことは到底不可能だった。だけれど、学校に行かずして、しかも無料で学ぶということに関しては、今はいい時代でもある。
 ネットで探せば、いろいろとプログラムを教えてくれる講座やブログがあるし、ソースコードを明らかにしてくれるものもある。
 ドットインストールなんていう、動画でプログラムを教えてくれる無料サイトもできて、早速に登録をしたりもした。(僕は3期生で、登録から既に800日以上が経過している)
 ドットインストールの動画を見たか見てないかで言えば、Cもやったし、JavaScriptも、PHPも、やった。
 どの言語においても、関数があり、変数があり、配列があり、ループ処理があり、分岐処理があり…、それぞれの言語特有の記述の仕方やルールがあることは、わかった。
 それは、わかったのだけれど、どうやってプログラムしていいのかは、さっぱりわからなかった。

 『PHPで作る掲示板』だとか、『JavaScriptで作るおみくじ』だとか、言われた通りに写経してみたりもしたし、それらはうまく動きもした。
 にもかかわらず、僕には、なにかをプログラムできる気がまったくしなかった。
 勿論、「気がしない」だけではなく、本当にできないのだけれど。

 それは、わからない数学の問題を、できる友人に解いてもらうときの感覚に似ている。
 その友人は当たり前のように問題を解いてくれるのだけれど、「ほら、これで、できたよ」と、ニッコリと微笑みかけられても、僕には、それが正解か不正解なのかすら、よくわからない。
 いや、それで、解答が終わりなのか、終わってなくて途中なのかすら、わからないのだ。
 以前に、福田は考えるまでもなく、補助線を描いて、ニッコリと笑ったというタイトルで書いたとおり、図形の証明問題なんかで、なにげに補助線を引かれても、なぜ、そこに補助線を引こうと思いつくのかがさっぱりわからないのだ。
 あの感覚と、すごく似ている。
 動画の中で、「まずは、functionで関数を作ってやりましょう…、次に文字列を格納するための配列を用意してあげましょう…」と、サラサラとプログラムは完成していく。
 動画の中のプログラムは、どんどんと完成していくのだけれど、僕のなかでは、一向に完成していかない。
 ただただ、言われるがまま、見せられるがままなだけで、一向に自分でプログラムできる気にならない。
 繰り返すけれど、「プログラムできる気にならない」だけでなく、本当にできないのだ。

 だから、一時期、完全にあきらめようとしていた。
 あまりにも、僕には不向きすぎる。
 プログラムができるかもしれないなんて思った僕が、傲慢でした。ごめんなさい、みたいな感じで。
 非プログラマーであり、こんな年齢からひょっとしてと思った僕を応援してくれたfacebookの友だちにも悪いと思いながらも、これ以上あがきようがないと思いはじめていた。
 でも、まぁ、もう少し、頑張ってみようか。

 たとえば、電卓を作成するとしよう。
 プログラマーの人は、こう言う。
 「電卓を、どんな風に使っているか、言葉にしてみましょう」
 正直に言うと、最初にこう言われたとき、僕は、そんなことは簡単にできると思ってしまったのだ。
 いや、もっと最悪なことに、僕は、いちいち言葉になんかしなくても、わかってるよ、と思ってしまったのだ。
 なぜそう思ったのか?
 今の僕にはわかる。『いちいち言葉にするのが面倒だった』からだ。
 そして、なぜそれが面倒なのかと言うと、言語化せずに半ば無意識でしている自分の動作や使い方について、『実は自分でわかっていると思っているほど、わかっていなかった』からだ。
 そりゃそうだ、自分でわかってないことを言葉にするのは、とてつもなく面倒にちがいない。

 しかしながら、プログラムを書けるようになりたければ、やはり『言葉』にしなければならないようだった。
 とにもかくにも、それをしないことには、どこからとっかかっていいのかすら、さっぱりとわからないのだから。
 そして、プログラマーの友人たちが、「まずは、言葉にしてみましょう」と言ってくれる意味が、少しわかりはじめた気がしたのは、イヌでもわかるJavaScript講座--電卓が、きっかけだった。
 その中にも、こう書かれていた。
 「では、言葉にしてみましょう」
 (え? やっぱり、『言葉』にするの?)

 そして、そのあとには、こうつづく。
 「まず、電源を入れます」
 最初にこれを読んだ僕は、電卓に電源なんかあったっけ?と、思ってしまった。いや、電源なんかないし、どうすればいいんだ?
 僕は、自分が電卓を使う時のことを、胸に手を当ててよく思い出してみる。
 会社の机の引き出しから電卓を引っ張りだした僕は、まず、何をする?
 電卓の電源なんか入れたりしない。大抵の、と言うか、今の時代ソーラー付きでない電卓を見たことがないから、机から出した瞬間に、数字が表示される窓のような部分に、前に計算して出した答えが浮かび上がってきたりする。
 そうだ、それが邪魔だから、とりあえず、机から電卓を引っ張りだしたら、ACボタンを押すんだった。しかも、大して急いでいるわけでなくても、苛ついたように、3回以上はACボタンを連打している。
 そして、『0』が表示されたのを確認してから、計算をはじめる。

 僕は、少し、恥ずかしくなる。
 自分では気づいていない癖を、他人に指摘されたときのように。
 ACって、All Clearってことで、言わば初期化であり、電源を入れるってことと同じようなことだよね。
 僕は、毎回毎回、「電源を入れて」いたのだ。そのことに、無自覚で、その意味を意識してなかっただけで。
 そう言えば、表示が『0』になっていることを、半ば無意識的、半自動的にしろ、僕はちゃんと確認している。表示が『0』でなければ、正しく計算出来ないことを、僕は知っているのだ。
 少なくとも、前の計算の数字が残っているとマズいということを、僕は認識している。
 だから、僕はACボタンを連打するのだ。(言うまでもなく、連打する必要はない。ACボタンがACボタンの機能を果たしてくれさえすれば、1回だけ、優しく押してあげるだけで十分だ)

 自分で『言葉』にできなかった僕は、こうやって、人が『言葉』にしてくれたことを読んではじめて、ようやく、「まずは、言葉にしてみましょう」の意味が少しわかった気がした。
 そして、「言葉にしてみましょう」という作業が、簡単なことではないということも。

 そういったところを、もう少し、身につけたいと思って、『教養としてのプログラミング講座』(清水 亮)という本を買った。
 筆者は、日常のいろんなものだってプログラムだと言って、プログラムとはなんなのかを説いてくれる。
 たとえば、目覚まし時計をセットするのも、立派なプログラムだと。
 なぜなら、運動会のプログラムや、式典のプログラムなどなど、プログラムというのは、順序立てられていて、予め作られていて、どんなときに何をするかが決められているものが、プログラムなのだ。コンピュータ用に作られたものだけが、プログラムなわけではない。
 だから、翌朝の6時に目覚まし時計を鳴らすのだって、一種のプログラムであっていいのだ。
 そして、「目覚ましを鳴らす」と書いたときに、僕のような粗忽な人間が陥りやすいことがある。「鳴らす」ことだけに、気持ちがとらえられてしまうのだ。

 どういうことかと言うと、本書にある『目覚し時計の設定プログラム』は、こうだ。
 朝6時になったら音を鳴らす       → 時刻の設定
 アラーム音は、「水滴の音」に      → 音の設定
 ボタンを押したら音を鳴らすのをやめる  → 停止条件の設定

 なんだか、すごくプログラムっぽくなった気がしないだろうか?
 僕なんかは、最後の『停止条件の設定』とやらを読んだときに、グッときて、「うわっ、プログラムっぽいよな」と感じるのだけれど。
 それは、僕が単純すぎるのだろうか?

 もしくは、レジ業務もプログラムだと、筆者は言う。
 レジ業務?
 レジ業務の仕方を書くのは、それはマニュアルではないのかと、僕は思ったわけだ。
 でもよくよく考えてみると、マニュアルとは、つまりは、「こういう時には、あぁする」だとか、「別のこういう場合には、こう処理する」だとかがまとめられて、そのマニュアルを見れば誰もがレジ業務ができるように書かれているわけである。
 だとしたら、誰にでもできるように書かれているということは、コンピュータが読んでも、できるはずなのだ。
 だったら、マニュアルとは、プログラムであって、なんら問題はない。

 マニュアルを作るのは、とても面倒だ。
 しかしながら、コンピュータ用のプログラムを書いたことはなくても、業務用マニュアルなら作ったことがある。
 となると、なんだか、プログラムだってできそうな気もしてきた。
 勿論、それは、簡単なことではないし、根気のいる作業だ。
 しかも、まだプログラムを書く前段の準備でしかない。
 言葉にしたあとのプログラム言語への変換は、まったくの手つかずな状態なわけで、道のりは遥か、遥か、遥か彼方であることに変わりはない。
 それにしても、なんだか、やっと糸口が見えた気になることができたのも事実だ。

 「だから、最初から言ってるでしょ」
と、facebookでいつも応援してくれている友人たちには叱られそうだ。
 けれど、とにかく、まだもう少し、あきらめずにいようと思った今日この頃です。
 そして、非プログラマーであり、僕のような人々に、僕はこの本を推薦します。