見出し画像

情報系大学卒教員から見た学校教育におけるプログラミング教育の現状~君たちはどう生きるか~

※この記事は名古屋文理大学NBUアプリ開発プロジェクト Advent Calendar 2023 23日目の記事です

はじめに:

こんにちは!名古屋文理大学情報メディア学科卒で現在高等学校情報科の教員として勤務しているyukinoと申します。
昨日の一ノ瀬さんの記事の感想ですが、Scratchの内部の実装に目を向けることがなかったので大変興味深かったです。特に、変数と値の割り出しは他の人のプロジェクトを見た時に自力でやるのがとてもしんどかったので使えそう。使わせて。
あと、ヘッダーのスシ美味しそう。自分も富山でスシ食べたかった…

今年度もたまにアプリ開発プロジェクトに顔を出していますが、誰なんだお前と思われてそうな雰囲気も感じるので、1年生やHopterの学生に向けて本題の前に改めて少し自己紹介。
在学時には、アプリ開発プロジェクトやコード教育プロジェクト等に所属し、自らの作品開発と他者への情報教育の2輪で活動していました。(ほかにも色々やってたけど)
昨年度は、ミツル君や一ノ瀬さんと共にハッカソンに出たり、小学生向けプログラミング教室の講師をやっていました。

現在は高校で情報科の教員として複数校で勤務しています。一応、私は小学生、高校生、大学生に向けてプログラミング教育を行ってきた人間であると言えます。
今回は、小学校から大学までのプログラミング教育の現状について、実際の現場で知った私の経験と実践も交えてお話ししたいと思います。
今回の内容はアプリ開発プロジェクトのみならずコード教育プロジェクトの学生にもぜひ知っておいてほしい内容となっているのでみんなで読んでね。

小学校のプログラミング教育:

2020年から小学校でのプログラミング教育が必修化されました。

コンピュータをより適切、効果的に活用していくためには、その仕組みを知ることが重要です。コンピュータは人が命令を与えることによって動作します。端的に言えば、この命令が「プログラム」であり、命令を与えることが「プログラミング」です。プログラミングによって、コンピュータに自分が求める動作をさせることができるとともに、コンピュータの仕組みの一端をうかがい知ることができるので、コンピュータが「魔法の箱」ではなくなり、より主体的に活用することにつながります。

小学校プログラミング教育の手引(第3版) 令和2年2月 文部科学省

その目的の一つは、コンピュータの中身を知ることです。今の社会でコンピュータを活用するために中身を知ることはとても大切なことです。

また,子供たちが将来どのような職業に就くとしても時代を越えて普遍的に求められる「プログラミング的思考」(自分が意図する一連の活動を実現するために,どのような動きの組合せが必要であり,一つ一つの動きに対応した記号を,どのように組み合わせたらいいのか,記号の組合せをどのように改善していけば,より意図した活動に近づくのか,といったことを論理的に考えていく力)を育むため,小学校においては,児童がプログラミングを体験しながら,コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付けるための学習活動を計画的に実施することとしている。

小学校学習指導要領(平成29年告示)解説 平成29年7月 文部科学省

その一方で、アルゴリズムを学び、「プログラミング的思考」を身につけるといった目的もあります。
私は、「プログラミング的思考」を身につけさせることよりもコンピュータの中身を知り、自分でプログラミングで作ってみることを重要視しています。
小学生向けプログラミング教室で講師をやった際には、身の回りの物を抽象化してプログラミングで作ってみることに重きをおいていました。
下記は実際使用したスライド。

今見ると「数字」と「数値」使い分けられてなくてよくないね
最終課題


