レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

自分向けにソフトウェアを作ったことがないエンジニアと自分向けに料理を作ったことがない料理人

いままで、ITエンジニア向けの研修で「自分向け(または個人的に)どんなものを作ったことがあるか?」をアンケートすると一番多い答えは「特になし」。「これからどんなものを作りたいか?」を聞いたときすら「特にない」と答える人がいる。

技術は仕事のために習得しており。役割になりたい(プログラマになりたい、コンサルタントになりたい)ということを原動力に学ぶ。

しかし、他のプロの職人(たとえば料理人)に、個人的になにか作ったことはあるかと聞いたときに「特になし」なんてありえるだろうか。
他の職人は、何かしら個人的に作りたいものや作った経験があって、作ったことによる喜びも知ってるはず。人に喜んでもらうこともその一つ。
作る喜びがわかってると、自ずと新しいことに興味がわいて学ぶ意欲がでてくる。参考書を丸暗記するよりも効果が高い。

プログラミング講師としては「作りたいものを発見してもらうこと」が、「個別の技術を教える」よりもはるかに成長の効果があると感じる。
子供向けプログラミング教育でも同じことがいえる。

デジタルネイティブ世代はきたのか?

2000年初旬ごろ「あと数年もしたら、デジタルネイティブ世代がくるぞ!おまえらなんか仕事なくなるぞ!

と、当時IT業界で働いていた僕らは驚かされたものだった。


さて現在、確かに若く素晴らしいクリエイターが一部には存在する。

しかし、僕らが脅威的に思っていた「世代」とは異なると感じる。


そういうことを漠然と考えており、高校生にプログラミングを教える仕事をして、わかったことがある。

「消費者」と「提供者」の違いが、現代ではものすごく大きな溝となって立ちはだかっているのではないか。


例えば、スマートフォンだ。

スマホタブレットはデジタルコンテンツ消費者のためのデバイスといえる。

一部アプリがクリエイトをサポートするものがあるが、あのデバイスの哲学としては消費者に最適化しようとしていたと思える。


一方、デジタルコンテンツなどの価値を提供する側のデバイスは、MacWindowsといったPC向けOSを有するデバイスではないか。



中学生、高校生、大学生、はては新社会人ですらキーボードは得意じゃない。
課題や宿題も、できればLINEで出したいと思ってるようだ。


キーボード世代とフリック世代

この格差が、とても大きくなっている。

消費者はスマホでフリックを使い、提供側はキーボードでブラインドタッチを使う。


インプットデバイスの違いは、言語の違いに等しいほどの溝を生んでる。


生まれてすぐにテジタル製品に囲まれた世代は
デジタルを消費することにはネイティブと呼べるけど
デジタルを提供することに対してネイティブではなかった


デジタルネイティブはキーボードが打てないが、Webのサービスのアカウントは覚えきれないほど持ってる。

かれらデジタルネイティブを、消費者一辺倒から生産的な価値感をもたせるだけで、ちょっと日本は変わるような気がする。


その課題意識から、こんなアプリを作ってみている

CODE写経
http://app.levelenter.com/s

子供向けプログラミング教育をやっていて辿り着いた先

先に結論を言えば、プログラミングのスキルの根底にあるスキルは「読解力」なんだなと考えています。

プログラム言語は、やはり言語なので、国語的能力がとても大事だということなんです。

2歳になる娘が日に日に言葉を覚えていく様子を見ていると国語の習得のステップとして、以下のようになると感じています。

  1. 単語を覚えるステップ(ルールを覚える)
  2. 人のマネをしてみる(例えば親や友達のマネで語彙力が上がっていく)ステップ(受動的なマネ)
  3. マネのネタを増やすに読書をするステップ(能動的なマネ)
  4. 自分らしい表現ができるようになるステップ(オリジナル)

こういうステップを経ていると思うんです。
親のマネをしたり、絵本を読んだりアニメを観たりしていく中で語彙力が上がっていきます。


守破離」にも通じる、学びの本質だと思うんです。


さて、僕は子供や学生に向けたプログラミングの教育をやっています。

彼ら彼女らの学習の変遷をみているとやっぱり類似するステップがあります。

  1. プログラミングのルールを知るステップ(ルールを覚える)
  2. ルールとお手本に従ってマネしてみるステップ(受動的なマネ)
  3. マネの積み重ねから改造による新しいアイデアが生まれるステップ(能動的なマネ)
  4. マネのネタとして、書籍やオープンソースなどの他人のコードを読むことでスキルアップするステップ(能動的なマネ)
  5. イデアを先にだして、実現する手段としてプログラミングがあるステップ(オリジナル)


そうです。国語の取得と完全に類似するステップを経るのです。


僕自身も文系上がりのSEだったので、すごく国語力に助けられたSE人生でした。

最初はプログラミングのルールを覚えるのに四苦八苦しました。
そしていろんなモノマネや写経をへて、少しずつアイデアが湧くようになり、アイデアありきで形にできるようになっていきました。

これらのステップの中で、「ルールを覚える」や「受動的なマネ」は大人や教師が与えてあげなくてはいけない部分だと思います。
ですが、「魚を与えるよりも魚の釣り方を教えよ」という格言に従うと、次の「能動的なマネ」ができるようにしてあげるのが大事だと思います。

プログラミングの世界で言えば、一流のプロレベルのスキルを習得するときには、現場作業だけではなくいかに多くの人のマネをするかが分かれ目になるように思います。

オープンソース読めとか、ネットコピペではなく本を写経しろとか、
プログラムの達人たちがいう言葉を言い換えれば、「プログラムの読解力」なのかなと思います。

しかし、単にプログラムソースを読むということだけではなく、国語的な読解力を身につけていくことは大事だと思います。なぜなら、プログラミングを行うことは自然言語とコンピュータ言語の翻訳だからです。


ということで、子供や学生向けに教育をする際にも読解力というスキルを身につけてもらうことを大事にしていきたいと思っています。

アフターシンギュラリティの世界を生きる人へ

シンギュラリティ(技術的特異点)は近いと言われている。
技術的特異点 - Wikipedia

技術的特異点(ぎじゅつてきとくいてん、英語:Technological Singularity)、またはシンギュラリティ(Singularity)とは、人工知能が人間の能力を超えることで起こる出来事とされ、テクノロジーが急速に変化し、それにより甚大な影響がもたらされ、人間の生活が後戻りできないほどに変容してしまうとする .

僕ら大人達は、恐れている。

しかし、我らが子供達は、シンギュラリティを必ず迎える。
子らには、それを乗り越えた先の世界で生きる強さを持って欲しい。

シンギュラリティを超えた先の世界に生きる人たちに、生きる強さを教えることは
大人の責任じゃないだろうか。


そもそも特異点など恐れることはない、いままでもコンピュータの方が僕らより頭がよかった。
10年前に書いた恥ずかしい日記を僕は忘れているが、コンピュータは覚えている。
僕らの声は、せいぜい100人にしか届かないけれど、コンピュータとネットワークを組み合わせると1億人にだって届けることができる。
僕らは、100ほどの計算をしたら頭が疲れてくるけれど、コンピュータは1秒に100万回計算してもへっちゃらだ。

そういう意味じゃあ特異点はすでに経験してるともいえる。


未知の何かに怯えるのは人間の性だけど、コンピュータが起こした大革命ならすでに経験してるじゃないか。

それはインターネットが革命を起こす前夜を思い出せばいい。
インターネットが多くの職を奪うだろうといわれた。
実際そうなったが、それ以上に多くの職が生まれた。


インターネットが出てきた時には、すでに人間はコンピュータに能力的に超えられているけれど、僕らは恐れてはいない。使いこなすべき対象なだけだ。


AIが発達したとしても、コンピュータが苦手な分野がある。

例えば子供だ。
子供向けの教育をして、自分自身も親になってわかった。
子供は論理のかけらもなく、合理性なんか無視の究極のカオスだ。
愛情がなければ、関わるのもめんど臭いだけの非合理の塊。

でも、可能性の塊でもあり、多かれ少なかれ愛を感じざるを得ない存在だ。

