プログラマーはなぜ手書きするのか
Programmers keep a handwritten journal
2016.05.25
Updated by Ryo Shimizu on May 25, 2016, 08:33 am JST
Programmers keep a handwritten journal
2016.05.25
Updated by Ryo Shimizu on May 25, 2016, 08:33 am JST
情報化社会と言われて久しいのですが、パーソナルコンピュータが生まれてから40年が経過しても、未だに最も普及している情報処理手段は紙と手書きです。
そのなかでも非常に興味深いのは、コンピュータという最も高度な情報処理装置を使いこなすプログラマーほど、手書きを必要としているという点です。
この写真は弊社のとあるプログラマーの作業風景ですが、キーボードの下に紙のノートを挟んで使っています。
さらに、彼の左側には、ホワイトボードが設置され、そこにも何かを書いています。
なぜ情報処理の達人であり、普通の人の何倍ものスピードでキーボードを打ち、自らのイメージする論理を直接コンピュータに入力できる能力に長けたプログラマーたちが、よりによって紙への手書きを必要とするのでしょうか。
たとえば、これは筆者が高校生に最新の深層学習の用語や原理を教えた時のホワイトボードです。
これを見ると一目瞭然ですが、複雑な概念や新規性の高い概念はキーボードで書くよりもまず手書きで書くほうが圧倒的に速く伝えることが出来ます。
文字の配置や大きさによる強弱、数式、図、図と図の関係、文字と文字の関係、そういったものが一切の制約なしに書き下せるからです。
こちらも、筆者のオフィスのホワイトボードです。
これは、プログラミングという道具と数学という道具の関係性を説明した図で、古典的な数学という(古い)道具ではシグマ(Σ)を使って表さなければならなりませんでした。
ところがΣで表現可能な演算は積和演算だけです。
これはプログラミング言語ならforループという単純な構図で表せます。
ただしシグマにもメリットがあって、プログラミング言語に比べると簡潔に表現できるのでより上位の概念を簡略化して説明することができます。
プログラミング言語の場合、単純なシグマではできない複雑な計算や条件分岐ができるのも特徴です。
同じ概念を表現するのに複数の表現手段を持っていることは強みである、ということでもあります。
手書きで書く場合はシグマを使ったほうが圧倒的に速く、簡潔に書けますから板書を中心とする学校ではシグマを使った計算が多用されます。しかし実際の計算をやらせるためには、シグマを使った数式を人間のプログラマーがプログラミング言語にいわば翻訳してやる必要があります。本来、これは非常にバカバカしく、非効率的なことです。
しかし今のところ、本格的な数式を自動的にプログラミングする方法はありません。紺屋の白袴ではないのですが、プログラマーは怠惰なので、自分に必要な数式をプログラミング言語に翻訳してしまうか、もしくはだれかが翻訳した実装をどこかから拾ってきて、それで良しとしてしまう癖があります。
また、数式は単なる関係性を表現しているに過ぎず、数式のどの部分をどのように使うかということはその都度プログラマーが考えなくてはなりません。
たとえば筆者がよく使う例ですが
この数式は物理学で最初に習う運動方程式ですが、これをそのままプログラミング言語にして「F=ma」としてもきちんと動作しません。
まず、プログラミング言語では変数名が一文字であるという暗黙の了解事項はなく、「ma」が「m」と「a」なのか、それとも「ma」というひとつの名前なのか区別できません。多くのプログラミング言語では「ma」をひとつの名前として扱います。それがFに代入されるわけですが、当然、maにはなにも初期値が与えられていないので多くのプログラミング言語ではエラーになるか、ならなかったとしてもなんの意味もない数式ということになります。
数学で変数が一文字と決められているのは、そのほうが手書きのコストが少なくて済むからでしょう。そのかわり、書く位置や大きさを変えることで意味を変化させ、より簡潔に関係性を表現できるようになっていますし、補足的に変数のちかくに小さな添字を加えて修飾することもできます。
ところがプログラミング言語でこれを表現しようとすると、関係式ではなく関係式から導き出される手順をプログラミングしなくてはなりません。これを扱うためにはコペルニクス的転回が必要で、たとえば一次元の数直線上を移動する物体を想定してみると、F=maを正しく表現するには以下のようなプログラムを書かなくてはなりません。
x=0; //位置 v=0; //速度 a=0; //加速度 m=1; //質量 F=1; //力 function onenterframe(){ a = F/m; // F=maの式変形 v += a; // 加速度を時間積分して速度に x += v; // 速度を時間積分して位置に }
onenterframeは一定期間おきに呼び出される関数だと思ってください。
F=maという関係式から、実際の物体の位置の変化を決めるために暗黙的に存在が想定されていた速度vと位置xという2つの変数がいきなり登場します。
これは、F=maのa(加速度)が暗黙的にv(速度)とx(位置)の存在を想定しているからです。
つまりプログラミングとは関係式が暗黙的に持つ隠れた意味を明確化し、手順に還元するという役割を持っています。
このとき、明確でない関係式を理解するために、実際に数直線を書いて検討したりというプロセスが欠かせません。結果、手書きが必要ということになるのです。
手書きを多用するのはプログラマーだけとは限りません。
この女性はプランナー(企画者)ですが、彼女はなんとPCのほかに大小3つの手書き端末を組み合わせています。
大きなディスプレイに立てかけられているのは手書きメモ端末であるenchantMOONで、彼女が書いた企画のメモなどが表示されています。
手元の端末はiPad Proで、なにやらアイデアのスケッチをしているようです。
iPad Proの下の板はワコムのペンタブレットで、これは細かいデザインを行う時に使います。
ところが、手書きをそれほど必要としていない現場も世の中には数多くあります。
たとえば飲食店です。
ずい分前からかなりの飲食店でPOSレジが導入され、ウェイターはハンディPOS端末で注文をとるのが当たり前になりました。
いまでも古くからある小規模なお店はPOS端末ではなく手書きの伝票を使いますが、手書きの伝票は同じことを繰り返し書くのでどんどん省略されていって、第三者が見ても何を書いているのかわからないこともしばしばです。
保険の営業や銀行の渉外などもiPadやノートPCで提案を作るのが一般的になり、手書きがどうしても必要な人というのはどんどん減っています。
なぜハイテクの最先端にいるプログラマーやプランナーが手書きを執拗に必要とし、その対極にある接客業の現場がそれをさほど必要としていないか。
ここに手書きの性質の二面性が見て取れます。
接客業で求められる手書きとは、多くの場合は伝達手段です。
これはウェイターと厨房のような当事者間だけで通じればよい、いわば符丁のようなものです。
ということは効率が最優先ですから、手書きを選択するかPOSレジを選択するかは単純に手間とコストの観点から考えられます。大規模なお店の場合はPOSレジが圧倒的に正確かつ便利で、小規模な店の場合は伝票の方が便利でしょう。
むかしは保険の営業といえば、パンフレットを持ってきて、パンフレットの大事な部分を蛍光マーカーでハイライトさせながら「あなたの場合はこの特約が使えるわよ」と教えてくれたものですが、今はiPadでシミュレーションまで出して、リアルタイムに顧客の疑問や要望に答えられるようになっています。
反対に、ものづくりの現場、知的生産の現場では、手書きがないとなにもできません。
筆者は昨年、接客や食肉の現場が知りたくて一関の焼肉店で3日だけ働かせてもらったことがあるのですが、あまりに世界が違うので面食らった記憶があります。
作業環境にホワイトボードの類が一切ないのです。
誰かになにかを説明しようとしても、ホワイトボードがないとどうにもなりません。
そしてとうとう、世の中にはホワイトボードを必要としない仕事があると理解しなくてはなりませんでした。
では、ホワイトボードを必ず必要とする仕事とはどんな仕事でしょうか。
たとえば筆者が設立し、昨年ドワンゴに移管したUEIリサーチという研究所では、ホワイトボードは必需品です。
両方の壁に4枚のホワイトボードが設置され、さらにそれとは別に独立したホワイトボードが一枚。
研究が架橋に入ってくると、それらのホワイトボード一面が数式や図で埋まり、なかなか壮観です。
さらにはホワイトボードの取り合いまで起きます。
研究活動や開発にホワイトボードや紙のノートや電子的なノートなどがどうしても必要になってしまう背景には、「本人にとってとても難しいことをやる」という共通項があります。
たとえば筆者はごく簡単なプログラムならノートを全く必要としません。
一般の人から見て相当に複雑なプログラムであったとしても、筆者がこれまでに経験したプログラミングであればいきなりキーボードに向かっても組み上げることが出来ます。
ところが、少しでも難しいこと、新しいことをやろうとすると手書きに対応した端末が欠かなせなくなります。特に最近進歩が著しい人工知能関連のことを考えようとするとホワイトボードや手書き端末は必須のものになります。
感覚としては、暗算で済ませるか、それとも敢えて筆算をするか、ということに近いかもしれません。
たとえば一桁の数同士の掛け算を筆算する人はほとんどいないはずです。というかそれがわからないと筆算もできません。
しかし、二桁以上の掛け算の場合、たとえば「二倍にする」くらいのことなら、暗算でも十分できます。二桁✕一桁なら、暗算だけで対応できる人がほとんどでしょう。
ところが二桁✕二桁となると話は違ってきます。16✕84を瞬時に暗算ができる人はいるかもしれませんが、筆者はどうしても自信が持てなくて筆算するか電卓を使うかしてしまいます。
三桁以上になるとお手上げです。
筆者は子供の頃、ソロバンが得意な女の子というのが周りに何人かいました。
ソロバンが得意な人の暗算能力は凄まじく、四桁✕四桁の掛け算も暗算で正確にできてしまいます。その能力の高さに舌をましたものですが、そこまでの能力がない筆者はひたすら筆算をするしかありませんでした。
なぜ紙を使うかというと、自分の脳の中であやふやな情報の中から確かな情報を取り出し、紙にアウトプットした上でそれを目で見て確認し、関係性を単純化しながら計算を進めることができるからです。
つまり、手書きしている状態というのは、脳内で行われるべき知的活動の一部が紙という物理的な平面に飛び出している状態というわけです。
だから、ホワイトボードで説明されるのは、ともすれば予め用意されたスライドで説明されるよりもわかりやすいのです。
なぜなら、人はホワイトボードや黒板に手書きで板書される情報を見ながら、脳で講師の思考手順を追体験できるからです。
ディープラーニングによって人間の認知機能を機械が獲得した今、筆者は手書きの持つ可能性にもっと注目すべきだという思いを新たにしています。
なぜなら、コンピュータがディープラーニングによって人間の手書きプロセスを分析すれば、人間がどのように考えているか認知することができるようになるからです。
いわば、コンピュータを教育する究極の方法のひとつが、手書きによる教示であるとも考えられます。それが実現したとき、どんな世界が出現するのでしょうか
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。