CodeZine読者の皆様、こんにちは。本稿は、教育ICT(EdTech)のオンラインメディア「EdTechZine」で公開中の記事からの転載(一部)です。全文はEdTechZineのページでお読みいただけます。
はじめに
LEGOというと筆者が子どもの頃はプラスチックの四角いブロックしか思い浮かびませんでした。しかし、現在では、LEGOブロックでかなり細かい自動車などの乗り物や有名な建造物なども作成でき、大人も満足できるほど精巧な作品の作成が可能になっています。
昨今のSTEAM教育の流れもあり、ますます「仕組み」を学び「創造性」を育むことは大切になってきています。LEGO社ではそういった流れの中、LEGO社のHPにもある通りさまざまなサービスや商品を提供しています。
本連載では、その中で「中学生以上」を対象に提供されている「LEGO MINDSTORMS EV3」を紹介します。「中学生以上」というと非常に単純なものと感じてしまうかもしれませんが、大人であっても十分楽しめる商品であり、多くのことが学べます。
また、自分で作ったものが実際に動くシーンを体験すると画面上だけでは感じられない楽しさや感動を得られ、プログラミングの楽しさをより深く体験できます。
対象読者
- プログラミングについて学びたい人・教えたい人
- プログラムが動く楽しさを知りたい人
- プログラムでロボットを動かしたい人
プログラミングを学ぶとは
LEGOでの具体的なプログラミングの内容を紹介する前に、プログラミングを学ぶとはどのようなことなのかを考えてみます。プログラミングというと、コードを書くためにプログラミング言語の使い方を覚えることと同じだと捉える方もいます。
しかし、実際にはプログラミング言語だけを覚えても、いざ自分でアプリケーションを作ろうと思ってもどう進めればよいのかわからない状態になることが多々あります。
これは、アプリケーションを作る上で必要な周辺知識や理解が不足していることも一因であり、プログラミングを学ぶとは、以下の4つのことを学ぶということだと筆者は捉えています。
- コンピュータの仕組み
- 問題解決の手順(アルゴリズム)
- プログラム言語
- ルールの作成(ライブラリ)
この中で特に重要なのが「問題解決の手順」を作ることです。これらをコンピュータの世界では「アルゴリズム」と呼んでいます。
筆者がアルゴリズムを勉強する際には、数値の並び替え方法であるソートのアルゴリズムや、探索木といってデータを検索するためのアルゴリズムなどが中心でした。
これらのアルゴリズムも大切なことは今でも変わりありませんが、現在のプログラミングで実際にこれらのアルゴリズムを使うことはありません。なぜなら、これらは既に関数として用意されているからです。
むしろ、今では正解が明確には示せない問題に対応する必要性が多くなったために、問題解決の手順を学ぶにも数学的解決方法ではなく、試行錯誤による創造性の方がより重要になってきています。
こういった力は、プログラミングを職業として必要とする人だけではなく、今後は広く多くの人が必要となるスキルとして位置付けられています。
プログラミングを学ぶ上での現在の課題
現在では、先に記した4つのことを学ぶにも、プログラミングを取り巻く環境は非常に複雑です。実際に開発現場で使われているものをそのまま使って学ぶのは非常に難しくなっています。
特に、プログラムを学ぶ上でインターネットが普及する前と後ではプログラムを取り巻く環境が図1のように大きく変わってきたことが、このような大きな隔たりを生んでしまった原因のように筆者は感じます。
インターネット普及前では図1(左)に示すように基本的には自分でプログラミング言語を使って作成していました。しかし、インターネット普及後には、図2(右)に示すようにアプリケーションを作成するために、ほとんどの人が言語をそのまま使うのではなく、フレームワークという基盤となるライブラリを利用し、各種機能を作るためのライブラリを使うのが必須になっています。
また、プログラミング環境自体でもそれらを管理するためのIDE(総合開発環境)やソースコードの履歴等を管理するためのVCS(バージョン管理システム)が使うことが前提になっています。
これらはインターネットの普及により、誰かが解決した方法を使って、新しいものを作ることが容易になったためです。インターネット以前も同じようにライブラリなどがありましたが、それらは通常は有料であり、学習のために使われることはありませんでした。
従って、「プログラミング言語を使う」ことを前提にすると、これらの関連ツールの使い方も含めて学ぶ必要が生じてしまい、また、その比重が非常に大きくなってしまったのです。
これらは、より本格的なアプリケーションを作る上でより効率的に作業できるように進化してきたわけですが、純粋にプログラミングを学ぶ時点では、あまりにも余計なことが多すぎる現状があります。
このような背景から、プログラミング言語を使うとむしろ「プログラミングを学ぶ」ということが何なのかが、ぼやけてしまうケースが多いでしょう。
プログラミングの本質とは
プログラミングとは、人間が行っていることをコンピュータでも行えるようにするための翻訳作業です。
人が課題を解決するために行う「手段」自体が「プログラムを書く」ことであり、先ほどの4つはコンピュータで解決する上で必要な理解ですが、その前にまず、「人」と「コンピュータ」の中間では何をしなければならないのか考える必要があります。
これを示したのが図2です。
プログラミングが苦手な方によく見られるケースとして、人間が考える曖昧なルールをそのままコンピュータでどのように処理しようかと悩んでいるケースがあります。人工知能(AI)などが知られてきて、コンピュータが人間に近づいているので可能なのではないかと考える方もいますが、実際には人工知能の中身も人間の考えをコンピュータが扱えるようにプログラミングで翻訳したものです。
もっと具体的に言えば、プログラミングとは、「課題の細分化」とそれぞれの「実施手順の定義」を決めることでもあります。
また、それら一連の流れの中で、課題の「前提条件・制約」を理解するということと、解決できた後には、その成功手順を「保存」し、後で再利用できるようにする必要もあります。
しかし、先ほど述べたように実際にコンピュータを取り巻く環境が複雑になってしまい、純粋にプログラミングのみにフォーカスして学ぶことは難しくなってしまっています。
LEGO MINDSTORMSとは
ここまでプログラミング全体について考えてみましたが、続いてLEGO MINDSTORMSについて、プログラミングを学ぶ上でどのような役割を担うのかを踏まえて紹介します。
まず、LEGO MINDSTORMSは、図3のようにLEGOブロックと各種デバイス、コントロールユニット(コンピュータ本体)を組み合わせて、それらを専用のアプリケーションを使ってコントロールします。
実際に何ができるかは、LEGOのHPを参照するとイメージがつかめると思います。さまざまな形のブロックがあり、それらを組み合わせることでこのような複雑なものを作成することができます。
作るものが異なれば、操作する方法も異なるのでそれぞれ、別のプログラムを作る必要が生じます。また、ブロックを組み合わせて作るという作業を通じて、ものが動く仕組みを学ぶことにつながり、それはプログラミングをする上での制約を知ることにもつながります。