愛を理解できるコンピュータができるだろうか。
できるなら、それはそれで希望にあふれている。


コンピュータが非合理性を理解して、非論理的に動きはじめたときに
初めてコンピュータは人間を超えるかもしれない。

しかしながら、そうなってしまうと我々にとってその存在とは、
とても論理的で融通が利かないけど、ある意味愛するべき友人という扱いになるのではないだろうか。
だったら、僕は酒をのみながら愚痴を言い合いたい。


僕は、シンギュラリティの先に、ターミネータースカイネットの存在を感じるよりも、
ドラえもんや、攻殻機動隊タチコマの存在を感じるほうだ。

人が作るものだから、驚異というよりも希望なのだ。
そんな世界なら恐れることはないだろう。

それが完成だとしたら、僕らが生きているうちには来ないかもしれない。
シンギュラリティ以降も、しょうもないバグに悩まされそうな気配はプンプンする。


しかし、そういった超越していながらもまだまだ不完全な世界において、我々の子供達は生きなければならない。

だったら、ドラえもんに道具を出してもらう方法を知ってる子供を育てたい。
できれば、多くの人がのび太になってほしい。

道具を求め、課題を提示した時にはじめてドラえもんは、役に立ってくれる。
ドラえもんへの頼み方を知ろう。子供達にそう教えたい。


スマートフォンは、とても身近なコンピュータで、接する時間もながい。
だけど、その機能を使いこなせる子と、そうでもない子がいる。
それが経済格差になってしまう可能性もある。
だったら、それこそ教育の出番じゃないだろうか。

シンギュラリティを超えた世界A.S.0001年を生きる人たちを育てる教育。

しばらく、我々大人たちはそういったテーマで子供の教育に向き合わないといけないだろう。

それこそシンギュラリティを超えるころまでの。

ソフトウェアエンジニアの独立というキャリアパス

ソフトウェアエンジニアには、常にキャリアパスとして独立というルートが存在しています。

35歳の転機

古くから語られている通り、ソフトウェアエンジニアの35歳には転機があります。
「まっとうな人は、繰り返しを馬鹿馬鹿しく感じ」
「賢い人は、すでに去っており」
「まっすぐな人は、極める快感に酔いしれる」
また、
「仕事の対象がコンピュータから完全に人へシフトする」
「描いていた人生の必要経費と、将来の給与の限界が折り合わなくなる」
という時期だと思います。

僕がソフトウェア開発の業界に就職した2000年ごろ、35歳のソフトウェアエンジニアのロールモデルはあまり存在していませんでした。
だから「35歳定年説」を聞いたときも、「じゃあ35歳以降どうなるの?死ぬの?」って思っていました。

現実の35歳

現実には35歳を超えた私の周りでは元ソフトウェアエンジニアが、自分たちで産んだ価値を、自分たちの対価にかえるというモチベーションで起業をすることが増えてきました。

もちろん会社に所属して頑張る人も沢山いますし、それぞれのキャリアを描いていることにケチをつけるものではありません。
起業のリスクはとても大きくて、半泣きになって会社勤めに戻りたいと思う時もあります。

でも、キャリアの転機において、独立という選択肢が残されているソフトウェアエンジニアは、なかなか良い職業だと感じているって話です。

ござ先輩のクオリティスタート

さて、この6月に「ござ先輩」こと湯元堅隆さんが起業して株式会社クオリティスタートという会社を立ち上げました。

ござ先輩は、SIerでソフトウェア開発やコンサルティングのキャリアを積み、その後「これからは事業会社をIT会社に変革していくのがSIerのミッション」との信念で、流通系の企業のIT部門長として仕事をされていました。

とか今更紹介するまでもなく、エンジニアブロガーの有名人です。

ござ先輩の生み出したクオリティスタート社がやろうとしていることは「事業会社をIT会社に変革する」ことですが、その手段として、顧問弁護士や顧問税理士などのように「顧問エンジニア」というスタイルを生み出そうとしていること、併せて「業務システム自動生成ツール」を使ったビジネスを展開していくとのことです。
MOD99ご説明資料.pdf 直

