「どこが『分からない』かが分からない」をなくすには? - PAD(Problem Analysis Diagram)の紹介 -

みなさん、こんにちは。
埼玉県さいたま市浦和区にあるロボット・プログラミング教室「ロボ団北浦和校」です。

今回のテーマは、「どこが『分からない』かが分からない」をなくすにはどうしたらよいか? です。

プログラミングを学んでいると、分からないことにぶつかることはよくあります。
子供たちであればなおさらです。ただ子ともたちに反応を見てみると、「『どこが』分からないのかが分からない」という感じです。

ロボットが期待したように動いていないのは分かります。ですからプログラムもどこかおかしいのは明らかです。けれどそこから先がわからないというパターンが子供のプログラム学習の場では多いのです。

その理由としては、子供たちがその問題を分析できていないということが考えられます。
たとえば次のような課題があったとしましょう。

  課題:
   壁際5cmまで進み、壁がなくなるまでそこで待ちます。
   そして壁がなくなったら再び進み始め、次の壁で止まろう。

ある程度、教えた子であれば壁際まで進み、そこで止まるプログラムは作ることができるようになります。EV3用のプログラムであれば次のようになります。(なお今回、進むためのモーターはMモーターを使用しています。またフローチャートですと右の図のようになります。)

LEGO EV3 mindstormsで超音波センサーを使って壁際まで進むプログラムとフローチャート

これで壁際で止まるプログラムはできました。
問題は次の「壁がなくなるまでそこまで待つ」処理です。ただこれは秋から始まる近鉄とのコラボ体験会の追加ミッションの醍醐味なのでここでは具体的なやり方は伏せさせていただきます。挑戦してみたい方はぜひ体験会に来てくださいね。

そしてこの「壁がなくなるまで待つ」部分もなんとかできたとします。いよいよ最後です。
最後は「再び進み始め、壁際で止まろう」ですから最初と同じに処理にすればよいのです。
これでミッションをクリアできるはずです。


さてこのように課題を説いてみたのですが、ここで重要なのは問題をいくつかの部分に分けて解いているということです。

「分析」という字は両方とも分けたり、細かくしたりする意味の漢字を組み合わせています。つまり問題を分析していくということは、「問題を細かく分けていく」ということでもあるのです。いわゆる要素主義的な考え方と言ってよいでしょう。

そして「どこが分からないか分からない」を防ぐためには、まず分けていくことが基本となるわけです。また「分かる」「分からない」という言葉そのものが分けるという字が使われていることからも、「分かる」ということは「分けている」ということであり、「分からない」ということは「分けていない」ということでもあるわけです。

では問題を分けていく(分析)していくためにはどうすればいいでしょうか?
そのやり方は数多いのですが、小学生にも分かる分析法というのはあまり多くはありません。
そこで今回はそうした方法の一つであるPAD(Problem Analysis Diagram)という方法を紹介します。

PADは1979年に日立製作所の二村良彦氏(後の早稲田大学教授)らによって開発された構造化チャートの一つです。基本的には上から下方向が処理の順番を示し、そして左から右に行くほど具体的で詳細な情報が記されるものです。

レゴ マインドストーム EV3 でライントレースのプログラムのPAD(Problem Analysis Diagram)図
PAD(Problem Analysis Diagram)図の例 これはライントレースのアルゴリズムを示しています。

PADは本来はプログラムを書くための設計図とも言えるのですが、その名の示す通り問題や課題を分析し、それを図で示すものでもあります。今回は本来の使い方からは少し逸れた形ですが、先ほどの課題をPADを使って分析してみましょう。

課題は、「壁際5cmまで進み、壁がなくなるまでそこで待ちます。そして壁がなくなったら再び進み始め、次の壁で止まろう。」

でしたのでPAD図で示すとこうなります。

LEGO EV3 mindstormsでプログラムを作るために役立つPAD(Problem Analysis Diagram)その1
はじめとおわりの間に課題を入れただけのPAD図。
要点を得ていますが、要点しかないので具体的にどうするかまでは不明です。
これをどんどん分けていくことで分析を行います。

そしてこの課題を分けてみましょう。ざっと分けると次の3つの部分に分けることができますね。問題文は2文だったことを思い出してください。ここが落とし穴ですね。プログラミングの問題はそれが何を意味しているか読み解くという国語の問題の要素もあるわけです。

LEGO EV3 mindstormsでプログラムを作るために役立つPAD(Problem Analysis Diagram)その2
まずは課題をできるだけ分けてみます。人間が分かる言葉でOK。

しかしこのままでは不十分です。なぜならこれはコンピューターには理解できないからです。
ここでもっと分けて考えてみましょう。具体的にコンピュータに分かるようにです。
するとさらに右側の深いレベル次のように記述することができます(今回は省略しますが、オレンジ色の部分が繰り返し処理を、緑色の部分が通常の処理を意味しています。なお、この課題は秋の体験会のボーナス課題なので一部は伏せておきます。もし興味がありましたらぜひ体験会で挑戦してみてくださいね。)。そしてこのレベルになってようやくコンピューターにとって分かるようになるわけです。これでミッションクリアというわけです。

LEGO EV3 mindstormsでプログラムを作るために役立つPAD(Problem Analysis Diagram) その3
次にコンピュータにも分かる言葉に直してみます。
オレンジ色はくりかえし処理(ループ)、グリーンは通常の処理(連接)

このようにモヤモヤとして分からない部分があったときにはまず分けて考えてみましょう。そして場合によっては、その順番や階層レベルを入れ替えたりすることで分からない部分を分かるようにしていきましょう。

なお本来、PADはプログラムの設計図とも言えるものです。基本的には3つのパーツ(通常の処理、繰り返し(ループ)、条件分岐)を覚えるだけですので小学生にもかんたんにマスターできます。それでいながら見やすく論理だったプログラムの設計図を作ることができるのでオススメです。また厳密な表記法にこだわらずにノートなどに手書きで書くことも論理的思考を養うのにはよいトレーニングになると思います。ロボ団北浦和校の授業でもPADを取り入れて説明やプレゼンテーションに役立ててもらっています。

PADそのものについてはまた別の機会に紹介したいと思いますが、今回の課題だと次のように書きます。

LEGO EV3 mindstormsでプログラムを作るために役立つPAD(Problem Analysis Diagram)その4
プログラミング部分のみのPAD図
各処理の部分は日本語だけでなく疑似コードや実際のプログラミング言語にそったものでもOK
ただ小学生なら日本語で書いておいても全く問題ありません

また参考までにフローチャートだと次のようになります。

PAD図とフローチャートの比較

比べてみるとフローチャートに比べるとPADのほうが見やすく処理の流れが頭に入ってきやすいのが分かるかと思います。
それでは今回はこれまで。また次の機会にお会いしましょう。


PAD(Problem Analysis Diagram)参考リンク
ツール

PadTools 1.3(フリーウェア) 
「;if」など単純な疑似言語を用いてPAD図を生成します。着色や並列処理の記述機能はないかもしれません。オススメ。
https://naoblo.net/misc/padtools/#id8

Gemini(シェアウェア)
ドローソフトのようにいくつかある図表の部品を組み合わせてチャートを作っていきます。各パーツに色も指定できるなど高機能。現在開発がストップしてしまっているようですが、現状でも必要十分な機能は備えています。オススメ。
https://www.vector.co.jp/soft/dl/winnt/prog/se480480.html

pad2ps プログラムのPAD図自動描画ソフト pad2ps
http://www.aerith.net/project/pad2ps-j.html


資料・マニュアル

PAD 東京大学大学院 機械系演習科目 「実践的シミュレーションソフトウェア開発演習」自習用教材より
https://lecture.ecc.u-tokyo.ac.jp/~hideo-t/references/pad/pad.html

素晴らしいPAD図 | ある計算機屋さんの手帳
http://my-web-site.iobb.net/~yuki/book/bit-pad/

強くお勧め!PAD図ならブレない!!フローチャート、アクティビティ図だと制御構造表現がブレる
https://qiita.com/madilloar/items/1455245130ba0e94f7df

5分で習得!PADで構造化プログラミング
http://ajt.pupu.jp/WorkaPlayer/?p=37

但馬文昭, 初心者プログラミング言語教育におけるフローチャートとPADの学習支援効果の比較者プログラミング言語教育におけるフローチャートとPADの学習支援効果の比較
https://www.jstage.jst.go.jp/article/fss/35/0/35_139/_pdf/-char/en


体験会、実施中です!

JAXAや近鉄と共同開発した体験会もまだまだ実施しております!
体験会の詳しい内容はこちら

体験会チラシ(さいたま市のプログラミング教室ロボ団北浦和校)
ロボ団北浦和校体験会(近鉄)

ロボ団 北浦和校は北浦和駅から徒歩で約5分程度のところにあります。
京浜東北線の各駅にアクセスできる方や、大宮、さいたま新都心、与野、浦和付近にいらっしゃる方は比較的、簡単にお越しいただけるかと思います。
講師一同、楽しみにお待ちしております!

ロボ団北浦和 付近のマップはこちらから

体験会のお申込みはこちらクリック
以下のQRコードからもお申込みできます

体験会申し込みリンクQRコード(ロボ団北浦和校)

お問合せはこちらをクリック