盛り上がりを見せているプログラミング教育

最近、子ども向けプログラミング教育が盛り上がりを見せています。ITが社会に普及している現在、人の役に立つ新しいサービスや便利な商品を考えるうえでコンピュータとソフトウェア、つまりプログラミングから無縁でいられる事業はないことを、会社で働いているお母さん・お父さんも実感しているからなのでしょうか。

2016年4月からは学研グループの株式会社学研エデュケーショナルは「新しいコンセプトに基づく国産ロボットプログラミング」のコンセプトで、小学生などを対象とするプログラミング教室を全国展開するとのこと。また、サイバーエージェントの子会社の株式会社シーエーテックキッズは、主婦などが小学生を対象にアプリやゲームの作り方を教える講座を始めるそうです。(同社は直営のプログラミング教室も運営しています。)

プログラミング教育への政府の取り組みも強化されていっています。そもそも「若年層に対するプログラミング教育の推進」は政府が2015年6月に発表した「日本再興戦略 改訂2015」にも盛り込まれています。それを受けた具体的施策としては例えば、小・中学校の教員向けのプログラミング指導手引書の年内作成や、総務省が2016年度から開始する地方の小学校でのプログラミング教育支援などがあります。

学研やサイバーエージェントなど大企業だけでなく、あちこちでプログラミング塾のようなかたちでの民間事業も立ち上がっているように見受けます。この「かながわグローバルIT研究所」のWebサイトへも、「相模原市 プログラミング教室」の検索にヒットして訪問される方もいらっしゃるようですし、確実に世の中のプログラミング学習への関心は高まっていますね。

参考情報:

そうした中、情報処理学会の学会誌「情報処理」2016年4月号で「プログラミング入門をどうするか」という特集記事がありました。プログラミング学習の目的に関する総説と、プログラミング教育に関するさまざまなかつそうについての報告についての8件の記事から構成されています。プログラミング教育に関しては様々な書籍がありますが、各分野の専門家が幅広い分野について紹介したもので、この分野に興味のある方はご一読する価値は十分にありそうです。

わたしもこの特集を面白く読みました。本稿はわたしなりの備忘録をブログ記事として公開するものです。

「特集 プログラミング入門をどうするか」、情報処理 Vol.57 No.4 Apr. 2016

  • 「0 編集にあたって」、辰己丈夫(放送大学)
  • 「1 プログラミング教育/学習の理念・特質・目標」、久野靖(筑波大学大学院ビジネス科学研究科)
  • 「2 小学生に分かるコンピュータサイエンスとしてのプログラミング教育 -ビスケットを用いてー」、原田康徳(デジタルポケット)
  • 「3 子どもの創造的活動とプログラミング学習」、阿部和弘(青山学院大学社会情報学部)
  • 「4 中学校におけるプログラミング教育 -制御プログラムとソフトウェアの仕組み理解を中心としてー」、井戸坂幸男(松阪市立飯高西中学校)
  • 「5 高校におけるプログラミング教育 -愛知県の状況と実践事例の報告ー」、中西渉(名古屋高等学校)
  • 「6 東京大学における全学プログラミング教育」、森畑明昌(東京大学大学院総合文化研究科)
  • 「7 慶應義塾大学SFCにおける初年度プログラミング教育」、服部隆志(慶應義塾大学環境情報学部)
  • 「8 公立はこだて未来大学における初年度プログラミング教育」、美馬義亮(公立はこだて未来大学システム情報科学部)
プログラミングはどう教えるべきか?どう学ぶべきか?

プログラミングはどう教えるべきでしょうか?どう学ぶべきでしょうか?

「0 編集にあたって」
辰己丈夫(放送大学)

本特集の編集意図と各記事の概要を紹介するもの。プログラミング教育をとりまく以下のような動向が列挙されています。

  • 文部科学省では2022年から2024年ごろに予定されている初等中等教育の学習指導要領の改定の準備作業に着手している。
    • 内容の入れ替えなどが検討されているが、小学校・中学校・高等学校それぞれにおいてプログラミング的な考え方やプログラミングそのものを採り入れようとする動きが進んでいる。
  • 米国では、連邦政府やグーグル、アップルなど大手IT企業の支援のもとに、プログラミングを学習しようというキャンペーン「Hour of Code」が2013年から始まっている。
  • 英国では小学生にプログラミングを必履修として課すカリキュラムになった。

