読者です 読者をやめる 読者になる 読者になる

蛍光ペンの交差点[別館]

"どの点に関心をもつべきか ―をわれわれが学びとるのは,もっぱら仮説からだけである"

受験と学問と研究は本当に違うゲームなのか?(かきかけ)

―― 本日は、東大を卒業されている先生に東大新入生に向けてのアドバイスをお話しいただきたいです。

瀧本 まず受験と大学生活、就活は非連続であるという前提を知る必要があります。大学入試というのは採点しやすいように答えが一意に決まっていて、時間をかければ誰だってできるようになるものです。だから時間の制限がある中で及第点に達することを目指すゲームです。

しかし、これからは違います。大学では自分で問いを立てて答えを探していかなければなりません。 みんながやっていることにとりあえず合わせるなんてしていてもダメです。もちろん、それで何とか凌ぐことも可能ですが、今度は就活、社会に出て、あるいは研究をしようとしたところで、より苦労することになります。

ここで、東大生にとって不幸なのは”進振り”があること。これは受験と全く同じゲームなので、こちらに最適化してしまうと、間違った方向で癖がついてしてしまうわけです。

 ( 受験と大学生活は別のゲームであると理解せよ 瀧本哲史さんインタビュー - 東大新聞オンライン )

 

多くの人は、大学受験と「大学入学後の学部4年間における勉強」(異論もあるだろうが「学問」と表記する)は全く異質なルールに基づいたものだと認識している。更には主に講義を受けたり議論するだけの学問と新しい知識を創りだす研究も非連続なものだと認識している。

 

しかしその認識自体が実はまだ再考の余地があるのではないか、とふと疑問に思った。

 

まず、「最終提出物(deliverables)」を比べてみる。

 

大学受験の最終提出物はなんだろう?これは分かりやすい。第1志望のXYZ大学における本番試験の答案だ。併願大学もあるだろうが第1志望に合格すれば全落ちしても何の問題もない。すなわち最終提出物の質は「第1志望の合格点を超えているか・いないか」という2値で評価される。それに比べたら残りの提出物は瑣末なものであり、何ならすべて白紙でも構わない。現に私の予備校時代の英語講師は私立の受験費でパフェを食べに行っていた(その人は第1志望である東大の文科3類に合格した)。

 

学問の最終提出物はなんだろう?これは一意に定めるのが難しい。卒業単位の確保は重要だが、誰もそれが大学での学問の最終提出物だとは同意しない。

 

なので、先に研究の最終提出物を考えてみよう。これも受験と同じく明確だ。人類がまだ知らない知識の有効性を述べた論文だ。化合物やマイクロ波、あるいはアルゴリズム市場メカニズム、法制度や政治体制など、知識の対象は何でもいい。研究者は論文という文字を書いているだけで給料が払われる特殊な物書きであり、対象が何かよりもそれが人類の未来にとってどれほど重要なのか、のほうが本質である。

 

さて、日本では多くの大学生が学部4年生で「卒業研究」という形で初めて研究を経験するように、学問は大学受験と研究の間に位置する。その配置を踏まえると、

  • 大学入試の本番試験で書いた合格点以上の文章
  • 人類がまだ知らない知識の有効性を述べた文章

学問の最終提出物は、この間にあるのではないかという気もする。

 

だが、一方で大学合格者の全員が研究者になるわけではない。卒業研究を課さずに学部課程を修了することもあり、その意味では

研究者にならない人にとって、
研究の最終提出物ぐらいの時期にあたるところには、
何が最終提出物として求められるのだろうか?


という疑問が沸く。図式にすると、以下のような感じだ。

 

f:id:koshka-j:20160422112837p:plain

 

ここは意見が分かれる気もするので、あくまで私見を述べる。

 

僕の意見は、研究者以外の最終提出物は、「プロジェクトごとの最終成果物 x プロジェクト数」というものだ。ここで「プロジェクト」の定義は、プロジェクトマネジメントという業務を遂行している人たちが参考にしている、以下の書籍の定義に基づく。

 

A project is a temporary endeavor undertaken to create a unique product, service, or result. The temporary nature of projects indicates a definite beginning and end. The end is reached when the project's objectives have been achieved or when the project is terminated because its objectives will not or cannot be met, or when the need for the projet no longer exists. Temporary does not necessarily mean short in duration. Temporary does not generally apply to the product, service, or result created by the project; most projects are undertaken to create a lasting outcome. For example, a project to build a national monument will create a result expected to last centuries.