顧客目線とIT目線の両方を持ち合わせたござ先輩らしい進め方だと感じています。
ソフトウェアの自動生成と顧問エンジニアの組み合わせは、IT化されていない主に中小の企業にとっては、導入しやすいサービスではないでしょうか。

ステマで、互助会だといわれるかもしれませんね。。。でもとても良いロールモデルだとおもったのです。

まとめ

少ない設備投資で、価値を生み出すことができるのがエンジニアであり、起業にはとても向いています。

ビジネスを作ろう。小さなものでもいい。それがエンジニアの代表作というものだ。
そういう働き方が、一つの35歳以後の姿かなと思います。

プログラミングを学ぶべき理由

2020年に小学校でプログラミングの授業が必修化することに関連して、プログラミング学習の理由について、議論が活発になっています。

私は、プログラミングは「コンピュータとの対話の手段」であり、本当の目的はコンピュータを知り、使いこなす方法を学ぶということだと考えています。

若い世代にとって、スマホを含めコンピュータに接する時間はどんどん長くなっています。
親しい隣人とも呼べるコンピュータを制御し使いこなすことができることは、頼れる相棒を生涯にわたって持つということだと言えます。

プログラミングは論理的思考を学ぶために有効か?

プログラミング学習の義務教育化に向けて、「プログラマーばかり育ててどうする」という外部からの声に反論するために、プログラマーを育てるのではなく、論理的思考を育てるのだ」とその目的を表現したりします。

体育が必修だからといって、全員がオリンピック選手を目指さなくてもよいように、プログラミングを学んだからといって、全員がプログラミングを仕事にしなくても良いのです。

確かに、全員がプログラミングを仕事にしなくても良いと思います。そこは同意。

ですが後半の「論理的思考を育てる」という部分には少々疑問があります。
プログラミングをするときに論理的思考は必要ですが、それを学ぶのにもっと効率の良いやり方はあると思います。
例えば、正しい国語を学ぶことや数学を学ぶことです。

Viscuitの開発者である原田さんのブログで共感した部分です。
http://devroom.viscuit.com/2016/10/02/%E8%AB%96%E7%90%86%E7%9A%84%E6%80%9D%E8%80%83%E3%81%AE%E5%90%91%E4%B8%8A%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%95%E3%81%AA%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99/

論理的思考能力を鍛えたければ,他のもっといい方法があります.よく考えたゲームとか.プログラミングは筋が悪いです.

モダンな(笑)プログラミングは論理的を求めてはいません.

実はひどいプログラミングツールを使ってプログラムを作らなければならない場合に,論理的思考能力がなければなにもできない,ということがあります.上記「プログラミング教育は論理的思考能力の向上を目指す」と主張している人たち,そしてそれに反論している人たちは,ひどいプログラミングツールを使ってプログラム作った(しかし動かなかった)という経験が強く残っていて,そんな狭い考えに支配されているのだと思います.ここで言えるのは,ひどいプログラミング=論理的思考能力必須 です.

わざわざプログラミングを学ばなくても論理的思考は学べます。
「プログラミングを学ぶ」ことがありきで、目的をカッコよく後付けしただけのように感じます。

実際、子供さんをコンピュータに長時間触れさせることは、親御さんからのウケは悪いものです。

そこに、別角度の目的を据えて反論を逸らしていますが、本音を言えば「世界的にプログラミングが価値ありとされている中、日本が置いていかれるのはまずい」ということでしょう。


私は、「コンピュータでできることと、できないこと、そして次の可能性を知る」という目的が良いように思っています。
コンピュータは、この先も長らく人類の頼れる隣人になると思います。
偏屈で頑固でこだわり屋だけど、能力は高いという困った隣人のことをよく知りましょうという目的です。

正しい知識がなければ、「AIが人類を滅ぼすかも」みたいな不安に駆られることでしょう。
「写真に写ると魂が抜かれる」的ですね。
人類を滅ぼすとしたら、AIよりよっぽど人間のほうが怖いと思います。

コンピュータを怖がらずに武器として、道具として使いこなすこと。

それが若い人みんなに習得して欲しい力です。