memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Javaの初歩プログラムをScratchで作ってみた

Link: Scratch

フローチャートやPADなど図でプログラムを記述する方法がたくさん開発されてきました。これらの方法を活用してJavaプログラミングを教えられないものか検討してみました。

その前に大学生が初めてプログラムを作るときの壁を挙げておきたいと思います。経験的な話です。

  • デバッグができない
  • 構文を理解しても、問題文に対応するアルゴリズムの組み立て方がかわからない
  • 逐次処理(特に変数)の理解が難しい

プログラミングの授業も最初のうちは、教科書の例題をそのままエディタで打ち込んで動かすような課題が出ます。一生懸命入力していざ動かしてみると「シンタックスエラー!」必ず入力間違いが起こります。デバッグ技術は将来的に必要な技術ではありますが、経験がないときにすぐ動かないのはちょっと辛いようです。

個々の構文を理解しデバッグもそれなりにできてきたら、次に困るのが、問題文を理解してそれに対応したプログラムを考えるところです。パズルや戦略を練るのが好きな学生さんであれば、プログラミングはこの上ない楽しみなのですが、全員が全員そうであるわけではありません。

最後が逐次処理。デバッグとも関連するのですが、自分がコンピュータになりきってプログラムの実行過程をトレースするのが難しい。特に変数の値の変化です。これも苦手な人には難しい。

以上の課題はメタファ(箱や図など)を取り入れることで理解を促している場合が多いと思いますが、もう少し積極的にコンピュータを利用した対策がないか考えていました。

で、前置きが長くなりましたが、ScratchでJava(でなくてもいいのですが)の初歩の課題プログラムを作ってみました。

なぜScratchを選んだかと言いますと、Scratchでは部品を配置してプログラムを作成します。上に配置した部品から実行するのは理解しやすいはずです。また、制御構文なども部品で表現されているためブロックを視覚的に理解することができます。部品を配置するだけですのでミスタイプが発生せず構文エラーのデバッグに悩まされることもありません。プログラムの理解を容易にすることとタイプミスによる余計な時間を削減することで、アルゴリズム自体の検討に時間を割けるようになるだろうという期待でした。

まず、1から10までの合計値を求めるプログラム。カウンタ変数iを使っているところが”わざとらしい”ですが、このアルゴリズムを絵的に理解した後にJavaの構文に置き換えるのは簡単ではないかと思います。わざとらしい=学生が自然に発想しにくいのでは?ということです。

次に、if文。これも何とか表現することができそうです。else ifがないのですが、「でなければ」という部品でそれなりに表現することができます。

次は、リスト(配列)です。平均点を求めるプログラム。論理演算子も使えますので、もう少し複雑なプログラムも作れると思います。

最後に、最高点を求めるプログラム。うう。。。ん。判断が難しいですね。結局、Javaのプログラムと何が違うのか。。。

実際に実験してみないと何とも言えませんが。。。多少は効果があるのではないかと思います。ただ、こういった例題ではスプライト機能などグラフィカルな機能が活かせないのはちょっと楽しくありません。。。