「プログラミング教育急げ」を読んで

H28/1/26
石井俊雄
1月21日の毎日新聞朝刊に面白い記事を発見した。
「坂村健の目」というコラムに書かれた記事で「プログラミング教育急げ」である。
エッセンス部分を抜き書きすると、次のようになる。
  1. アメリカの場合
    オバマ米大統領は12日に行われた一般教書演説で、 「全ての学生に仕事に役立つ実践的コンピューター科学と数学のクラスを」とプログラミング教育について言及した。
  2. イギリスの場合
    英国のイングランド地方は既に2014年から5歳児から読み書き算数に次ぐ扱いでコンピューター科学を必須化している。
  3. フィンランドの場合
    フィンランドで今年から初等中等レベルの必修化が始まる予定だ。「コンピューター的考え方とプログラミング」に力点を置くという。 こちらは専門の教科の新設ではなく「ICT(情報通信技術)能力」という科目横断の枠組みにより、 様々な分野でコンピューター的考え方を適用してプロフラミングができるようにするという。
  4. オーストラリアの場合
    オーストラリアでは紆余曲折があったものの、ついに昨年9月にデジタルテクノロジーという初等中等向けカリキュラムが必須科目として承認された。 コノカリキュラムの達成目標を見ると、「ネットワークシステムの制御と管理」とか「ユーザーエックスペリエンスやアルゴリズムの設計・評価」など、 コンピューターシステムを使うだけではなく、作るときに必要とされる高度な目標が設定されている。
  5. 我が国への提言
    世界を見渡すとどの国も初等教育におけるプログラミング教育導入を急いでいる。 しかし方法論は多様。これが正解という方法論はどこにもない。 日本人的には「静観して成功例が出てからそれを参考に・・・」と言った慎重論に傾きそうになる。 しかし、教育は確実に国力に影響するとともに、結果が得られるまで最も時間がかかる投資の一つでもあつ。 優柔不断に費やせる時間はもはやないのだ。
