プログラミングには、論理的に考える力と抽象化して本質を捉える力が求められる。これらは、なにもプログラミングに限らず、あらゆる仕事の場面で役に立つ。むしろナレッジワーカーにとっては基礎力といっても良いのではないだろうか。
本記事では、新米のナレッジワーカーが最初に身につけておくと良い論理的思考と抽象化思考について、プログラミングで鍛えられることについて考察した。
目次
ビジネスの共通言語としての論理的思考
仕事をしていても、なんとなく考えたことは自信を持つことができない。だから、なんとなく説明しても伝わらない。そして、なんとなく実行したら、成功しても失敗しても、なんとなくしかわからない。なんとなくでは再現性がない。
論理的に考えるということは、選択肢を考えて、そこから選ぶ理由を考えることだ。そうして考えたことは、説得力がある。世の中には絶対の正解はないから、正しいかどうかは出せないが、少なくとも仮説としては十分なものになる。
直感で閃いたアイデアでも、論理的に筋が通れば自信を持つことができる。論理的に考えたことを、論理的に説明すれば、相手にも伝わりやすい。もちろん、相手にも論理的思考があることが望ましい。凝り固まった人には伝わらない。
価値観や背景が違っていても、論理的思考ができる同士なら、直感や感情だけで話すよりも建設的に話ができるし、理解はできる。もちろん、人は論理だけでは動かない。だけど、感情だけでも動けないのだから、論理的思考は必要だ。
言うなれば、論理的思考ができることは、ビジネスにおける共通言語を話せるようなものだ。ビジネスマンの必修科目と言って良い。
成長速度の速い人に共通する抽象化思考
同じ仕事を繰り返すだけならば、そこに抽象化思考は要らないだろう。何度かやっているうちにうまくなる。だけど、毎回違うことをしなければいけないとしたら、どんな経験を積めば良いのだろうか。そこに抽象化思考が求められる。
どんなことでも起きた出来事を、そのまま受け取って対処するだけでは学びにならない。一つ外側からのメタな視点で考えれば、問題ならば再発防止できるし、成功ならば再現できる。制度や仕組みを作るには抽象化思考が必要なのだ。
抽象化思考ができることは、個人の視点で見れば学習能力の高さに直結する。一を聞いて十を知る。抽象化とは本質を見つけること。一度の経験だけで、様々な場面に応用が効く本質を学ぶことができるなら、成長速度に影響してくる。
抽象的な話よりも具体的な話の方がわかりやすい。だから好まれる。文章よりも漫画、漫画よりもアニメの方が楽なのは、具体的だからだ。娯楽なら良いが情報としては薄くなる。抽象的な話からでも理解できる方が学習生産性は高い。
このように、抽象化思考を身につけておけば、そのあとの成長曲線が大きく変わってくるだろう。身につけるなら早めの方が良い。
ルーチンワークがなくなる時代に備える
かのドラッカー氏は、ナレッジワーカー(知識労働者)の時代が来ると言った。かの野中郁次郎先生は、知識が企業の競争資源になると語った。それらは慧眼だった。今まさしく多くの人が、その時代の到来を感じているのではないか。
大量生産と大量消費の時代に、工業化された社会であれば、人々は資本を持った一部の人たちの元で、労働者として時間を提供すれば、対価を得て安心できる生活が保証されていた。その多くがマニュアルに従うルーチンワークだった。
しかし、今やルーチンワークの多くはロボットなりコンピュータなりに置き換わる。おそらくここ数年で、さらに加速するだろう。そうなると、同じことで熟練してきたような仕事はなくなり、再現性のない仕事が増えていくのだろう。
ルーチンワークがなくなるとしたら、一度の経験から多くの学びを得られる抽象化思考が出来ることは、非常に重要になる。抽象化した学びを得られる人こそが、新しい仕事に適応できる。論理的思考ができれば、知識を資産にできる。
少なくとも人の寿命が延び、誰もが長く働くようになる時代を迎えて、ずっと一生同じ仕事を続けていくことは無理がある。繰り返しの経験だけに頼っている訳にはいかない。
プログラミングと論理的思考と抽象化思考
コンピュータは人間が指示をした通りにしか動かない。それがプログラミングだ。気を利かせて、いい感じに動いてくれることはない。逆に、不具合があっておかしな動きをしたとしても、そのようにプログラミングされているからだ。
ちゃんとしたプログラミングは、すべて理由、すなわち論理ありきで作られている。一つ一つ順に動くプログラムを、論理的に組み立てていくのがプログラミングだ。当然だが論理的思考が求められる。直感や勘で作っている訳ではない。
ソフトウェア開発は、複雑さをシンプルにする仕事だ。現実世界は曖昧で複雑だ。それをコンピュータがわかるように論理的に組み立てなければいけない。複雑なものに名前をつけて概念として単純化する。それが抽象化、モデリングだ。
ソフトウェアは抽象化された世界だ。0と1のデジタルなハードウェアを抽象化して概念にして扱う。目に見えぬ概念をプログラミングすることで、実装する。概念の上に概念を重ねて、シンプルにわかりやすくなるように進化してきた。
プログラムとは、実際にはコンピュータで動く実体を抽象化して記述したものだ。だから抽象化できなければプログラミングはできない。
プログラマから経営者へ思考能力の応用
このようにプログラミングの経験(もちろんコピペじゃない経験)があることで、論理的思考と抽象化思考は自然と鍛えられるのではないだろうか。実際のところ、私は経営者の仕事をしているが、プログラマの思考で経営をしている。
会社とは何か。オフィスというハードウェアの器のことではなく、そこにいる人と関係性を会社だと考えるなら、会社はソフトウェアだ。だから、ソフトウェアを扱うプログラマが経営をするのは、案外うまくいくのではないだろうか。
海外であればプログラマ出身の経営者は多数いる。Microsoftのビルゲイツに始まり、Googleの二人の創業者、Facebookのマークザッカーバーグもしかりだ。プログラマの知見を活かして、ナレッジワーカーのための組織を作っている。
昔ながらの日本人のイメージする社長は、営業こそが仕事で根性や気合いで会社を引っ張っていく。そんな経営者にはプログラマはなれないだろう。しかし、ナレッジワーカーたちが求める組織は、そんな会社や社長の姿ではないはずだ。
これから増えてくナレッジワーカーたちにとって働きやすく生産性の出せる組織の経営者には、ソフトウェアのプロフェッショナルである論理的思考と抽象化思考を備えたプログラマが適しているのではないだろうか。
論理的思考と抽象化思考を鍛える言語化
プログラミングは、必ずしも論理的とは言えない複雑な現実の世界を、シンプルに抽象化して論理的に落とし込んで言語化する行為だ。変数名やメソッド名にこだわりを持つのは、わかりやすい名前を付けることが、抽象化に繋がるからだ。
プログラミング以外で、論理的思考と抽象化思考を鍛えるにはどうすれば良いか。自分の考えや学んだことを言語化することだろう。言葉にしようとすれば整理されるし、現実を完全に写実することはできないから、余計なものは削ぎ落とす。
そうした過程の中で、物事の本質を捉える目が養われる。言語化したものはブログでも誰にも公開しない日記でも良い。自分の経験を思い返して考えることが大事だ。他にはチームでふりかえりをするのも、誰かに話すことで言語化のきっかけになる。
言語化するには、表現力や語彙力も必要になる。概念を知ることと言葉を知ることは同じだ。思考は、言葉に縛られているからだ。多くの言葉を知るために、本を読むのは有効だ。何もビジネス書や技術書でなくても、フィクションだって良いだろう。
言葉で表現する幅が広がれば、考える幅も広がる。そして、抽象化がうまい人は、たとえ話がうまい。抽象化することで、似たような事象を見つけてくることができる。たとえ話をもとに、さらに思考を広げることもできる。
プログラミングの経験が人生の役に立つ
本を読み言語化やたとえ話のバリエーションを増やし、自分が経験したことを論理的に分析し言語化していく。そうすることで、論理的思考と抽象化思考を鍛えることができるだろう。
プログラミングも言語化の一つだから、それらに鍛え方が似ている。多くのソースコードを読み、自分の中での表現や引き出しを増やし、複雑な問題をプログラムで解決していく。プログラマの育成にも通じるところがある。
論理的思考も抽象化思考も、思考の癖にできる。普段からボンヤリと過ごすのではなく、仕事もマンネリでこなすのではなく、現実の世界をモデリングし、仕事の経験を抽象化し、どうすれば活かすことができるのか論理的に考えていく。思考を変える。
プログラミングだけとも限らないが、論理的思考と抽象化思考を身につけることは、人生にとって大いに役に立つことだろう。
論理的思考と抽象化思考を身につけるためにも、プログラミングを学びたいと思った方はこちらもお読みください。“これからプログラミングを学ぼうとする君へ”
もう、いい歳だからプログラミングは厳しいよ、いや、今からでもやってみたい、と思っている方はこちらもどうぞ。“プログラミングの修得に年齢は関係ない”