見出し画像

コンピュータってなんだっけ

プログラミングのレッスンをしていて 言語にかかわらず、16進数やビット演算が登場すると基数変換を教えなければならず これが若い初学者の方にはなかなかハードルが高いようです。

コンピュータが誕生して その進化とともに人生を歩んできたものにとってみると、自然と身についている節もあるのではないかと思います。

若いころ店頭でみたMZ-80BやPC-9801などは、欲しくてもなかなか買えなかった憧れのマシンでした。価格帯としては比較的手に入りやすかったポケコンやPC-8001が流行った時期があり、BASICやアセンブラを入力してゲームなどを遊んだ記憶があります。アセンブラのコードを入力するのに、ハンドアセンブルして できたマシン語を地道に入力して、そんな中で自然と16進数や2進数の知識も体にしみ込んでいきました。しかしながら、いまや組み込み系のソフトでさえ、アセンブラやマシン語に触れることは少なくなっているのではないかと思います。

趣味でC言語を学びたい方向けには、ArduinoのC言語をお勧めしてレッスンしています。WiFiやBLEを搭載したM5StackやM5Stickなど安価で高機能なIoTガジェットも数千円と入手しやすく、学習には最適です。データはいろいろなクラウドサービスを使えますので、基数変換やコードの意味が分からなくても やりたいことができてしまうのです。データの取り扱いも、JSON形式などの知識の理解のほうが求められます。

情報処理などの試験用に仮想マシン上のアセンブラが定着して長らく時間がたちます。いま学ぶ人はそんな歴史上の進化という途中経過も端折って、いまさら2進数や16進数を学ばなければならないとき その必要性すら疑問に感じているように思います。

高級言語が進化して、JAVAやC#でポインターが消えたあたりから「ポインターって何ですか」というプログラマーも公認されて、教える側もC言語のレッスン中に「ポインターって教える必要があるのかしら」と疑問に思うときがあります。ただ、このポインターも分からず、関数の引数で『値渡し』と『参照渡し』の違いを教えようとすると概念的にしか説明できず、すこしモヤモヤしてしまいます。Excel VBAでは 明示的に書かないと『参照渡し』がデフォルトになっているのに対して、C#などの言語では『値渡し』がデフォルトになっており、レッスンでも避けて通れない概念と知識になります。

記憶媒体の進化も、昔々はパンチカードで入力した媒体から、カセットテープを再生してピー・ビョーなんて音で読み込んだ磁気テープに媒体がうつり、それがフロッピーディスクに保存できるようになり、ハードディスクが初めて導入されたときは「こんなに大容量使いきれないよ」と思っていた記憶容量は 今思うと無料で使えるクラウドの用量やUSBメモリより少なかったのです。昭和初期のテレビを初めて買った時の家庭みたいに 座布団の上に高価なハードディスク様が飾ってあった記憶があります。それが、SSDになって、クラウドになってと姿を変え続けています。テレビの世界でもハードディスクレコーダなんて商品もあったのですが、いまやオンデマンドで映画やドラマを見る時代ですよね。

そんな進化した姿が日常の今の初学者の方では そもそもコンピュータも希薄な存在となりつつあります。タブレットやスマホが、もはやCPUやレジスタから切り離された存在となってるのでしょうね。マシンが足りなかったら、クラウド上でバーチャルマシンを拡張すればいいんですよねって時代で、今後 開発環境もオンライン上でビルドできるようになると もはやクライアントにはブラウザしか必要ありません。

こんな進化した状態への教育のアプローチは、階段を1フロアずつ上る方式ではなくエレベータで止まらないフロアも必要そうです。がんばれば、自力で昇れそうだけど 楽してエレベータにのっちゃおうかなという そんなぎりぎりの境目にいる現代ですから、教える方も学ぶ方もむづかしい過渡期にいるように感じます。どこまでを歴史というカテゴリに移行させるのか、教育側のアプローチも俯瞰的に考えて何を不要・何を必要と振り分けて取捨選択して"整理"しないといけないですね。(あ、これも5Sですね)

この記事が気に入ったらサポートをしてみませんか?