プログラミングを学ぶために身につけておきたい思考法について

iko

プログラミングのための思考法というのは極めてシンプルなものです。 そこさえ押さえておけば、誰でもプログラミング技術を上達させることが可能。 この記事では、プログラミングを学ぶ為にぜひ身につけておきたい思考法についてご紹介します。 (僕は現在、DIVEINTOCODEでプログラミングを学んでおり、その知見も踏まえてお話ししたいと思います。)

そもそもプログラミングとは?

85B60D14-BA28-48BB-A0CD-A83A4D778ED4 簡単に言うとプログラミングとは、問題を解決するための手順を明確に書き出していくこと。 つまり私たちが普段、TODOリストなどの文章を作成するのと本質的には同じ行為なんです。 ただコンピュータは日本語や英語といった言語をそのままでは理解できないため、コンピュータが理解できるプログラミング用の言語で書かなければいけません。 ちなみにプログラミング言語には、PythonJavaScriptPHPなど様々なものがあり、用途に合わせて選択する必要があります。

プログラミングで大切な思考法

プログラミングで大切な思考法は、次のような3ステップで表せます。
  1. 問題を抽象化して分類する
  2. 分類した問題を考えやすいサイズに分割する
  3. 分割した問題を機能的に似た問題にまとめる
これらの3ステップを何度もおこなうことで、問題の解決を図ることができます。 このサイクルを回す理由は、ひとつの大きな問題というのは良く観察すると小さな問題がたくさん集まって出来上がっているものだから。 例えば世界の貧困問題を解決しようとした時に、「これをやればすべてが解決する!」という方法をいきなり考えるのは現実的ではありません。 なぜなら貧困問題というのは、資本主義システムの問題や石油などの資源の問題が複雑に絡まりあって発生しているものだからです。 それぞれの問題に分類した上で考えやすいサイズにまで分割することで、具体的で現実的な解決策を多く見つけることができるでしょう。 そしてプログラミングにおいても、その本質は同じなのです。 それでは、各ステップの詳細について解説していきます。

1. 問題を抽象化して分類する

分類 まずは最初のステップ「問題を抽象化して分類する」ですが、ここで大切なのは「抽象化」するということです。 「抽象化」とは、対象から余計なものを省き本質だけをとらえること。 これをおこなうことで、いま目の前にある問題を上手く分類することができます。 逆に「抽象化」ができない人の書いたプログラムは、似たような箇所や重複が多く無駄に長いものになりがち。 共通化できる部分が整理された読みやすいプログラムを書くためにも、必ず物事を「抽象化」できる力を養いましょう。 抽象化思考が身につけば自分の経験から学んだ本質をさまざまな分野で応用できたり、世の中の仕組みやビジネスモデルなども理解しやすくなるので、プログラミング以外の場面でも成長が早まります。 ではプログラミングに絡めた例として、あなたが求人サイトを作るケースを考えてみましょう。サイト全体を「画面」という要素で分類すると以下のようになります。
  • 求人中の会社を一覧で紹介する画面
  • 選択した会社の詳しい情報を紹介する画面
  • ユーザーが会社の求人に応募する画面
  • エントリー完了を知らせる画面
ここでは「画面」という要素で分類しましたが、もちろん「機能」という括りで分類することも可能です。 問題をどのように分類すればいいかはケースごとに異なるので、その時々であなたが最適と思う分類をおこなってみてください。

2. 分類した問題を考えやすいサイズに分割する

分割 「1. 問題を抽象化して分類する」で分類した問題を、今度は自分が考えやすいサイズにまで分割していきます。 そして分割した問題を観察して「何をどのように解決すればいいか?」を考えていきましょう。 先ほどの求人サイトの例で見ていくと、会社の一覧を紹介する画面では会社の情報を表示するだけでなく、画面に表示するための会社情報も取得しなければなりません。 つまり次のような機能が必要になってきます。
  • 会社の情報を取得する機能
  • 会社を一覧で表示する機能
  • 会社の詳細を表示する画面へ移動する機能
この中で特に大切なのが「会社の情報を取得する機能」 会社の情報は基本的にデータベースから取得するものなので、データベースを操作する機能が必要になってきます。 そしてその手順について簡単に書き表すと
  1. データベースを操作できる状態にする
  2. データベースから会社の情報を取得する
  3. データベースを操作しないようにする
となり、データベースを使うには1と3のような決まった方法に従わなければいけません。 このように、それぞれの機能について「どうやって実現させるのか?」をひとつひとつ詰めていきましょう。

3. 分割した問題を機能的に似た問題にまとめる

まとめ ここまでの2ステップで分割し解決策をあたえた問題を、最後に再びまとめていきます。 なぜまとめる必要があるのかというと、同じものがいくつもあると変更すべき点が出てきた時に、わざわざ全てを修正しなければいけなくなるから。 また同じような機能を1ヶ所にまとめておけば、自分以外の人にも分かりやすいというメリットもあります。例えば、コンビニの棚がジャンルごとにまとまっていることで商品を見つけやすいのと同じこと。 先ほどの求人サイトの例で言えば「求人中の会社を一覧で紹介する画面」と「選択した会社の詳しい情報を紹介する画面」は、どちらも「データベースを操作し、会社の情報を取得する機能」に基づいているので、その括りでまとめてあげると管理しやすいはずです。 以上のように、できるだけ共通している部分を見つけ出し上手くまとめてあげることで、誰もが分かりやすいプログラムになるでしょう。 もちろん初めからすべて上手くいく人なんていないので、「トライ&エラー」を繰り返しながら自分なりのやり方を培っていってください。 プログラミングには絶対的な正解がないからこそ面白いのです。 より早くより美しいプログラムを目指して試行錯誤することで、あなたの思考力はどんどん磨かれていくことでしょう。

思考力を養うのにオススメの本

思考力を養いたい方にオススメの本も2冊ほど紹介しておくので、興味のある方はぜひチェックしてみてください。

イシューからはじめよ / 安宅和人

[itemlink post_id=”5615″] 『イシューからはじめよ』は、マッキンゼーでコンサルの経験を積まれた安宅和人さんの著書。 問題を解決するためのアプローチとして、そもそものイシュー(問題)から疑う方法論はとても参考になると思います。 そして前書きに書かれた「悩まない、悩んでいるヒマがあれば考える」という言葉は、プログラミングに取り組む人にとって勇気づけられるものでしょう。

具体と抽象 / 細谷功

[itemlink post_id=”5616″] 『具体と抽象ー世界が変わって見える知性のしくみ』は、エンジニアを経てコンサルタントになられた細谷功さんの著書。 この本で紹介されている抽象的思考は、プログラミングにおいても役に立つと思います。 図や4コマ漫画が多く載っているのも嬉しいポイント。

まとめ:プログラミング思考法で日々の生産性を上げていこう!

今回ご紹介した方法は、プログラミングに限らずさまざまな場面で使えるものです。 抽象化思考や論理的思考を使えば、プレゼンスキルもより磨かれることでしょう。 この思考法をぜひ使いこなして、あなたの人生全体の生産性を向上させていってください。]]>