SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

from EdTechZine

LEGOでプログラミングの世界を楽しもう~製品の基本と始め方

LEGOで始めるIoTプログラミング 第1回


  • X ポスト
  • このエントリーをはてなブックマークに追加

 今、LEGOは教育の現場で使われるだけでなく、IoTに挑戦したいプロのプログラマでも楽しめ、非常に幅広いニーズに応えられるようになっています。その中で、今回紹介するLEGO MINDSTORMSという商品は、想像力の育成だけでなく、論理的思考の習得も実現できるものになっています。特に、自分で作ったロボットを操作しながら学ぶスタイルはプログラムというものにこれまでと違った魅力を感じることと思います。本連載では、筆者が小学生の娘と一緒に実際にLEGO MINDSTORMSを動かしてみた体験とともに、どんな楽しみ方があるのか紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加
EdTechZine

CodeZine読者の皆様、こんにちは。本稿は、教育ICT(EdTech)のオンラインメディア「EdTechZine」で公開中の記事からの転載(一部)です。全文はEdTechZineのページでお読みいただけます。

はじめに

 LEGOというと筆者が子どもの頃はプラスチックの四角いブロックしか思い浮かびませんでした。しかし、現在では、LEGOブロックでかなり細かい自動車などの乗り物や有名な建造物なども作成でき、大人も満足できるほど精巧な作品の作成が可能になっています。

 昨今のSTEAM教育の流れもあり、ますます「仕組み」を学び「創造性」を育むことは大切になってきています。LEGO社ではそういった流れの中、LEGO社のHPにもある通りさまざまなサービスや商品を提供しています。

 本連載では、その中で「中学生以上」を対象に提供されている「LEGO MINDSTORMS EV3」を紹介します。「中学生以上」というと非常に単純なものと感じてしまうかもしれませんが、大人であっても十分楽しめる商品であり、多くのことが学べます。

 また、自分で作ったものが実際に動くシーンを体験すると画面上だけでは感じられない楽しさや感動を得られ、プログラミングの楽しさをより深く体験できます。

対象読者

  • プログラミングについて学びたい人・教えたい人
  • プログラムが動く楽しさを知りたい人
  • プログラムでロボットを動かしたい人

プログラミングを学ぶとは

 LEGOでの具体的なプログラミングの内容を紹介する前に、プログラミングを学ぶとはどのようなことなのかを考えてみます。プログラミングというと、コードを書くためにプログラミング言語の使い方を覚えることと同じだと捉える方もいます。

 しかし、実際にはプログラミング言語だけを覚えても、いざ自分でアプリケーションを作ろうと思ってもどう進めればよいのかわからない状態になることが多々あります。

 これは、アプリケーションを作る上で必要な周辺知識や理解が不足していることも一因であり、プログラミングを学ぶとは、以下の4つのことを学ぶということだと筆者は捉えています。

  • コンピュータの仕組み
  • 問題解決の手順(アルゴリズム)
  • プログラム言語
  • ルールの作成(ライブラリ)

 この中で特に重要なのが「問題解決の手順」を作ることです。これらをコンピュータの世界では「アルゴリズム」と呼んでいます。

 筆者がアルゴリズムを勉強する際には、数値の並び替え方法であるソートのアルゴリズムや、探索木といってデータを検索するためのアルゴリズムなどが中心でした。

 これらのアルゴリズムも大切なことは今でも変わりありませんが、現在のプログラミングで実際にこれらのアルゴリズムを使うことはありません。なぜなら、これらは既に関数として用意されているからです。

 むしろ、今では正解が明確には示せない問題に対応する必要性が多くなったために、問題解決の手順を学ぶにも数学的解決方法ではなく、試行錯誤による創造性の方がより重要になってきています。

 こういった力は、プログラミングを職業として必要とする人だけではなく、今後は広く多くの人が必要となるスキルとして位置付けられています。

プログラミングを学ぶ上での現在の課題

 現在では、先に記した4つのことを学ぶにも、プログラミングを取り巻く環境は非常に複雑です。実際に開発現場で使われているものをそのまま使って学ぶのは非常に難しくなっています。

 特に、プログラムを学ぶ上でインターネットが普及する前と後ではプログラムを取り巻く環境が図1のように大きく変わってきたことが、このような大きな隔たりを生んでしまった原因のように筆者は感じます。

