義務教育のプログラミング的思考とは。エクセルで考える。その2。

 前稿でIF文を理解した人は、実を言うと世の中に存在する6割近くのプログラムと似たことができる。

 もうこれでプログラミングを覚えたと言ってもイイ(笑)。

 前稿で私は入荷連絡「必要」「不要」を 0 と 1 にした。その理由を踏まえて展開したい。

 サービス満足度アンケートを採るとする。とある昭和の店長は「顧客の生の声が聞きたい」と熱望し、顧客2万人に対し1人1人電話をかけることになった(笑)。店長じゃなくて担当者が。

 昭和の店長は「ぶっちゃけ正直ここだけの話的なノリで、「超満足」「スゲー満足」「結構満足」「割と満足」「まーまー」「ピンとこない」「正直もう買わない」「ぶっちゃけゴミ」「ここだけの話刺客を送ったから帰り道気をつけろ」のどれか聞いて」と担当者に注文を付けた。

 担当者は顧客リスト順に電話をかけ、感想セルに結果を入力していった。

 これが2万人分続く。

 そこで昭和の店長は「保険に入った方がいいか検討するから「ここだけの話刺客を送ったから帰り道気をつけろ」と答えた顧客の横に目印をつけといて」と注文を付けた。

 IF(感想セル="ここだけの話刺客を送ったから帰り道気をつけろ", "☠️", "")

という列を作るとする。該当する顧客の横に「☠️」を表示し、該当しない場合は空白("")。

 そんな感想の人はそう沢山いないだろうことから(笑)、ソートして手作業で数えてもいいと思う人もいるだろう。確かに可能だが、本当にソレだけで済めばの話だ。

 では、「「超満足」「スゲー満足」「結構満足」のお客さんに新商品のモニターをお願いしたんだけど」と昭和の店長が言い出した場合はどうだろう。

 IF(OR()) 文(前稿のANDをORにしたもの)で、「AまたはBまたはCなら」すなわちこの3つの条件のいずれかに合うなら🎁を表示という列を作るのもいとをかしぃ。

 ※ココで「いずれに合えば」とは「どれか1つにでも合えば」(と言うことは2つでも3つでもいい)という言葉の意味をしっかり子供が理解する必要がある。「いずれ」と言えば全部。アルゴリズムは理系だが、プログラミングの命令文の読解は国語と同じ。

 具体的には下記の通り。

 =IF(OR(感想セル="超満足",感想セル="スゲー満足",感想セル="結構満足"), “🎁”, "")

 しかし、「AまたはBまたはCなら」とせっかく条件式を書き終えたところに、昭和の店長が「あっ、わりー。やっぱ「割と満足」以上にして」と言ってきたら「AまたはBまたはCまたはDなら」文に書き換える必要がある。それか店長を卍固めにするか。

 そこでプログラミング的思考の担当者は通常卍固めを習っていないので、

 9「超満足」 8「スゲー満足」 7「結構満足」 6「割と満足」 5「まーまー」 4「ピンとこない」3「正直もう買わない」 2「ぶっちゃけゴミ」 1「ここだけの話刺客を送ったから帰り道気をつけろ」という具合に数字に置き換えて入力する。

 ※「置き換えて」(replace)という時はこの場合数字だけを入力する。これもプログラミングでよく出てくる単語。

 そうすれば前述のIF(OR())文は IF(感想セル>=7, "🎁", "") と短くなり、追加要求に対し IF(感想セル>=6, "🎁", "") と1文字変更するだけで済む。これが文字列よりも数値の方が何かと便利な点。

 ※IF文の A >= B とは「AがB以上(以上だからBも含む)ならば」という意味。

 ただし電話で感想を聞いた順に(順不同で)数字を割り振っていくと「7以上なら」とできなくなってしまうので、電話をかける前に設定(設計)する必要がある。そしてその仕様を誰もがいつでも確認できるよう記録を残すことも重要。じゃないと後から誰かが 10 「最悪」と追加してしまうから。これが設計は正しくても運用でミスが起きる代表例。

