新人教育で気がついた事
今年も、ある会社の Lego Mindstormを使った新人教育のサブ講師をしました。
今回の新人の方もプログラミング未経験者が多く、プログラミングが出来る人から見ると「なぜこんな事が分からないの?」という場面に遭遇しました。
モーターを動かす、センサーの値を取得するなどのサンプルコードを Lego で動かした後、実際の演習課題のプログラムを書いてもらうのですが、if文 と while文 の違いが分からない(イメージ出来ない)人が4割くらいいるのです!
課題の最初の部分では、タッチセンサー(スイッチ)が押されたら走り出すというプログラムを書きます。
設計書には、
- タッチセンサーが押されるまで待つ
- モーターを起動し前進する
- ...
のように書かれています。 ここから上手く書けない人の殆どが以下のようなコードを書いて動かない!? と悩んでいます。
if (touchSensorPushed()) { forwardMotor(); }
もちろん、前のJava言語コースで while文に付いては習っているので、while文に付いてたずねると正しい答えが返ってきます。
「タッチセンサーが押されるまで待つ」 という文が「タッチセンサーが押されたかチェックし、押されてなければそれを繰り返す」 という while文 (if + goto)に変換できないようです。
Java言語の学習過程で文法や文の使い方は学びますが、ノイマン型コンピュターの基本的なプログラミングのパターンに付いての学習が足りないのかな? と思いました。
たしかに、「〜を待つ」 という行動が「繰り返し」に変換されるというのは分かりにくい変換なのかもしれませんね。