以上、抜粋終わり。
以降、少し私見を書こう。 何故なら、私は、若い頃はプログラミングで食っていたから、少しは、それが解るからだ。 その経験がなければ、坂村氏の主張される「プログラミング教育導入を急げ」との提言、理解できないのではないかと危惧するのである。 お節介な話だが、お付き合い願えれば嬉しい。
  1. コンピューターの基本要素
    そもそも、話の根源は、コンピュータの基本要素が「ビット」というものに依っているという事実にある。 ビット (bit, b) は、ほとんどのデジタルコンピュータが扱うデータの最小単位。英語の binary digit (2進数字)の略であり、2進数の1けたのこと。 2進数の1桁がとれる値は、"0"(ゼロ)か"1"かの2つしかない。 同じく、2進数の2桁がとれる値は、"00"、"01"、"10"、"11"の4通りである。 このようにして桁を増やして行くと、3桁だと9通り、4桁だと16通り・・・というように、とれる値の数が増えていく。 一般には、n桁の2進数のとりうる値の数は、2のn乗個である。 この表現をビットという言葉で表すと、nビットのとりうる値の数は、2のn乗個である、となる。
    コンピュータの中では、nを8とした塊をバイト(byte,B)と呼び、バイト単位でハンドリングする慣習が一般的である。 何故8なのか、それは8ビットのとりうる値が256通りなのが手頃な値だった所為ではないだろうか。 因みに、西洋世界の文字であるアルファベットは26文字であり、それに大文字、小文字があるので、倍の52通りが必要になる。 更に数字のために10通り必要だ。それから、特殊記号というのがある。 例えば、プラス記号、マイナス記号、掛け算記号、割り算記号、アステリスク、ドル記号、パーセント記号、アルファ、ベータなどのギリシャ文字、などなどだ。 それらを100通りくらいあるとしたら、全部で162通りが必要ということになる。 余裕をみて256はいい数字と感じたことだろう。
    かくて「バイト」という表現が定着したのである。必ずしも8でなければならない自然則はないことは明確だ。
  2. 記号化という人間の感性
    因みに、漢字文化圏においてコンピュータが着想されえただろうかと考えるとき、おそらく数十年遅れでは不十分だろう。 数百年では、どうかな?という気分である。 何故なら、漢字という着想が記号化としては劣っているからだ。 記号化とは、不必要な部分を削って削って最後に残った要素、それが記号と呼べるものであるべきだと思うからである。 目に見えた事象をそのまま文字にするような思考法では、記号化は進まなかったと思う。
    記号化が進めば何がいいかと言えば、思考が必要なものに集中できる、ということだろう。
    例えば、漢字の種類は少なくも10万字はあるそうだが、アルファベットでは26文字ですむ。 となると、漢字10万字を憶える時間が、余計にかかることになる。 その間、26文字を憶えたら、次のステップに進める方が効率的なのは目に見えている。
    不必要なものを削ぎ落とす文化と不必要なものを抱え込む文化、エッセンシアルなものへの探求において、どちらがより適しているかは明らかだろう。 記号化に対するセンス、これって大きいと思う。
  3. 「コンピューターの基本要素」と「人の記号化感性」のコレボレーション結果
    この、不必要なものを削ぎ落とすという性向は、突き詰めれば二元論の世界に至ると思われる。 記号化に対するセンスは、その世界の性質であり、記号はその具体の一つである。 かくて二元論から二進数へ、二進数からコンピューターへ、具体がなされたものであろう。
    以上から、コンピューターは二元論の世界が生み出したデータ処理装置である。 その処理上の基本は二進数。従って、取り扱われるデータは数値化される。別の言葉で言えば、デジタル化されるのだ。 そこが、我々人間の脳とは違うところだ。人間の脳ではアナログ情報として認識されるのだから。
    人は、人類発生以来アナログの中で生きてきた。 だから、デジタルな世界には、馴染みがない。 だが、この違いに慣れる方法がある。それはプログラミングという活動をすることであろう。
  4. 「プログラミング教育導入を急げ」との提言がなされるわけ
    話を本題の「プログラミング教育導入を急げ」との提言がなされるわけ、を考えよう。 その提言は、国力の維持発展という観点から人材育成を目的にしたものであろうと思うが、 私は、それが個々人の思考能力の向上に繋がるものであるとの観点から意見を書いてみる。
    私の意見では、次の点が理由だと考えている。
    1. プログラミングでは「テニオハをはっきりする」必要がある
      主語、述語、目的語、などを明確に書くこと。 書くために使う言語は、仕様書(「スペック」という)は自然語(日本語、英語、など)で、 それを受けたプログラムはプログラミング言語(C言語、VB、JAVA、など)で表現する。
      書いた結果は、コンピューターにかけると即ぐ結果が出るので、試行錯誤の繰り返しで、書く力が自ずから上達してくることが期待できる。
    2. プログラミングでは「正確に表現する」必要がある
      コンピュータの基本要素が「ビット」というものに依っているという事実から、ビットの立ち方の僅かな違いも許されない、となる。 なぜなら、ビットの立ち方の僅かなずれも、コンピューター内では全く別の内容となってしまうからである。 人間なら、文脈とか、人柄とかから、正しい値に自動で補正してくれるような些細な違いでも、コンピューターにとっては別のものとして取り扱われてしまうのだ。 だから、コンピューターでは正しいか間違いかの2つしかないのである。その間は無い。文字通り正確な表現が必要ということである。
      曖昧さの無い二元論的思考法が身につくことが期待できる。二元論というと、ガチガチだ、とか言われそうだが、実際、それを経験してみるのも、 視野が広がるというものだろう。その経験の上に、あるいは「曖昧さ」というか「中庸」なるものを取り入れればいい。 そうでなく曖昧さの世界から始めると、締まりのない世界で終始してしまい、発展という視点からは疑問が残ると言えるだろう。
    3. プログラミングでは「解り易く表現する」必要がある
      プログラムは1回作ったら終わりではない。何故なら、人間社会が変化していくからだ。 その変化に合わせて、プログラムも変えて行かなければならないのだ。 そのために行う作業がメンテナンス。メンテナンスのためには、プログラマーは対象となるプログラムを読み解かなければなならい。 そのとき、対象となるプログラムが分かりやすく書かれていることが重要になる。
      通常、スペックを満たすプログラムの内容は幾通りもある。ゴタゴタと書こうが、スッキリとスマートに書こうが、それはプログラマの勝手である。 だが、メンテの際、ゴタゴタ書かれていれば内容を理解するのに時間がかかりコスト高となる。 だから、プログラマはスッキリとスマートに書くべきなのである。
      かくして、人と人との繋がり、言語の構造化思考、時間軸を考えた思考、これって歴史認識と言われたりするが、それが可能になるだろう。
    4. プログラミングでは「独り善がりをやめる」必要がある
      プログラムの世界では、独り善がりは通らない。 多分とか、何とかなるだろうとか、であるはずだとか、というような曖昧さは許されない。 「れば」(願望)とか「かも」(推測)とかも駄目。 また、努力したからこのくらいでいいだろう、も駄目である。 あくまで、きっちり断言出来なければならない。 武士に二言はない世界にいるようなものだ。 請け負った以上約束はまもらないといけない。
    5. プログラミングでは「アルゴリズムを考え出す」必要がある
      プログラムとは、コンピューターへの司令を書いたもの、と言える。 その司令の書き方は、逐次処理と言って、コンピューターへの司令を実行したい順序に並べる、というものだ。 例えば、同窓会の場合、式次第をプログラムというようなものだ。 同窓会は、先ず幹事長挨拶、次に乾杯、宴会、アトラクション・・・というように展開されるが、プログラムも同じように、 目的達成のために必要な司令が逐次遂行されていく。 司令は、コンピューターが理解する言葉を使って展開されたもので、これをプログラムと言うのである。
      例えば、a+b=c を計算をするプログラムは、入力データはaとbであり、プログラムの出力はcである。 この命題を受けた場合、プログラマはコンピューターが理解する言葉を使って入力a,bからcを得る方法を考えることになる。 このコンピューターが理解する言葉を使ってcを得る方法がアルゴリズムである。
      このアルゴリズムを考えることは、楽しい時間である。自分の考えだけが頼りだし、自由に羽ばたくことができる作業だからであろう。 分からなければ、人に聞いたり、参考文献をあさったりして考えなければならないが、創造の楽しみが味わえると言えるのだ。
      アルゴリズムを考え、コンピューターが理解する言葉を、正しい逐次処理が可能なように並べていく作業はとても楽しい。 特に、思い通りの実行結果が得られた時は、満足がある。 得られない時は、苦しい。機械が誤動作している、と思うこともしばしばだが、結局、自分のミスが原因だと分って、 自分の至らなさに気づかされたり、コンピューターの偉大さに驚嘆したりするのである。
      かくて自分の論理思考力が増してくることが期待できる。
    6. プログラミングでは空論が無く必ず決着が着く
      このように、コンピューターをやっていると、結果が明確に出るのである。 結果の白黒が着かない長談義とは違って、結果の白黒は明確だ。・・・割り切れるからスッキリするのである。だから、次のステップへと進んで行けるのだ。 これって、慎重論に終始し優柔不断に時を費やすという慣習からの脱出法に繋がるかもだね。 少なくも自尊自大にはならなくて済む、と言えるだろう。・・・こんな人、多いからね!プログラムやらせれば思い知るかもだ。
  5. 結論
    結論的に言えば、プログラミングという作業の意義は、二元論世界の経験ということだろう。
    西洋世界は、端的に言えば二元論世界である。 神様にしろ一神教の世界であり、我々の八百万神の居わす世界とは違っている。 今、その優劣を論ずれつもりはないが、二元論世界を知ることは重要だろうと思う。 何故なら、近代化の先駆けとなったのは西洋世界だからだ。 即ち、近代化とは二元論がもたらした成果だとも言えるのである。
    コンピューターの世界の基本はビットである。即ち、あるかないかの二元論世界なのだ。その中間は無い。 二元論世界は曖昧さを排除し前進に最も適した思考法と言えるのであり、その世界を知ることは必要不可欠なことだと思う。 プログラミングはそれを体得するのにもってこいの機会である。
コメントはこちらへメールして下さい。その際、文中冒頭に「HPコメント」と記して下さい。 Email
 

<コメント欄>   当欄は上記のメールをコメントとして掲示するものです。
 
 
コメント
石井浩四郎
ご意見拝見。おっしゃる通り重要性はよくわかります。世の中コンピューターなしでは何もできない時代ですから。 とは言っても若い人たちに、「頑張って」と言う以外には自分では何もできないもどかしさ。 サイバイー攻撃が増えてきたしアノニマスに蹂躙されているだけでは情けないしね。
トッチャンの文章も重要性は理解できても中身は残念ながらちっとも理解できない。昔々入社してすぐにコンピュウターは2進法だよと習った記憶はある。ウイーバーの名前だけ。それとまだ若いころ、ゴルフコンペの成績をすぐ出すためにソフトを組んだことがある。 当時は、コボルとかフォットランとかを使って、まず@とAを比べて小さい方を仮置きし、次にAとBを比べて小さい方をまた仮置きし、 次にBとCを比べて小さい方を・・・・と言う風にプラグラムを作った記憶があります。 懐かしいですけど、最底の原理は今も変わらないでしょうが、ソフトを組む手順は全く違うでしょうね。
(2016/1/27 22:21)