他にない、上質なITを

Column

プログラミングの習得に必要な「国語力」とは


Pocket

「独習Python入門」という本を出版させて頂いてから、「プログラミングを未経験者に教える」機会が増えました。未経験者の方がプログラムを書けるようになっていく過程やつまづいてる過程を見ていく中で、プログラミングには「国語力」が何よりも求められるのだなと強く感じました。

YESかNoで、判断できる基準を作る

プログラムはコンピューターに実行させる命令の集まりのことです。「まずは、これを作れ。次にこうしろ。もしこうだったら、中断しろ・・・」そんな感じで、コンピューターに対して指示を1つ1つ出していきます。それらを組み合わせてシナリオを作る作業がプログラミングです。

複雑そうに見えるこのシナリオですが、構造はとてもシンプルです。プログラミングの実行順序を制御する方法は、以下の3つしかありません。

  1. 逐次実行
  2. 条件分岐
  3. 繰り返し

逐次実行は書いた順番に実行すると意味です。それを除いた条件分岐と繰り返しが、プログラミングの基礎文法です。プログラミングにおける文法は処理の流れや内容をコントロールするためのものです。プログラミングを行うにあたっては、まず具体的なケースを想定して、具体的なデータにおける共通点を見つけなければなりません。一般的には「抽象化」と言われる思考のあり方です。

抽象化する範囲はそれぞれです。「ある整数値(x)の倍数」であるというくくり方も出来ますし、「数字に3が含まれている数」というくくり方も出来ます。こういった条件を設定すれば「Xの倍数であるか否か」「数字に3が含まれているか否か」という条件を設定することで、必ずYESかNOかを判断することが出来ます。

FizzBuzz判定

FizzBuzzという、プログラミングの課題で有名な課題があります。内容は以下の通りで、これらの条件を「全て」満たすプログラムを書くのがゴールです。

  1. ある数字が、3の倍数なら”Fizz”と画面に表示する
  2. ある数字が、5の倍数なら”Buzz”と画面に表示する
  3. ある数字が、3と5の倍数なら”FizzBuzz”と画面に表示する
  4. ある数字が、上記の条件を全て満たさないなら、その数字を画面に表示する

この処理の肝となるのは「倍数の判定」です。倍数を言い換えれば、ある数で割り切れることができる数です。プログラミングで割り切れるかどうかを判断するには、あまりが0かそうではないかで判断します。このレベルの抽象化を行い条件として設定すれば、整数値ならどれでもOKになります。

ある数字は、どういった数字になるか分かりません。10かもしれませんし、334かもしれませんし、9478354071のような巨大な数字かもしれません。でも、どの数字が判定対象になったとしても、上記の判断基準は間違ってはなりません。それは不具合になってしまいます。通称「バグ(Bug)」と言われるものです。

今回は「数字である以上、Fizz/Buzz等の判定が正しく行われる」という決まりごとがあります。それに対して、その通りの結果にならない場合は、プログラムが正しくないと判断され不具合があることになります。

少し話がそれましたが、プログラムの世界はYES or Noが9割です。 扱う情報の性質を鑑みて、どういったYES or Noの判断基準を与えれば理屈が成り立つのかを考えるのか、もう少し砕けて言うと「何と何を比較して、白黒つけたらいいのか」を決定すること。これが、プログラミングにおける国語力だと考えています。

数あてゲーム

FizzBuzzの条件分岐は比較的単純なので、頭に入りやすいと思います。プログラミングの初学者が苦労するのが、繰り返しをどう使えばいいかです。以下のような数あてゲームを作るという時に、少し面食らう方がいます。

  1. 答えとなる数を1〜100の間でランダムに決定する。
  2. ユーザーは数字を入力し、入力値によって以下のような動作をする。
  3. 入力値が答えより大きかったら、「もっと小さい数だよ」と画面に表示
  4. 入力値が答えより小さかったら、「もっと大きい数だよ」と画面に表示
  5. 同じだったら「正解!」と画面に表示して、正解までに要した回答回数を画面に表示

この場合、条件分岐はもちろん必要ですが、それだけでは不十分です。「正解」にたどり着くまでに、どれだけ回答を必要とするか全くわからないので、回答する回数が何回になろうとも、不正解である以上は何度も何度も回答を受け付ける必要があります。

正解・不正解の判断を行い、不正解なら回答を受け付けて正解かどうかを判断し続ける。そういった繰り返しを行う必要があります。正解・不正解の判断を行うには、「答えと入力値が同じか、そうじゃないか」で判断できます。正解という結果が成り立つための条件を、データを比較することで決定づけます。

「要は、こうでしょ?」と「例えば、どうなる?」

プログラミングにおける表現は、YESとNoで判断できる基準を作ることが肝要だという話をしました。しかし、そうは言ってもどうやって抽象化していいのかピンとこない・・・ということも大いにあります。そういう時は、まず具体例を思い浮かべて処理の流れをイメージしましょう。

答えが10になったとして…変数answerを仮に10にする。で、answerと入力値を比較して… という格好です。変数という単位で抽象化すると処理の流れは検証できないので「例えば、ここに10が入ったら」という形で処理の流れを追いかけていきます。そうする中で、共通する属性が見つけられます。「つまり、こうなればいいんだ」という答えが見つかります。

プログラミングは「要は、こういうことでしょ?」と「それが正しいなら、例えばこの場合は、こうなるよね?」という抽象と具体を行ったり来たりすることが求められます。こういった訓練を積んでおくことで、色んな課題解決に対して応用が効くことになりますので、プログラミングを楽しんで取り組んでいただければと思う次第です。


おすすめ記事

最後までお読みいただきありがとうございました。
こちらの記事にご興味を持っていただいた方には、こちらの記事もおすすめです。

執筆者について

著者

(株) クオリティスタート 代表取締役

湯本堅隆(YUMOTO Michitaka)

略歴

1979年生まれ。ISPの電話サポートのアルバイトをきっかけにIT技術に興味を持ち、2003年にアイ・ティ・フロンティア(現タタ・コンサルタンシー・サービシズ)に新卒で入社。

SIer在籍期間からブログ「GoTheDistance」でSIerを巡るIT業界のあり方・エンジニアのキャリアについて記事を書き、累計はてなブックマーク数40,000を超えるブログになりました。

「ITを使いこなしたいなら、ユーザー企業は内製すべき」と主張しているうちに、2009年から雑貨卸の有限会社 エフ・ケーコーポレーションで内製化を1人で担当するはめに。メーカー送料ロットのない雑貨卸というビジネスモデルをITシステムを実装することで確立し、経済産業省が主催するIT経営実践認定企業に選ばれました。

「システムを作る人材や会社」はあっても「何が正しいITシステムなのか」を事業会社の立場で考え、デザインできる人材が枯渇している。

この課題を解決したいという思いから、会社を創業しました。

重度の野球好きで、東京ヤクルトスワローズのファンです。



IT企画の進め方

ITプロジェクトの進め方、公開中

事業を運営するために必要なITや業務システムの企画の作り方、プロジェクト担ってからの進め方をワークフローという形で完全無料公開しています。10000文字超えの力作です。是非御覧ください。

ITプロジェクトの進め方

IT戦略・IT企画の無料相談承ります。

ITプランナーが御社にお伺いして、御社のシステム企画のディスカッション・パートナーをさせて頂くサービスです。60分時間限定ですが、IT企画のモヤっとスッキリさせるお手伝いをさせて頂けたら。

ITプランナーへの無料相談

お問い合わせはこちらから