(拙訳:プロジェクトは、今までにない成果物を作るためになされる一時的な試行錯誤のことだ。「一時的な」というのは、明確な始まりと終わりがあるという意味を指す。目的とする最終成果物が提出されたときや、その成果物が作成不可能だと分かったとき、あるいは成果物が必要でなくなったときにプロジェクトは終わりとなる。「一時的な」は必ずしも期間が短いということは意味しない。「一時的な」は試行錯誤の期間を指すのであって、試行錯誤によって生み出された最終成果物には適用されない。むしろ、大半のプロジェクトは長くあるいは永続的に残る成果物を生み出すために遂行される。たとえば国家の記念碑を建てるプロジェクトでは数世紀のあいだ残るような記念碑を作るだろう)

 

(Project Management Body of Knowledge 4th Edition, p.5, 2008)

 

この意見は、かなり極論側である気もしている。というのもこの最終提出物の定義では、日常業務はプロジェクトの成果物に過ぎないと言い切っているに等しいからだ。たとえば新規事業の起ち上げというプロジェクトの成果物は新規事業のマネジメントになるだろう。

 

さて、以上の定義は、どことなく形容詞が研究者の最終成果物に似ている気がする。「今までにない(unique)」や「長く残る(lasting)」、あるいは始める瞬間に作成不可能だと分かるかが不明なことなどだ(ちなみに、受験もそうではないか、という気がする。誰も受験前に合格答案が作成不可能かは分からない)。

 

論文の成果は真理ではなく「より良い説明」程度であることの方が多いし、後続の論文によって知見が修正されるのは競合会社の優れた製品にシェアを奪われることに似ている気もする。引用数は取引先の数のように見えるし、自己引用(自分の論文を自分で引用すること)だけで構成されている論文は在庫の宇宙遊泳のような感覚を受けなくもない。

 

さて、こうして「今までにないプロジェクトを遂行する社会人」という観点で見てみると、実は研究者と社会人は大差がないようにも見える。

 

f:id:koshka-j:20160422115937p:plain



先で交わる?と書いたが、むしろ「前段階は分かれているのか?」と言ったほうがよいくらいだ。研究者がやっていることはプロジェクトではないと言えるのか?と問いを立ててみてもいいくらいだ。どの研究テーマも、研究者が集まって、最終成果物の大体のイメージを決めて、調査をしたり実験系を組んだりして、と、別に何ら作業としては社会人と比べて別段新しいことをしている訳ではない。単に成果物が新しいというだけだ。

 

そしてもしこのような意欲的なモデル化をするのであれば、実は学部4年間の最終提出物は研究者にとっても研究者以外にとっても役立つ何かではないか、という話が出てくる。そしてその思考を推し進めると、実際のところプロジェクトマネジメントという観点(いままでにないものを、確実につくるための方策)からは、受験と学問と研究は大して違いのない行為なのではないか?という論点も出てくる。

 

(つかれたので続きはまたこんどきがむいたときにかく)

原理、分類、思考

原理に基いて思考するとはどういうことかを試してみたくなった。

 

「消費者は最安の商品を買う」という原理があったとする。
まず第一に大事なのは、この原理に限らず多くの原理は集合名(集合setの名前)であって、中身がいくつ入っているかが大事だ、ということだ。

 

消費者は最安の商品を買う =
 {消費者は最安のペットボトルお茶を買う、
  消費者は最安の区間で定期券を買う、
  消費者は同一商品なら最安で提示されたものを買う、… }

 

勘の良い人なら気づいたかもしれない。
上で集合に入れてみた中身は、実は一つ残らず誤っている。

集合とは、ものについて「入っているか」「入っていないか」という2値の情報だけを付与する数学的構造だ。だから適切ではないものが入っていることは、深刻な誤りだと言える。

 

何が誤っているのか?

 

たとえば、僕はペットボトルのお茶だと普段は最安のものを買うが、綾鷹があった場合はこの限りでない。味が好きなのだ。ランダムに選んでお茶を買うことを繰り返していたら、いつの間にか綾鷹とそれ以外にだけは優劣が付いた。だから僕を「消費者」とした場合、正しい言語表現は「消費者は綾鷹が存在しなければ、最安のペットボトルお茶を買う」となる。

 

定期券区間も、例えば少し割高な区間によく使うターミナル駅(池袋など)が入っていたら、そちらを選ぶ消費者は一定数居るだろう。だからこちらの言語表現は「消費者は途中駅に興味がなければ、最安の区間で定期券を買う」のほうが適切だ。

 

