コード忍者の里 for Scratch.

教師・指導者の方へ

この「コード忍者の里 for Scratch」 システムは、今後の子供のプログラミング教育を支援するために、あまりプログラミングが得意でない先生でも、創造的なアクティブラーニングにより、生徒がプログラミングを楽しめる授業を実現することを目的に開発を進めています。

保護者の方へ

お子さんがScratchでプログラミングを楽しんでいるようなら、この「コード忍者の里 for Scratch」 は、お子さんと保護者の方が、より深くプログラミングを理解して楽しむ手助けをするかもしれません。

プログラミング教育の研究者へ

「コード忍者の里 for Scratch」は、小学校の一斉授業でプログラミング教育を行うために、教員研修で教員のプログラミング指導能力を上げたり、良質の教材を開発したりすることとは、別のアプローチで良いプログラミング教育を実現することを試してみたくて開発を進めています。

「コード忍者の里 for Scratch 1st」の使い方

「コード忍者の里 for Scratch 1st」は教科書でも教材でもありません。多分ゲームの攻略本に近いかもしれません。子供達がScratchのプログラムをより極めたい場合に使ってもらえばいいものです。特に使用する手順もなく、子どもたちが必要に応じてサンプルプログラム(術)を見たり、自分や他の人の作ったプログラムを診断してもらえばいいかと思います。  なお、本システムの対象は小学校3,4年生以上を想定しています。そして、必要に応じて「修業の記録シート」を使って、日々の活動や成果を記録することをお勧めします。

「コード忍者の里 for Scratch 1st」の特徴

1. 構築主義に基づく「メイキング」方略で、生徒が「主体的・対話的で深い学び」でプログラミングを楽しみながら学習できます。
2. 「コンピューテショナルシンキング(「プログラミング的思考?」)」の基本能力である、問題解決能力を構成する「抽象化」と「デコンポジション」の能力の獲得を支援します。
3. Scratchを開発したMITは、プログラミング場面でのコンピューテショナルシンキング評価フレームワークを提案しています。その「コンピューテショナルシンキング概念(本システムでは「プログラミング概念」としています)」である分岐・ループ・データ等の習得状況を生徒が自己評価し、それらの能力を獲得することを支援します。
では、これから上記の特徴の意味を説明していきます

I. メイキングでプログラミングを楽しもう

 子供たちがプログラミングを学習する方法はいろいろあります。例えば、文部科学省のプログラミング教育実践ガイドで「特に,教員は目標を細分化し,小さな目標を達成する体験を積み重ねながら最終目標に近づけるようスモールステップで課題を設定することで,児童生徒の『プログラミングは難しい』という思い込みを払拭させ,自分にもできるという自己効力感を高めさせているようです」というように、Code.orgのディズニーやスターウォーズのキャラクターを使ったパズルや、授業の中で先生がプログラムの内容を示して、生徒が少しづつ作っていく方法があります。これに対して、パパートの構築主義(単なる操作できる教具を与えるだけでなく,学習者が何か意味あるものを作り出す時に教育は最も効果がある)という考え方をもとに、自由な制作活動の中でプログラミングを学習する方法もあり、メイキングと呼ばれる学習活動になります。

 主体的・対話的で深い学びを行うアクティブラーニングが注目されています。アクティブラーニングは非常に広い学習活動を含み、その分類の中で、上で説明した「スモールステップ」と「メイキング」の違いを図で示してみました。それぞれ特徴がありますが、本システムでは、創造性を重視し、メイキングを実現することを目指しています。なお、メイキングって難しそうですが、でもすでに小学校の図画工作科の学習指導要領の領域「A表現」で「「表したいことを絵や立体,工作に表す」は,およそのテーマや目的をもとに作品をつくろうとすることから始まる.」の中で、すでに実践しているかもしれません。
 でも、自宅やクラブでメイキングしている場合は、好きなことをしていればいいかもしれませんが、学校でメイキングをする場合は、やはり生徒たちに、ある程度しっかりプログラミングを覚えてもらいたいと考えるかもしれません。そんな時、メイキングは次のような問題があり、本システムは、その解決方法を提供することを目指しています。
問題点1: 個々の生徒のプログラミングの内容を判断して適切な指導を行うためには、教師に高いプログラミング能力が要求されます。また、生徒のプログラミングは個人個人で異なっていて、その内容を判断するだけで労力がかかります。
 => システムがプログラミングの自動診断(評価)機能を提供します。教師にプログラムの複雑性や生徒のプログラミング技術の習得レベルに関する情報を提供します。また、教師の指導がなくても、生徒も同様な情報を見ることができ、生徒自身又は友達との協力でプログラミングを改良していくことを想定しています。
