コラム
COLUMN
COLUMN
コラム
 | 
2017.5.10
2017.5.10

「プログラミングとは何か」イメージの湧かない人へ

「プログラミングとは何か」イメージの湧かない人へ

誰か「プログラミングって何ですか?
詳しい人「プログラミングっていうのは、コンピュータに対する命令なんだ。これによって、アプリを作ったり、機械を制御したりできるんだよ
誰か「なるほど。ありがとうございます。(いや、そうなんだろうけど、もっと具体的なイメージが知りたいんだよなあ)
これは、こういう誰かに向けた記事です。

プログラミングとは、具体的に何をするのか

まず、言葉で説明すると、プログラミングとはどのようなものなのでしょうか。
分かりやすい説明の記事があったので、引用します。

> 前提として、コンピュータは人間と違い、指示された通りの事しか出来ません。
> コンピュータに対して「こうしてほしい」という事を、「コンピュータが理解できるように正確に伝える事」が必要です。
> つまりコンピュータに「こうやって動いて欲しい!」と伝える行為のことをプログラミングと言うことができます

例えば、掃除機を動かすコンピュータに「放っておいても掃除してほしい!」と伝えることができれば、お掃除ロボットができます。
逆に、上手く伝えられないと、機械は期待した通りには動きません。

今回は、「スマホアプリを作りたい」という例を挙げ、具体的にどんな手順で何をするのか、イメージをお伝えできればと思います。

1. 作るものを決める
まず、「とにかくものすごく褒めてくれるアプリ」を作りたくなったとします。
このアプリが完成したら、仕事でミスして失った自信を取り戻せるかもしれませんし、
自分に自信がないシャイボーイに、憧れの女の子に告白する勇気を届けられるかもしれません。
これは素晴らしい。是非、実現させたい。
(これは私が最初に作ったアプリのアイデアです。平和ですね!)
こうして、「これを作るぞ!」と決意するところから、プログラミングは始まります。

2. コンピュータが理解できる動作をイメージする
前述の引用にもあったように、コンピュータは指示通りのことしかできません。
「とにかくすっごい褒めて!」というのは、コンピュータにとっては指示が曖昧すぎます。
「すっごい褒める」とは何回褒めればいいのかも分かりませんし、
何をどうやって褒めればいいのか分かりません。
そこで、具体的にどうやって動くのかを、人間が考えます。
今回の場合は以下のような動作を想定します。

1.画面にかわいい女の子がいて、質問と、それに対する回答ボタンが表示される。
2.押されたボタンに応じて、褒めてくれる文を表示する。

このようなイメージです。
< 3. プログラムを書く
具体的にイメージした動作を、コンピュータが理解できる言葉(プログラミング言語)で書きます。
「押されたボタンに応じて、褒めてくれる文を表示する」にあたるプログラムが、こちらです。
(これはあまり美しいプログラムではないのですが、説明のためにこのような形にしています)

なんとなく「なるほど。プログラミングとはこういうものか」という感じを掴んでいただければ良いと思います。
なんか画面が黒いというだけで抵抗がある方もいるかもしれませんが、難しいことはしていないので、少し細かく見ていきます。

1行目

「もし、ボタンのテキストが、「深い方」と書いてあったら、括弧の中に書いてあることをしてね」という命令です。
if というのは 「もし〜だったら」という意味なので、分かりやすいですね。
イコール(=)が二つ並んでいるとか、「深い方」という文字だけ “ で囲われているのは、そう書くのがプログラミング言語のルールだからです。
小説の「」で囲われている文を見て、私たちが会話文だと理解できるのと同じで、コンピュータが理解できる書き方というものがあるんですね。

2行目

「コメント欄の文字を、『眠りが深い人って、だいたい人間としても深いよね!』にしてね」という命令です。
これは、一行目の命令があるので、ボタンのテキストが「深い方」と書いてある場合に実行されます。
ここではイコール(=)が一つしかありませんが、これで OK です。
(詳細な説明は割愛しますが、イコール(=)二つのものとは意味が違います)

3行目以降もだいたい同じことをしています。

4. 動かしてみる
自分が書いたプログラムを動かしてみて、思った通りに動けば OK です。
可愛い子に褒められて、微妙に嬉しいですね!
(何度も見てると虚しくなってくるので、見過ぎにはご注意を)

私たちが普段使っているものの裏には、膨大なプログラムが

ただ褒めるだけの遊びですら
上の例でなんとなく雰囲気だけでも掴んでいただければ幸いなのですが、
前述のプログラムだけだと気になる部分がたくさんあります。
一度ボタンを押してしまうと、質問に戻ることができない。
他の質問が表示されない。
キャラクターの顔がずっと変わらない。
ボタンを押した時に音が出ない。
仕事でミスした帰り道に、ずっと同じ言葉で褒められるだけの音のないアプリを開いたらどうなるでしょう?
「何やってるんだ、俺・・・」と、惨めな気持ちでいっぱいになることが容易に想像できます。
虚しすぎます。
この惨劇を未然に防ぐには、追加でプログラミングをしなければなりません。
結果、こんな単純な遊びですら、何百行ものプログラムが必要となります。

メールとかすごい
私たちが普段使っているものは、この例の比べ物にならないくらいに、複雑で多様な機能を持っています。
例えば、メールソフトで思いつく機能のほんの一部を挙げただけでも、こんなにあります。

・メールを送信 / 受信する
・送信 / 受信したメールを記録しておく(メール件名、本文、送信者、受信者、送信時刻)
・記録したメールを、PC でもスマートフォンでも見れるようにする
・メールを削除する
・メールを検索する
・メールをフォルダに分ける
・迷惑メールを認識し、別フォルダに入れる

私たちは普段何も意識せずにメールを使っていますが、その裏には、気の遠くなるような量のプログラムが存在しています。
(むしろ、こんなに複雑な機能を意識させないメールソフトを作った人たちはすごいですね!)

今後、重要になるけど

今回はアプリの例でしたが、コンピュータを制御するものには、みんなプログラミングが関わります。
PC が動くのも、ボタンを押したらエレーベーターが来るのも、お掃除ロボットが家中をいい感じに回ってくれるのも、みんな誰かがプログラミングしたものです。
こうして考えてみると、私たちは、誰かがプログラミングしたものに囲まれて生活しています。
この先、私たちの周りにどんどんコンピュータが増えていくことを考えると、プログラミングはますます必要とされていくことが予想されます。
つまり、プログラミングができれば仕事が得られやすい社会になっていきます。

ただ、こどもに対するプログラミング教育を考えるのであれば、
「特定のプログラミング言語を習得する」といった仕事に繋がる類のスキルは、あまり重要ではないように感じます。
プログラミングは何かを作る手段であり、何かを作ることは誰かの役に立つ手段であるはずです。
子どもがプログラミングを通じて、「誰かの役に立つのが嬉しい」という綺麗事みたいな感覚に触れられたら、それは本当に素敵なことだと思います。

(Illustration : Jung Bin Cho)

戸田大介