情報オリンピックと商業高校と大学と

この記事はプログラミング教育 Advent Calendar 2015の18日目です。

昨日は今年読んだ技術書 Advent Calendar 2015の17日目を書きました。この記事は今日たまたまAdventarを見ていて空いていたので書きます。

私とプログラミング教育

私は現在高校3年でとある商業高校に在籍しており、情報オリンピックに参加していました。来年からは大学生になる予定です。 現時点で私がプログラミング教育についてなにか言える立場かどうかは怪しいですが、私にしか話せないことがあると思ったので書くことにしました。

結論

プログラマを含めプログラミングに関わる全ての人は積極的にプログラミング教育に携わったほうがいい。学生なら友達に勧めるとか、社会人なら子どもに教えるとかなんでもいいけどやったほうがいいと思う。IT人材が100万人不足するとか言われてるけど、たぶんもっとひどいことになる。

2045年問題とか人工知能に関するいろいろな話題がある。日本は人工知能分野で先行しているらしい(信じられないことだが)。将来数十年後には世界のテクノロジの中心は人工知能(機械学習といったほうが適切かもしれない)になる。身の回りのあらゆるものコンピュータが搭載されて、そのコンピュータには人工知能が入ってる世界になる。IoTとかよりももっと影響を与える。そんな人工知能は日本にとって再興のチャンス。チャンスを逃したらまた空白の20年とか暗黒時代を繰り返すことになる。そんな時にコンピュータに理解のある人間がたくさん必要。プログラミング教育に力を入れないとね。

ほぼ私見です。根拠はないです。まあ現実味のあるシナリオだと思います。

私が受けたプログラミング教育

情報オリンピック

初めての情報オリンピックは高1でした。結果は予選敗退。悔しかったですね。年度が変わり、高2の夏休みには情報オリンピックの夏季セミナーに参加しました。ここから私の人生が変わります。夏季セミナーで寝食を共にしたのは当時の私とはまったく価値観や世界観を異にする人々。学ぶことの楽しさを知ることができた。

高2の情報オリンピックでは春合宿に参加しました。5回ぐらいの講義があり、数学から人工知能まで様々な話題を学びました。高3の情報オリンピックの夏季セミナーでは数学を学び、強化学習や深層学習の講義を聞きました。

内容は適当でしたが間違いなく言えるのは情報オリンピックは(ほかの科学オリンピックも)人の人生変えるぐらいの力がある。高校で3年間学んだことよりもずっと濃密な学びができたと感じている。

他のプログラミング系のイベントと比較するのは憚れるがたぶん情報オリンピック以上に学ぶことの多いイベントは中高生向けではほとんどないんじゃないかな。セキュリティキャンプぐらい?何よりタダで勉強できる。金のかかるイベントに行くなら、まず、情報オリンピックに参加するとよいと思う。

商業高校

情報オリンピックについては褒め称えましたが、商業高校におけるプログラミング教育、情報教育についてはいろいろ思うところがあります。

学習指導要領 商業です。

このうちビジネス情報分野は5科目あります。

科目 目標
情報処理 ビジネスに関する情報を収集・処理・分析し,表現する知識と技術を習得させ,情報の意義や役割について理解させるとともに,ビジネスの諸活動において情報を主体的に活用する能力と態度を育てる。
ビジネス情報 情報通信ネットワークの導入やソフトウェアの活用に関する知識と技術を習得させ,情報を効率的に処理することの重要性について理解させるとともに,ビジネスの諸活動においてコンピュータを適切に運用する能力と態度を育てる。
電子商取引 情報通信ネットワークを活用した商取引や広告・広報に関する知識と技術を習得させ,情報通信ネットワークを活用することの意義や課題について理解させるとともに,情報通信技術を電子商取引に応用する能力と態度を育てる。
プログラミング プログラミングに関する知識と技術を習得させ,プログラムの役割や重要性について理解させるとともに,ビジネスの諸活動においてコンピュータを合理的に活用する能力と態度を育てる。
ビジネス情報管理 情報通信ネットワークやビジネス情報システムに関する知識と技術を習得させ,ビジネスの諸活動において情報を管理し,共有することの意義や必要性について理解させるとともに,業務の合理化を積極的に推進する能力と態度を育てる。

全部履修しました。

このうち、情報処理を除く4科目ではプログラミングを行います。たぶん4科目で12単位ぐらいになる気がします。ビジネス情報ではソフトウェア(某社の表計算ソフトやデータベースソフト)をVBAで動かします。電子商取引ではWebページの制作です。4科目のうちプログラミング以外ではプログラミング以外の内容も多く含まれます。

私の考えとしてはコンピュータリテラシーは必要な時にコンピュータを利用してタスクをうまく処理できることであって、表計算ソフトやデータベースソフトが使えてプログラミングができることではないです。(文科省との見解の不一致)

もしも、表計算ソフトやデータベースソフトが必要になったときに低コストで習得できる能力がコンピュータリテラシーで、それを身につけるのにプログラミングを利用することはよいと思います。

私の高校の場合、まず統一的なカリキュラムが組まれていないのが問題です。3年間にわたって何を教えるかが定められていません。嘘だと思うかもしれないですが本当です。どんな人間を育てるかというビジョンが存在していません。これは最も根が深い問題だと思います。どんな人間を育てるかという理想がなければ教育も何もあったもんじゃないですよ。教えることが行き当たりばったり。