図1:インターネット前後のアプリケーションの構造
図1:インターネット前後のアプリケーションの構造

 インターネット普及前では図1(左)に示すように基本的には自分でプログラミング言語を使って作成していました。しかし、インターネット普及後には、図2(右)に示すようにアプリケーションを作成するために、ほとんどの人が言語をそのまま使うのではなく、フレームワークという基盤となるライブラリを利用し、各種機能を作るためのライブラリを使うのが必須になっています。

 また、プログラミング環境自体でもそれらを管理するためのIDE(総合開発環境)やソースコードの履歴等を管理するためのVCS(バージョン管理システム)が使うことが前提になっています。

 これらはインターネットの普及により、誰かが解決した方法を使って、新しいものを作ることが容易になったためです。インターネット以前も同じようにライブラリなどがありましたが、それらは通常は有料であり、学習のために使われることはありませんでした。

 従って、「プログラミング言語を使う」ことを前提にすると、これらの関連ツールの使い方も含めて学ぶ必要が生じてしまい、また、その比重が非常に大きくなってしまったのです。

 これらは、より本格的なアプリケーションを作る上でより効率的に作業できるように進化してきたわけですが、純粋にプログラミングを学ぶ時点では、あまりにも余計なことが多すぎる現状があります。

 このような背景から、プログラミング言語を使うとむしろ「プログラミングを学ぶ」ということが何なのかが、ぼやけてしまうケースが多いでしょう。

プログラミングの本質とは

 プログラミングとは、人間が行っていることをコンピュータでも行えるようにするための翻訳作業です。

 人が課題を解決するために行う「手段」自体が「プログラムを書く」ことであり、先ほどの4つはコンピュータで解決する上で必要な理解ですが、その前にまず、「人」と「コンピュータ」の中間では何をしなければならないのか考える必要があります。

 これを示したのが図2です。

 プログラミングが苦手な方によく見られるケースとして、人間が考える曖昧なルールをそのままコンピュータでどのように処理しようかと悩んでいるケースがあります。人工知能(AI)などが知られてきて、コンピュータが人間に近づいているので可能なのではないかと考える方もいますが、実際には人工知能の中身も人間の考えをコンピュータが扱えるようにプログラミングで翻訳したものです。

図2:プログラミングを学ぶとは
図2:プログラミングを学ぶとは

 もっと具体的に言えば、プログラミングとは、「課題の細分化」とそれぞれの「実施手順の定義」を決めることでもあります。

 また、それら一連の流れの中で、課題の「前提条件・制約」を理解するということと、解決できた後には、その成功手順を「保存」し、後で再利用できるようにする必要もあります。

 しかし、先ほど述べたように実際にコンピュータを取り巻く環境が複雑になってしまい、純粋にプログラミングのみにフォーカスして学ぶことは難しくなってしまっています。

LEGO MINDSTORMSとは

 ここまでプログラミング全体について考えてみましたが、続いてLEGO MINDSTORMSについて、プログラミングを学ぶ上でどのような役割を担うのかを踏まえて紹介します。

 まず、LEGO MINDSTORMSは、図3のようにLEGOブロックと各種デバイス、コントロールユニット(コンピュータ本体)を組み合わせて、それらを専用のアプリケーションを使ってコントロールします。

図3:LEGO MINDSTORMSの構成
図3:LEGO MINDSTORMSの構成

 実際に何ができるかは、LEGOのHPを参照するとイメージがつかめると思います。さまざまな形のブロックがあり、それらを組み合わせることでこのような複雑なものを作成することができます。

 作るものが異なれば、操作する方法も異なるのでそれぞれ、別のプログラムを作る必要が生じます。また、ブロックを組み合わせて作るという作業を通じて、ものが動く仕組みを学ぶことにつながり、それはプログラミングをする上での制約を知ることにもつながります。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
from EdTechZine連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11721 2020/03/16 12:56

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング