ITエンジニアのための勉強会・イベントレポート情報メディア

初心者のためのプログラミング入門第3回トップダウン開発とボトムアップ開発
skill

初心者のためのプログラミング入門第3回
トップダウン開発とボトムアップ開発

2019.07.10

 
  • このエントリーをはてなブックマークに追加

目標は「迷路を解く」

いよいよ、本格的にプログラムを作っていきます。目標は「迷路を解く」です。もちろん、迷路を抜けられることができるルートを人間が教えたのでは面白くもなんともありません。プログラムが自分で考え、どんな迷路でも抜けられるようにします。

ただ、その前に、猫が迷路を歩けるようにしなければなりません。そこで、袋小路、左コーナー、右コーナー、T字路などの迷路の通路の基本パターンを用意し、ここを通り抜けられるプログラムをまずは作っていきます。

左上のタブから「背景」をクリックし、左下の「背景を選ぶ」メニューから「描く」を選びます。これで、ペイントソフトのように絵を描くことができるので、黒い実線で4パターンの通路を描きます。太さなどはあまり気にすることはありません。適当に描いて、問題があれば後で修正をすれば十分です。

さらに、その前に、まずは猫が通路を歩けるようにしなければなりません。まずは袋小路の通路を使って、「猫が歩いて、行き止まりに当たったら、止まる」というプログラムを作ってみます。

細部を実験しながら作り、
それを組み合わせて
全体を組み上げるようなやり方が
ボトムアップ開発

このように細部を実験しながら作り、それを組み合わせて全体を組み上げるようなやり方がボトムアップ開発です。逆に、大掛かりな金融システムや業務基幹システムなどでは、先に全体構成を考え、それから細部の開発をしていきます。これがトップダウン開発です。

業務ツールの場合は、開発期間や開発工数を見積もる関係から、トップダウン開発をするのが普通です。しかし、ホビーや教育ではボトムアップ開発の方が向いています。全体構成を最初に決めるには、それなりの開発経験が必要になります。ボトムアップでは、わかりやすいところから作っていけばいいという気軽さがあります。試行錯誤や方針変更をすることがたびたびありますが、それもプログラミングの理解を深めることにつながっていきます。

プロのエンジニアでも、未知のテクノロジーを利用するプログラムを書くときは、まずは小さな試験プログラムを作って、挙動を見て、それから全体構成を考えていくというボトムアップ開発を、研究開発では取り入れることがあります。

猫を歩かせて、
行き止まりのところで止まるプログラム

では、猫を歩かせて、行き止まりのところで止まるプログラムを書いてみましょう。歩かせるのはもうお馴染みになった「10歩動かす」です。壁に当たったらすぐに止まれるように「1歩動かす」にしておきましょう。

これを壁に当たるまで繰り返すには、制御ブロックの「◯◯まで繰り返す」を使います。◯◯のところに「壁に当たる」を入れておけばいいのですが、これは調べるブロックの「◯色に触れた」を使います。色のところをクリックして、壁を描くのに使った黒にしておきます。これで完成ですが、せっかくなので、壁に当たって止まったら猫が鳴くようにしてみました。

スプライト(猫)の大きさは通路が歩ける大きさに調整してください。また、向きは90度(右向き)にしておきます。このような設定は、画面右下の「スプライト」で行うことができます。また、猫はドラッグすることでどこにでも移動できます。



うまくいったはずです。次は左コーナーに挑戦してみましょう。右下の「ステージ」をクリックすると、左上に「背景」タブが現れるので、左コーナーの背景を選びます。

同じプログラムを実行してみてください。壁にはあたりますが、そこで止まってしまい、うまく左に曲がってくれません。当たり前です。方向転換をする命令などどこにも書いていないからです。

壁にあたった後に、左に回転をして、再び歩き始めるプログラムを追加する必要があります。壁にあたったら、左に90度曲がって、再び歩き続ける。そんなプログラムに直します。猫をドラッグして、スタート地点に戻して実行してみてください。



試行錯誤をしていくところが、
趣味のプログラムの最も面白いところ