ところで、プログラミング教育を初等中等教育に組み込む動きは諸外国でも活発です。しかし、諸外国ではあくまで「プログラミングはコンピュータサイエンスの要素の一つ」との認識のもとで、プログラミングを入口とするコンピュータサイエンス教育に取り組む姿勢が明確なのに対し、日本ではものづくり教育としてプログラミングそのものを教えるというスタンスが見えることです。ちょっと実学偏重が過ぎると思います。。。米国のHour of Codeは確かにプログラミング体験を何百万人の子供に与えていますが、運営団体は「プログラミングを入口に、コンピュータサイエンスに興味を持たせる」という姿勢が鮮明ですからね。

「1 プログラミング教育/学習の理念・特質・目標」
久野靖(筑波大学大学院ビジネス科学研究科)

なぜプログラミングを学ぶべきか?という問いに対して、プログラミング教育/学習の効用を述べています。巷でよくいわれる「プログラミング学習の意義」が網羅されていると思います。

  • 職業的必要性(V)
    • V1:ソフトウェア開発者が必要
    • V2:仕事の一環としてプログラミングが必要
    • V3:ソフトウェア技術者との連携のため
  • 教養(L)
    • L1:コンピュータの原理理解のため
    • L2:論理的思考を身に付ける
    • L3:問題解決と能動学習の題材として
    • L4:答えが1つだけでない題材として
  • 表現力・創造力(E)
    • E1:自己実現/表現の手段として
    • E2:もの作りと創造力のため
    • E3:思考を外部化した成果物として
  • 価値ある体験(X)
    • X1:楽しく熱中できる題材として
    • X2:試行錯誤の経験を積む場として

そして著者は、プログラミング教育/学習が目標とすべきは「離陸」だと指摘します。「離陸」とはつまり、「自分でコードを書いて動かして、その結果を見て手直しできるようになること」。つまり自律的に目標に向かってプログラムを改善していけるスキルですね。

さらに「美しいコード」を書けることを目標にすべきだ、と著者は指摘しますが、それをうまく学ばせる手法は今後の課題としています。

「美しいコード」というのは必要ですが、どうやって教えるべきでしょう。例えばScratch言語は手軽にプログラミングを学べる良い言語ですが、Scratch言語でのプログラミングは「行き当たりばったり」なコーディングを助長し、結果として構造化されない「醜いプログラム」を作ることを助長する、という研究結果もあります。ただプログラミングに触れさせるだけでは、悪い作法を身に付けてぐちゃぐちゃコードを書いてあーおもしろかった、で終わってしまうこともあります。「美しいコード」に導くには教える側にも高度な理解が要求されるので、それをどう実現するかは重要な課題と思います。

「2 小学生に分かるコンピュータサイエンスとしてのプログラミング教育 -ビスケットを用いてー」
原田康徳(デジタルポケット)

義務教育の貴重な時間をプログラミングに割くのならば、「プログラミングでしか教えられないこと」とは何かを明確にすべきとの冒頭の主張には強く共感します。

そして著者は、それは「プログラミングによってしか得られないコンピュータ観」こそがそれであると指摘。「創造性」とか「問題解決力」とかは別の手段でも学べるので、義務教育におけるプログラミング教育の目的としては弱い、ということですね。

それでは「プログラミングによってしか得られないコンピュータ観」とは何でしょうか。著者自身が「VISCUIT(ビスケット)」というビジュアルプログラミング言語を用いて小学生向けのプログラミング教育してきた経験からの現時点の認識は以下とのこと。

  1. プログラムは何度でも使われ、プログラムは簡単に修正でき、一斉に壊れる。
  2. 単純な命令の組み合わせで、複雑な動きができている。
  3. 情報はすごい勢いで拡散する。これは情報の原理。
  4. プログラムを作るということは、人間が理解している意味を、コンピュータが分かる単純な意味へ分解する作業。
  5. シミュレーションは簡単に実験できる場。
  6. 脳の拡張としてのコンピュータ。
  7. プログラミング言語とはどういうものか。