仮に商品が完全に同質であったとしても気を緩めてはならない。例えば価格コムで最安の商品を見つけたとしても、それが充電器など発火の恐れのある商品で、出品者の身元が不確かならばあえて2番目、あるいは正規代理店から注文するという注意深い消費者も居るだろう。そうなると修正案は「消費者は同一商品かつ同質の出品者なら最安で提示されたものを買う」となる。

 

以上の思考プロセスを経ると、

消費者は最安の商品を買う =
 {消費者は最安のペットボトルお茶を買う、
  消費者は最安の区間で定期券を買う、
  消費者は同一商品なら最安で提示されたものを買う、… }

 

という理解は、

消費者は最安の商品を買う =
 {消費者は綾鷹が存在しなければ、最安のペットボトルお茶を買う
  消費者は途中駅に興味がなければ、最安の区間で定期券を買う
  消費者は同一商品かつ同質の出品者なら最安で提示されたものを買う、… }

 

 

とより詳細に出来る。実際にはペットボトルお茶の「消費者」だけが一般の消費者ではなくて僕だけを指しており、同一の名詞が指すものが違うという問題もある。綾鷹をより抽象化すれば直せるだろう。

 

何なら要素ひとつひとつに留保を付けるのは冗長だ。もっと一般化して集合名自体を改善してしまったほうが得策ではないか。

 

消費者は価格以外に差異を感じられないならば、最安の商品を買う =
 {消費者は最安のペットボトルお茶を買う、
  消費者は最安の区間で定期券を買う、
  消費者は同一商品なら最安で提示されたものを買う、… }

 

つまるところ「コモディティ」の話をしていたのだと明確になる。

 

 

さて、そうなると

  • 消費者は価格以外に差異を感じられないならば、最安の商品を買う
  • 消費者は価格以外に差異を感じられるならば、最安以外の商品でも買う


この2つの集合を用意すれば、すべての購買活動は分類できるのだろうか?

いや、「購入しない」が分類が抜けている。そして購入しない以外にも可能性があることを恐れて、その集合に「その他」と名付けることにする。

 

  • 消費者は価格以外に差異を感じられないならば、最安の商品を買う
    = {食料品、定期券、家電、…}
  • 消費者は価格以外に差異を感じられるならば、最安以外の商品でも買う
    = {高級車、ブランドバッグ、椅子、ベッド、スマートフォン、スーツ…}
  • その他 = { そもそも購入しない、 ... }

しかし、買う/買わない以外に選択肢があるとは思えないので、もう少し形式を整える。

  • 消費者は価格以外に差異を感じられないならば、最安の商品を買う
    = {食料品、定期券、家電、…}
  • 消費者は価格以外に差異を感じられるならば、最安以外の商品でも買う
    = {高級車、ブランドバッグ、椅子、ベッド、スマートフォン、スーツ…}
  • そもそも購入しない = {既に所有している、そもそも消費者がいない、…}
  • その他 = {  }

その他を空集合にして、購入見送りを独立させた。上記の4つの集合に共通部分がなければ、MECEと呼ばれるものの成立だろう。共通部分があれば、多クラス分類問題を機械なしで解いていることになるだろう。

 

 では、本当に解きたい問題を下に書いて終わろう。

 

演習問題1.
次の集合に正しく所属すると考えられるものを1つ挙げよ。
その際、関連する別の集合から考えていっても構わない。
その場合は部分点を付与することがあるため、答案用紙にメモを書きつけておくこと。

賛成する人がほとんどいない、大切な真実 = { ? }

 

正論とプロセス

まさにその職務に最適としか思えない人が、正論を展開する様子を見ていた。

 

正論を展開する。

正論を展開する。

正論を展開する。

 

…。

 

おかしい。終わらない。

 

言及されていることは、あとで別の情報源から確認したところ恐らくどれも真実で、解決すべき課題であることは間違いない。

 

ただ、そこに全面的には協力する気が起きないのは何故だろう、
価値があることだと思うのに、どうして僕にはそれを遂行する気が起きないのだろう、
とその正論を聞きながらずっと考えていた。

 

たとえば「世界平和は良いことだ」という命題を考える。

正論である。

 

ただ、ではこれを実現するために協力して下さい、と言われたとき、人はどう行動するだろうか。私財を投げ打って活動に身を捧げる?年収の十数パーセントを寄附することにする?非正規雇用が4割を超える時代に?数ヶ月に一度開催される活動に参加する?「僕は、土日もクライアントから連絡が来ることがあるので、参加が難しいのですが…」それだったら公式Webサイトに協賛していると写真を載せてもらう?会社の関係で難しい、なるほど。ならば署名活動に協力する?世界平和の達成まで、どれくらい遠くなっただろうか?

 