ところが、うまくいきません。壁にあたったら、90度曲がったところで止まってしまいます。プログラムにどこか間違いがあるのです。こういう試行錯誤をしていくところが、趣味のプログラムの最も面白いところで、間違いに気がついてうまくいったときは格別の喜びがあります。このような試行錯誤をすることで、プログラミング思考が身についていくのです。

このようなときに、ホビープログラミングでやるべきことは、目でプログラムをトレースしていくことです。頭の中で、プログラムを1行1行実行していくのです。いわば、人間コンピューターです。「黒まで繰り返す」のブロックの中は問題ないでしょう。1歩1歩右に歩いていくだけです。壁にあたるとこのブロックが終了し、次の「90度回す」まではうまく動いているようです。そして、問題の次の「黒色に触れたまで繰り返す」のブロックが実行されません。



それもそのはずです。左に回っても、足が壁についたままなのです。ですので、「黒色に触れたまで繰り返す」のブロックは、最初から黒に触れてしまっているので、まったく実行されることなく、プログラムの最後まで行ってしまっているのです。

なので、黒に触れて、左に回す前に、ちょっとバックさせて、壁から離してやる必要があります。

「-10歩動かす」というブロックを入れたところ、うまくいきました。



今度は背景をT字路にして同じプログラムを実行させてみましょう。これも問題なく、左に曲がって進んでいきます。

4つのパターンのうち、右折が残っていますが、これは少し難しい問題があるので、その前にプログラムを整理しておきます。

頭の中のアイディアを
プログラムにしていく時は、
やるべきことを1行1行並べていく感覚

前回、構造化プログラミングを学びました。構造化プログラミングとはループや条件分岐のことです。「黒色に触れたら」という部分が条件分岐ですし、「まで繰り返す」がループになっています。

頭の中のアイディアをプログラムにしていく時は、やるべきことを1行1行並べていく感覚でかまいません。しかし、ひと段落したら、全体を見直して、同じ命令が並んでいるところがあったら、ループを使って構造化しておきます。

構造化することで、プログラムそのものが短くなります。短くなるということは、構造が見やすくなり、同時にバグやミスが忍び込む余地が少なくなります。また、構造化をしておくことで、他のプログラムに再利用することも簡単になります。

ここでは「黒色に触れたまで繰り返す」ブロックが2回出てきます。これをまとめて構造化しておきます。

それには「ずっと」ブロックを使います。これで、コーナーに何回遭遇しても、猫は自分で曲がって歩き続けてくれるはずです。



4つのパターンで実際に動かす

新しいプログラムを4つのパターンで実際に動かしてみましょう。

袋小路の通路では、行き止まりにあたっても、うまく方向転換をして、元の位置に戻ってきてくれるようになりました。左コーナーでも、うまく曲がってくれます。T字路でもうまく左に曲がってくれます。

ここで問題になるのが、あえて飛ばしてきた右コーナーです。右コーナーを歩かせてみると、右に曲がらず袋小路であるかのように戻ってきてしまったり、道幅が狭いとコーナーのところでぐるぐる回ったり始めてしまいます。



この問題をどう解決したらいいでしょうか。これを次回解説します。ヒントを出しておくと、左右の壁が空いているかどうかを調べるブロックを作っておき、先に調べておいてから曲がる方向を命令するようにすればいいのです。では、どうやったら左右の壁が空いているかどうかを調べることができるでしょうか。それを頭の中で考えておいてください。

-----------------------------------------------------------------------------

※「初心者のためのプログラミング入門のバックナンバーは以下からご覧ください。

初心者のためのプログラミング入門第1回 「順番」と「分岐」だけわかればプログラミング思考ができる

初心者のためのプログラミング入門第2回 「構造化プログラミングにいきなり挑戦してみる

-----------------------------------------------------------------------------

原稿:牧野武文(まきの・たけふみ)

テクノロジーと生活の関係を考えるITジャーナリスト。著書に「Macの知恵の実」「ゼロからわかるインドの数学」「Googleの正体」「論語なう」「街角スローガンから見た中国人民の常識」「レトロハッカーズ」「横井軍平伝」など。

初心者のためのプログラミング入門第3回トップダウン開発とボトムアップ開発

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW