LEGO MINDSTORMS
今年のソフトウェア開発新人教育― レゴ マインドストームで体感実習しよう
今はソフトウェア開発者を育てるのが大変な時代。Web技術は当然、開発言語にDB、さらにはセンサーデバイスまで、幅広い技術の習得が必要だ。新人教育でレゴブロックのロボット開発キットを活用して、この問題を軽減する案を示す。
レゴ マインドストーム*1は、ものづくりや、いろいろな学習ができるロボットキットとして、子供だけでなく大学の講義や社会人向けの研修にも利用されている。本稿では、ソフトウェア開発教育にレゴ マインドストームを利用することが高い効果をもたらすことについて説明する。
- *1 LEGO、レゴ、MINDSTORMS、マインドストームは、LEGO Groupの登録商標である。本文中では、®マークを省略する。
まずはレゴ マインドストームについて簡単に紹介しよう。次に最近のソフトウェア開発教育の課題と、その問題軽減のために新人教育にレゴ マインドストームを使うことについて説明する。
レゴ マインドストームとは、どんなブロックキットか
レゴブロックで作るロボット開発キット
レゴ マインドストームは、レゴブロックのパッケージ製品(シリーズ)の1つである。中心となるのは、マイコンを内蔵するインテリジェントブロック「NXT」(図1の中央にあるブロック)である。PC上で作成したプログラムをインテリジェントブロックに転送して実行することで、センサーからの入力に応じて、モーターを使った機構を動す、ランプを光らせる、音を鳴らすといったことができる。また、Bluetoothを使ってPCやNXT同士で通信できるようになっている。
このインテリジェントプロックに、モーターやセンサー、そして動くことに重点を置いたテクニックシリーズのギアやシャフトなどのパーツをパッケージにしたものが、レゴ マインドストームである。このパッケージは、レゴブロックを使って組み上げた機械的な機構を持つ機器をプログラムから制御するロボットが開発できる「ロボット開発キット」といえるだろう。
なお、レゴ マインドストームには、レゴ社がレゴブロックの販売チャネルを通じて販売する「一般用(リテール版)」と、レゴ エデュケーションが販売代理店を通じて販売する「教育用」がある。本稿の内容には、これらの製品間の差異は影響しないので、写真や商品の区別が必要な場合を除き、本文中では「一般用」「教育用」の表記を省略し、単に「レゴ マインドストーム」と表記する。
工学的素養や問題解決力の育成に利用されている
本来、レゴ マインドストームは、小中高校生に理科や技術などに興味を持ってもらうために開発されたもので、学校の授業などで、物理や工学的素養、問題解決力や論理的思考力などを養うために利用されている。また、多数の高専や大学が、プロジェクト学習の対象システムや、制御システムやソフトウェア開発のような専門教育の実験用として、講義や研究に活用している。
企業の技術教育や新人研修においても、チームによるプロジェクトの推進、システムの開発プロセスの演習、ソフトウェアの開発技術の習得、制御システムの物理的なモデルの開発演習などに使われている。ロボットを動かす仕組みには簡便な方法も選択できるので、情報系やマネジメント系の研修で採用されるケースも少なくない。
いろいろなロボットを自由に組み立てることができる
機器を動かすタイプの演習用キットは他社にも各種ある。しかし、CPUの載った基板だけでロボットのような動きのあるものが容易には作れないものであったり、あらかじめ決まった形のロボットとして使うものであったりする。レゴ マインドストームは、レゴブロックの仲間であるから、さまざまな種類の動くロボットを組み立てて試し、さらに別のロボットに組み直して試すといったことが自由にできる。また既存のレゴブロックがそのまま使えるので部品の補充や追加も容易である。このような点が他のキットと比べて大な強みとなっている。
多様な開発環境が利用できる
レゴ社が提供している開発環境の他に、多くの団体や有志によって多彩な開発環境が利用できるようになっている。
- MATLAB/Simulink(MathWorks社)
- LEGO® MINDSTORMS®用NI LabVIEW
- leJOS(Tiny VMと呼ばれるサブセットのVM上のJava環境)
- TOPPERS JSP(μITRON4.0仕様に準拠したリアルタイムOS)
- NXC(C言語に似たマインドストーム用の言語)
PC上で動作させたプログラムから、通信によってレゴ マインドストームをリモート動作させる開発環境もある。
- Enchanting(Scratchベースの子供向けプログラミング環境)
- Ruby、Python、Javaなどに提供されているPCからコマンドを送るライブラリ
マインドストームを動かすのに利用可能なプログラミング環境については、ウィキペディアのMINDSTORMSのページの「8.プログラミング言語」にまとめられている。
後継の新シリーズ「EV3」が発売中
レゴ マインドストームには、「RCX」と「NXT」という製品があったが、2013年9月に「教育版レゴ マインドストーム EV3」が発売された。
EV3は、OSとしてLinuxを搭載しているので、レゴ社が提供している開発環境の他に、Linux上で動作するC言語やPythonなどで作成したプログラムを動かすことができると報告されている(参考: (株)アフレルの「外部機器との接続」に関する技術情報のページ)。
また、名古屋大学が、EV3上でμITRON4.0仕様に準拠したTOPPERSのリアルタイムOSの機能が利用できる「EV3用プラットフォーム」を開発している。
最近のソフトウェア開発教育に起きていること
開発者を取り巻く環境が広く複雑になっている
最近は、多くの開発者が、PHPやRubyやJava、データベースの使い方、アプリケーション開発用のフレームワーク、JavaScriptやCSSなど広い範囲の知識と経験が必要になっている。さらに、近年はスマートフォンやタブレットの普及から、iOSやAndroidに関する開発技術も欠かせない。組み込み機器でも、ブラウザから設定するなどWeb環境が必要なシステムが増えてきている。そして、クラウドや仮想環境が一般的になってくると、大規模なサーバー群や複雑なネットワークのための技術や知識、今日的なシステムに関する運用の技術や知識も必要になってきている。
開発者向けの教育範囲も拡大し、新人教育の負担も増大
開発者を取り巻く環境が広く複雑になったことで、関連する部門の新人についても、いくつものプログラミング言語、設計手法、ツール、デバイス連携などについて習得させる必要が出てきている。学ぶ範囲と量は年を追うごとに増大し、仮に情報系の学科出身であっても、開発者としてカバーすべき領域は、学生時代に本人が身に付けられる範囲、量、規模を越えてしまっている。
一方、新人教育に割ける時間は限られている。それゆえ、研修担当部門では、
- 知っておくべき範囲全体について「広く浅く」学ぶ
- 特定の言語や環境に「的を絞る」代わりに開発全体を深く体験させる
のいずれかの考え方に従って教育計画を立てている。しかし、それでも多くのことを学ぶのに十分な期間を割り当てるのは難しい。中には、演習のねらいに沿わない要素も同時に盛り込もうとして、本来のねらいがぼやけてしまい、結果的に教育の効果を損ねてしまうようなことも起きている。
ソフトウェア開発教育の隠れた問題
よくあるソフトウェア新人教育の風景
例えば、ソフトウェア新人教育における技術研修として次のような講座構成を想定してみよう。実際には、先に説明したように学ぶことは年を追うごとに増えているので、さらに多くの講座が必要になっているはずである。
- Javaプログラミング演習
- データベース(SQL)演習
- Webシステム(サーブレット、JSP)演習
- システム設計演習(UMLやER図)
- Webアプリケーション開発(総合演習)
この例は「前半でプログラム作成に必要な基礎技術を扱い、設計法を学んだ後に、総合演習で仕上げ」という構成になっている。一見、この演習で十分なように思えるが、いざ総合演習になると、
- 記法は知っているはずなのに、顧客要求から設計書を作れない
- クラスの書き方を知っているのに、新しいクラスが作れない
- 設計書は形だけになり、あとはプログラムだけを試しながら作る
- 障害が見つかっても、設計の問題と分からずプログラムをいじり回す
といった状況に陥っていることが少なくない。結果的に、設計書は儀礼的な意味合いの資料だと思われ、プログラムの開発は泥臭いもの、できればやりたくない作業と思ってしまうのが現実だろう。
潜んでいる課題は何か
先の講座構成は、一見妥当な構成に見えるが、実は開発中に使う技術を個別に演習しているだけに過ぎない。総合演習になるまで、それぞれの演習で学んだ技術や成果物につながりが必要なのだと気づく機会がないのだ。だから、要求文から設計書を作ることになって戸惑っているし、設計書とプログラムのつながりが分からないままプログラムを作ったために設計書が形骸化し、障害の原因を探求するのに設計書を使わないといったことが起こる。まとめると、先に示した講座構成には次のような課題が潜んでいるといえるだろう。
- 要求を聞いて設計書を作る演習をやっていない
- 設計書に対応したプログラムを作る演習をやっていない
- うまくいかないときに原因を探索するような演習をやっていない
- 試行錯誤では作れないような、設計を必要とする課題をこなしていない
逆にいえば、新人自身が学ぶ自覚を持って、身に付くような学習にするためには、教育を受けるときに次のような状況に置かれるようになっていればよいのではないだろうか。
- 問題解決には知識だけでなく実験で試行錯誤する
- できていないと自分が困るような状況になるとよい
- うまくいきそうでうまくいかないことに向き合って悩む
- 新人自身が「解決したい」と感じる張り合いのある課題がある
レゴ マインドストームを活用した教育は、このような状況を提供するのに向いている。
レゴ マインドストームを活用して問題を軽減しよう
新人教育にレゴ マインドストームを使うとどんなことが起こるか
レゴ マインドストームを使った演習を新人教育で活用すると、次のようなことが起きる。
- 自分のプログラムでロボットが動くと、想像以上に楽しい
- ロボットと外界のやりとりには、多くの選択肢が見つかる
- ロボットが動いていないこと、講師や他の人にもすぐ分かる
- 頭で考えたソフトウェア通りにロボットが動くとは限らない
次の動画は、ロボット演習の例である。光センサーとモーターを使って経路に沿って荷物を運搬し、超音波センサーで配達先の壁を認識したら、停止しして荷物を降ろし、その後、車庫へ向かうという課題である。この動画は、SQEP*2という専門学校生がシステムの設計を主体的に学ぶというプロジェクトで実施したものだが、新人教育でレゴ マインドストームを活用している企業でも同じような演習を実施している。
動画1 ロボット演習の例
実際には、簡単にこの動画のようにうまく動作するわけではない。システムの構造と振る舞いを設計し、それに合わせてプログラムを作成するという作業を繰り返しながら、荷物を載せても動かない、配達先で止まらない、経路から外れてしまう、といった様々な問題に向き合い、原因を考えて解決して、やっと完成に至るのである。
このような演習を実施した結果、自分が「学びたい」と思って学ぶ中で、悩んだプログラムが動くようになることで自信がつき、ソフトウェアの構成方法や動き、ソフトと機器のつながりが実感できるようになる。もう少し詳しく見てみよう。
想像以上に楽しい(もっと使ってみたくなる)
もともと、生命がないものが勝手に動く様は、どこか不思議な魅力がある。例えば、プラレール、ミニ四駆、時計の振り子、1人で歩く犬のぬいぐるみなどが動く様子を眺めているのが好きな人は少なくないだろう。レゴ マインドストームのロボットを使った演習で、一定時間走って勝手に止まる、壁にぶつかったら後退する、黒い線や壁に沿って進む、といった実験をやると、
- 「おー!」と歓声が上がったり
- 「おもしろーい」と何度も試したりする
といった様子が見られる。本人たちの想像以上に楽しい体験をしているので、無意識のうちに、
- もっと続きをやってみたくなる
- もう少し複雑なことができないか自分で考えてみたくなる
- うまくいかないときも、やり直してみたくなる
といった気持ちになっている。これは、新人自身が「課題を解決したい」と感じ、積極的に演習に取り組んでいることを意味している。主体的に学んだ人が獲得する教育効果が期待できるわけである。
次の動画もSQEPの演習中で受講生が試行錯誤している途中を捉えたものだ。受講生が、衆目の中で課題に向き合い、講師と議論しながら、主体的に取り組んでいる様子が分かるだろう。
動画2 ロボット演習で試行錯誤する例
多くの選択肢が見つかる(答え探しではなく自分の考えを示したくなる)
設計の演習は、「これが正解」というものにしない。学生から社会人になったばかりの新人は、1つ思いついたらそれを正当化しようとする傾向が強い。あるいは、正解を聞いてそれを覚えればよいと考えがちだ。しかし、それでは設計の演習にならない。そこで、
- まず複数の選択肢を考え出す(みんなで議論してもよい)
- 選択肢から1つ選択し、選んだ自分の考えを示す
という順序で話し合いながら設計してもらうように指導する。ここでも、「動くロボットにどんなふうに動いてもらおうか」と考えるのは楽しいもので、いろいろなアイデアを出そうとしたり、他の人の出したアイデアについて議論したりする。どうしてそれがよいのか? 技術的に優位なのか、顧客の満足度が高そうなのか、実現が容易か……など。
例えば、「黒い線に沿って走る方法はひと通りじゃないでしょ?」と問いかけて、いろいろなアイデアを出してもらう。線の片端を認識しながら走る、線の両端を認識しながら走る、線の上では直進し線から外れたら向きを変える、線から外れている度合いに応じて曲がる量を変えるなど、単純な方法であっても線に沿って走る方法は複数見つかる。
あるいは、到着したら到着音(決まった高さの一定の長さの音)を鳴らすという場合も「対応方法は1つじゃないはずでしょ?」とアイデアを出してもらう。1回だけ鳴らす、ずっと鳴らし続ける、一定間隔で鳴らす、だんだん間隔を短くしながら鳴らす、音の大きさを徐々に変える、時間がたったら別の音(督促になる音)に変えるなど、鳴らす音が同じであっても鳴らす方法は複数見つかる。
新人教育の演習課題は、答えを用意していることが多く、新人も正解を出すことや「答えを覚えた方がよい」と考えがちだ。だが、ロボットが動く様子をあれこれ考えるのが楽しいと、設計上の選択肢を考えるためにアイデアを出すのが苦にならない。さらに、多くの人に自分が気に入った案を認めてもらおうとして持論を主張するようになる。
ロボットが動かないと他の人にすぐ分かる(ごまかしが利かない)
ロボットの動作は外界とのやりとりに現れるので、多くの場合、目でロボットの動きを観測して判断することになる。しかし、ロボットを動かして確認しようとすれば、どうしても近隣の同僚や、指導して回っている講師の目にも入ってしまう。
例えば、先に示した動画では、ロボットを動かすと、
- 線に沿って走るはずが、沿わずに旋回してしまう
- 壁にぶつかっても、止まらないでガツガツとうごめいている
といった不具合が発生している。どうにもバツが悪いが、自分でもできていないと認めるしかなくなる。またその様子を、他の人も気付かれてしまうし、講師も眺めているのでごまかせない。
新人は、差が付くのを恐れがちである。それで、自分の演習がうまくいっていないのに、できたことにして済まそうとすることがある。しかし、ロボットは容赦がなく、本人の思ったようには動かず、本人の作った通りに動作する。まさに「できていないと自分が困る状況」なのである。このような状況に置かれると、新人の心中に何とか解決しようという意志が生まれ、自ら結果を出す努力を始めるようになる。
頭で考えたソフトウェア通りにロボットが動くとは限らない(想定外のことが起こる)
レゴ マインドストームのロボットには、光センサー、タッチセンサー、超音波センサーなどが使われていて、これらのセンサーの入力の値の変化に応じて、モーターを動かすことで所望の動作をするようにプログラムを作る。しかし、センサーには外界の変化(外乱)の影響がある。例えば、人の影やゴミなどが光センサーの返す値を乱すこともあるし、タッチセンサーを一度押しただけなのに、二度、三度押されたかのようにロボットが振る舞ってしまうなどということが起きる。
新人からすると、頭で考えていなかった想定外の状況なので、何が起きていて、どうしてそんな振る舞いをするのか分からなくて悩む。そして、条件を絞って実験したり、質問してヒントをもらったりしながら、原因を突き止めようと探索する。条件を変えたつもりが、動作は何も変わらず空振りに終わったり、期待と違うところが動かなくなってしまったりする。
そのような苦労を繰り返すうちに、あるとき原因がわかって「あ!」と思う。いわば原因探索のアハ体験*3である。強い刺激のある体験をしたことで、自分の思い込みの外にもいろいろなこと影響することがあるということ考えられるようになっていくのである。
- *3 茂木健一郎のアハ体験
まとめ:主体的な学びと失敗による学びが力を付ける
レゴ マインドストームのロボットを使ったソフトウェア新人教育は、次のような作用によって学習効果を高められることを紹介した。
- 動かすのが楽しいので、主体的に学ぶ姿勢になる
- やり方が幾通りもあるので、選択肢から選ぶという設計方法が学べる
- 動いている様子が衆目を集めるので、できたふりができない
- 想定外のことが起きて悩むが、解消したときのアハ感が大きい
まずは、新人が楽しく夢中になってものづくりに取り組む機会を提供するというだけでも、レゴ マインドストームを活用する意義は大いにあるはずだ。新人の教育だけでなく、いろいろな教育の効果アップに、皆さんも活用を考えてみてはどうだろうか。
本稿は、社内での新人教育を題材に解説した。他に、別の会社の社員と同じチャレンジを通じて競い合いながら学ぶ機会として、「ETロボコン」のようなイベントがあることを紹介しておく。
以上。