プログラミングに関して言えば、まず何故プログラミングを学ぶのかに触れることはないです。生徒のほうは何故プログラミングを学んでいるのか誰も知らないのです。私にもわかりません。つぎにアルゴリズムについて最も重要なことの一つである計算量について学びません。バブルソートがあります。セレクトソートがあります。線形探索があります。二分探索があります。計算量の話をせずに二分探索がありますといったところで何がうれしいのでしょうか。そして、プログラミング言語を使ってコーディングする際にプログラミング言語の仕様をほとんど教えません。あるコードがどのように動くかもわからずにプログラミング言語を使うことになります。

2015年にCOBOLを習う生徒が存在します。プログラミングを履修する生徒のうち、何%が職業プログラマになると思っているのでしょうか。90%以上が職業としてプログラマのだから、趣味グラマとしてプログラミングを使うことを意識して授業をつくるべきではないでしょうか。実際にコンピュータを使う際にスクリプトを組んで、ちょっとしたバッチ処理をしたり、もっと大多数にとって将来使えるように教えることは可能だと思います。また、社会人として必要な論理的思考を身につけるのにもプログラミングは利用できるでしょう。何が職業人として活躍する人材ですか、行動を伴わせてください。

検定至上主義はちょっと。対策は補修でやれば十分そう。

5科目の立ち位置目的をはっきりとさせる必要があります。現時点では内容として被った部分が多く無駄がみられます。学ぶ必要のないことを学び、学ぶべきことを学ばないという感じがします。3年間で12単位として

科目 内容 単位数
CS(コンピュータサイエンス) アルゴリズム、プログラミング、コンピュータ原理 1年1単位,2年3単位,3年4単位
IT(インフォメーションテクノロジー) 効率的なWeb検索の仕方、ソフトの使い方、複数のソフトの組み合わせ方など 1年2単位,2年1単位
DL(デジタルリテラシー) 安全な使い方やプライバシー、マナー、ルールなど 1年1単位

こんなんで十分じゃないですかね。

ところで

一時期話題になった報告書が復活しました。ちょうど本日。

諸外国におけるプログラミング教育に関する調査研究に対する私見

プログラミング教育に熱心に取り組む23の国・地域のプログラミング教育を調査した報告書です。各国・地域を背景/目的/位置付け/目標/指導内容・プログラミング言語/教材/指導者/評価方法/試験科目として課されているか/基礎的なICTリテラシー教育/大学・NPO・民間/成果/解決すべき問題点の観点から調査しました。対象は初等中等教育課程で高等教育におけるプログラミング教育は含まれません。

イングランド

小学校から必修の独立した教科「Computing」のなかでCS,IT,DLの3分野を教える。学習目的は世の中を理解し、変えていくための創造性を、学習者に与える。数学、科学等と深く関わっており、それらに対する深い洞察力を培う。デジタルシステムが動く仕組み、またそれらの知識をプログラミングを通して活用する方法を学ぶ。

プログラミングをコンピュータや数学、科学、世界を理解するための道具(プラクティカルワーク)として考えているようです。

pythonも利用される。

エストニア

Skypeのふるさと。すべての初等中等教育の児童生徒がプログラミングを学べるように制度が整えられているが、学校の裁量に任せるところが大きい。

フィンランド

プログラミング教育として有名な国ではないがおもしろいと思った。2016年から義務教育に含める。1~9年生の算数数学のカリキュラムの一部として導入。1〜2年生ではコンピュータには明確に指示を出す必要があることを学ぶために遊びを通して友達同士で明確に指示を出す練習をする。3〜6年生でビジュアルプログラミングを学び。7〜9年生でプログラミング言語を学ぶ。

Hello, World以前のプログラミング教育についていろいろな提案があったが、自然言語で友達をプログラミングするというのはおもしろいと思った。教育相特別顧問であったEsa Suominen氏曰く「今やテクノロジーと生活は切っても切り離せず、コンピュータサイエンスに関する知識は世界を正しく知るために必要不可欠。特殊な技能ではなく、市民として一般的な知識になっていくはず。プログラマー育成に力を入れるというより、すべての人に機会を与えるのが目的」とのこと

ロシア

義務教育で必修となっている。専門教科教育振興機関であるサラトフ教育情報局による「インフォルマティカと ICT の教授」解説集より、導入の理由は「コンピュータサイエンスは、様々なシステム、方法、ツールや情報プロセスの自動化の技術などの情報の処理の流れを支配する法則の科学である。それは、現代の科学的な世界観、知的能力の発達、そして生徒が寄せる関心を促し、IT に基づいた発展は、生徒の教育プロセス及び日常生活や将来に不可欠なものである。」。目的は

  • コンピュータサイエンスは、現実世界の理解のための「メソッド」であり「手段」でもある。また異なった学問分野にまたがって関連性を拡大し続けている。いわば多くの科学分野に共通言語を形成させているといえる。IT は自然科学、社会学、経済学、文学などの分野の世界の多くのプロセスを理解する鍵を提供する。
  • コンピュータサイエンスは、数学、物理学、化学、生物学とともに、現代の科学をもとにした世界観の基礎を構成し、物質・エネルギー・情報という現代の 3 つの不可欠要素の一つとなっている。
  • 学校でコンピュータサイエンスを教える目的は、連邦教育スタンダードのコンセプトである、生徒の人格の形成、知の創造、必要なスキルの習得、知的好奇心や創造力の育成といった、教育全般のゴールに基づいて定められている。

が挙げられている。

イスラエル

IT大国。「アルゴリズム的思考を開発し、アルゴリズムをプログラミングで実装する」と世界で最も厳格なカリキュラムがあるそうです。厳格なカリキュラムってなんだろ。高校では論理プログラミングやアセンブリが教えられるって鬼畜すぎな気もします。

やばい。文体が統一されていない。5500文字長くても申し訳ありません。