【第3話】日常生活にひそむプログラミング/連載『プログラマ夫と算数嫌いの妻が、プログラミングについて話してみたら』
はじめての方へ:本連載は、プログラミングについての知識がゼロで漠然と苦手意識しかない妻(筆者)が、プログラマ夫にインタビューしながら、なんとかプログラミングと少しでも仲良くなろうとがんばる雑談シリーズです。どうぞ肩の力を抜いて、夫婦の雑談をお楽しみください。
<全5話予定>
序章・目次
第1話:そもそもプログラミングってなんなのさ
第2話:お笑いと育児とプログラミング
第3話:日常生活にひそむプログラミング(←今回はここ!)
−−−
■ プログラミングはいたるところに
私:ところでプログラミングってさ、いまいち抽象的なイメージしかわたしにはないんだけど。日常の中だと、たとえばどんなところにプログラミングが使われてるの?
夫:うーん、いろいろあるけど。たとえば今日このカフェに来るまでの間なら、まず駅前の駐輪場に自転車止めたじゃん?
私:うん。
夫:あそこに掲示してあったのもプログラムだよね。「入るときに駐輪券をもらう」、「自転車を出すとき、駐輪時間が3時間以内なら、係のひとに券を渡して出る」、「自転車を出すとき、駐輪時間が3時間以上なら精算機でお金を払って出る」、っていうやつ。
私:え?! そうか、まあ質問した意図とは違う気がするけど……、確かに、「前もって書かれたもの」だから、プログラムか。
夫:お客さんがプログラミングされてる、っていう。
私:なるほど。その表現はおもしろいね。
夫:だからお客さんはその駐輪場を利用するにあたって、何も考える必要がなくなってる。「機械的に動いていい」ことになってる。
私:へー、そう捉えられるのか(まだいまいち、つかみきれないなあ)。……他にはどんな例がある?
夫:あとは、今日あったことでいうと、エレベーターとかね。「ボタンが押されたらその階にいく」、「扉をあける」、「中でボタンが押されたらその階にいく」。「その途中、同じ方向で押された階があったらそこで止まって扉をあける」って。
私:あー、なるほど。
夫:っていう動作があらかじめ決められてて、そのとおりに動いている。
私:ふむふむ。ちょっとメモする、待って。……途中でボタンを押されたら扉をあける、そのあとなんだっけ、「扉を閉める」?
夫:あ、「閉める」って言うの忘れてたね。
私:あ、じゃあ扉を開けたまま他の階に移動するんだね(笑)
夫:で、「そうだよなあ〜!」ってなる(笑)。書き足さないとね。
■ たとえば、センサー付き水栓の動作なら?
私:そうそう、日常の例といえば、前にも話してたEテレの『Why!? プログラミング』に「ジェイソンはここにいる」ってコーナーがあるのを見つけてさ。これめっちゃわかりやすかった。
夫:おお。
私:各回にひとつ、身の回りのものをとりあげてやってるみたいなんだけど。たとえばわたしがこの前見た回では、トイレの手洗い場とかにある「センサー付き水栓」を取り上げてて。手をかざしたら水が出るやつ。
夫:ああ、なるほど。
私:その機械のしくみを、ジェイソンが実際に、人の動きとして表すっていうコーナーなんだけど。まず、ライトを持ったジェイソンが穴のあいた壁の前に座ってて、その穴から外を照らしてるの。
※イラストはぽこねん落書きのため、実際の映像とは異なります。
夫:はいはい。
私:それで、壁の向こう側に手が差し出されたら、ライトが反射して明るくなるじゃん?そしたら、「明るくなったら、水を出す」ってナレーションが入って、ジェイソンがレバーを引いて水を出す動作をやるの。
そのあと、手が引っ込められたら反射がなくなってまた暗くなるから、「暗くなったら、水を止める」ってナレーションが入って、実際にレバーを戻す動作をする。そういうの、わかりやすい!と思って。
■ info:言葉だけではわかりにくいので、実際の動画はこちら!
『Why!?プログラミング』の第13回、「ジェイソンはここにいる」でセンサー付き蛇口を扱っていました。実際の動画をぜひ見てみてください。チャプターでこのコーナーだけを選択して見ることもできます。
http://www.nhk.or.jp/sougou/programming/?das_id=D0005180313_00000
夫:その例でさ、「手がそこに来たら」って表現せずに、「明るくなったら」って表現してるところがさすがだね。
私:ほう。なんで?
夫:曖昧さをなくすためには、「手がそこに来たら」ではだめなんだよ。
私:うーん?
夫:たとえば人によっては目的が違って、コップを出すかもしれない。でも、それでも水出てほしいじゃん、水栓の動作としては。
私:たしかに。
夫:それでとった戦略が、「自分の視界の明るさが一定値を超えたら」みたいなことなんだよね、機械的にいうと。たぶん実際も、自動水栓ではそれを赤外線でやってると思うんだけど。
私:なるほどね〜。いや、そういう話ってわたしにはすごくおもしろくて。自分ではまったく、そういうことを考えもせずに毎日使っているからさ。
そういうのを聞くと、ふだん何気なく使っているいろんな機械の向こう側に、指示通り動く小人たちが生息しているみたいな、不思議な感じを受ける。実際は、コンピューター上で処理されているんだけど。
でもそういう仕組みを、考えて作ってきたひとたちがいるんだなあって、具体的なものでイメージできると、とても思いを馳せやすくなるんだよね。
夫:そうだよね。
私:なんていうかわたしみたいな人間にはさ、「機械を動かす」って言われても、裏で何がどうなっているか、未知になっちゃってて。そこで「そうか、そういう具体的な指示を、書いているんだ」と理解できると、ワンクッション入って、だいぶ親しみがわく。自動水栓ならこう、とか。
夫:うん。ここにライトがあって、ここにカメラがあって、カメラから撮れる映像をこんなふうに判断して、そしたらここのモーターがピッて動いて、栓をあける、みたいな、ひとつひとつの具体的な動きを命令してる、ってね。
私:そうそう。ひとつひとつ言われれば、「ああ、そうかあ」ってわかる。まさに「小さく分割(※第2話参照)」だね。
■ たとえば信号機や、自動販売機にも。
私:なにかもう一個ぐらいわかりやすい例ないかな?
夫:そうだなあ。あ、信号機は身近だよね。
たとえば交差点の信号機だと、同じ方向の車と歩行者用信号が同時に青になって、一定時間後に歩行者が赤になり、その一定時間後に車が赤になり、別の方向で、同時に車と歩行者が青になる。その繰り返し。
それはもう予め決められた動作を繰り返しているから、あれもプログラムだよね。あと、押しボタン式信号とかも。
私:ああ。「ボタンが押されたら……」ってね。
夫:「ボタンが押されたら、一定時間後に、車の信号が黄色の点滅から赤になり……」って。その一定時間っていうのも、前に何が行われていたかで変わると思うんだけど。青から赤になった直後にすぐ押したら、ちょっと待ち時間長い、とかあるじゃん。
私:はいはい。なるほどー。
■ info:参考動画はこちら!
『Why!?プログラミング』の第14回、「ジェイソンはここにいる」では歩行者用信号を扱っていました。こちらも動画をぜひ見てみてください。チャプターでこのコーナーだけを選択して見ることもできます。
http://www.nhk.or.jp/sougou/programming/?das_id=D0005180314_00000
* * *
夫:あとは、自動販売機とかね?
私:ボタンを押されたら、……出てくる?(笑)。
夫:いや、まずお金を入れると……?
私:あ、電気がつく!
夫:そう、電気がつくとか。あとは、入った金額以下に設定されているものは、購入可能なことがわかるように、購入ボタンにランプがつくとか。
私:そっかー。意識してないけど、ひとつひとつ「小さく分割して」見るとそうだね。無意識だわ。
夫:ICカードとかで買えるやつだと、「ボタンを押したら、その購入金額が表示されて、カードの読み取り機が待受状態になる」とか、いろんな複雑なことをやりだしているけど。そういうのも含めて、自動販売機のプログラムを書いているひとがいるってことだよね。
私:なるほどー。なんていうか、わたしはその「結果」だけに接してたから想像できていなかったけど、そういう細かい指示のもと、毎日お世話になってるいろんな機械があたりまえのように動いているんだなあ。すごいわ。
■ プログラマとひとくちにいっても◯◯系がある?
私:これまで話を聞いてきて、だいぶ、プログラマさんの仕事がイメージしやすくなってきたよ。そうか。あなたは普段そういうことをしているんですね。……そういうことをしているんですか(笑)?
夫:うーん、概念としてはそうかな。「小さな問題に分割して解決する」っていう意味では、共通したことをやっていると思う。けど、具体的にはちょっと違うかな。
私:どう違うの?
夫:たとえばさっき言ったみたいな自動販売機とか信号機とか家電とか、そういうものの動作をつくるプログラマさんは「組み込み系」と呼ばれていて。
私:ふむ、組み込み系。他に何系があるの?
夫:あとは、Web系とか、アプリ系とか。業務システム系……?どこで分けるのが適切なのかわかんない部分もあるけど。
私:それで、夫さんは何系なの?
夫:何系っていうと難しいなあ。なんだろうね……。展示系とか、デスクトップアプリとか?ちょっとイメージが違うけど。
私:まあ、いろいろあるんだね(笑)。共通しているのは、小さな問題に分割して、それを解決する動きをつくる、っていうところで。それをどんな場面でやるかが違う、っていうこと?
夫:そうだね。
私:それってたとえば、単純に扱う分野が違うってことなのかな? たとえばライターだったら、グルメ系ライターと、不動産系ライターとか、美容ライターとかいるじゃない? そういう、専門分野が違いますよって話なの?
夫:うーんと……。たとえば、おそらく、ライターにおける「Microsoft Word」みたいな、「ある程度のひとが扱った経験があり、必要最低限は扱えるツール」っていう共通のものはあって。
私:うん。共通のベーシックなツールはあると。でもまだ、いまいちイメージしづらいな。たとえば「組み込み系プログラマがスマホアプリを作る」とかは、やる気次第でできる、という感じなの?
夫:うん。自分がやりたいことなり、仕様書に書いてあることなり、解決したい問題を、プログラムのコードに落とし込むっていうプロセスに慣れていれば、できると思う。ノウハウはちがうから、そこは学ばなきゃいけないんだけど。それはたぶん、違う分野のライティングに挑戦するっていうのと、ほぼ同じかな。
私:ふむふむ。違う分野のライティングに挑戦、って言われるとイメージわくわ。
夫:そこで求められるものとか、前提とかは違うことがあるから、失敗したり勉強したりするんだろうけど。そのへんは新たに補えばいいだけで、不可能じゃないよね。基本的に、コンピューターを動かすっていうところは変わんないから。
私:なるほどー。プログラマさん業界って完全に異次元の気がしてたけど、プログラマさんの専門分野も、ライターの専門分野に近いようなところがあるんだね。
またちょっとだけ、親しみがわいたよ(笑)。
(つづく)
■次回予告
【4】当然のように数字の話をはじめないでください
・プログラマは「翻訳者」って言えるかもしれない
・「プログラマあるある」を、理解してみたいけど
・ 当然のように数字の話をはじめないでください
※更新日は来週あたりを予定しています。
ちょっと疲れてきましたか?(わたしもです笑)次回は数字にまつわる話も登場して……、わたしがさらなる混乱の渦に巻き込まれるようすをお届けします。どうぞご笑覧ください。
−−−−−
Please pay as you wish, ……Thanks :-D !!
もし、読めてよかった、コーヒー1杯くらいおごってやるか、という気分になった方がいらしたら、サポートやシェアなどで応援いただけるとたいへんうれしいです。ここまでお読みいただき、ありがとうございました!次回もお楽しみに。
※本シリーズはこちらのマガジンにまとめています↓
自作の本づくりなど、これからの創作活動の資金にさせていただきます。ありがとうございます。