モバイル時代とソフトウェア技術の進化
プログラミング教育は最新技術で始めなければならない
プログラミング教育は、C、Java、HTML などのコーディング技術の習得や、演算·比較·判断·分岐·反復処理などのコンピューティングアルゴリズムを教えることではなく、問題解決能力を培うことである。それもコンピューティング装置内部の問題ではなく、人の世界で直面する数々の現実の問題を解決する効果的なツールとして、プログラミング教育を行うことがこの時代が求める真の目標であると言える。
しかしこれまでソフトウェア を作るのに、必ずプログラムコーディングが必要だったため、コーディング技術とアルゴリズムを教えてきた。 そのため、すべてのソフトウェア 開発は誰でもできず、常に困難で高価なものだった。
近年ソフトウェア工学技術が飛躍的に発展し、人工知能技術も実用化し、プログラムの開発工程も急速に自動化やスマート化し始めている
そのような新技術ソリューションを活用し、誰でも自分が実装するプログラムの機能と100%GUI方式デザインツールに描き入れて定義さえしてくれれば、実際にプログラムを作るのは人工知能エンジンが全て自動処理することとなる。
従って、これまで主な教育対象として教えてきたコンピューティングアルゴリズムやコーディング論理は、ソフトウェアが普遍的教育として実施される今後の教育現場では、それほど重要な学習テーマにはならないだろう。 プログラミング教育の究極的目的は,世の中の問題を解決できる実用的なソフトウェア製品を上手に生み出せるようにすることである。 ところが、従来のコンピューティング論理教育は、最終目的である世の中の問題とはかけ離れており、何より単なる手段に過ぎないコンピュータ装置内部の処理方式やロジックだけに集中させ、ソフトウェアをうまく作るという当初の目的を失わせたり、むしろ妨害する逆作用まで誘発させてきた。 コーディング技術とアルゴリズムはソフトウェアを作るためには必ずコーディングという作業を通してやるしかなかった時代の古い遺物だと言える。
古い経験と先入観がかえって毒
それにもかかわらず、C言語、Javaなど伝統的なコーディング作業に熟練した技術者集団や、長年そのような技術を教えてきた教授および教師の中でごく少数は、世の中の変化を受け入れることができず、強く拒否するケースも少なくない。 これまで自分の核心力量と考え、また差別的職業能力として活用してきたコーディング技術も自動化されるという点に、同意することができず激しく抵抗したりもする。
彼らは、実際の産業現場では非常に複雑で高度な機能の実装が求められるが、この技術は「単純なプログラムしか作れない」とか「こんなことはできないだろう」「あんなことは不可能だろう」などと主張しながら、一旦拒否からする。 このような人々は、実際に新技術とソリューションを調査したり学習したりせず、自分の限られた経験的判断を基準に予断して価値をおとしめるなど拒否行動を見せる場合が多い。
このような強い拒否行動を見せる理由は、ほとんどの場合コーディング技術が本当に自動化されてしまうと、将来の職場で自分の地位が低下し、仕事自体も減って非常に困難な状況に直面しかねないという観点から、無意識に拒否感を示したケースがほとんどである。
しかし、コーディング作業がなくなるからといって、仕事が減ったり、自分の役割がなくなるという予断は、あまりにも偏狭な見方と限られた経験による速断だと言える。 実際にコーディング作業なしで実用的なソフトウェア製品を作る過程を自動化できれば、ソフトウェアを作った期間とコストが画期的に減り、これまで予算や人材問題にしてこなかったすべての対象を開発することになり、仕事は現在より10倍~100倍以上爆発的に増加することが確実となる。
そして人々は、もはや難解で無数の反復作業を余儀なくされた非人間的なコーディング作業から抜け出し、ソフトウェアの機能や品質、使用効果を実質的に左右する設計作業、すなわち処理する対象(仕事)の内容や遂行主体、手順などを分析、設計するプロセス設計業務が主要な業務となるだろう。
プロセス設計作業は、「当該ソフトウェアをなぜ作るべきか、その目的達成のためにどのように作るべきか」を調査研究し決定するという非常に重要な過程であり、将来人工知能など先端技術が大きく発展するとしても、この作業は必ず人間だけが行い、人間がやらなければならない中核的役割であるといえる。
仮にあなたが今までコーディング技術に慣れた既得権者として、コンピューティング装置の内部処理ロジックや作用にのみ関心を集中してきたとすれば、今後はこれまでの経験とノウハウを十分に生かし、世の中の問題をソフトウェアという手段を持ち、「我々が解決する現実の世界の問題は何か」、そして「そのような問題を解決してくれるプログラムの機能とUIはどのように作ればいいのか」などを悩み、研究する方向に仕事を転換すればよい。
もしあなたが今多くの学生を対象にプログラミング教育を行う教育者であれば、当然このような新技術と自動化ソリューションを前提に教育を実施すべきである。 そうすれば教育の実施目標から、教育対象と教える内容、そして授業の進め方など、すべてが新しく変わることがわかるだろう
プログラムの本源的意味に忠実な教育
一つのソフトウェアを作り出すためには、具現化対象となる仕事の内容や手順を分析してプロセスを設計し、その設計書に従って実際に駆動させるプログラムモジュールを作り出すことになる。 しかし、後半部の作業、つまりプログラムモジュールを作り出すコーディング作業があまりにもややこしく難しいので、これまではプログラミング教育といえば、ほとんどの人がコーディング技術に集中してきたと言える。 しかし、このようなコーディング作業がすべて自動化されたら、これから学生には何を教えるべきだろうか。
プログラミング教育は、「プログラム」という単語が含んでいた原初的意味に忠実な方向に転換しなければならない。 最近では、プログラムという言葉を聞くと、コンピュータ·コーディングのような多少偏狭な意味がまず連想されるが、本来のプログラムの言葉は、学芸会のプログラム、音楽会のプログラム、放送の編成のプログラムなどのように使われてきた。 プログラム単語の本源的意味は、あることを進める計画や手順などを意味する。
今日のように人工知能技術が実用化され、人があえてコーディング作業をしなくても何をどのように作ろうと要求さえすれば、必要なソフトウェアを自動で作る時代に、ソフトウェア普遍教育はプログラムという言葉が当初から持っていた本源的意味に忠実に変わることが望ましいだろう。
そこで、学生たちが具現化すべき仕事の処理手順や実行主体などを調査·分析し、実際に作り出す機能とユーザインタフェースを企画·設計する能力を培えるように教育することが望ましい。 そして、このように各学生が企画した設計書をもとにソフトウェア工学自動化ソリューションが、実際に駆動可能なプログラム製品を自動製作することになる。
これで教師は最終産出物プログラムモジュールを直接作動させ、正常に作動するかどうかと、機能及び品質、現場適用性、適用効果、UIの容易性などの側面で評価·指導できる。 結局、生徒のための教育の最終目標は、ソフトウェア技術を活用した問題解決能力の育成である。 つまり、問題を認識する能力とその解決策を模索する企画力と推進力を培うことができる実質的な教育を実施することができる、このような教育方式が日本社会で実際に要求し、また世の中のことに役に立つ真の教育ではないだろうか?
教育は結局「考える力」を育てること
前述したように、ソフトウェアは誰でもいつでもどこでも使用される汎用的な技術である。 ある程度の適性がある人ならC言語、Javaなど難解なプログラム言語も1~2ヶ月あれば十分学ぶことができる。そして、そのようなプログラミングツールを使い慣れている熟練期間もそれほど長くない。
いったんこのようにプログラムを作れるレベルの能力さえ確保できれば、具現化対象によっては多少の試行錯誤を経験することができるが、何でも考えたものを作ることができる柔軟で汎用性の高い技術がソフトウェア工学である。 さらに、このような分野でも人工知能や自動化工学技術が実用化され、今後は誰でも自分に必要なものをソフトウェアにすることが技術的経済的にも可能となった時代になりつつある。
従ってプログラミング教育は、もはや-コーディングスキルやアルゴリズム習得よりも、「何を作るか」と、「どう作るか」といった企画的力量が格段に重要となっている。 言い換えれば、複雑で難しいコーディング作業を間違わずに早くこなさなければならなかった機械的熟練性の培養よりも、考える能力と習慣を身につけることがより重要である。
まず、「何を作るか?」というテーマは、学生がコンピューティング原理を理解し、ソフトウェアを作るコツと手順を身につけた後に、このような強力なコンピューティング資源と処理能力をどこに適用して、新たな価値を創出できる対象を見つける役割であり、文字通り創意性と直観される能力と言える。
これらの能力は,暗記した答えを覚えて書く伝統的な教育スタイルでは培うのが容易ではない. このような教育は、答えを上手に書く能力ではなく、むしろ問題を見つける能力と言える。 言い換えればソフトウェアという汎用技術で、解くべき問題を出題する先生のような役割なので、かつての詰め込み教育では体得できないのである。
実際に、米国で今日成功したベンチャー企業家として広く崇められているアップルのスティーブ·ジョブズ、グーグルのラリー·ページ、フェイスブックのザッカーバーグのようなベンチャー企業家も一様にプログラムコーディング能力ではなく、問題発見能力で成功した事例だと言える。 プログラムを作る能力だけで評価すると、これらの創業者よりむしろ優れた職員も多かっただろうし、これらの会社の外にもコーディング技術に関してはもっと有能な人も多かっただろう。 しかし、これらの成功した創業者は、ソフトウェア技術を組み合わせて新たな価値を生み出すことのできる対象や問題を人より一歩先に発見し、また発見した問題に集中し、今日の巨大な成功を遂げた人々といえる。 そのため、彼らを「創意力で成功した企業家」と高く評価しているのだ。
次に、「どのように作るのか?」というテーマは、先に発見した対象問題を解決するプログラムを作るために、現在の問題と状況を調査·分析し、再整理して実際に実装するプログラムの細部機能とユーザインタフェースを設計する役割であると言える。 ソフトウェア製品の機能や性能はもちろん、実用的価値は事実上この作業段階で決まることになる。 特にソフトウェア工学の自動化技術を採用した場合、設計さえ上手くやれば実際のプログラム実装はすべて自動化されるので、この段階の作業がより重要である。
ところで、このような設計作業の最も重要な要素は、実装する対象産業や業務領域についての知識である。 当該分野の知見を基に、これまで行ってきた処理方式を調査分析し、コンピューティングパワーを活用して新たに処理する革新的な仕事処理方式の企画案を策定することが主な役割である。
プログラミング普遍教育は、アルゴリズムやコーディングのような手段についての学習または訓練ではなく、まさにこのようにソフトウェアで具現化する最終目的の仕事(対象)ついての知識習得とそれを体系化できる企画能力を育てる過程であるといえる。 結局プログラミング教育は全ての学生に考える力を育てる教育だと言える。






