スポンサーリンク

プログラミング教育の目的と手段

プログラミング教育必修化の流れの中で、現在子供達を対象にしたプログラミング教室などに注目が集まっています。プログラミング教育自体はプログラマーの育成が目的ではなく、コンピュータに対する基本的な理解を深めることによって「プログラミング的思考」を育成することが教育の目的であるとされています。

今後ますます情報化が進む社会の中で、普遍的に求められる力としての「プログラミング的思考」を養う事は大事なことです。しかし、「プログラミング的思考」を養う手段として「プログラミング言語」を学ぶことが適切な方法であるかどうか、といった疑問については専門家の方々の中でも意見が分かれるのではないでしょうか。

私の個人的な意見としてはプログラミング言語、特にプロのエンジニアが使用しているような既存のプログラミング言語の習得は、小学生の子供が「プログラミング的思考」を養う手段としては、少し難しすぎるのではないかと考えています。もしやるのであれば今はScratch(スクラッチ)をはじめとした教育目的のプログラミング言語もいくつかありますので、まずはそちらから入ってみる事をおすすめします。(Scratchについてはこちらのページで紹介しています。)

プログラミング=コンピュータを理解すること?

プログラミング言語を学ぶことによって「プログラミング的思考」を養うことは可能です。しかし既存のプログラミング言語を使ってコードを書いていくような、ごく一般的なプログラミング言語習得のスタイルだけがコンピュータへの理解を深める唯一の方法ではありません。

少し私個人の経験について書きますが、私は学生の頃に大学の授業でC言語というプログラミング言語の授業を受けました。私はコンピュータの仕組みに興味があったのでプログラミングを学ぶことでコンピュータに関する理解を深められると期待していたのですが、カリキュラムを終えて実際にプログラミングができるようになっても、私の中にあったコンピュータに関する疑問のほとんどは解決されないままでした。

その後プログラミングの授業だけでなく工学系の授業なども受けたのですが、一向に自分の中にある疑問を解決することができませんでした。私が興味があったのはコンピュータを指示通りに動かす(プログラミングする)方法ではなく、どうしてコンピュータは指示した手順(プログラム)の通りに自動的に動くのか、その中の構造がどういう仕組みで動いているのかということでした。

それからいろいろと自分で調べていき、独学を始めてかなりの時間が経ったあと、ようやく自分の知りたかった答えにたどり着くことができました。

私は「プログラミング的思考」を養う方法の一つとして、コンピュータの仕組みそのものについて学ぶというアプローチもあって良いのではないかと考えています。これは個人差もかなりありますが、当時の私にとってはプログラミングそのものよりも、コンピュータが動作する仕組みを理解できた瞬間の方がより刺激的で楽しい体験でした。

そしてコンピュータの仕組みというのは分かってしまえばそれほど難しい内容ではありませんでした。「難しい内容ではない」というと誤解を招く言い方になってしまうかもしれませんが、大学の教育課程で習うような高度な数学の理論や物理学の知識がなくても理解できる、という意味では難しい内容ではなく、むしろ中学生で習う「オームの法則」さえ知っていれば理解できる内容です。もし今の自分が学生だった頃の自分に直接会って教えてあげられたなら、余計な回り道をせずに一直線に答えまで導いてあげられるのになぁ、と思うことがよくあります。

一般のプログラミング言語はエンジニアが効率よくソフトウェア開発を進められるように作られています。そのためコンピュータの構造というのはできるだけブラックボックス化された作りになっています。高級言語になればなるほどその傾向は顕著になります。その方が効率が良いからです。実際に目的となるソフトウェア、例えば作りたいゲームなどがあり、楽しんでプログラミング言語を学んでいる子供がいればそれはとても良いことです。実践的なプログラミング言語を扱う能力を若いうちに身につけることができれば、その後の可能性が大きく広がることでしょう。

ですが子供達の中には当時の私のようにコンピュータの仕組みに興味がある子もいるのではないかと思います。IT業界にはソフトウェア系とハードウェア系という仕事の区分があり、プログラミング自体はソフトウェア系に分類される仕事になります。そしてコンピュータの仕組みについて考えたり、コンピュータそのものを一から開発したりすることはハードウェア系の仕事に分類されます。当時の私のように、プログラミング自体には興味はないけれどもコンピュータの中身が知りたい、という子供はハードウェア系の技術に興味を持っています。ハードウェア技術はソフトウェア技術と同じぐらい重要で、ロボットや自動車を開発するのに必要不可欠です。センサーを用いて外部の情報を「計測」したり、プログラムで処理された情報をもとに機械を「制御」したりするハードウェアの技術はあらゆる産業で使われています。

この記事はプログラミングというソフトウェアの方向からではなく、コンピュータそのものの仕組みをハードウェアの方向から理解することで「プログラミング的思考」に触れようという試みで書かれたものです。一般的なアプローチとは異なる、かなり実験的なコンテンツであるという事をお断りしておきたいと思います。

以降の記事の内容は、大学進学前の全く専門知識がなかった頃の私に向けて書かれています。できるだけ専門用語を使わずに、高校生や中学生だった頃の私にも伝わるようにと思って書きました。ですので既にある程度の知識のある方にとってはかえって分かりにくい表現になっていたり、精確さに欠けるような表現がたくさん出てくるかと思います。その点はご了承ください。まずは全体像をとらえることを第一の目的としています。

以降の内容はコンピュータの仕組みについて書かれたものです。概念的な解説ではなく、より具体的な仕組みとしてコンピュータを理解するために必要となる知識をまとめました。トランジスタの基本動作から「NOT回路」「OR回路」「AND回路」の解説を行い、「加算回路」「マルチプレクサ回路」「比較回路」「フリップフロップ回路」「カウンタ回路」「メモリ回路」「クロック回路」の7つの基本回路の構造解説を通してコンピュータの動きを理解する内容になっています。全く専門知識のない状態を想定した内容になっていますが、少し学習が進んだ方向けにVerilog HDLを用いたCPUの作り方などにも触れています。こちらの内容はVerilog HDLやFPGAの基礎を学びたい人にも参考になるような内容になっていると思います。一度にすべての内容を理解する必要はないと思いますので、ご自身の理解に応じて読み進めてください。

 

次へ>

 

スポンサーリンク