プログラミングは問題解決の作業――文脈思考の重要性:問題解決力を高めるコツはプログラミングの原則・思考にあり(1)(1/3 ページ)
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップ。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出してほしい。初回は「コンテキスト」つまり「文脈」を考慮することについて。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍『プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則(2016年3月22日発行)』からの抜粋です。
ご注意:本稿は、著者および出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
なお書籍では、ソフトウェア業界で高名な、よいコードを書くための「プリンシプル」を紹介しています。プリンシプルとは、プログラミングの指針となる「前提」「原則」「思想」「習慣」「視点」「手法」「法則」などのことです。具体的には、「コンテキスト」「ラバーダッキング」「分割統治」などのプリンシプルがあります。こうした各プリンシプルについて、「それは何なのか(=What)」「それはなぜなのか、なぜ必要なのか(=Why)」「ではどう使えばよいのか、どうすればよいのか(=How)」を中心に解説する構成になっています。
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップしていきます。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出していただければ幸いです。
初回は「コンテキスト」の重要性について解説します。まずは「コンテキストとは何か」から紹介しましょう。
コンテキスト
英語 Context
What 〜「文脈会話」「文脈思考」
コンテキストとは、周りの状況や背景のことです。文脈とも言います。
プログラミングの時、この「コンテキスト」という概念を、2つの側面からうまく利用します。
- コードの読み書きに利用
コードの読み書きは、コードを書く人と、コードを読む人とのコミュニケーションです。コードを書く時は、コードを読む人のコンテキストを醸成する必要があります。そのため、コードを書く時は、その内容をトップダウンで伝えるようにします。
具体的には、モジュール名などの大きな括りの名前で、ここでは「何」について責任を持っているかを明確にします。その中に含まれる関数についても、そのモジュール名を文脈として、さらにその中で何について処理しているかを名前にします。
すると、そのコードを読む人にとって、モジュールや関数の名前が、まるで本の端に付記される章や節のように、今いる場所を思い起こさせてくれます。これは、読む時の大きな助けとなります。
- 思考のツールとして利用
プログラミングは問題解決の作業です。
問題は、単独の要素を見ているだけでは解決に至りません。物事は、単独では存在せず、周囲の状況とつながっていたり、背景があったりします。すべてがつながっており、微妙に動いているのです。
これらをコンテキストとして考慮に入れると、正確に問題を解くことができるようになります。
Why 〜会話や思考を迷子にしない
説明に付してコンテキストを与えると、バラバラの情報がつながります。意味がつながり、わかりやすくなり、今いる場所を見失うことがなくなります。
コードは、読み手に対して、何をしているのか、わかりやすく伝えなければなりません。コンテキストを使わないと、相手に理解の土台ができないので、効率よく伝えることができません。
プログラミングの達人と呼ばれる人は、コンテキストを使用しています。コンテキストを直感的に鑑みて、自分の体験と照らし合わせ、持っているパターンの中から、状況にあった解決策を施します。直感とはいえ、根拠ある直感です。自分で空気を読めるので、細かなレシピは必要ありません。
逆に、初心者は、コンテキストはまったく無視して、レシピ通りに作業します。言われた通りにしか作業できません。そのアウトプットに差が出るのは当然です。スピードも、質も、桁違いです。しかも、初心者は、原理上、未知の状況には対応できないため、どんなに時間をかけても、アウトプットが出ない場合もあります。この場合の差は無限大です。
プログラミングの達人と呼ばれる人が、様々なパターンを使いこなせるのは、パターンを多く知っているからではありません。パターンをどのような状況で、どのような目的で使用すればいいか知っているからです。これはコンテキストにほかなりません。
How 〜コンテキストを示す
コードを書く時、コンテキストを先に示すようにしましょう。それにより、読み手は、状況判断できて、まず「何についてのコードなのか」を把握することができます。
逆に、コードを読む時には、コンテキストを汲んでから、その内側のコードを理解するようにしましょう。
また、コードを設計する時には、達人の思考を模倣しましょう。達人になるには、達人の真似をするのが一番です。そこで、問題解決においては、コンテキストを前提に考えるようにします。達人の豊富な経験は真似できませんが、思考方法を真似することは可能です。コンテキストの存在を認識し、問題のコンテキストを掘り下げ、その状況や目的に応じた判断を下せるように訓練します。
さらに、作業全般においては、コンテキストから切り離された、絶対的なルールから、徐々に距離を置きましょう。脱初心者を目指し、達人を目指すために、直感に重きを置く方へと向かいます。最終的には、システムシンキングが説くように、自らがシステム自体の一部分となって、主体的に問題解決できるようになります。
そして、作業にあたる戦略としては、「着眼大局、着手小局」を心がけましょう。まず、目を付ける時はコンテキストを含む全体を大きく見て、構想を練ります。そして、実践は小さなことを積み重ねていけば、大事を成すことができます。
Copyright © ITmedia, Inc. All Rights Reserved.