プログラミング教育で得られるものというと、「論理的思考力」と「創造性」とよく言われている。
その創造性について考えてみたい。
創造性の定義はいったん置いておき。
プログラミング教育で創造性が身に付くのか?
僕はエンジニアといっぱい仕事をしている。プログラマーの多くが創造的だったかと言われると、NOと言わざるを得ない。むしろ、そうでない人のほうが多い。
ユニークなビジネスアイデア、企画を出す人は(もちろんエンジニアにもいるが)プロデューサーのような役割の人が多いし、エンジニア出身のスタートアップ経営者も相対的に(日本では)少ないと思う。
何より、僕はエンジニアだが、自分が創造的だとはまったく思わない。
プログラミングができると創造的でなくなる、と言っているわけではない。プログラミングができて創造的な人もたくさんいる。でも、プログラミングができることと、創造的であることに相関関係は見られない。
仮に創造性を「アイデアをひらめくこと」だとすれば、プログラミングは、ひらめいたアイデアを具現化するプロセスである。創造性とは関係ない。
ではなぜ、プログラミング教育が創造性を育むと言われるのか?
新しいものを創るにはプログラミングが必要、だからプログラミングを学べば新しいものが創れる、すなわちプログラミングができるようになると創造性が身に付く、という論理の飛躍かな、と個人的には考えている。
なんとなく、創造性という言葉を、漠然と使っているのではないだろうか?
調べてみると、創造性という言葉は、ウィキペディアにもページがない(投稿時点)。
創造的な人として僕が真っ先に頭に浮かぶスティーブ・ジョブスは
創造性とは「なにかをつなげること」なんだ。
http://diamond.jp/articles/-/150351
と言ったらしい。
では創造性とは何なのか?創造的な人とはどんな人なのか?
僕が定義するならば、「新しいことをひらめいて」「それを実行に移せる(あるいは表現できる)」人は創造的な人だと思う。
じゃ、新しいことをひらめくにはどうしたらいいのか?
子どもに、何でもできるツールを渡しても、それで目新しいことはあまりやらない。むしろ、知っていることの半歩先の(あるいは半歩ズレた)ことをやる。
いきなりすごいことをひらめく天賦の才能を持った人もいるだろう。でも普通の人は、いろんな経験することでこそ、その半歩ズレた世界が広がっていき、ひらめくことが増えていくのだと思う。経験の延長にひらめきがあると思う。
そして、いろんな経験をどんどん体験するために必要なのは、「未知のことでも失敗を恐れずにとにかくやってみるマインド」と「ダメでも試行錯誤して解決しようとするマインド」だろう。
これは、ひらめいたことを「実行に移す」ために必要なものでもある。
つまり、(僕が定義する)創造的な人になるには(天才はおいておき)、
「未知のことでも失敗を恐れずにとにかくやってみるマインド」
「ダメでも試行錯誤して解決しようとするマインド」
を身につけるようにしたらいいのだ。
うん、これは、プログラミングの学びですごく大切なことであり、適切にプログラミングを学習すれば身に付きそうだ。
ただ、プログラミングができてもこれらのマインドが身に付いているとは限らない。単に論理的思考力が高いだけの人はできちゃうし、暗記が得意でパターン化された問題が解ける人でも、プログラミングはある程度できちゃうから。
つまり。
プログラミングを学ぶなかで(僕が定義する)創造性を育もうと思ったら、プログラミングができるようになることを目的化するのではなく、
「未知のことでも失敗を恐れずにとにかくやってみるマインド」
「ダメでも試行錯誤して解決しようとするマインド」
を育むようなプロセスこそを大事にするべきだと思う。
他の子より進むことや作品の完成度を求めるのではなく、そのプロセスでどういうマインドを持っているか、それが伸ばせる環境を周りが用意しているか。
それことが大切なものなのだろう。
(そしてプロセスを大切にしていけば、すぐにではなくても、結局はアウトプットも自然と高まるはずだ)