見出し画像

高等学校「情報」のプログラミングを考察する(2)

学習指導要領を読んでもよくわからないので,解説を読む。
全体ではなく,プログラミングのところ。
一言でいうと,机上の空論という印象だ。
書いてあることはもっとものように思えるが,その実現を考えると無理ではないかと思われるもの多数。意味不明な箇所も多数。
少しずつ拾っていこう。

(3)コンピュータとプログラミングの内容の取り扱いについての記述。(31ページ)

ここでは,問題解決にコンピュータや外部装置を活用する活動を通して情報の科学的な見方・考え方を働かせて,コンピュータの仕組みとコンピュータでの情報の内部表現,計算に関する限界などを理解し,アルゴリズムを表現しプログラミングによってコンピュー タや情報通信ネットワークの機能を使う方法や技能を身に付けるようにし,モデル化やシミュレーションなどの目的に応じてコンピュータの能力を引き出す力を養う。

一見,なるほどと思うが,よく読むとわからないことだらけだ。

 「コンピュータや外部装置を活用する活動を通して情報の科学的な見方・考え方を働かせて」は何にかかるのだろう。そのあとの「理解し」? すると,ここでいう「情報」とは何?
「情報」の意味も「科学的な見方」の意味もきわめてあいまいなのだ。言葉として響きがいいだけ。何を以て「科学的」というのだろう。
 しかも,「問題解決に」となるとさらにわからなくなる。

 次に,「モデル化やシミュレーションなどの目的に応じてコンピュータの能力を引き出す力を養う。」が奇怪。「これからシミュレーションをします。ついては,コンピュータの能力を引き出しましょう」ということ? 

続いて,次の文がある。

また,こうした活動を通して,問題解決にコンピュータを積極的に活用しようとする態度,結果を振り返って改善しようとする態度,生活の中で使われているプログラムを見いだして改善しようとすることなどを通じて情報社会に主体的に参画しようとする態度を養うことが考えられる。

 「生活の中で使われているプログラムを見いだして改善しようとする」って,はたしてできるのだろうか。テレビ,冷蔵庫,エアコンなどで使われているプログラムを見いだせるか。「生活の中で使われているプログラム」とは何を想定しているのだろう。まさか,「朝ご飯を作って洗濯をして」というプログラムではないだろう。さらに,それを「通じて情報社会に主体的に参画」となると壮大すぎてさっぱりわからない。
(なお,後述する中学校での移行期間中の実践例に,掃除ロボットのプログラムのシミュレーションがあるのだが,それはでき上がったプログラムを示して改善しているものであって「見いだして」いるものではない)

 一文が長いのも,意味をつかみにくくする要因のひとつ。学習指導要領解説の文章(文科省の役人文章?)によく見られる特徴だ。

実は,このあとに,次の文がある。

ここでは,中学校技術・家庭科技術分野の内容「D 情報の技術」の学習を踏まえたプロ グラミングを扱う。

 どうやら,中学校で計測・制御のプログラミングが念頭にあるようだ。
したがって,中学校でのプログラミングがどのように行われているかを知る必要がある。
 これについては次回書くことにして,さらに先を読もう。太字は学習指導要領の記述だ。

ア(イ) アルゴリズムを表現する手段,プログラミングによってコンピュータや情報通信 ネットワークを活用する方法について理解し技能を身に付けることでは,コンピュータを効率よく活用するために,アルゴリズムを文章,フローチャート,アクティビティ図などによって表現する方法,データやデータ構造,プログラムの構造,外部のプログラムとの連携を含めたプログラミングについて理解するとともに,必要な技能を身に付けるようにする。その際,アルゴリズムによって処理の結果や効率に違いが出ること,アルゴリズムを正確に記述することの重要性,プログラミングの意義や可能性について理解するように する。

 でましたねえ,フローチャート。これについても別稿で論じるとして,その先に書いてある「データやデータ構造,プログラムの構造,外部のプログラムとの連携を含めたプログラミングについて理解」は大変なことではないだろうか。理解するためには実習が必要だが,「外部のプログラムとの連携」は,何を想定しているのだろうか。ある処理系からデータを書きだし,それを別の処理系で処理する,というようなことだろうか。
 たとえば,筆者が開発協力をしている KeTCindy というシステムでは,プログラミング言語の CindyScript からデータを書きだし,統計処理で使われる Rで処理し,それをまた CindyScript で読み込んで処理してTeXのファイルに書き出す,ということをしているのだが,高校生レベルの内容ではない。

 次の,「アルゴリズムによって処理の結果や効率に違いが出ること」については目を疑う。処理の結果が異なったら,それはアルゴリズムが間違っているということではないか。いったい何を想定しているのだろうか。
 その先,「プログラミングの意義や可能性」に至っては何を言いたいのかさっぱりわからない。

まだまだ続く。

イ(イ) 目的に応じたアルゴリズムを考え適切な方法で表現し,プログラミングによりコンピュータや情報通信ネットワークを活用するとともに,その過程を評価し改善すること では,コンピュータを効率よく活用するために,アルゴリズムを表現する方法を選択し正しく表現する力,アルゴリズムの効率を考える力,プログラムを作成する力,作成したプログラムの動作を確認したり,不具合の修正をしたりする力を養う。その際,処理の効率や分かりやすさなどの観点で適切にアルゴリズムを選択する力,表現するプログラムに応じて適切なプログラミング言語を選択する力,プログラミングによって問題を解決したり,コンピュータの能力を踏まえて活用したりする力を養う。

 これができるためには,複数の言語を使って実際にコーディングを行い,ライブラリの利用,デバッグの容易さを体験することが必要である。ライブラリのあるなしでアルゴリズムは変わってくるからだ。たとえば,データの並べ替えを行う関数がライブラリとして用意されていればそのためのプログラムを書く必要はない。ループの記法の違いもアルゴリズムに関係する。しかし,そのように複数の言語をある程度使いこなしていく時間があるだろうか。到底無理な相談である。
 これだけではわかりにくいと思ったのかどうか,そのあとに例が示されている。

 例えば,気象データや自治体が公開しているオープンデータなどを用いて数値の合計, 平均,最大値,最小値を計算する単純なアルゴリズムや,探索や整列などの典型的なアル ゴリズムを考えたり表現したりする活動を取り上げ,アルゴリズムの表現方法,アルゴリズムを正確に表現することの重要性,アルゴリズムによる効率の違いなどを扱うことが考えられる。その際,アルゴリズムを基に平易にプログラムを記述できるプログラミング言 語を使用するとともに,アルゴリズムやプログラムの記述方法の習得が目的にならないよう取扱いに配慮する。

 「気象データや自治体が公開しているオープンデータなどを用いて」というのは筆者が実際に授業でやっていることだが,使っているのはExcelである。プログラミングなどしなくても,平均,最大,最小など,関数一発である。
 「探索や整列」は,プログラミングの基本とも言える。プログラミングを学ぶとき,ここから入る・・・というのは数十年前の話。データの整列はExcelでやれば簡単だし,プログラミング言語ではライブラリが用意されていていちいちクイックソートなどのコーディングをする人はいないのではないか。まあ,アルゴリズムの学習という点ではいいかもしれないが,それを学んで何か応用が利くかというと,「別に」である。
 そして,これらをプログラミングしようとしたら,ループの方法など,ある程度「記述方法の習得」が必要になる。それなのに,「プログラムの記述方法の習得が目的にならないよう」とはどういうことか。
 例を見て,それを少し手直しするくらいでよいということか。すると,たとえば数学で言うと,例題と同じ構造の問題を数値だけ変えて真似してやればそれでよいということになる。それで概念が理解できるとは到底思えない。

さらにその先。

また,プログラミングによってコンピュータの能力を活用することを取り上げ,対象に応じた適切なプログラミング言語の選択,アルゴリズムをプログラムとして表現すること, プログラムから呼び出して使う標準ライブラリやオペレーティングシステム及びサーバなどが提供するライブラリ,API(Application Programming Interface)などの機能,プログラムの修正,関数を用いてプログラムをいくつかのまとまりに分割してそれぞれの関係を明確にして構造化することなどを扱うことが考えられる。その際,プログラミング言語ごとの固有の知識の習得が目的とならないように配慮する。

 前述の通り,適切なプログラミング言語の選択ができるためには,複数の言語である程度のプログラミングができることが必要である。「習得」していなければ比較もできない。「オペレーティングシステム及びサーバなどが提供するライブラリ,APIの利用」となるとかなり高度である。高校生がやることだろうか。

 結局,具体的に何を想定しているかがわからないのでさっぱりわからないのだ。

 学習指導要領解説では,このあとモデル化とシミュレーションについて説明してあるが,これも別稿としよう。簡単な話ではないからだ。

以上,結構宿題が残った。
・中学校でのプログラミング
・フローチャート
・モデル化とシミュレーション
それぞれ稿を改めて書いていく。