2020年度には小学校でプログラミング教育が必修化されるようだ。その是非について多くの意見があるが、少なくとも早めに自分の素質の向き不向きがわかることは良いことではないか、と思っている。私がプログラミングを始めたのも小学生だった。
それに、プログラミングを学ぶことは、ただプログラムを書くことができるようになるだけでなく、きちんと修得のプロセスを踏みさえすれば、様々な思考法や考える力を身につけることができる。(暗記型の授業形式ではダメだが)
プログラミング経験者として、プログラミングを通じて鍛えられたことで社会の様々な場面で役に立った力について、なるべく一般的な言葉を使って書いてみよう。
目次
抽象化思考、経験を応用できる力
プログラミングに最も必要なのは、抽象化する力ではないかと考えている。そもそもコンピュータの動きを抽象化したものがプログラムだからだ。抽象化を何層にも重ねることで、英語に似たプログラミング言語で表現することができる。
抽象化とは、余計なものを省いて物事の本質を捉えることであり、いくつかのパターンから共通の本質を見つけ出す力のことだ。
抽象化できない人が書いたプログラムは、ダラダラと冗長なものになりがちだ。ただ処理を上からなぞるように書かれたプログラムは非常に読みにくい。数字などがプログラム中に直書き(ハードコーディング)されていることも多い。
一方で、読みやすいプログラムは、似たような箇所や重複もなくシンプルで、適切に名前付けられた変数を使い、共通化できる部分は関数やメソッドとして抜き出されている。良い名前を付けたり、共通化する際の視点が抽象化だ。
抽象化を鍛えることができれば、様々な場面での応用が効く。成功でも失敗でもなにか経験をしたとして、そのプロセスや結果を抽象化して学びにできれば、次に取り組むのが、まったく同じシチュエーションじゃなくても役にたつ。
また抽象化思考は、世の中の仕組みやビジネスモデルなど概念を理解することにも有効だ。物事の本質を掴むことさえできれば、細かなところは後からでも補足することはできる。本質さえ抑えれば、無駄なこともしなくて済むだろう。
論理的思考、考えを整理して伝える力
プログラミングを難しいという人に共通するのが、論理的に考えることが苦手という点だ。コンピュータは人間と違って、背景や事情を配慮した上で「良い感じ」に動いてはくれない。一つ一つ、指示命令しなければいけない。
コンピュータは、プログラムで実装した通りにしか動かないのだ。
だから、きちんとプログラミングをしていれば論理的思考が鍛えられることになる。たまに、なんとなくでプログラムを書く人がいる。期待通りに動くかどうか動作確認をして正しく動くまで、当てずっぽうで直す。それでは論理的思考は鍛えられない。
私がプログラミングの指導をする際には、書かれたプログラムの1行1行どんな理由で書いたのか、言語化して説明させている。自分で書くプログラムには、すべて意図を持って書かなければならない。それがロジックを作ることになる。
論理的思考は、ロジカルシンキングとも呼ばれ昔からビジネスの世界では重視される思考法だ。複雑に絡み合った問題を解決するためには、合理的に整理をしていくことで、理解しやすいように分析することができる。
また、素晴らしいアイデアが浮かんだとしても、突飛すぎると周囲の理解や協力を得られないこともある。そんな時にも、そこに至る道筋を考えて、ロジックで補強することで理解を得やすくなる。論理的思考はコミュニケーションにも有効なのだ。
批判的思考、客観的に考え予測する力
他と揃えるために批判的思考と書いたが、これはクリティカルシンキングのことだ。クリティカルシンキングとは、一つの答えだけに固執せず、バイアスや先入観を外して、フラットに多方面の客観的な観点から最適解を求める思考法だ。
プログラミングをしていれば、バグに悩まされることが往々にしてある。自分では完璧なロジック、プログラムにもミスはない、それでも動かない。なんども読み返すが問題がない。そうして何時間も無駄に過ごしてしまうことがある。
そんなとき、誰か同僚に声をかけて見てもらう。その同僚にプログラムの説明をしているうちに、なんのアドバイスももらわなくても自分で解決策が浮かぶことがある。冷静になって客観的に見ると答えが見つかることがあるのだ。
ちなみにプログラマの世界では、それを「テディベア効果」と呼ぶ。別に他の人でなくても、クマのぬいぐるみ相手にでも喋っていれば問題が自己解決するからだ。
デバッグの場面以外にも、たとえばテストケースを洗い出すときや、大きめの設計をする際のリスクの洗い出しなど、様々な場合において可能な限り最悪のケースも考えることが求められる。
普段からプログラマがやたら現実的で、悲観的なことを話すのは、こうした思考の癖があるのかもしれない。しかし、ビジネスでは大事なことの一つでもある。
これからの時代を生き抜く力
これらの考え方や思考法を身につけておくことは、なにもプログラマにならなくても役に立つし、この先、単純労働が減っていく中で多くのビジネスパーソンにとっての必須のスキルになるかもしれない。
プログラミングの面白いところは、正解がないところだ。同じ問題でも、人によって作るプログラムは変わってくる。なんだったら問題解決のアプローチから変えることもできる。そして方法が違っていても解決することはできる。
正解はなくても、より速く作れるか、より速く動作するか、よりメンテナスしやすく書かれているか、よりシンプルな解決になっているか、そこに違いは出てくる。その良さを知れば、常に向上心を持つことができる。
正解がないから、自分で考えるしかない。自分の頭で考える力がつく。より良いものにするために思考停止することがない。もし、そこまでの思考力を身に付けることができたなら、どこでなにをやっても生きていくことができるだろう。
できるならば、必修化されるというプログラミング教育では、ただ盲目的にコーディングすることだけをさせたり、文法みたいなものを暗記させるのではなく、本質的な部分の思考能力を高める内容になることを願っている。