問題点2: メイキングでは自分で好きなものを作ることが基本ですが、子どもによっては、プログラミングのより深い世界を知らずに、単純なプログラムのレベルで留まることもあります。(別にこれが悪いとは言えませんが、コンピュータグラフィックとして絵の作成にこる子供もいます)
 => システムがプログラミングの機能サンプルプログラムと自動評価機能を提供し、これらを使って子供たちにプログラミングの深い世界を気づかせる機会になることを想定しています。提供される情報により、いろいろ工夫すれば、自分のプログラムが進化することを客観的に知ることができます。

II. 1つめの自動診断
プログラム機能サンプルと自動検出

表 英国のコンピュテーショナルシンキング
概念 内容
抽象化 複雑な問題の本質を理解するため、重要な部分は残し、不要な詳細は削除する。
デコンポジション 大きな問題を、いくつかの部分に分解し、理解や解決できるようにする。
アルゴリズム的思考 問題を解決するための明確な手順を考える。
一般化 類似性からパターンを見つけて、問題の理解と解決方法に利用する。
評価 問題の理解や、その解決方法であるアルゴリズムが正しいか確認する。

表 オーストラリアのコンピュテーショナルシンキング
コンセプト 内容
抽象化 問題の詳細を隠し、処理可能な数の特徴を扱う。
特定,アルゴリズムと実装 問題を特定し、その解決方法を考え,実行する。
データ収集,表現と解釈 データを収集や表現し、データがあるの文脈において解釈する。


 世界的にプログラミング教育を含む新しい情報教育が始まっています。小学校からプログラミング教育を必修化した国は英国とオーストラリアですが、両国ともカリキュラムは、コンピューテショナルシンキングという考え方を中心にしていて、例えば、英国のカリキュラムの冒頭では「生徒たちがコンピュテーショナルシンキングと創造性を用いて,世界を理解し変革していく」と書かれています。文部科学省でも「プログラム的思考」という考えを出しています(これがコンピューテショナルシンキングの訳として使用しているかは、まだ不明ですが)。本システムはこのコンピューテショナルシンキングの能力を獲得するように設計されていますが、その詳細を見てみましょう。

 まず、コンピューテショナルシンキングとは何でしょうか? 英国でもカリキュラムの中に「教科コンピューティングの主な学習内容がプログラミングであるとマスコミが報じているのは間違っている」と書かれ、日本でも「時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育むことであり、コーディングを覚えることが目的」と書かれているので、プログラミングではないみたいです。
 コンピューテショナルシンキングはパパートが始めて使い、ウイングという人が流行させました。世の中には銀行のシステムなど大規模のコンピュータシステムがあり、また自動車の中には30個以上のコンピュータが入っています。このように、コンピュータの利用は多様化・複雑化してきていますが、その基本的な仕組みは、人間が指定したプログラムを一個づつ実行するという非常に単純なものです。そのため複雑な問題や要求を人間が分析整理して、それを解決するようなプログラムを複数組み上げて大きなシステムを作ることになります。
 コンピューテショナルシンキングの定義は、オーストラリアの「論理的なデータの整理,問題の部分への分解,抽象化,アルゴリズム・パターン・モデルの利用などの問題解決のための手法の集まり」や英国の「複雑かつ雑然で,一部しか見えない現実問題を,知能のないコンピュータだけで問題に取り組めるような指示に変換する,いくつかの知的能力の集合」というように、長年のかかって構築された、実生活の問題をコンピュータで実行させるまでいろいろな手法の集まりと考えることができます。また、英国では「単にコンピュータを使った問題解決だけではなく人間だけで問題解決する場合にも応用できる」と述べています。

 では、「手法」や「能力」とはどのような物でしょうか? 実は多くの国で参照している基になったウィングのエッセイにはコンピューテェショナルシンキングには、いろいろな能力が記述されていて、どれが重要かは読み手が考えることになります。そのため英国とオーストラリアのカリキュラムでは、それぞれ表に示すようなコンピューテェショナルシンキングを定義しています。但しウィングも「抽象化」は一番重要な能力だと述べています。
 本システムでは、コンピューテェショナルシンキングの「抽象化」と「デコンポジション」の能力を獲得することを目指しています。そのために、子どもたちがScratchのプログラムの中でよく使用する個々の機能をサンプルプログラムとして60個以上(術の巻物で見ることができます)用意しています(参考情報参照)。また、指定したプログラムの中でサンプルプログラムと同様の機能が使っているか自動分析する機能があります。

 プログラムを作る場面を考えてみましょう。例えば簡単なシューティングゲームを作る時でも、1)敵を動かす、2)弾を発射する、3)当たりの判定をする、4)得点を計算する等の、いろいろな機能に分解して、組み上げて作る必要があります。この時、実際の動作をプログラムでどう表現するか「抽象化」する必要があります。そして、どのような機能に分割するか「デコンポジション」する必要があります。
 本システムは、まず子供が「プログラムは複数の機能が組み合わさって出来上がること」を認識することを目的としています。そのため、実際に大きく、複雑なプログラムを作る時に、個々の小さな機能を作り上げるヒントをサンプル集として提供し、自分のプログラムがどのような機能から構成されているか診断で知ることができます。さらに、子供たちがお手本となるようなプログラムを見つけた場合、それを診断することで、どのような機能から構成されているか知ることもできます。

 教師にとっても、いちいちプログラムの中身を確認しなくても、生徒がどんなプロクラムを作っているの概要が診断結果から把握できます。

