知的生産性の前
2018年の8月10日に『エンジニアのための知的生産術』という本を出版しました。この本は,私が今までに学んできた知的生産に関する知識をまとめ,濃縮して1冊の本にしたものです。このコラムでは,なぜ私が知的生産に関心を持ち,知的生産術の知識を得るために時間とお金を投資してきたのかを解説します。ですが,知的生産というイメージしにくいものについて考える前に,まずは物理的なものの生産について考えてみましょう。
靴下の生産性は機械によって向上した
具体例として靴下の生産を考えます。靴下は,かつて職人が1つ1つ手で編んでいました。1589年に靴下編み機が発明されます。当時は,「手編みの方が良い靴下ができる」と考えられていましたが,1812年には全ヨーロッパで3万台以上もの靴下編み機が使われるようになります。
なぜ靴下編み機がたくさん作られたのでしょうか? それは,靴下編み機を使った方が生産性が高いからです。手編みの靴下に比べて多少質が悪くても,同じ時間でたくさん作ることができました。顧客に提供できる価値,顧客から得られる売り上げという点では,機械を使う方が有利だったのです。
プログラミングの生産性は言語によって向上した
次に,知的生産の一種としてプログラミングについて考えてみましょう。みなさんは「自動プログラミング」と聞くと何をイメージするでしょうか? 人工知能の進化によって今後生まれてくる技術でしょうか?
自動プログラミングの概念は,もっと古いものです。たとえば1950年代に生まれたプログラミング言語FORTRANは,当時Automatic Coding Systemと呼ばれていました。
FORTRANは数式翻訳システム(FORmula TRANslation system)です。〓等幅〓C = A * B〓/等幅〓のような数式を書くだけで,コンピュータが自動的に「メモリ上の適切な値をレジスタにロードし,掛け算をして,レジスタ上のその計算結果をまたメモリに書き戻す」という機械語で書かれたプログラムを生成するシステムです。これを自動プログラミングだと当時の人は考えたわけです。この時代には,効率の良いプログラムは人間が機械語を書くことでしか作ることができないと考えられていました。実際,初期のFORTRANが出力する機械語プログラムは,熟練した人間が書いたものに比べれば効率の悪いものでした。
それから60年経って,今現在ほとんどのプログラマはプログラミング言語を使ってプログラムを書いています。なぜでしょうか? それは,プログラミング言語を使った方が生産性が高いからです。靴下の生産と同じ構図ですね。
利益は設備に投資する
みなさんが靴下工場の経営者だとします。工場で靴下をたくさん作って売って,たくさんの利益が出たら,その利益を何に投資しますか? 靴下の需要が高くて,作れば作っただけ売れるのなら,靴下編み機を買い足して,さらにたくさんの靴下を作ろうとすることでしょう。これが拡大再生産と呼ばれる戦略です。
では,プログラミングの場合はどうでしょうか。プログラミング言語に投資をすることになります。しかし「プログラミング言語を買う」と考えると少し変です。お金以外のコストを見落としているからです。新しい生産性向上手段を獲得するためには,お金だけでなく,時間も支払う必要があります。靴下編み機の場合も,装置を買うだけでなく,その操作方法を学びます。装置の金額が大きくて,習得にかける時間コストが目立たないだけです。逆に,プログラミングでは,装置であるプログラミング言語やコンピュータの金銭的コストよりも,習得するためにかける時間のコストの方が大きいのです。
知識はあなたに帰属する
ここまでの話を一旦まとめます。生産性を向上するためには,物を得るためにお金を払うことと,その物を使うための知識を得るために時間をかけることの両方が必要です。そして知的生産に関しては,しばしば時間のコストの方が大きいわけです。ソフトウェア開発において「フリーランス」という働き方が可能なのは,ソフトウェアを開発するという知的生産においては物の設備投資のコストが個人で払える程度だからです。
この「物」と「知識」を比較したときに,重要な差があります。物,例えばあなたが会社に買ってもらったコンピュータは会社に帰属していて,あなたが転職するときには会社に置いていく必要があります。しかしあなたの脳内の知識は,あなたに帰属していて,引きはがすことができません。あなたは知識を持って転職することができます。会社に引き継ぎ資料を残す場合も,あなたの脳内の知識がオリジナルで,引き継ぎ資料は劣化コピーです。資料を会社に渡したからと言ってあなたの記憶が消えるわけではありません。
知識は使ってもなくならない
お金は使うとなくなりますが,知識は使ってもなくなりません。知識を得ることは,使っても減らない「魔法のクレジットカード」を手に入れるようなものです。これはお得です。私はそう考えていろいろなことを学んできました。そしてある日,気づきました。「プログラミング言語を学ぶことによって,プログラミングの生産性が高まる」を一段抽象化すると「知識を得ることによってXの生産性が高まる」になります。このXに「知識を得ること」を代入するともっと得だ,と。
つまり,知識獲得の効率を向上する知識が欲しいわけです。そこでまず,プログラミング言語の知識を獲得するときにどのようなことが行われているかを観察することにしました。その結果はWEB+DB Pressの「エンジニアの学び方」という特集記事にまとめました。内容は以下のWebで公開されています。
知識獲得から知的生産へ
知識獲得という言葉はインプットに重点が置かれています。しかし,具体的にプログラミングの例で考えると,プログラミング言語の知識を得るのにプログラムを書かないという状況はおかしいですね。プログラムを書くためにプログラミングの知識を得るのです。一般化すると,アウトプットが主であって,そのアウトプットを効率よくするために知識をインプットするのです。
こうして「エンジニアの学び方」のインプットの話から,アウトプットのためにインプットをする『エンジニアの知的生産術』という書籍が生まれました。簡単に紹介しますと,第1章が「エンジニアの学び方」に相当する部分,第2章はやる気のマネジメントです。この2つではサイクルを回す学び方と,サイクルを回し続けるための原動力を解説します。3章は記憶,4章は読書の話で,この2つはインプットの方法です。第5章が「考えをまとめるには」第6章が「アイデアを思いつくには」です。これがアウトプットです。膨大なインプットから,アイデアを結晶化させて,それを実現していくプロセスについて解説します。6章までは「どう学ぶか(how)」を解説していますが,私はhowよりもwhatの方が大事だと考えているので,7章で何を学ぶかをどう決めるかの戦略について解説しています。