近かったものが遠くなったわけではない。
もとから遠いものが、より正しく見積もれるようになっただけのことだ。

 

 

利害関係というと、人は真っ向から対立する二者を考える。でもそれとは別に問題になるのは、それらの片方に共感できるけれど、何かのこまかな、ある種の利己的な利害が対立していて動けない人達なのだ。飲み会だから別の話もしたい、イベントの時期だからその打合せが必要、他にミッションを持って仲間を探している段階だから耳に入らない、そういう人達を説得しなければならないのだ。

 

自分にだって展開したい正論はある。
ただ、その正しさよりもプロセスが気にかかるようになった。

一読すべき企業分析がここにある:『進め!!ブラック企業探偵団』書評

 

進め!! 東大ブラック企業探偵団

進め!! 東大ブラック企業探偵団

 

 

 

この本は、就活本として異色である。

だが就活生に限らず、既に働いている社会人にとっても読む価値があると思う。

 

それは、この本で取り上げられている4つの業界、すなわち、外食・メディア・製造業・金融業界に所属する企業群の分析水準が、ケタ違いに高いからである。

 

それぞれの業界の性質を、どう考えても一人の学生では決して辿りつけないであろうレベルの深さまで分析している。ごく平均的な就活生やビジネスマンを想定した場合、いやそれどころか、相当に企業を研究したプロ就活生や、かなり優秀なビジネスマンであっても、この水準のレベルの理解を、これだけバラバラの業界4つに対して持っていることは考えにくい。メディアを受けるようなキラキラ学生は外食を受けないし、製造業に興味を持つような理系学生は金融やメディアをそこまで理解しない。

 

「外食の勝ち組」や「横浜DeNAベイスターズ」、「BtoB」や「ゴールドマン・サックス」をこの水準で語れる人はめったに居ない。というか私は出会ったことがない。

 

 

どういうことだ?

著者・大熊将八は身長がやたら高いだけのただの大学生ではないのか?

経済学部生といえど、なぜここまで質の高い分析が可能なのか?

 

私にはこの本が、まるで認識のサラダボウルであるように思えた。どう考えても一人の人間の経験ではこれは書けない。いったいどういう仕掛けによって、このような質の高い分析が成立しているのか。

 

その理由の片鱗が見えたのは、著者のインタビューを読んでいたときだった。

  

ーーNewsPicksで連載してみて、良かったことは何ですか?

大熊:コメントを頂き、そのフィードバックから改善ができることですね。書籍作りのフローに、テストマーケティングのフェーズを入れることができるんです。まさに、クラウドファンディングに近いやり方です。例えば外食産業について書くと実際に外食産業で働いている人からコメントを貰えたり、どういう層が反応するのかがわかったり、そのフィードバックをもとに原稿の書き直しができると。これが外食、メディア、電機、銀行の各業界の人が間違っているところを指摘してくれたり、裏話を教えてくれたり、すごくありがたかっったです。

ーーでは、書籍化にあたって、かなり書き直しもされたんですね。

大熊:ほとんど全部直しましたね。

( 東大・京大の書籍部で1位! 現役東大生が、書籍『進め‼︎東大ブラック企業探偵団』に込めた思い | co-media [コメディア]  2016年3月4日閲覧)

 

ネット連載を本にまとめている。

そう、この本はそもそも「初版からして第2版」なのである。

 

NewsPicksというネットメディアで一度テスト飛行をする。そのとき、企業の内情にアクセスが難しい学生ならではの表記ミスや理解不足に対して、NewsPicksの読者である業界人からの「あのときはこうじゃった…あのときもこうじゃった」的な情報が飛び交う。書籍の著者はふつう編集者に校閲を頼むことが多いが、こうして間接的に業界人から情報内容に関する修正が届く。

 

NewsPicksは極めて特異なメディアで、コメントの投稿者が自分の職業を肩書として載せていることが多い。そのため、本当にその業界に詳しい人か実に簡単に判別することができる。良いコメントにはLikeが付き承認欲求が満たされるため、コメントの投稿者は他の「非・業界人」にはできないような発言をするインセンティブが揃っている。

 

つまりこの本は、学生が公開情報に基いて書いているにも関わらず、独自の成立過程によって企業の内実をつぶさに・かつ正確に知ることができる貴重な書籍なのである。

(ちなみにNewsPicksの連載は有料会員のみしか見られないため、投稿者の出自も保証されている。当時の投稿は現在はもう閲覧できない)

 

 

 

そして、ここからは私の勝手な推測である。

 

同書の第2章ではテレビやネットなどのメディア業界を扱うのだが、その中で「テレビドラマが映画よりも優れている点」の1つとして、毎週放送するという連載の形式を取れるために、視聴者の反応を見ながら後半の話の展開や話数を調整できるという点が挙げられている。またテレビ業界が未だに利益を出すために用いている手法としてDVDによる放映内容のリパッケージングが挙げられている。

 

もうお分かりだろう。

 

これらの手法は、NewsPicksというコメント可能なメディアで連載して、修正後に書籍というまとまった形で提供するという、この本の成立過程そのままなのだ。

 

 

言い換えれば、この本は、企業分析の知見に基いて製作プロセスのベストプラクティスを採用した点においても異色なのだ。本に書いてあることが、その本自体の製作に活かされている。ここまで知識獲得と実践が融合しているケースは珍しい。著者自身が分析内容を実践しているわけである。

 

加えて、巻末のプロフィールにも言及があるが、著者は米国メディア取材を題材としたクラウドファンディングの対価として、寄付者に対する個人的な関係構築を積極的に行なっているようだ。これも私の邪推だが、その過程でメディア系の業界人に対してコネクションを作ったのではないか。

 

一読しただけでこれだけ精密な戦略が張り巡らされているということは、私がまだ気づいていないような仕掛けもおそらくたくさん存在するのだろう。そのような結果として、極めて特異な水準の分析を行なっている本書があるのだと思われる。

 

 

そして以上の観点から見ると、著者は興味深い発言をTwitter上に残している。

 

 

 

このツイートで述べられている「公開情報」が示している対象に注意したい。

ふつうに「公開情報」と聞くと、ネットで少し調べれば出てくるような情報のことを一般的には想像するが、著者にとっては業界人からの裏話的な反応も、企業分析を更に推し進める上での「公開情報」に含まれるということだろう。

 

このような発想で「公開されている情報」を考えることは、少なくとも就活生にとっては糧となるだろう。この『東大ブラック企業探偵団』は、日本における企業の勝ち組・負け組を考える上での材料の一つに過ぎない。

 

就活が近い後輩にこの本を薦めているが、本書を読み通したとき、その子が日々の就活説明会やOB訪問、そしてコネと呼ばれるものの可能性について、どのように認識を変えるかが気になるところである。

 

 

 

進め!! 東大ブラック企業探偵団

進め!! 東大ブラック企業探偵団

 

 

(ちなみに余談だが、Amazonのレビューだと「表紙の女の子(マオ)はかわいいが、狙いすぎてて社会人としては引く」と言った発言が見られたが、私は最近たまたま関わっているプロジェクトのチームメンバーに、このマオに実に似ている女子学生が居たため、まるで彼女が喋っているような奇妙な感覚を受けながら読んだ。あまりに気になったため著者に問い合わせたが、そもそもその子と面識はなく無関係らしい)

 

 

あなたはどうあんぱんを買うか:問題解決のケーススタディ

 

「おーい、あんぱん買ってきてー」

 

  • 広告代理店のAくんの場合:
    (生協の購買部に着いて)「うーん、この棚は取れてないか。仕方ない、別の店を探そう」

  • 大手ネットベンチャーのBさんの場合:
    「まずメンバー全員のスケジュールをシェアして公平にアサインしよっか」

  • 気遣いができるCちゃんの場合:
    「飲み物も買ってきました。麦茶と烏龍茶どっちにしますか?」

  • きちんとタスクはこなせるのに声が小さいDくん:
    つぶあんとこしあん両方買ってきました…

  • 幹部候補採用のEくんの場合:
    「私、駄菓子は食べないので」

  • コンサルのFくんの場合:
    「つぶあんか、こしあんか。答えはその間にあります」

  • 院進を決めたGくんの場合:
    「俺はクリームパンがいい」

  • 起業家のHくんの場合:
    「もうすぐ昼ごはんだし俺が作ろうか?」

  • 公衆衛生学者志望のIくんの場合:
    「菓子パンが体にいいなんてエビデンスはないんだけどなぁー、」

  • 体育会系出身のゴツいJくんの場合:
    「30コ買ってきました」

  • エンジニア志望のKくんの場合:
    「あんぱんを注文できるアプリ作りました。
        クリームパン?クリームパンは仕様にないので注文できません」

  • バイサイドアナリストのLくんの場合:
    「なるほど、人件費無料で食材を調達できる…めっちゃいい、めっちゃいい」

  • 漫才好きのMくんの場合::
    「あんぱん買いに行かせるとか、お前は漫画かって話ですよ」

  • 小説家志望のOくんの場合:
    「あんぱんを買いに行く、難しいタスクだよね。でも能力ではなく可能性を信じる」

  • 数学者のPくんの場合:
    位相幾何学的にはあんぱんとクリームパンは同じなので、クリームパン買ってきました」
  • あんぱんを買いに行くと見せかけてサークルに勧誘してくるQくんの場合:
    「このあんぱん1つ取っても、包装の色をどうするかだとか、あんぱんの直径サイズをどうするかとか、いろんな意思決定があった上で僕たち消費者のもとに届いているんですよ。そしてそういう企業の意思決定の方法を学ぶことが、自分の人生を自分で切り開いていくうえでまたとない経験の機会になるんだよね。そういうことをしているサークルがこの大学にもあるんだけど、知ってる?」

  • 経済雑誌記者のRくんの場合:
    「普通に買えばいいだろ!」

