バナナとプログラミング(メカAG)
ガジェット通信 / 2014年9月29日 14時0分
今回はメカAGさんのブログからご寄稿いただきました。
■バナナとプログラミング(メカAG)
プログラムが自然言語よりも理解しにくい理由の一つに、自然言語は概要→詳細という形式を持っているのに対して、プログラムはあくまで処理手順の列挙に終始している点ではなかろうか。
たとえばバナナはオヤツに入るか?という問題。「遠足のしおり」みたいなのがあって、オヤツについてもあれこれ書かれている。いつ食べるかとか量とか。その後でオヤツに含まれるもの、含まれないものなどの注意事項が並ぶ。
プログラミングの場合どうか?まずバナナがオヤツか否かのif文が冒頭にあり、オヤツでなければエラー処理や例外処理が記述される。その後にオヤツの食べる処理とかが続くわけだ。
でも人間にとって分かりやすいのは、最初にざっくりとした概要。細かな判定や例外処理やエラー処理は枝葉末節であり、とりあえず全体を理解した後でいい。
* * *
アスペクト指向プログラミングが、これに近いのかもしれない。手順ではなく条件を記述する。たとえばこの変数にゼロが代入されたら、この処理が実行される、と。「いつ」ではなく、条件を記述。つまり原理的にはその変数への代入処理が実行されるたびに、この条件がチェックされる。最適化とかで省けるチェックはあるだろうけど。このケースは絶対にゼロにならない、と。
これを普通のプログラミング言語で馬鹿正直に書いたら、代入のたびにif文が並ぶすごく見にくいコードになってしまうだろう。
* * *
人間の思考というのは、順序ではない。「ある1人の男が山道を歩いていた」「その男は年はまだ若く」「背中には荷物を背負っている」「その荷物は重そうで男の肩にキリキリと食い込んで」と。
これをシーケンシャルに記述したら「肩にキリキリと食い込むほど重そうな荷物を背中に背負っている1人の若い男が山道を歩いていた」となる。なんか読みにくいし、なかなか重要な部分がでてこない。こういう文章をずっと読んでると「で、結局本題はなんなの?」となる(笑)。
* * *
とはいえ、最初に全体的な概要を説明し、次に細部を語る形式だと、重複部分が多くなり冗長でもある。上記なら「男」が何回も出てくる。バナナの話にしても、もっと複雑になれば、どんどん煩雑になっていく。
「○○は~である。ただし××の場合は~で、さらに△△の場合は~」と、だんだん条件を指し示す範囲がわかりにくくなってくる。誤解の余地を少なくするには、ますます表現が冗長になる。
よく説明書とかで、この注意事項はこっちのケースにも当てはまるのか?と悩んだりする。当てはまるか否かを推測しなければならないし、その結果が一意に確定できないかもしれない。
人間は普通はそれらを「常識」で処理しているわけだ。しかし不慣れな問題領域では、常識のストックが足りないので、判断がつきかねるケースが出てくる。
* * *
以前、よく出来た小説は、ストーリーがフラクタル構造になっているのではないかと述べた。自己相似。物語の最初の方で語られたテーマが、スケールを変え、細部も若干変わって繰り返し語られる。主人公が自分の近所の乱暴者を懲らしめる話からスタートして、だんだん敵が国や世界や宇宙規模にスケールアップしていくような(笑)。
なぜ退屈しないかといえば、基本は同じだが細部はその都度変わるから。単純な善悪ではなく、悪人の意外な心優しい側面が語られたり、弱者を助けて良いことをしたと思っていたら、そいつがとんでもない食わせ物だったり(笑)。
この場合、数多くの重複部分を持っているにもかかわらず、煩雑さはあまり感じない。もし最初から「正義とは?」を冗長性なく語るとしたら、たぶんその説明は耐え難いほど複雑なものになるだろう。
弱者のフリをした悪者、一見悪者に見える心優しい人間、それを見分ける細かな注意事項が続いた後、ようやく近所の乱暴者をやっつける最初のエピソードが始まる。こんな小説誰も読まないだろう(笑)。
でもプログラムってこんな感じだよね。
* * *
プログラマはあくまで概要→詳細の順序で記述し、それをコンパイラとかが推論や最適化を駆使して、適切な処理手順に変換する…そういうプログラミング手法が求められるようになってきたのではなかろうか。
コンパイラは「文法エラーです」ではなく、「このケースとこのケースは論理矛盾を起こしていて、処理を一意に決定できません」というエラーを出す。
まあ、バグを見つけるのも大変そうだけど(苦笑)。
執筆: この記事はメカAGさんのブログからご寄稿いただきました。
寄稿いただいた記事は2014年09月24日時点のものです。
外部リンク
この記事に関連するニュース
-
見逃せない! ホイールのブレーキダスト除去術 ~Weeklyメンテナンス~
レスポンス / 2024年4月25日 6時30分
-
タンパク質の動きを3Dで見る!創薬を加速する0.5フェムト秒の挑戦
ASCII.jp / 2024年4月18日 11時0分
-
Windowsで動く複数のプログラミング言語の脆弱性に注意喚起、JPCERT/CC
マイナビニュース / 2024年4月17日 8時9分
-
定時で上がろう! Excel関数の底力 第73回 Excelの新しい常識!?「スピル」の使い方
マイナビニュース / 2024年4月15日 15時0分
-
WindowsのPowerShellのプロファイルを設定する
ASCII.jp / 2024年4月14日 10時0分
ランキング
-
1「新紙幣出てきたんだけど」 レジで“千円札”見た若者がポツリ→まさかの正体にショック広がる 「そうだよねえぇ」
ねとらぼ / 2024年5月7日 12時0分
-
2シャープ、デザイン一新&ディスプレイ大型化の「AQUOS wish4」
マイナビニュース / 2024年5月8日 11時0分
-
3「天才なのか狂気なのか」 ガソリンタンクに液体窒素を入れてみたら…… 海外の“とんでもない実験”に心臓バクバク
ねとらぼ / 2024年5月6日 8時0分
-
4iPadに“史上最大”の変化 「Appleスペシャルイベント」発表内容まとめ
ITmedia Mobile / 2024年5月7日 23時5分
-
5「意外過ぎる復活」を遂げたレトロゲーム3選 クソゲーと名高い『いっき』は別ジャンルに?
マグミクス / 2024年5月7日 21時25分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください