情報教育の今後について

ほかの記事でもご紹介していますが…作者はかつてパソコンの販売関連の職に就いたことがあり、その際、中学校などへのパソコン導入の仕事をしていたことがありました。
そして、その当時は自分なりにいろいろと考えたり、思ったことや感じたことがありました。
そんな今回は、おそれながら今後の学校教育について考えると同時に、これから導入されるであろう、情報教育について少し触れてみたいと思います。
なお、ここに書かれてあること(または掲載されていること)は、あくまでも作者の見解としてのものです。

・現代の学校教育についてモノ申す?

近頃は、すっかり本職の方も忙しく、その合間をぬっての同・創作作品の公開となった。
そのため、このページの記事の製作もすっかりご無沙汰となり、さらにその記事が全然できていないという状況でもあった。(※厳密にはもとの原稿は作っていたのだが…)
…と、そんな中、近頃のテレビや新聞で、ちょっと気になる話題もチラホラとみかけるようになった。
それは、現代の学校教育のあり方についてである。

さて、突然だが…現代の学校教育というものが、我々の時代よりも遥かに様変わりしてしまったのは、もはやいうまでもないことである。
ところでご覧の皆さんは、作者の時代である昔当時、小学校なら「家庭科」、中学校なら「技術家庭」など、そんな授業が存在していたのをご存知であろうか?

これはまず小学校の家庭科の場合、「裁縫」や「料理」などといった実習があり、前者ではちょっとした手作りの袋、後者ではご飯とみそ汁といったものをクラス内でグループ分けして調理室で作ったものだった。
…ちなみに変な話、作者は小学校で学んだこれらの授業が、いまでもありがたいほどに大いに役立っている。
例えば普段着ている衣類のちょっとした修復、そして、いまは自炊をしているので、このページでも公開している「ちょっとひとやすみ…のコーナー」の通り、料理は大いに役に立っているのが現状だ。
一方、中学校の技術家庭科の場合だが…こちらは技術と調理とに別れ、技術では木工作や教育用の電子回路キット(※ここでは上学年後半の話)の製作、調理ではその延長線上として、ご飯とみそ汁に加えておかずを作るものであった。
だがしかし…。
現代では学校教育に、ダンス教育というものが加わったと聞く。
まぁ話はちょいと耳にしただけで、その頃はなんとも思わなかったのだが…これについて作者は疑問を感じた。
それは…現代のメディアで「流行りもの」だからということが強いのだろうが…もう少し他に何か模索するものがなかったのか…?といいたくなった。
まぁ国が考えたことだから、これ以上は触れないが…将来踊ることにより生活というものが確立でき、それが大いに役にも立つ…というのであれば、ぜひ力を入れて欲しいと思う限りだ。(その一方で現代の子供の運動神経は失われつつあるとも報道されていたが…?)

さて…ここで余談ついでにもう一つ。
eスポーツ」という、いわゆるパソコンなどをはじめとするテレビゲームがスポーツとして公に認められるようになったと聞く。
これはいい時代になったものだ…!と、作者もつくづく思う。
だがズバリ言い切るが…ゲームはそれをする人に対し、結局は何ももたらすことはない。
但し、それをやって生活が立てられるなら、また別の話ではあるが…これらについては大会というものがあり、それにおいて賞金を得ることができるらしいが…それを得られるのは、何千分の一、いや、あるいはそれ以上の確率ではないか…?と思われる。
そんなことだから、いまの子供たちが勉強などそっちのけでゲームに夢中になっている理由でもあることが分かるが…その一方で国は、子供にゲームをするための制限についての条例を論議していると聞く。
なにごとも「節度」というものがあるように、確かにそれも必要か…と作者が思う反面、そんな社会になったのは、一体何が原因だったのだろうか…?


・その趣旨とは…?

さて、それでは問題の情報教育について触れてみよう。
実はこのホームページのある記事において、今後の情報教育用にいががですか…?ということで、マイクロソフトの「VSCode」を例として取り上げた。(※正確には、それを活用したC#言語による基本的なプログラミングとデバッグの方法などについて解説)
しかし…。
実はもっと「学校の授業らしい」情報教育というものもある。
そして…その授業の進め方については、作者が思う限り大きく二つに大別される。

それは、よくきくコンピュータの概論として重要な要素である、「ハードウェア」と「ソフトウェア」についてである。
また、果たしてこれらのどちらを選択するか…?ということだ。
たとえば前者の場合、よく聞くのはパソコンなどによるロボットの制御などがある。
そして後者の場合、やはりプログラミングを学ぶためのそれなりのソフトウェアというものがある。
まぁこれは一概には言えないが…どちらかといえば、とっつきやすいのはソフトウェアの方ではないだろうか。
だがしかし…。
コンピュータ(※パソコン)の心臓部であり、その頭脳でもある「CPU」の理論(※ハードウェア)の基礎や概念は、ソフトウェアから学ぶことも可能だし、むしろ「座学」(※普段の授業)だけでも可能なのだ。


・頭の中でコンピュータを空想し動かす

基本的にコンピュータ…正確には、「電子計算機」のその理論では、コンピュータの内部では必ず「0」か「1」で判別される。
これはさらに突き詰めると、CPUの内部であっても所詮は電気で動くものであり、その電流の導通・切断で、その二つを信号として、さらにそれを表現するものだ。
そして、その二つの数値の組み合わせで、2進数、10進数、そして…16進数を表現するものなのである。
そしてさらに16進数は、CPUの内部を制御する、いわゆる機械語として構成される。
つまり、どんなプログラムでも結果として、この機械語(※よくある実行形式のファイル/その拡張子が「exe」ファイルのこと)に変換され、実行されるのだ。
(※厳密には、実行時に参照されるファイル・「dll」ファイルなどがあるが、ここでは省略)

さて、前述した機械語は、別名「アセンブリ言語」とも呼ばれる。
この言語は命令そのものと、それを構成する16新数によるコードが1:1で構成されるものだが、そのため習得までにはかなり難を要す。
但し…。
慣れると自然に自分の頭の中で、プログラミングができるようになるという、不思議な言語でもあるのだ。
それは、アセンブリ言語ではCPUの命令コード表を片手に手で書いて、機械語に変換する(※これを「アセンブル」という)、「ハンドアセンブル」という方法があり、作者も高校時代、授業中にこっそりこれをやっていた…という経緯がある。(当然、先生たちにはバレバレだった)
ただここで言いたいのは、「パソコンなど実機を使わずにプログラミングができる」…ということだ。
但し、機械語は難解といわれ、そして、容易には習得できないという問題がある。
それは先ほど「命令とそれを構成するコードが1:1で表現できる」と書いたが…このために、後述する「アドレス」の概念が加わるのだが…このアドレスについて16新数による計算が必要となるのだ。
ちなみにここでは、このアドレスは、プログラム一文一文を構成する行番号のようなものと思っていただければよい。
たとえば、「〇〇の条件の時、プログラムのこの箇所へ分岐する」…といった場合、あらかじめその処理が書かれてある、あるいはこれから書く部分のプログラムの行先を、このアドレスで設定しなければならないのである。

実はここで登場となるのが、自動的にそれらを行ってくれる「アセンブラ」となるわけだが、そこまでいくと、やはりパソコンなどを使用せざる負えない状況となる。
画面は80年代のパソコン、「MSX」シリーズに、当時のシャープのパソコンの情報誌に掲載された「S-OS」のエディタアセンブラ・「ZEDA」を動作させたものだ。
しかし、前述のようにこれらの作業(※アセンブル)を人の手によって、できないことはないのだ。
また、作者も取得しているITの国家資格(※情報処理着試験)の中には、あるアセンブリ言語(※「CASLⅡ」)と、それを動かすための仮想のコンピュータ(※「COMET」)が、選択問題として出題されている。
これらの問題を読み解くには、頭の中でプログラムをトレース(その動作を追いかけること)することができなければ、正しい解答は得られない。
たとえば、いまどきの子供たちが将来もし、その資格試験を受けることがあれば、アセンブリ言語の学習は、それこそ大いに役立つといえよう。


・機械語とハンドアセンブルの実際

…ではここで、ちょっと見方を変えて、面白いコンピュータプログラムをご紹介しよう。
これは、太古の昔の8ビットパソコンに採用された、「Z80」というCPUの場合である。(※8ビットのパソコンやその関連した記事は、このページの「ハードウェア」編にて掲載している)
そんなわけで、ちょっとその一例をご覧いただこう。
まずは次の記述をみていただきたい。

  8000 LD A,1

上記の例では、8000がアドレス、「LD…」以降が、実際のプログラム(命令コード)となる。
これを、「アセンブル」…実際の命令コードを16進数に変換すると…

  8000 3E 01

…となる。
これは、「Aというレジスタに、数値の1を格納しなさい」…という意味である。
ここでは、Aをプログラムで使用する変数と考えれば、分かり易いだろう。レジスタという言葉の意味は、いまは考えないでよい。
…では次に、ここにプログラムを一旦終了させる命令を追加しよう。
ここで前述した、アドレスの計算を行うこととなる。ちなみにアドレスも、16進数で構成されている。
アドレスの計算は、8000に+2数値を加える。
今回は単純に、「3E」と「01」のあとだから…次は3つ目ということになる。(これらは「〇バイト」という数え方があるが、いまは省略)
したがって、8000に+3した値は8002(※但し、16進数で計算した場合、最初は「1」ではなく、「0」であることに注意)となり、命令を記述するアドレスは…

  8002 RET

…となる。
では、プログラム全体をみると…

  8000 LD A,1
  8002 RET

…となる。
これを再度、アセンブル(ハンドアセンブル)したとすると…

  8000 3E 01
  8002 C9

…となる。
上記は、作者が勝手に見易いように表記したものであり、行単位で表すと…

  8000 3E
  8001 01
  8002 C9

…となる。
これらを実際の「アセンブラ」(※開発用ソフトウェアの「エディタアセンブラ」など)や、手によるハンドアセンブルした場合、だいたいは…

  8000 3E 01  LD A,1
  8002 C9    RET

…といった表記となる。(※その命令について、その隣に16進数の命令コードが記述されるのが普通)
プログラムの命令一つについて、形上は1:1になっているのがお分かりだろうか?
最後となったが…16進数での表記部は「マシンコード」、そして…そのとなりの命令部は、「ニーモニック」と呼ばれる。
また、前述したAは「Aレジスタ」、または「アキュムレータ」とも呼ばれる。
これらの呼び名は、アセンブリ言語では共通して使用されるので、ぜひ覚えておくといいだろう。
なお、アセンブラについては、前述した掲載画像をみていただければよい。
また、いま解説したプログラムの一部も含まれており、どのような処理が行われ、また、どのような表示(※表記)となるのかが分かるはずだ。


・実際に実習環境を整えるとしたら…?

これはあくまでも、仮に…という話になるが、今回解説した学習のためのパソコンやソフトウェアなどを揃えようとした場合、これはかなり難を要する。
なぜなら、それ用の専門のハードウェアは、もはや現在では入手することは困難だからである。
…ただ、以前学校用教材として扱われていた、「ポケットコンピュータ」などを使用する手があり、また、これらは学校生協などで販売されていたものだ。
但し、こちらもいまも販売しているかは不明だ。

なにはともあれ、今回は「授業として学習する」ことを例として挙げてみた。
別の言い方をすれば…パソコンなどを一切教材として使わない方法として解説した。
つまり前述したように、あくまでも「座学」を想定したものである。
まぁそんな情報教育のための授業の進め方もあるのでは…?ということを、今回は分かっていただけたらと思う。
(もっとも「コストがかからない方法」も視野にいれてみたのだが)