結城浩の「コミュニケーションの心がけ」2017年12月5日 Vol.297
はじめに
おはようございます。結城浩です。
いつも結城メルマガをご愛読ありがとうございます。
* * *
クイズの話。
ある日のことです。
結城が夜遅く家に帰ってくると、 家族がみんな眠っていました。
家中の明かりはつけっぱなし。 いろんな活動はぜんぶやりかけ。
家族全員、 それぞれの部屋で活動途中の状態で深く眠り込んでいます。
結城は部屋の電気を消し、 ふとんに入って寝るように家族をうながしました。
ではここでクイズです。 帰宅した結城は、家のようすを見てグリム童話『○○○○○』を連想しました。 それは何でしょうか。○○○○○はひらがな五文字です。
答えは後ほど。
* * *
『数学ガール6』の話。
『数学ガール6』の執筆、 現在は第8章に取り組んでいます。
第8章、第9章、第10章という三章が絡み合っているので、 そこをうまく解きほぐす必要があるのですが、 なかなかやっかいです。
もちろん、 執筆を開始するときには各章に何を書くかを決めます。 書籍の全体像を想像して、 その全体像を作るために必要な要素を各章に分けるのです。
「だったら、第8章に何を書くか決まっているのでは?」
確かにその疑問は正当です。 正当なのですが、現実はなかなかそうはいきません。 どうしても書き進めていくうちに変更を余儀なくされます。
変更を余儀なくされるのは、なぜでしょうか。
理由はいくつかあります。
もっとも大きな理由は、
「私自身の理解が変化する」
という点にあります。
結城は、書籍に書く内容を、 それなりに理解して書き始めます。 でも、書き進めるうちにその理解は変化していきます。 各章でいろんな内容を説明するために勉強しますので、 理解が深まるのはもちろんです。 また、自分が誤解していた部分が修正されることもよくあります。 自分が浅く理解していたときに考えた章立ては、 適切ではないと気づくことも多いですね。
バランスを調整したり、章の順序を入れ換えたり、 章の内容を変更したりするのは日常茶飯事となります。
自分の理解が変化すること以外にも、 もう一つ、執筆途中で変更を余儀なくされる理由があります。 それは、
「分量の見積もりを誤る」
場合があるからです。ある内容を説明するのに、 これだけのページ数があれば十分だろうと見積もりますが、 その見積もりはしばしば誤ります。 多くの場合、見積もった分量をはるかに超えてしまいます。 不思議なことに逆はほとんどありません。
自分の頭の中では、 よっぽど情報が圧縮されているのでしょうね。 頭の中の理解を文章に展開し、 読者に伝えるために言葉を補っていくと、 あっという間に分量は増えてしまうのです。
二十数年も本を書いているのに、 いまだに分量の見積もりを誤るというのは困ったものですが、 しかたがないのかもしれません。 それだけ、「自分の理解」を理解するのは難しいのでしょう。
ともかく、現在は第8章〜第10章までを解きほぐすと共に、 第8章を固めていく作業を続けています。 今週いっぱいで第8章はかたをつけたいところですが……
文章を書くとき、あなたは分量の見積もりをしていますか。
* * *
Web連載の話。
そんなふうに『数学ガール6』の執筆が佳境を迎えているため、 毎週金曜日に更新しているWeb連載をしばらくお休みすることにしました。 具体的には、2018年1月末までWeb連載は更新しません。
「無限を探そう」シーズンを始めて四週目での中断は、 あまり望ましいとは思っていません。 でも、自分のキャパには限りがあるので、 思い切ってお休みすることに。
どうぞご理解ください。
その代わりといってはなんですが、 毎週金曜日には「過去記事の時間限定無料公開」 を行いたいと思います。アナウンスはTwitterで行いますので、 ご興味がある場合にはフォローをお願いします。
* * *
自分に自信を持つ話。
先日、匿名の読者さんから、こんな主旨の質問をいただきました。
自分に自信を持つにはどうしたらいいでしょうか。
結城はこの人が誰かわかりません。 背景情報がほとんどない状態で、 このような一般的な質問に答えるのは難しいものです。
でも、わかることもあります。 それは、この方は「自分に自信を持っていない」ということ。 そして「自分に自信を持ちたい」と願っていること。
さらに少し想像を巡らせるなら、 「自分に自信を持ちたいと思っているが、 何をどうやっても、なかなか自信が持てない」 という状況であるとも思えます。
その状況をふわふわと思い浮かべると、 さまざまな活動をするけれど、 その活動や結果に満足できない姿が想像できます。
勝手な想像なので、 実際はどうかわかりませんが、 少なくともそのような人はたくさんいるでしょう。
そこまで想像した上で、結城はこんな回答を書きました (当初の回答をもとにして修正しています)。
小さくてもいいので実績を積み重ねること。 事実に立脚して考えること。 そして、自分の評価を信用しないこと。
「何かを作った」や「何かを発表した」は実績であり事実です。 どんな小さなものでもいいから何かを作りましょう。 どんな小さなことでもいいから何かを発表しましょう。 作ることや発表することにこだわるわけではありませんが、 とにかく、あなたの環境で「事実」として認識できる「実績」を重ねましょう。
それに対して、 「作ったけど、大したものじゃない」や 「発表したけど、すごくもなんともない」は、 自分がくだした評価にすぎません。
実績と事実に注目して、自分の評価はとりあえず信用しない。 このような態度は、 もしかしたらあなたが自信を得る助けとなるかもしれません。
なぜそう思うかというと、 もしかしたら、あなたが自分に下す評価自体がゆがんでいるために、 自信を得られないのかもしれないと思ったからです。
最初から「自分はダメ」というハンコを押している。 自分で自分に押している。そんな可能性を考えたのです。
「自分はダメ」とハンコを押してばかりいると、 他者が自分を高く評価してくれたときに、 それを受け入れることができなくなります。 また、他者が自分を褒めてくれたときに過剰にそれを否定しがちです (そうすると、ほめる人を減らす結果にもつながります)。
ですから、少なくともいったんは、 自分が自分に下す評価ではなく、 実績と事実を積み重ねることに力を注いではいかがでしょうか。
私はあなたのことを知りませんので、 まったく見当外れのことを書いている可能性も高いです。 結城は、あなたの状況を勝手に想像し、 それに答えているわけですから。
それでも、あなたの、 何かの参考になればいいのですが。
* * *
プログラミングの話。
先日、自動販売機でコーヒーを買っているときにふと、 プログラミングの課題として、
「自動販売機のシミュレータを作れ」
というのはいい題材ではないかと思いました。
どうしていい題材と思ったかというと、
・親しみがあり、どんなものかみんな知っている。
・基本的な入力(お金と購入ボタン)と出力(商品とお釣り)が明確である。
・難易度がいくらでも変えられる。
・できたものをプログラミングに詳しくない人にも説明しやすい。
という特徴を持っているからです。
自動販売機のシミュレータというと、 商品が出てくる実際の機械をイメージしてしまいますが、 もっとも簡単なものは、次のようなものです。
・金額を入力するフォームとボタンが画面に表示される。
・金額を入力してボタンを押す。
・金額が十分あるときには、
「ご購入ありがとうございます。お釣りはXXX円です」
とメッセージが出る。
・金額が不足しているときには、
「金額がXXX円不足しています」
とメッセージが出る。
これは自動販売機の一部をシミュレートしているといえます。
でも、すぐに不満が出てきます。
・たくさんの種類の商品をあつかってほしい。
・購入を取り消すボタンがほしい。
・入力は100円玉何個、10円玉何個のように、
金種を考えるべきではないか。
・商品が在庫切れになるところもシミュレートしたい。
・釣り銭切れもありうるぞ。
・購入者だけじゃなくて、
商品や釣り銭補充をする管理者も相手にすべきでは。
つまり、現実の自動販売機をよく知っているために、 自分が作ったシミュレータの限界がわかりやすいのです。
金種を考慮するなら、シミュレータの内部では、 現在自動販売機内にある「金額」だけではなく、 「金種」を管理する必要があるとわかります。
管理者も考慮するなら、 管理者であることをしめす「鍵」が必要だとわかります。
そのように考えを進めていくなら、 大げさに言えば、
「世界を見る目が変わる」
と思います。自動販売機のようにありふれたものでも、 たくさんのことを考えなければ実現できないと体感できるからです。
また、ふだんは入力と出力しか見えないもの、 つまりブラックボックスの中を想像したり、 実現したりするようになるでしょう。 それは、世の中の仕組みを知る上でも重要です。
プログラミングを学ぶ点では、 いったんプログラムができたあとに 「仕様変更」を考えるといいですね。 そうすると、 自分が作ったプログラムの拡張性の高さを実感できるからです。
仕様変更の例としては、商品の名前や値段を変える、扱い数を変える、 日本専用ではなく海外でも使えるようにする……といろいろ考えられます。 海外でも使えるようにするためには、メッセージを変更したり、 金種を変更したりする必要もあるでしょうね。
「自動販売機」と「ECサイトのショッピングカート」 とを構造的に比較する課題もおもしろそうです。 ログインの有無、商品の購入取り消し、商品配達のトラッキング……
プログラミングを通して世の中のプロセスやフローが見えるようになるのは、 大切な技能の一つです。 また、複雑なプロセスやフローを見たときに、個々の要素に注目し、
「ここを変えれば別のことができるんじゃないだろうか?」
と思うことも大切です。
TeXを作った有名なコンピュータ科学者&数学者のKnuth先生が書いた、 The Art of Computer Programming Vol.1 (通称TAOCP Vol.1) には、
「エレベータのシミュレータを作る話」
が出てきます。 エレベータは自動販売機とは違う要素(刻々変化する状態と、 複数人の処理)が入ってきますね。
TAOCP Vol.1 の練習問題(日本語版p.289)に「我が意を得たり」 と言いたくなるものがありましたのでご紹介します。
(引用開始)
次のことを記すことはおそらく大事なことである。 筆者〔Knuth先生〕はエレベータを何年間も使ってきて、 エレベータについてはもう十分に知っていると思っていた。 ところが、実際にこの節を書き始めたら、 エレベータシステムが次に向かう方向を選ぶ方法について、 それまでには知らなかった事実がいくつも存在した。 (中略) われわれは、ものごとについて十分知っていると思っていても、 それについてコンピュータのシミュレータを書こうとするまで、 まったくわかっていないと気づかないことが多い。
(引用終了)
◆The Art of Computer Programming Volume 1 Fundamental Algorithms Third Edition 日本語版
https://www.amazon.co.jp/exec/obidos/ASIN/4048694022/hyuki-22/
あなたは、ふだん使っている自動販売機やエレベータを、 どのくらい理解しているでしょうか。
* * *
それではそろそろ、 今回の結城メルマガを始めましょう。
どうぞ、ごゆっくりお読みください!
あっと、その前に冒頭のクイズの答え。
正解は『いばらひめ』でした。
目次
- はじめに
- 登場人物は命を持っている - 数学ガールの執筆メモ
- いま、書こう - 文章を書く心がけ
- おわりに