図 プログラム機能の分析結果例(プログラム内の術)


図 サンプルプログラムのリスト例(術のリスト)

III. 2つめの自動診断
プログラム概念の自動評価

表 MITのプログラミング場面での
コンピューテショナルシンキング評価フレームワーク
概念 実践 見方・考え方
・順次
・ループ
・イベント
・並列処理
・分岐
・演算子
・データ
・反復型開発
・テストとデバック
・再利用とリミックス



・表現
・つながり
・質問すること





 いままで説明してきたコンピューテェショナルシンキングは情報教育全体の中で何を教えるかということを示しています。これに対してScratchを開発しているMITはプログラミング場面で、コンピューテェショナルシンキングをどのように考えるかについて、新しい評価フレームワークを提案しています。「プログラミング概念(原文では Computational Thinking Concept))」は分岐、ループ、データなどプログラミングの基本的な考え方を示しています。
 また、一般のプログラミング教育でも、このフレームワークを知らなくても、この分岐やループを教えることを教育目標にしている場合もあるでしょう。 (補足:「つながり」は、協働でプログラムを作ったり、作業することを含みますが、より広い考えです。例えば、知らない人のためにプログラムを作って役にたとうと思うことも含みます)
 本システムはScratchのプログラム内に、どのようなプログラミング概念が使われているか自動評価します。プログラム概念については、詳細な定義が決まっていないため。本システムでは、英国のカリキュラムが比較的細かく発達段階(学年)に対応したプログラミング概念の目標が設定しているので、それをもとにMITのフレームワークで再整理し、評価基準として使用しています。実際には図にような形で教師や子供に情報が提供されて、例えば分岐の欄は、Scratchのプログラム内で「もし< >なら」ブロックを使用していると#1に、「もし< >なら、でなければ< >」#2に手裏剣マークがつきます。

 子供にとって、この機能を使うことでプログラミングには、いろいろなプログラミング技術のレベルがあることを知る機会になることを想定しています。そして、自分の作ったプログラムを自動評価することで自分自身のプログラミング学習の成果を客観的に見ることができます。また、教師にとって、プログラムの中身を詳細に見なくても、個々の生徒のプログラム概念の獲得レベルを把握することができます。

 このように図の手裏剣マークを集めることは、生徒の動機付けに役立つと考えられますが、ただし、このマーク集めが子供の主目的にならないように注意が必要かもしれません。同様に「コード忍者の里 for Scratch」を子供に使用することを強制することは考えていません。子供達がメイキング場面において、必要において、サンプルプログラムを覗いてみたり、診断機能を使うことを今は想定しています。

図 プログラム概念の評価結果(プログラマーの技)

参考情報

 サンプルプログラムの作成にあたって、下記のサイトや書籍を参考にしました。良い情報なので皆さんも機会があれば覗いてみてください。
・子供の科学「KoKaプログラミング入門 Scratchでオリジナルゲームをつくろう!」
  http://www.kodomonokagaku.com/magazine/programming/
・小学生からはじめるわくわくプログラミング 阿部 和広 著
・Scratch Starter Projects
 https://scratch.mit.edu/starter_projects/

(おまけ情報:今後の開発計画)

・コード忍者の里 for Scratch 1st(本システム)
・Ninja Code Village for Scratch(本システムの英語化)
・コード忍者の里 for Scratch Mark II
・コード忍者の里 for Scratch V3
・コード忍者の里 零式
・コード忍者の里 Bridge
 開発構想は立ててますが、一人で時間を見つけて開発しているため、いつになるやら。とりあえず、Mark IIは2016年秋完成を目指しています。
なお、現在は診断対象はScratch2.0ですが、1.4のサポートについては検討しています(本システムはPython 3.x系で開発していますが、Scratchの1.4 -> 2.0の変換ライブラリーがPython 2.x系しかなくて)

太田 剛(Go Ota) 2016.6.15