/*
「7以上」「6以上」「やっぱり8以上」とコロコロ変わることを想定し、「7」という数字は前回の税率のように別のところに1つセルを作って絶対参照すれば一箇所を書き換えるだけで済む。A1に入力するならば IF(感想セル>=$A$1, "🎁", "") という具合に。
*/

 一難去ってまた一難、昭和の店長が(笑)が電話中に「おっ、そういえば「全然平気」を入れるのを忘れてた」とか言い出したらどうだろう。

 「全然平気」というサウンドから 6「割と満足」 5「まーまー」の間あたりだろう。「隙間がないから5.5にしたオレって天才」と思うのはお預けにし、整数の列は整数のみを扱いたいと横から注文を付ける(*A)。

 そこでオモテナシ精神豊かなプログラマーは予め、

17「超満足」 15「スゲー満足」 13「結構満足」 11「割と満足」 9「まーまー」 7「ピンとこない」 5「正直もう買わない」 3「ぶっちゃけゴミ」 1「ここだけの話刺客を送ったから帰り道気をつけろ」

としておく。するとどこであろうと後から追加挿入できるし(この場合は10 全然平気)、「偶数は店長の行き当たりばったり癖」と同僚に共有することもできるから(笑)、偶数が沢山登場すれば後任者達が設計する際2つ空けよう、3つ空けようと予測の助けになる(笑)。

 ただし、「なぜこのように数字を割り振っているのか」を説明し仕様書を残さないと、その時その場にいなかった担当者や後任者が「数字にする意味あるの?」とか「何でこの数字飛んでるの?」とかロールバックしてしまう(生産性が下がる)から、時間を無駄にしないよう最後まで手を抜かずに。

 その思考が何をもたらしたかが重要というのはそういうこと。「動けばいい」で作ってしまうと数分後使えないかもしれないし、次の世代(後任者)に後始末を押しつけることになるかもしれない。核燃料のように。

 で、「9とか7じゃパッと見わからない!」と言われるかもしれない。そこはIF文で9なら"まーまー"と表示すれば良い。内部の値と表面のラベルが違うのはプログラミングの世界でよくあること。

 日頃「アナログがイチバン」なんて言っている人も、この段階で同じ事を紙と鉛筆でしようなんて思わないだろう。見方を変えると、情報処理を学ぶことで、将来何が要らなくなるのか、そしてその必然性が解る。

 もちろんこういったことを2時間も3時間も考えて捻り出すんじゃなく、サッとパッと行うことで必ず重宝される人材となるので、賢いのに“生き辛い”なんてことには間違ってもならない。

 と私は将来を担う子供達に伝えたい。


※「この関数を使えばもっと●▲■」というのは“プログラミング的思考”ではなく実際のプログラミングなので、ココでは最低限のものしか使っていない。

(*A)整数の列は整数のみを扱いたい:プログラミングには前稿の「数値」と「文字列」のように「型」という考え方があり、整数と小数は別の箱に入れることになっているから。エクセルは一般人向けだから柔軟に対応してくれるが、プログラミングでは通常そうはいかない。ちなみにPerlやPHPなどは何でも入れられるので気軽。

 プログラミングの文法は国語。度々指摘する「こちらが〜になります」がダメなのは、これから成るのであれば変数、もう成って固定なのであれば定数だから。プログラミングでは予めメモリ確保できるのか(静的)、未定(変動に備える=動的)なのかは非常に重要。例えば「こちらが有効な契約書になります」は、これからハンコを押すとか入金するとか特許が下りるとか、今から生じる何かを持ってして「有効な契約書」に成るのか、或いは既にそうなのかが確定しないから。会話なら文脈理解や表情でわかっても、設計前の要求事項(注文)は解釈に委ねるべきでない。だからプログラミング的思考の教育は国語とセットで。