小学校の現場では、中学高校のように「情報」という単独の科目ではなく、様々な授業の中でプログラミングをしましょうといった形で取り入れられています。(参考:岐阜県実践事例集、総合の時間の実践事例集
その中でも特に使われているのが、ScratchやViscuitなどのビジュアルプログラミング言語です。
コード教育プロジェクトのプログラミング教室でも、実際に高学年の小学生に向けて聞くとほぼ全員がScratchを小学校で使ったことがあると答えている状況がありました。
そのため、コード教育プロジェクトではScratchを分かっていることを前提として新しいことをやらないといけないと議論することが多いし、現在のメンバーが取り組んでいることだと思います。
ただ、そもそもScratchの思想は「勉強」をするツールではないという点は、Scratchを使用する教育者全員が知っておいてほしいことであります。


余談ですが、石郷さんから薦められたviscuitの原田先生論文がプログラミング教室のワークショップを開く視点でとても参考になって良かったので、これも読んで。
特にコード教育の学生。
ビジュアルプログラミング言語ビスケット(Viscuit)の紹介
この論文は有料ですが、プログラミング教育の歴史についてまとまっているから読んで

ビスケットの19年とプログラミング教育

中学校のプログラミング教育:

中学校では2021年からプログラミングが必修化されました。技術・家庭科の中で、生徒たちは計測・制御とネットワークを利用したプログラミングを学びます。ここでも、ScratchやMicrobitなどのツールが使われることが多いです。これにより、生徒たちはより深くコンピュータの中身を知ることができます。中学校レベルのプログラミング教育は研修用教材で確認してください。
あとフローチャートもやります。高校に上がっても、フローチャートについては理解している生徒が多い印象がありました。
(実際に関わっていないので内容薄くてごめんなさい)

高校のプログラミング教育:

高校では、必履修科目「情報Ⅰ」に加えて発展的科目「情報Ⅱ」が設けられています。「情報Ⅰ」では情報モラル、情報デザイン、プログラミング、データ活用の4つを学ぶ。また、情報Ⅱでは、システム設計や重回帰分析について学びます。「情報Ⅰ」では、すべての生徒がプログラミングの基礎を学び、「情報Ⅱ」では選択科目としてより深く専門的な知識を身につける機会となります。目的はプログラマーの育成ではなく、問題解決のためのアルゴリズムを学習することです。
具体的には順次、分岐、反復、変数、配列、関数といったプログラミングの基礎を学びます。この内容が、高校生は最低限どのような概念であるか理解はできていると思うと学生の皆さんは少し危機感を覚えるのではないでしょうか。
共通テストでも来年度からプログラミングが出題される予定で、特定のプログラミング言語ではなく共通テスト用プログラム表記と呼ばれる疑似言語で出題されます。古くは、センター試験の時代から設置されている数学科の選択科目「情報関係基礎」においてDNCLと呼ばれている疑似言語でプログラミング分野の問題が出題されていました。
情報関係基礎で使われていたDNCLはプログラミングの知識が無くても読解力があれば理解ができるような設計がされていましたが、それに対し、共通テスト用プログラム表記はPythonにとても似た文法となっており、情報Ⅰのプログラミングの単元で学んだ内容を理解してないと読み解けない設計になっています。
学習指導要領では特に、授業で使用する言語は指定しておらず、採択する教科書によってPython、JavaScript、VBA、Scratchから教員の裁量で選んでいる状況です。(ちなみに生徒がプログラミング言語を選択する新しい授業形態の提案によるとどれを選んでも差は見られないようです)
私の勤務校では、PythonとVBAを使用しています。また、情報デザインの実習ではピクトグラミングも使用しました。
実際に教える内容は教員研修用教材で確認してみてください。

現在の問題としては、初心者である高校生がアルゴリズムに限っても理解できるまでの時間数が足りていないので、全ての生徒が「完全に理解した」になれないことを感じています。生徒に対して実施した理解度満足度アンケートでも、プログラミングの単元のみ低かったので、生徒がプログラミングを嫌いになって分からないままになってしまう恐れを抱いています。

その状況で共通テストに挑まないといけないんですよね。
下記は、大学入試センターが公開しているサンプル問題の一部です。
情報Ⅰで授業の中で学んだ知識を元に会話文、図、表から読み解いて穴あきのプログラムを埋める問題が中心となります。
この問題ではドント方式の比例配分問題が取り上げられています。

共通テストサンプル問題第2問問3

大学のプログラミング教育:

大学では、これまでの小中高の教育の積み重ねが生かされることになります
。高校までのプログラミング教育を経た学生が入学することで、より高度な内容に挑戦できるようになります。そもそもが大学を見据えたプログラミング教育でもあります。
大学では、現在学部学科文系問わず数理・データサイエンス・AI教育プログラムが行われており(名古屋文理大学もリテラシーレベルの認定がされている)、その基礎として「情報Ⅰ」で学ぶ知識が必要とされます。

大学のプログラミング教育の一例として文理のプログラミング科目を紹介しておきます。

名古屋文理大学の現在のカリキュラムにおけるプログラミング科目(参考:カリキュラムツリー
1年前期 プログラミング入門(石郷先生担当)Scratch
1年後期 プログラム演習Ⅰ(長谷川先生・森博先生担当)C言語
2年前期 プログラム演習Ⅱ(長谷川先生・森博先生担当)C言語
2年後期 ゲームプログラミング (小橋先生担当)C#(Unity)Snap!
3年前期 プログラム演習Ⅲ (遠藤先生担当) Processing(ジェネラティブアート)
3年後期 プログラム演習Ⅳ (石郷先生担当) Processing(オブジェクト指向)

まとめ:
この記事を読んでアプリ開発プロジェクトやコード教育プロジェクトやHopterの学生は高校までのプログラミング教育にも目をよく向けてほしいです。
教育の現場で行われている実践内容は学生たちにも関心が向けられる内容だと思います。
プログラミングができることは当たり前の時代となってきます。情報Ⅰでプログラミングが必修化したこと、共通テストでプログラミングの問題が出題されることはニュースでも取り上げれられる機会が多く、何も知らない人からは「今の学生たちはみんなプログラミングができるんでしょ」と思われてしまう時代がそこまで来てるんです。
その中で、皆さんはプログラミングを専門としている学生としてアピールしなければいけません。
今プログラミングを専門として学ぶ君たちだからできることややらないといけないことがあるはずです。
専門として学ぶということは、プログラミングで日常的に作品を制作できるだとか他者に正しく伝えて教えることができる状態であることが当然だと私は考えています。情報メディア学科の学生でこれを実践できている学生はおそらく1割もいませんが、プロジェクト生には当たり前にこれができるようになってほしい。
僕も教育者、研究者の端くれとしてこの先プログラミングとその教育について研究していくので共に取り組みましょう。
おじさんの説教じみたまとめみたいになってしまいましたが、在学生の活躍に私はとても期待しています。私たち卒業生がやってこなかったこと、できなかったことに挑戦していってください。





明日は後藤さんが推しアイドルの話をするということで自分もちょっとだけ推しの話。
今年の秋ぐらいからぜろからすたーとの天使あんじゅさん推してます。
ぜろすた素晴らしいです。

大きいリボンの子です。
アイドルオタクとして明日の記事楽しみにしています。

食費になります