基礎教育
最近、小学校でのコンピュータープログラミング教育の必修化が文部科学省にて討議され、その実現が現実のものとなりました。わが国のコンピューター教育は、欧米やアジア諸国と較べて先進状態にあるとは言い難いです。
応用技術重視の反面、基礎技術を軽んじる傾向、個性の軽視などが遠因になっていると思われます。遅ればせながら、IT技術が生活のすみずみまで浸透している現実に沿う形になり、的を射た施策と言えましょう。
お金を出せばいいものが手軽に買える時代に、コストパフォーマンスにそぐわないことを何故するのかという疑問がわきますが、面倒と言って基礎的なことを避けているといつかは付けを払わさせられることになります。
コンピュータープログラミング教育が話題になった時期に日頃の思いを綴ってみます。
プログラムとプログラマー
プログラムとは物事を進めるための手順を言いますが、テレビの番組表、予定の計画表などその意味は広いです。コンピューターの世界では手順をコード化して、コンピューターに対し教え込む職業人をプログラマーと言い、その行動をプログラミングと呼んでいます。
プログラミングする前に、全体のことを立案する人々のことをシステムエンジニア(SE)、プランナー、マネージャーなどと呼びますがそれらの区分けははっきりした定義はなく、技術者派遣の単価決めに悪用されているようです。
プログラマーは派遣費が低く初心者、SEは熟達者、派遣費は高いとの評価には釈然としません。
プログラマーの歴史
世界で最初のプログラマーはバベッジの解析機関のプログラミングをしたエイダ・ラブレス(Lovelace,Augusta Ada Byron 1815~1852)と言われています。ラブレス伯爵夫人はあの著名な詩人・バイロン卿の娘で、米軍国防省が世界中から公募して完成させたada言語(エイダげんご)にその名を残しています。
エイダ・ラブレスはわが国で通用しているいわゆるプログラマーの領域をはるかに超える学識を持ち、幕末の坂本龍馬(1836~1867)より21年も早く生まれた女性です。
プログラマーは外国では高い技量の持ち主の呼称でありその偉大さを認識して欲しいです。
グーグルのPosted by Megan Smith担当副社長、Lynette Webbシニアマネージャー が数年前、GOOGLE Japan Blogにて《1843 年のコンピューター先見者エイダ ラブレスを讃えて》というタイトルで女性先駆者を称えていますので、興味をお持ちの方はどうぞお読みください。
教育の効能
小学生へのプログラミング教育は何をもたらすでしょうか。今では国内で活躍している日本人によるノーベル物理学受賞者も増えて世界に通用する力量を保持していると声高に言われるようになりましたが、まだまだ危なっかしい現実も見え隠れします。
魚はほとんどスーパーで切り身で購入するので、魚に頭やしっぽがあることを知らない子供が多いといわれています。モノは買って手に入れる他に、作り上げることができるということを知ってもらいたいものです。
工作や裁縫・料理は必要ですがIT社会の中ではプログラミングは必須と考えます。
友好国に安住してなんでもただ乗りは危険です。海の向こうでは飛びぬけて元気のある大統領が生まれるかも知れません。
そうなると今の常識が通用しなくなる恐れがあります。独立独歩や創造力の育成には早い段階でのプログラミング教育が合っているように感じます。
プログラミング例
<html> <head> <div>Lissajous Curve</div> <script type="text/javascript" charset="Shift_JIS"> const SIZE=160; const ZX=220; const ZY=230; var ctx; var r=0.0; //0~2.0 var d=0.002; var tm=1; var count=0; const col = [ 'tomato', 'royalblue', 'magenta', 'indigo', 'bisque', 'darkgreen', 'orange', 'yellow' ]; function start() { var canvas1 = document.getElementById('sample'); //描画コンテキストの取得 if (canvas1.getContext) { ctx = canvas1.getContext('2d'); //次から具体的な描画内容を指定する console.time('tm1'); console.log("start:"); draw1(); } } function draw1(){ var q = r * Math.PI; var p = 3 * q; var o = 4 * q; k = SIZE * Math.sin(p); //x l = SIZE * Math.sin(o); //y var wx = ZX+k; var wy = ZY+l; r += d; //linear function if(r<=2.001){ dot(wx, wy, col[count % 8]); } else{ count++; console.log("回数=%d %d", r / d, count); console.timeEnd('tm1'); r = 0.0; } setTimeout('draw1()', tm); } function dot(x1, y1, col){ ctx.fillStyle = col; //塗りつぶしの色は赤 ctx.fillRect(x1, y1, 5, 5); } </script> </head> <body onLoad="start()"> <canvas id="sample" width="480" height="480" style="background-color:ivory;"> </canvas> </body> </html>