blog.erikori.com

Androidアプリを制作しています。

*

プログラミングの何が面白いのか自分なりに考えてみました

   

「プログラミングって一体どんなところが面白いの?」
と聞かれたことがあり、自分なりに答えを考えてみました。

私はプログラミングを
『人間がやりたいと思ったことを、コンピュータがわかる言葉(プログラミング言語)に置き換える”翻訳作業”』
だと思っています。

翻訳するには、まず人間が思っている「やりたいこと」を、プログラマが正確に理解しなくてはなりません。

何故なら、例えばある文章を日本語から英語に翻訳するとき、日本語で省略されてしまっている主語を、翻訳者が正確に理解できていないまま翻訳してしまうと、それは誤訳になってしまいますよね。
 ■主語が省略されている場合
  Aボタンを押すとジャンプします。
  (誤)When I press A button, I jump.
   ↓
 ■主語をはっきりさせた場合
  あなたがAボタンを押すとマリオがジャンプします。
  (正)When you press A button, Mario jumps.

それと同じで、まず「コンピュータに何をさせたいのか」をはっきりさせないと、正しい指示をコンピュータに伝えることができません。

例えば、バナナの出荷場で黄色いバナナと青いバナナを仕分ける作業があったとして、人間に頼むときは
「黄色いバナナは黄色い箱、青いバナナは青い箱に入れてね」
と言えばいいですが、コンピュータはそういうわけにはいきません。

「半分だけ黄色くなったバナナはどうすればいいの?」
「真っ黒とか、規格外のバナナはどうすればいいの?」
「もし箱がいっぱいになっちゃったら、どうすればいいの?」
など、全ていちいち指示(プログラミング)しないといけないので、とても融通が利かないわけです。

でも、もし人間がこの作業をした場合でも、いずれ同じような疑問は出てくるわけで、作業する人によって
「半分だけ黄色くなったバナナはどうすればいいか、周りの人に聞いてみよう
(Aさんは黄色い箱、Bさんは青い箱と答えた、どうしよう)」とか、
「少し黄色くなってるけど、周りの人は忙しそうだし、青い箱に入れちゃえ」など、
その人の性格や状況によって判断が変わってしまいます。

(仕分けのルールを全て紙に書いて、壁に貼っておけばいいのかもしれませんが、もしルールが50個もあるとしたら、みんないちいちチェックしてくれるでしょうか?)

プログラミングでは最初に
「やりたいことをはっきりさせる」
作業をします。

バナナの出荷場だったら、
「この箱にはどんなバナナを入れるのか」
という明確な品質のルールを作ります。

次に、そのルールをコンピュータにわかる言葉(プログラミング言語)で正確に表現して、コンピュータに人間の指示を伝えます。

プログラミングは、ごく簡単に言うと
「やりたいことをはっきりさせる」
  ↓
「やりたいことを正確に表現してコンピュータに伝える」
の2つの作業から成り立っています。
(その後コンピュータが期待通りに動いているかチェックをします。)

人間は、相手から何かを伝えられたとき、たとえ言葉が足りなかったとしても、相手の状態や気持ちをくみ取って、相手が求めていることを想像することができます。
(背中をモゾモゾとかゆそうにしている人に「あれ取って」と言われただけで、孫の手を渡すことができます。)

だけど、そのおかげで誤解が生まれてしまうことも多々あります。
(孫の手を取ってほしいのではなく、背中の虫刺されに塗る薬を取ってほしかったのかもしれません。)

プログラミングは、求めていることを「はっきりと具体的に」指示する作業です。
(「ムヒを取ってください。」)

作業をコンピュータに任せるということは、「作業が正確で早い」ということ以上に「やることを明確にできる」という利点があります。

やることをはっきりさせるためには、目的を明確にすることが必要です。
(そもそも何のために黄色いバナナと青いバナナをわけるのか?
もし青い箱は黄色いバナナを食べないフィリピンなどの地域で売るものだったとしたら、少しでも黄色いものを入れてはダメなはずです。
目的によって仕分けのルールが変わるはずなのです。)

コンピュータの力を借りる手続きをするために、作業の目的をはっきりさせることができます。

人間の想像力はすばらしいです。
だからこそ、想像力を必要な場所で最大限に発揮するために、
想像力を発揮する必要がない場所では、
コンピュータの力をもっと借りるべきだと思います。

(どんなバナナをお客様に届けたら喜ばれるかについて考えるときに想像力を発揮すべきであって、半分黄色いバナナをどの箱に入れるかについて悩むときに想像力を発揮すべきではありません。)

私は正直に言って、現実の世界で自分の気持ちを表現するのが下手です。
理由は、自分が感じている気持ちや目的を、自分自身が正確に把握できていないからです。

フリーランスになるまでは、よく
「私が本当にしたいことは一体何なんだろう?」
「というか、それがわかる日はいつか来るの?」
「こんなことを考えること自体、間違っているのかな?」
などと、よく考えていました。

だからこそ、プログラミングをしているとき、ふと目の前の霧が晴れるような感覚があります。

コンピュータに何をさせようか考えているときや、あれこれと指示をしているとき、
そのプログラムが自分のために作ったものであれ、
誰かに頼まれて作ったものであれ、
私はそのプログラムの先にある真の目的に触れます。
(このプログラムで、フィリピンにおいしいバナナを届けたい!)

そしてその道中で、自分がやりたいことや目的が少しずつ明確になっていくのを感じます。
(自分が作ったもので、誰かに笑顔になってほしい!)

悩み事を誰かに話したり、聞いたりしているうちに、自分の頭の中が整理されてすっきりするような感覚です。

現実の私はあまり悩みを人に話しません(話せません)。
プログラミングは、そんな頑固な私の頭の中を、ずるずると外に引っ張り出して、自分自身に示してくれるツールなのかもしれません。

1人の方が「いいね!」と評価しています。

 - erikoriについて