アルゴリズムはどのように何をしたいのか:豊かさについて

 

アルゴリズムとは、機械にも実行可能なぐらい明確に表現された作業手順のことである。その手順さえ実行すれば、目的とする何かが達成される。

その目的は、「病院の待合室で待っている人のうち、次に診察室に呼ぶ人を決めること」だったり、「布団 クリーニング とGoogle検索した人の検索結果の広告枠に表示させる広告を決めること(たいていはネットクリーニング屋が出てくる)」だったりする。あるいはもっと基礎的なアルゴリズムならば「与えられた記号列(プログラムなど)の意味が一意に定まるか」だったり「特定の値を最大にするように、いくつかの数値の値を変えること」だったりする。

 

これらのアルゴリズムは、どのように目的を達成したいのだろう?

 

たとえば、面積や築年数などの物件情報から、家賃価格を知りたい場合を考えてみる。ひとつの方法としては、日本国内のすべての物件情報を登録しておいて、「面積」と「築年数」を入力したときに、それらの家賃価格の表を返すようなデータベースを作ればいい(データベースによる方法)。別の方法としては、それらの物件情報をひとつの関数fで表すようにして、面積と築年数を入れると関数値として家賃価格(もしくは家賃価格の分布など)を返すようにすればいい(統計学機械学習による方法)。

 

この2つの方法は、一見するとどちらも「家賃価格を知る」という問題をエレガントに解決しているように思える。
でも、その裏ではいったい何を犠牲にしているだろう?

 

まず、データベースによる方法では、探したい物件情報に符合する物件が記録されていなければ何も結果を返さないという問題がある。東京ドーム22コぶんの大きさのマンションに住みたいです、はいありません、となってしまう。加えて、空間効率も最悪である。全ての物件情報をもれなく残しておかなければいけないから、テラバイトとかペタバイトレベルの記憶容量が必要となりうる。統計学機械学習による方法の「数式1つだけ(1キロバイトも行かないだろう)」と比べたら歴然である。このようなデータベースでは128ギガバイトしか容量のないiPhoneに入れることはできないし、IoTのこの時代では家電に入れることもできない。

 

一方で統計学機械学習による方法では、一度見たことのある物件でも正しい値を返さない(正しく暗記していない)という信頼性の薄さが問題となる。たとえば線形回帰モデルと呼ばれる数式では、一つの物件情報に対して1つの平均値しか保存されない。だから面積30平方メートルで10万円の物件と12万円の物件があった時点で、それらの価格を寸分違わず出すことはできない。たった2つあっただけでダメなのである。これはデータベースによる方法とまるで異なる問題点だ。ただし、データベースと違って、見たことのない物件についてもそれっぽい家賃価格を算出できることは大きなメリットだと言える。

 

こうなってくると、一つの疑問が生じる。

どうして併用しないのか?

 

たとえば、家賃価格を調べたいなら、まずはデータベースで検索してみて符号したらその結果一覧を返す、符号しなかったら数式による予測値を返す、という風にすれば、お互いの問題を解決したことになる。しかし今日も世界のどこかではデータベースはデータベースの授業として、機械学習機械学習の授業として別個に扱われる。少年は線形モデルを正しく理解したことに満足して何が犠牲になったか考えるに至らない。

 

 

