新人教育で気がついた事

今年も、ある会社の Lego Mindstormを使った新人教育のサブ講師をしました。
http://www.legoeducation.jp/mindstorms/about/img/rcx.jpg

今回の新人の方もプログラミング未経験者が多く、プログラミングが出来る人から見ると「なぜこんな事が分からないの?」という場面に遭遇しました。
モーターを動かす、センサーの値を取得するなどのサンプルコードを Lego で動かした後、実際の演習課題のプログラムを書いてもらうのですが、if文while文 の違いが分からない(イメージ出来ない)人が4割くらいいるのです!


課題の最初の部分では、タッチセンサー(スイッチ)が押されたら走り出すというプログラムを書きます。
設計書には、

  1. タッチセンサーが押されるまで待つ
  2. モーターを起動し前進する
  3. ...

のように書かれています。 ここから上手く書けない人の殆どが以下のようなコードを書いて動かない!? と悩んでいます。

  if (touchSensorPushed()) {
     forwardMotor();  
  }

もちろん、前のJava言語コースで while文に付いては習っているので、while文に付いてたずねると正しい答えが返ってきます。


「タッチセンサーが押されるまで待つ」 という文が「タッチセンサーが押されたかチェックし、押されてなければそれを繰り返す」 という while文 (if + goto)に変換できないようです。

Java言語の学習過程で文法や文の使い方は学びますが、ノイマン型コンピュターの基本的なプログラミングのパターンに付いての学習が足りないのかな? と思いました。

たしかに、「〜を待つ」 という行動が「繰り返し」に変換されるというのは分かりにくい変換なのかもしれませんね。