あのぶるTweetシリーズものの記事ではあるのですが、「前の記事を読んでいないと全くわからない」ということはおそらくないと思います。よろしければ前回の記事もご覧いただけると嬉しいです。コンピュータが出来ることhttps://hajimete-it.com/tips/what-is-programming-1/こんにちは、あのぶるです。「プログラミングって何?」と質問をされたとき、あなたはどのように答えますか?RFC等で明確に定義があるわけではないようですが、現在では概ね「(プログラミング言語を使って)コンピュータへの命令を作成すること」という説明がされてい...こんにちは、あのぶるです。前回の宣言どおり、今回は「コンピュータに指示を与える」とは一体どういうことなのか?というお話をしたいと思います。例題として、「猫の絵を描く」というタスクを実現するときのことを考えてみましょう。人にお願いする場合と、コンピュータ(ロボット)にお願いする場合でどのように違いが出るかを見ていきたいと思います。※説明のため、下のイラストのようなロボット(に搭載されているコンピュータ)に手を使って描いてもらうことを想像してください人にお願いした場合どのようにお願いをするか単純に、相手に「猫の絵を描いて」とお願いすることになるでしょう。お願いした後、相手がどのように行動するか相手の視界に紙とペンがあったり、すぐ近くにあることを知っていればそのまま描き始めてくれるでしょう。道具が見当たらなければ「書くものある?」と質問を受けるかもしれません。お願いする状況によっては、どのような絵を描いてほしいのか、具体的に質問されるかもしれないですね。どのような絵が出来上がるかお願いした相手や状況によって様々な絵が出来上がるでしょう。1色のペンでシンプルに描く人もいるでしょうし、たくさんの色を使って写真と見紛うほどのものを描く人もいるかもしれません。絵の大きさも人それぞれになりそうです。目の前にコンピュータやタブレットがあれば、それを使って描く人もいるかもしれませんね。同じ人に複数回お願いをした場合、同じように描いても少しずつ違うものが出来上がるでしょう。同じ絵をずっと描き続けるのも大変そうですね。人が絵を描くときは同じ絵を描き続けているつもりでもどんどん変化するというか、洗練されていくものです。意識して変えていることも多いでしょうが、このパターンで典型的な例は長期連載の漫画ですね。同じキャラクターの顔が1巻と最終巻でだいぶ印象が違う、という現象を見たことがある方もいるかもしれません。コンピュータ(ロボット)に指示を与える場合どのようにお願いをするかまず、少なくとも「猫の絵」がどのようなものかを具体的に説明する必要があります。最低限簡単な絵を指示したとしても、紙の真ん中に丸があって、その上部に三角形が2つ、丸の中に点が2つ...といった風に(実際はそれぞれの形を数字でもっと具体的に)説明をしなければいけません。その上でペンを持って、指定した位置までペンを動かして、ペンを下ろして紙につけて、線を引いて、という風に指示を組み立てることになります。複数の色を使うならどの色のペンをどのタイミングで使うのかも全て指示する必要があります。お願いした後、相手がどのように行動するか絵を描くのに必要な紙とペンをロボットが認識できる場所に配置し、どこにあるのか分かるようにしなければ描き始めることができなさそうです。ペンがどこかに転がってしまったり、紙がどこかに行ってしまったりした時もロボットは認識できないため、想定して適切に指示をしなければペンを持てないまま手を動かしたり、紙がなければ机にペンを直接下ろしてそのまま描いてしまうかもしれません。どのような絵が出来上がるか細かく指示をしているので、条件さえきちんと整っていれば指示した通りの絵が完成するはずです。徹底的に具体的な指示をする必要がありますが、逆に言えば具体的に説明ができるなら基本的にどんな絵でも描くことができるでしょう。適切にメンテナンスをすれば嫌になることもなく、同じ絵をずっと描き続けることもできます。人が同じ絵を描くよりもずっと速く、正確に仕上がるでしょう。して比較すると、コンピュータに指示をするときは「完璧にお膳立てをした上で1から100まで指示しないといけない」が、一方で「同じことを繰り返すのは得意」ということがよくわかると思います。AI技術も現在普及しているものについては「指示のしかた」が普通のプログラミングと異なる考え方を使うという話で、この原則は一緒です。「当たり前でしょ」と感じましたか?それとも「何て融通が利かないんだ」と感じましたか?単純な話なのですが、このことを知ると「コンピュータは何でもやってくれる」の背景には必ず「何でもできるように指示をしている(プログラムを書いている)人がいる」ということがイメージしやすくなると思います。例題では簡単のために「ペンを持つ」「手を動かす」と大雑把に書きましたが、これも実際には距離や方向を指定した上で指を動かす指示をしたり、現在腕がどの位置にあるのかを計算し、そこからどのくらい動かすのかを具体的に指示する必要があります。コンピュータは「指を動かす」「腕を動かす」という意味で指示を理解しているわけではないため、「どのモーターにどのくらいの電圧で何秒間電気を流す」まで細かくする必要があるのです。1から100まで指示するのは本当に大変ですし、人は間違う生き物です。「絶対にミスをしない」というのは生き物である以上あり得ないので、それなら間違えるリスクのある行為そのものを減らせばよい、と考えるのが道理でしょう。いうことでシリーズ最終回となる次回は「なるべく少ない量でプログラミングをするためにどうするか」というテーマでお話ししたいと思います。よろしければもう少しだけお付き合いください。Engineer杜の都で育ち、赤べこの街でコンピュータのいろはを学んだソフトウェアエンジニア。今はスマホゲームのためのWebAPIを作るお仕事をしています。最近はすっかりガルパンおじさん化。