確かに「プログラミングによって得てほしいコンピュータ観」でありますが、本記事を読む限り、「3」と「5」に関しては本当にプログラミングでそれを小学生が学べるか?という気がします。それをもし学べる子は、プログラミング無しでもそれを学べたのではないか?ということです。

「3」を学ぶ材料として記事で挙げているのは、動く棒人間の集団内で病気が感染していく様子をプログラミングで創り出すという演習(?)です。確かに、病人に触れると元気な棒人間も病人になってしまう様子を見ると、指数関数的に病人は増えていくでしょう。しかし子供がそれを見て、「そうか、情報はモノと違って指数関数的に拡散するのか!」という気づきを本当に得られるでしょうか。まず、スクリーン上の病人と「情報」を結び付けて考えられるのか?そしてスクリーン上の病人の増大の様子から「情報の拡散」をイメージできるのか?ということです。

それに、プログラミングで「情報の拡散」を学ぶべきなのでしょうか。少なくとも、目の前のスクリーンの中でのみ起こっている現象を現実世界の現象と結び付けて考える能力が前提となっているのならば、その子はすでに「現実世界をモデリングしたものが画面内に再現されている」ことを知っており、そうするとその子は別にプログラミングによってコンピュータ観を得ていないことになりはしないでしょうか。すでに持っているコンピュータ観を援用して演習意図を理解しているのでは?

「5」も同様で、プログラミングによって実現するシミュレーションと現実世界の関係性を理解していること自体が、すでに高度なコンピュータ観を持っていることになるのではないでしょうか。

ここでわたしが思い出すのはKentaro Toyama著の「Geek Heresy」という本です。「技術によって社会を良くしよう」という取り組みがはまりやすい落とし穴についての本ですが、その中に「増幅の法則(Law of Amplification)」というものが出てきます。「技術による解決法は、それ以前に存在していた能力差を増幅する」というものです。つまり、プログラミング教育を受けることで得られる能力は、プログラミング教育を受ける前からすでに持っている能力に比例する、ということ。上で述べた、現実世界とシミュレーションの関係性を理解している(既に抽象化スキルを持っている)子にはプログラミング教育の効果は高いでしょうが、そうでない子には棒人間シミュレーションで得られる教育効果はどうでしょうか。

短い記事のため筆者の主張の根拠は含まれていないので、詳しい諭評はできないのですが、とても考えさせられた良記事でした。

「3 子どもの創造的活動とプログラミング学習」
阿部和弘(青山学院大学社会情報学部)

青山学院大学社会情報学部での1年次前期必修科目でScratch言語を用いたプログラミング教育を事例として紹介していますが、なかなか衝撃的です。複数年次を教えた経験に基づいて筆者は学生たちの性質を以下のように述べています。「既存の知識を応用することや、示された例題から逸脱すること、教えられていない機能[…]を試してみる傾向は一概に低いように見える。一方で、自分で考えるのではなく、正解を求める声はいくつか聞かれた。」

つまり、試行錯誤しながら問題を解決することを楽しむことができない傾向にあるとのことですが、小学生にプログラミング教育を実施した際の反応との対比が際立っています。「子供たちが作ることと遊ぶことと、さらには学ぶことの間に違いがないように見える」、「その中で自発的に課題に取り組む姿勢や試行錯誤する態度も生まれている」、「やりたいことを達成するためには、代数や三角関数を学ぶことも厭わない」

人が学ぶには、自らの中から湧き出す内的な動機(intrinsic motivation)が必要です。いい大学に入っていい会社に入りたい、といった動機は外的な動機になりがちなのでしょうか。受験を勝ち抜いて有名大学に入った学生さんたちは、試行錯誤して解法を探すことを楽しむことが難しい場合もあるようです。(常にそうではないでしょうし、そもそもプログラミングの意義を感じていない可能性ももちろんあります。)

本稿の冒頭で「日本再興戦略」に「若年層へのプログラミング教育」が挙げられていることは既に述べました。著者も、政府の「世界最先端IT国家創造宣言」で「高度IT人材育成」が謳われていることを踏まえ、「目的への過度な最適化は、逆にその達成を妨げる」と警鐘を鳴らします。