アルゴリズムは機械に指示できるほど明確に表現できる。でもアルゴリズムを使うその手順は混沌としていて、それほど明確にはならない。ほんとうのところ私たちは、山程あるアルゴリズムを使って何をしたいのだろうか?

 

行き着いた結論のひとつは、有用性のある情報の抽出である。現実世界の要約とも言い換えられる。

 

データベースによる検索結果も、数式による予測結果も、つまるところ参考資料に過ぎない。何かをする上で役立ちそうな結果を弾き出している。日本全国の物件情報を読むことは一生かかってもできそうにないが、自分が探している物件情報と平米と築年数が等しい物件なら数千程度だろう。数式による予測結果が平均値ならば、平均値から明らかに乖離した物件を見つける物差しになるだろう。前者では自分が興味のある情報だけの提示、後者では有用性のある情報の抽出が行われている。

 

要約が目的になることはなく、それは単なるツールに過ぎない。それらが個別に取り扱われるのは、あまりに細部が込み入っていて短時間では統合するまで至らないだけであって、ツールとしての立ち位置には何の違いもない。

 

最後に一つ考えてみたい疑問がある。

人間がここまで計算機として優秀な理由は何故だろう?

 

私たちは、いまプログラムでやられているようなことをかつて仕事にしていた。古代は奴隷が政治家に付き添って、面会者の身辺情報を面会前に復習させることを仕事にしていたらしい。今はこの仕事は名刺管理アプリや顔認識、フェイスブックの個人ページなどが担っている。現在でも各種の新技術の登場で仕事が奪われるとかいった話題が紙面を賑わしている。

 

私たちは定型業務をしながら、しかし新しいことについて学習をしていく。
記憶を大事に大事に扱いながらも、推論や経験の中から自身の能力を変化させていく。

起動時間が長く、コンピュータのHDDの寿命が4年程度であるのに対して、約80年は稼働する。20数年ほどで生物としての基礎能力はおよそ開花し、あとは経験のなかから能力の適応の仕方や組み合わせ方を学んでいく。体調や感情があり、乱数には難しい偶発的な事象を引き起こす。イノベーションがそこから生まれることもある。

 

矛盾した言動や感情を持つことができる。非論理的な事項に直面しても処理が停止しない。多様な嗜好性があり、70億インスタンスが並列に作業している。

 

総じて、人間は豊かである。

 

アルゴリズムは、人間の豊かな部分のごくごく一部のサブセットをいま明確に表現された手順として体現しようとしている。それらを組み合わせることで、人間とはまた一味異なった「凝縮された」豊かさを実現しようとしている。それらはデータベースと数式の組み合わせが〜などとごくごく基礎的な論点が扱われているようにまだまだ黎明期であるが、これはこれとして興味深い。いままで歴史上人間がここまで、明確な手順として自分たちのできることを述べたことはなかったと思われるからである。

プログラムと恐怖

プログラミングを始めて約3年が経ち、少し考えることがあった。

 

学ぶことが本質的に困難なプログラミングとは、どのようなものだろう?
あるいは、いつまでも怖いプログラミングは、どのようなものだろう?


プログラミングを習うというと、以下のようなことがパッと連想される。

  • RubyPythonといった初学者にもわかりやすい(?)言語
  • CやC++と言った比較的わかりにくい言語
  • RailsSwiftなどによるアプリ開発
  • プログラマやエンジニアになるつもりじゃないから、彼らに仕事頼めるぐらい理解できればよい」という発言と認識

 

今回は、自分が始めた頃には思いもよらなかった「怖い(難しい)プログラミング」について考えてみたい。

それは「設定ファイル」のプログラミングである。

 

プログラマは日々の作業のなかで、いろいろな道具を用いる。そして、それらの道具の細かな使い方を毎回いちいち指定するのは煩雑でミスが起こりやすいため、設定ファイルと呼ばれる特殊なファイルに予め指示を書いておくことが多い。

 

たとえば、オペレーティングシステムと私達ユーザーの仲介を行なうプログラムであるbashならば .bashrc (正式な読み方は知らないが、私は「ドット・バッシュ・アールシー」と呼んでいる)というファイル、遠隔のコンピュータにアクセスするためのコマンドの一つであるsshならば ssh_config (「エスエスエイチ・コンフィグ」)と呼ばれる設定ファイルを操作する。

 

これらの設定ファイル内での指示の書き方は、共通していない。たとえば .bashrc で変数を宣言するときは変数名と値の間に空白を入れないことが求められるが、ssh_configでは変数名と値の間に空白を入れることが求められる。プログラマは新しい道具をひとつ使おう(細かく使い込もう)とするたび、それらの文法を覚える必要に迫られる。

 

