教養としてのプログラミング
「はじめに」書かれていることが本書を読む最大の意義だと思います。そして、必読は「Chapter1 プログラミングはあなたの隣に」です。
2014年3月が初版ですので、テクノロジー面の進化によって、現在とそぐわない部分はありますが、思考の基本を学ぶという点では現在でも有効だと思います。
著者がプログラマーとして働いたのは4、5年に過ぎないそうで、その他はサラリーマンとしてヒットコンテンツに関わり、起業後は経営者として組織を束ね、事業計画を練ってきたといいます。
ビジネスマンが頭を悩ませる企画、組織、事業計画、こうしたことは全てプログラミングの応用として捉えることができたからです。
プログラミングとは、一言でいえば「自分以外のものを、思い通りに動かす方法」のこと。適切にプログラミングしたものは、たとえば作者が消滅したとしても、作者の意図を反映し、プログラミングしたとおりに動くことになります。
これが企画であれば、企画者の意図通りにユーザーの気持ちを動かそうとするのも「プログラミング」であり、組織であれば、組織全体をリーダーの意図通りに動かそうとするのも「プログラミング」であるといえます。
つまり、こうした仕事をしている人たちは、本人が意図していようがいまいが、全て「プログラマー」なのです。ビジネスでなくとも、子供を持つ親にとっての「子供の教育」や「子供との接し方」、これらもプログラミングということができるでしょう。あまり世の中にプログラムが浸透しすぎていて、私たちはその存在を見落としているだけなのです。
<中略>
「こうすればこうなる」というプログラミングの知識を持っていることで、より広い視野で、より深く考えることができたのではないでしょうか。
<中略>
とすれば、プログラミングは単なるスキルや趣味ではなく、<略>実は「教養」でもあると考えるのもあながち間違いではないと思うのです。
教養としてのプログラミング講座 p4~6
プログラミングを学ぶメリット
- 論理的なものごとの考え方
- 情報を適切に分類し、活用する方法
- 最小の手間で正確な仕事をこなすための思考法
- 知らない人と知恵を共有する方法
本書には書かれていませんが、こうした能力を身につけるために、学校教育はあります。算数や数学、物理が最もイメージに近いですが、国語と外国語もこうした能力に結び付くものです。
国語や外国語など人文系の科目が、理系思考のプログラミングに無関係と思われる方もいらっしゃるでしょうが、正確な意図を伝えるためには論理的な思考が必要となります。それを鍛えるために、算数や数学を習うという側面もあることを忘れてはいけません。
外国語も同様です。異なる言語体系を学ぶことによって、母語である日本語の構造を理解する助けになります。話すためだけに学んでいるわけではありません。話すためだけでしたら、やがて高精度な翻訳機が取って代わるでしょう。
普通の文章に近づくプログラミング
本書の「Chapter5 プログラミングの未来」でも書かれていますが、プログラミングは普通の文章に近づいています。気をつけなければいけないのは、普通の文章とは、論理的な文章であるということです。
論理的な文章を書くための、訓練としてプログラミングを学ぶというのが今後の時代の流れになるように思うのです。それは老若男女を問いません。もう歳だからということでは、済まされなくなりつつあります。そして文系理系を問いません。
なぜなら、プログラミングは普通の文章に近づいているからです。つまり、普通の文章が書けるのであれば、プログラミングができるようになっていく可能性があるということです。文書を書くことにおいて文系理系は関係がありません。誰にも必要なスキルです。
ただし、求められる「普通の文章」とは文学的なものではありません。
三島由紀夫が東大を卒業後に大蔵省で官僚として働いていた時にが、書く文章が文学的すぎると注意されたエピソードは有名ですが、それは官僚に必要な文章と異なるためです。国家公務員は法律を立案することもありますので、論理的な文書を書く能力が求められていたためではないかと思われます。
本書で書かれている「普通の文書」とは、論理的な文書ということではないかと思います。p23~24で書かれているプログラムの言葉の由来を読めば、今後求められる文書というのがどういうものなのかが分かるのではないかと思います。
プログラムとは何を指すか
ところで、「プログラム」とは何を指すのでしょうか。身近な例でも、運動会のプログラム、入学式・卒業式のプログラムなどがあります。
共通するのは
- 順序だてられている
- 予め作られている
- 何らかのタイミングでとるべき行動が決められている
マニュアルなどもそうです。マニュアルには想定される状況に応じた手順が書かれていますが、プログラミングそのものです。「どういうシチュエーションで、どう対応するかを書き記す」ことこそがプログラミングなのです。
こうしたことが得意である/できるという方はプログラミング思考が出来上がっていると言ってよいのかもしれません。
もし「プログラムとは何か」と尋ねられ、一言で答えなければならないのならば、まずは「手順を正確に記した文章」とでも返すのがふさわしいかもしれませんね。
教養としてのプログラミング講座 p22
プログラムの言葉の由来と意義の推移
プログラムという言葉の語源は、ギリシャ語と言われています。「プログランマ」という「公に書かれたもの」という意味が語源だそうです。
多くの方が誤解しているのですが、近しい間柄にあるように感じるプログラムとコンピュータ、これらはもともと、完全に切り離された概念でした。法令や宗教的儀式、哲学、その他人々をコントロールするためのルールこそが、かつては「プログラム」と呼ばれていたのです。
教養としてのプログラミング講座 p23
最近まで、プログラミングはそれを専門で研究されることがなく、様々な言葉でばらばらに論じられてきています。それは組織論や経営論、経済学、マーケティング論、戦略論などの理論を使ってでした。
ですが、コンピュータが一般家庭まで普及するようになると、プログラミングの価値が見直され、多くの領域でその考え方が応用できることがわかってきたのです。
プログラマーの思考
プログラマーとして熟練すればするほど、生み出すプログラムがシンプルになるのと同様に、思考も効率化され、洗練されていきます。そしてその洗練こそが、プログラミングを他の仕事に生かすヒントとなるのです。
教養としてのプログラミング講座 p25
エリアを決めて営業するなど「分割統治法」はプログラミング技術の一つとして知られます。「分割統治法」は非常にシンプルですが、使うと使わないとではかかる手間が全く異なる優れた思考ですが、単純ゆえにプログラミングとは意識されません。
しかし、プログラマーの視点を通せばプログラミング技術の亜種として捉えられます。他にも「役割分担」や「セントラルキッチン」もプログラミングの概念に合致するものです。
基本ルール
- 伝え漏らすべからず…コンピュータは自ら判断を下すのではなく、指示に従って動く性質がありますので、伝え漏らしてはいけません
- あくまで「コミュニケーション」の一様態…コンピュータは期待している通りではなく、プログラミングされた通りに動きますので、ミスを犯すことを前提に、コミュニケーションの手段について工夫することが鉄則になります
- 「フールプルーフ」を活用しよう…フールプルーフとはおバカをしても平気ということです。想像しうる限りの最悪な使い方をしても、システムを破壊しえない設計方法です。例外処理を設けるということです。
- 「インデント」や「カラーリング」でメリハリを…インデントやカラーリングを施すことで理解しやすくなります。
プログラマーの思考法を知る
- アルゴリズム…ある問題を解くための手順を、誰でも確実にこなせるように、一つの形に整理したもの
- 処理、分岐、ループ…プログラムの基本パーツ
- ルーチンと関数…決まり切った作業を指すルーチンと、引数を与えることで異なる動作を指せるための仕組みの関数
- ハイパーリンク…アンカーとジャンプ先の2つの要素で構成される
- ハッシュ+テーブル…データが持つ特徴を表すハッシュと、表となるテーブル
- 計算テーブル…計算結果を表にしたもの