生き生きと楽しみながらプログラミングし、それを通して学んでいるであろう小学生。その好奇心を維持したまま大学生や大人になるには、わたしたちはどうしてあげればいいのでしょうか。プログラミング教育云々よりももっと大きい、「人工知能社会においていかに人は生きるべきか、どのようにわたしたちは子どもたちを教育すべきか」という課題について考えさせられる記事でした。

参考ブログ記事:

「4 中学校におけるプログラミング教育 -制御プログラムとソフトウェアの仕組み理解を中心としてー」
井戸坂幸男(松阪市立飯高西中学校)

わたしの息子は6歳、来月から小学1年生です。中学校はまだ先で、息子が中学生になるころには社会も学校もいろいろ変わっていることでしょう。

この記事でのわたしにとっての特記事項は以下でした。引用します。

  • 中学校の情報教育は、技術・家庭科の時間と総合的な学習の時間を中心に行われている。現行の学習指導要領では、技術・家庭科において、「プログラミングによる計測・制御」の学習が必須となっており、計測・制御の仕組みを学ぶ中で、プログラミング学習が取り入れられている。
  • 学習指導要領には、プログラムによる計測・制御で、「ア コンピュータを利用した計測・制御の基本的な仕組みを知ること」「イ 情報処理の手順を考え、簡単なプログラムが作成できること」の2つの事項を指導するとなっている。目的はプログラミング学習ではなく、計測・制御の仕組みを学ぶことにある。

自分が中学生だったのはもう30年近く前の話。技術科で何をやったのかは覚えていません。のこぎりで木を切って椅子を作ったような。。。あと、内燃機関の仕組みを座学で学んだような。。。

実機を使ったプログラミング学習を経験したのは、国立奈良工業高等専門学校の情報工学科の3年生か4年生のころだったような気がします。基盤についているテンキーで、機械語のプログラムを入力していたような。とても楽しかったし、コンピュータって何なのかを実感を持って理解できたのを覚えています。

そういう体験を中学校時代にできるとしたら、いい時代だなあと思います。

「5 高校におけるプログラミング教育 -愛知県の状況と実践事例の報告ー」
中西渉(名古屋高等学校)

この記事も、高校におけるプログラミング教育内容の事例紹介として興味深いのですが、本稿ではまず以下の事実関係の確認が有用でした。引用します。

  • 高校では2003年度から教科「情報」が新設され、情報A~Cの少なくとも1つを履修することが必須となった。
  • 2013年度から新学習指導要領が実施されるに伴い、情報Aは発展的に解消され、「社会と情報」「情報の科学」の2科目がそれぞれ情報C、情報Bを引き継ぐような形で設置された。
  • [2003年度の]学習指導要領では数学B「数値計算とコンピュータ」でプログラミングが扱われていた。その単元の授業を行っていた学校は少ないが、教科書にプログラムが載っていること、センター試験で選択できることの意味は大きく、そのためにBASICを勉強する生徒もいた。今の学習指導要領には同様の単元がないので、数学での受験のためにプログラミングの勉強をすることはなくなった。

わたしはコンピュータサイエンス教育に関心があるのですが、日本の教育事情には詳しくありません。ですので「情報科教育法」という書籍を買って読んだりして知識を集めたりもしました。高校の「社会と情報」「情報の科学」は、きちんと教えれば高い効果が期待できそうです。この記事ではプログラミング演習の方法など工夫されていて、こういう高校にいく生徒は幸せだなあ、と思いました。

上で引用した3点目は重大ですね。プログラミング学習だけに時間を割けないならば、プログラミング「で」他教科を学べるようにする施策は素人目には効果ありそうです。それが最近になって無くなってしまったというのは残念な話です。

大学初年次におけるプログラミング入門

残りの3記事では、東京大学、慶應義塾大学SFC、公立はこだて未来大学における初年次プログラミング入門教育の考え方やポイントが紹介されていましたが、本稿では特に考察しないことにします。

ホーム画面に戻るにはここをクリック

関連記事:

(かながわグローバルIT研究所 森岡剛 事業内容はこのリンクをクリック