最近では .yml や .json という拡張子のファイルで、ある程度共通のフォーマットで書けるようになりつつある印象も受けるが、真に問題なのは書き方というより間違いの見つけ方である。

 

どういうことか。

 

RubyPython、あるいはCやC++と呼ばれるプログラミング言語では、文法上のミスがあるとそもそも実行される前にエラーを出して止まることが多い。変数が存在しませんだとかカッコが閉じていませんだとか言った類のものである。プログラマは多くの場合、これらのエラーを手掛りに、プログラムを修正して正しく動くようにする。

 

「エラーを手掛りに」というのがポイントで、設定ファイルにおいては、あるいはエラーの種類によっては、手掛りになるようなエラーの文言が表示されないことが多い

 

「初心者だけが間違えるようなミス」であれば、それほど問題はない。ググれば同じ問題に直面している人がいるから、その通りに修正すれば大抵直る。

 

問題は、「プログラミング自体は普通にできる人だったとしても、そのエラー自体に詳しくなければ防げないタイプの不具合」である。

 

たとえばsshであれば、アクセス先のコンピュータが(セキュリティ強化のため)デフォルトの22番ポートではなく他のポート(仮に20022番とする)での接続のみ受け付けるようにしていた場合、connection refused エラーが起きる。このエラーを見たプログラマは、だいたい次のような思考を巡らせる。

 

  1. ポート番号が間違っているのか?
  2. パスワード認証がオフになっているのか?
  3. 秘密鍵ファイルが ~/.ssh/ ディレクトリ以下に存在していないのか?
  4. それとも、存在はしていても、デフォルト名ではない鍵ファイルとして保存されているから、鍵名を指定する必要があるのか?
  5. プロキシか何かの関係で接続が阻害されているのか?
  6. それとも、アクセス先のファイヤーウォールで弾かれているのではないか?
  7. ほかに何か、自分の知らない技術的な理由でアクセスができないのか?そうだとしたら誰に聞けばよいのか?ネットの掲示板か?それとも社内システムなら、前任の担当者か?

 

このうち、アクセス成功にたどり着ける「正しい」試行錯誤は、1. のみである。そして仮に 6. から逆番号順に試行錯誤していった場合、相当な時間をかけなければ 1. の正解まで辿りつけない。

 

実際には、鍵が存在しないときのエラーは確か public key denied か何かであり、すなわち connection refused ではなかった気がするので、ポート番号から考えることができるかもしれない。では正解が 1. ではなく 5. だったら?あるいは 6. だったら?プロキシ環境下に ssh でアクセスする機会や、ファイヤーウォールによる弾かれ方(とそれによるエラーメッセージ)を「拝見できる」「貴重な」機会はそうそうあるものではない。少なくともRubyPythonでエラーを見る頻度と比べたら2ケタ以上の回数差で珍しいのではないか。

 

だから僕は、設定ファイルのプログラミングをすることがものすごく怖い。

 

極端なことを言えば、たとえばsshでアクセスするようなマシンを100台立てて、それらの環境をそれぞれ変えて、その時のエラーメッセージを調べてやればsshのあらゆるエラーに慣れることができるから、まったく怖くなくなるだろう。だがコスパに見合わない。怖いなかビクビクしながら何とか直すことのほうが、時間的には遥かに短く済む。

だからきっと、このプログラミングはずっと怖いままなのだ。

 

 

プログラマが使う道具は 、どんどん増えていく。数年前にはDockerなんて存在しなかった。今では企業でも実戦投入を始めている。DockerにはDockerfileという設定ファイルが存在する。その書き方はbashMakefileに似ているが、若干違うところもある。その「若干違うところ」を学ぶときは、全神経を研ぎ澄ませる。「怖い」からだ。まして新しい道具の場合は、エラーメッセージすら信用できない。公式のチュートリアルを全部無視して、githubに上げられている「実際に動く設定ファイル」を説明書として読むことだってある。

 

新しい道具を学ぶときには、つねにリスクが付きまとう。

Rubyが書けるようになったからとか、
どの入門書を読んでも知らないことがなくなったから、
それで学習が終わりなんてことはありえない。

 

ある程度書けるようになってくると、あとはプログラミングによる問題解決をいかに効率的にするかの最適化勝負になってくる。

 

 その最適化に含まれる小問題が、設定ファイルの「怖い」プログラミングだと思っている。設定ファイルのプログラミングでは常に、不確実な環境下での最善の判断が求められている。