舎路(シアトル)日記

シアトルで働く日本人プログラマの日記です。

去年に Twitter で Kentaro Hara さんが紹介していた

Googleの2億行のソースコードを解析した結果、関数に渡す引数の順番を間違える系のバグは、引数の個数が6個以上になったときに著しく増えるので、引数の個数は5個以下が望ましいことがわかったという話。

Andrew et al. の Detecting Argument Selection Defects を読んだ。

題名の通り「引数の渡し間違いによるバグを見つける」ことに挑んだ論文で、著者らは提案しているアルゴリズムを Error Prone のパターンとして実装し、Google 社内のみならず、オープンソースソフトウェアにもバグを報告、実際に修正させている。ここでの「オープンソースソフトウェア」には、なんと OpenJDK の ConcurrentHashMap も含まれている

アルゴリズムはわかりやすい。引数の宣言に使われている名前と、そこに渡されている変数やメソッドの名前とを比較して、文字列同士の編集距離をもって、元々の引数の渡しかたと、静的型的にありえる別の渡しかたについて、どちらが「もっともらしい」かを計算している。

宣言されている引数の名前群を一つの集合、実際に渡されているものの名前群をもう一つの集合として、bipartite graph (二部グラフ) を構築して、Hungarian algorithm (ハンガリアン法) で解いているのが、私にはちょっと新鮮だった。ナップザックに何かをつめるなんて面接でしか解かないのでは、なんて思っていてはいけない。

ちなみに、単純なアルゴリズムだけでは false positive が多いらしく、色々とヒューリスティックも実装されている。例えばメソッドやクラスの名前が backwardsFooBar だったら、引数をひっくりかえして渡しているのは意図的かもしれない。論文では「正規表現でそういう名前を見つけます」なんて漢らしいことが書いてあったけれど、Error Prone の Java コード側を見ると、EnclosedByReverseHeuristic に単語のブラックリストがあった。どちらにしても涙ぐましい。

冒頭で引用した「引数の個数が6個以上」というくだりは、後半の “API DESIGN IMPLICATIONS” に登場する。一方で Error Prone の Java コード側、ArgumentSelectionDefectChecker を見ると、早速引数を6つ渡していたりする。名前つき引数が無い言語は辛い。

去年のこと

Jan 3, 2019

2018年末には steps to phantasien が更新されることはなかったらしく、ちょっと残念。インターネットから人々が消えていくのは悲しい、と一瞬だけ思ったけれど、moritta さんは Misreading Chat というポッドキャストを一年近くやっているわけで、むしろ私よりずっとがんばっているのだった (よく聞いてます)。

そういえば以前に、

steps to phantasien の文体やスタイルにやられてブログがパスティーシュめいてくる現象を、ぼくはこの数年間でいくつも目撃してきた。これをひそかにモリタ・シンドロームと呼んでいる。

なんて書いていた mooz さんとは、去年に、Twitter 経由で一緒にご飯を食べる機会があった。普段はソーシャルメディアから距離をおくようにしているのだけど、こうやってインターネットで文章を読んだことがある人に気軽にあったりできるのは良い。逆に、2018 Advent Calendar 2018参加しそこねたのは、その距離のとりかたが裏目に出た出来事だった。

Q4 をふりかえる

Dec 28, 2018

今年は、クリスマスの週 (12/24-) とその翌週 (12/31-) を丸々休みにしたので、わりとゆったりと年末を過ごしている。

思いきりよく二週間も休んだのは、年の切り替わりに失効してしまう有休があるからで、これは良くない。いまの会社は公式の休暇が少なめなので、もう少し自分で計画して休暇をとるべきだったと思う。

一方で、12月はクリスマスのセールや同僚の休みのせいで「待ち」が発生しがちで、一年の中ではあまり効率的に働けない月でもある。日本人としては年末年始は休みたい (「仕事納め」をしたい) というのもあり、この時期に長めに休んでしまうこと自体は名案だったとも思う。

可視化

可視化ブームはこの後も続いて、Visualizing Crates.io というのを作った。Rust まわりの可視化は、やりたいことがいくつかあるのと、英語圏の人々にそれなりに届くので、もうしばらく継続の予定。

読書

“Software Design X-Rays” は、リファクタリングや「良いコードとは何か」という問題に、定量的なアプローチで立ち向かう良い本だった。Misreading Chat の初期に Empirical Software Engineering と呼ばれる分野の論文の紹介があったけれど

そういうのが好きなひとにはおすすめです。

“Make Time” も、自分の生活にそれなりにとりいれられて、インパクトがあって良かった。

読んだ本についてここに書くのは滞りがちで、例えば、最近 It Doesn’t Have to Be Crazy at Work を読み終わったけれど、なにも書けていない。レビューではなく記録と思って、もうちょっと淡々と書くと良いのかもしれない。

そのほか

そのほかはバラバラ。英語ブログは、テーマしばりをゆるくして更新頻度をあげよう、と思ったけど途中で頓挫した。

仕事

“Make Time” の助けと、単純にミーティングが多かった時期を抜けたのとで、それなりに良く働けたと思う。AWS re:Invent のキーノートをちゃんと見たのは良かった。Alexa には「対話型エージェントって結局のところなんなのか?」という、まだ誰も正解をわかっていないような面白さがあるけれど、AWS も人生で一回は働いてみたいと思う。

育児

寝かしつけはまた妻のほうが多め、というか「パパと寝ようか?」と聞くと「ノー」と返されるようになって悲しい。それでもベッドの横に座って見守ったりしている。

ポモドーロタイマー

いまだに完成せず。あと3日でなんとかなるか?

アメリカ生活

車の免許について、ようやく Knowledge Test をパスするところまでいった。あとは講習をうけて、実技テストにうかれば車を運転できるようになる。講習は必須ではないけれど、私は日本の免許もないので、うけておいたほうが無難だろう。

多分、来年は車を買うことになるんじゃないかと思う。

しばらく前に、Jake Knapp と John Zeratsky の Make Time - How to Focus on What Matters Every Day を読んだ。本書はいわゆる時間管理/生産性向上系の自己啓発本なんだけど、面白いところが3つある。

意思の力に頼らない

ひとつは、あまり意思の力 (willpower) に頼ろうとしないところ。Google でデザイナーとして働いていた著者らは、現在の消費者向けサービスがどれだけ巧妙にデザインされているかを知っていて、そこに正面から挑もうとしない。

例えば、彼らは「携帯電話をあまりみないようにしよう」ではなく、携帯電話からついついみてしまうアプリを、ブラウザやメールクライアントまでも含めてアンインストールしてしまうことを提案する。テレビをリビングの中心ではなく、隅のほうにおいてみよう。寝室にスマートフォンや各種デバイスをおくのはやめよう。

環境自体を変えることで、行動を変えようとする、こういった提案の数々は、自分の周りのフリクションをデザインし直している、とも言える。

「フリクション」というのはここ数年デザインの周りで見かけるようになった単語の一つで、何かの行動に至るまでがスムーズにいかないときに、その障害をさすのに使われる。ほとんどの場合はそれを取り除くのが良いことだけれど、時折、例えば GitHub でレポジトリを削除するまえに名前を入力させたりするように、意図的にスムーズさを阻害するほうが、安全で「良い」こともある。

ちなみに、携帯電話から色々をアンインストールする話は、Six Years With a Distraction-Free iPhone として Medium でも読めるのだけど、書き出しの

In 2012, I realized I had a problem. My iPhone made me twitchy. It called to me from my pocket, the way the Ring called Bilbo Baggins.

My moment of clarity happened in my living room. I was sitting on the floor one evening, building train tracks with my kids, when my older son said: Dad, why are you looking at your phone?

こんなくだりは、親としてちょっとドキッとするものがある。

大事なこと「だけ」に集中する

次に「大事なことに集中する」ことに重きがおかれていて、単位時間当たりの仕事量でもって生産性を測ろうとしないこと。

例えば、メールを読んで返事を書くことは悪いことではないけれど、一番重要なことでもないはずだ。著者らは

Online, anyone can contact you, not just the highly relevant people in your physinal vinicity. They have questions about thier priorities – not yours – when it’s convinient for them – not you. Every time you check your email or another message service, you’re basically saying, “Does any random person need my time right now?” And if you respond right away, you’re sending another signal both to them and to yourself: “I’ll stop what I’m doing to put other people’s priorities ahead of mine not matter who they are or whay they want”.

実際に面と向かって会話しているときに即座に返事をしないのは失礼だろうけど、それをデジタルの世界にそのまま持ち込むのは良いことではない、というのを説明しながら

  • メールは一日の最後に一回だけ、まとめて読む。
  • Inbox を空にするのは、一週間に一回だけでいい。
  • メールにはなるだけゆっくり返信する。

などの、待たされる側からすると、ちょっと厳しいテクニックを紹介している。もちろんこれで相手側の作業はブロックするかもしれないけれど、自分のやっている作業だって待たせているひとはいるかもしれないわけで、他人の作業の優先度を常に自分の作業より高く見積もる理由は、いわれてみると無いなあと思う。

フレームワーク

最後に、全体を「フレームワーク」としてまとめているところ。

本書に登場する方法は様々で、著者のふたりもすべてを実行しているわけではない。彼らはその方法を

  • Highlight: やるべきことを決める
  • Laser: やるべきことに集中する
  • Reflect: なにがうまくいったか振り返る

という3段階と、運動・食事・睡眠などを改善する “Energize” に分類する。読者は、この4つのカテゴリから自分にあったものを試して、イテレーションを回すことで、自分にあった方法を見つけだせる、というわけ。

実践してみた

冒頭に書いたとおり、私がこれを読んだのはちょっと前で、紹介されているテクニックも色々と試してみている。

携帯電話から Chrome と Gmail を消すのは継続中。Twitter や Facebook といった、ソーシャルな色々は基本的にインストールしていないんだけど、ブラウザとメールまでなくなると、ふとした瞬間に携帯電話をチェックしたくなる、というのがだいぶ減ってよかった。

ブラウザなしの外国暮らしはそれなりに不便で、例えば食料品の買い出し中に「そういえばササミって英語でなんていうんだっけ」とふと疑問に思ってもすぐには調べられない。Android だとデフォルトでインストールされている古いバージョンの Chrome はダウンロードなしに復活できるので、そういう時だけインストールし直したりしている。

一方で、通勤に使っているバスの中で、ポッドキャストを聞いたり、Kindle や O’Reilly Safari で本を読んだりするのは、ブラウザで色々をみてまわるよりはストレスがなくて良い。コンテンツの質はそれなりに保たれているし、すでにダウンロードされていたり、ローディングを待つこともあまりない。また、Gmail がないことについてはほとんど困ることがなかった。

メールの時間を制限したり、一日の最初に読まないようにするのは、以前に読んだ Scott Hanselman’s Complete List of Productivity Tips でもおすすめされていて

It’s simple: if you reply to email in the morning, the sender will reply right back. What you thought was going to be less than an hour chore, quickly consumes half your day.

会社についたら、メールはしばらく開かずに、昨日の作業とかを続けてやるようにしている。1日に1回までは極められず、昼食前と帰宅前の2回くらいに落ち着いている。

他にも、一日のハイライト (達成したいこと) をまず決めてから仕事に取り掛かる、というのもしばらくやっていたのだけど、最近はあまりできていない。なんとか年明けまでには復活させたい。

まとめ

Jake Knapp と John Zeratsky の “Make Time” を紹介しました。

  • 意思の力にたよるかわりに、環境をデザインし直す
  • 大事なことだけに集中するために、例えばメールに即座に返信したりするのはあきらめる
  • 実際にブラウザとメールを携帯電話からアンインストールしてみているけど、なんとかなります

本書のウェブサイトや、前身となった Time Dorks を読むと雰囲気がわかると思うので、それで水があいそうに思えた人はぜひ。

Google, Apple, Facebook, Amazon をまとめた “GAFA” という言葉、ジャーナリストの林信行さんには

GAFAという表現を聞くたびに、仮にも今、時価総額でアップル抜いて1位に返り咲いたM社も忘れてるし、そもそもビジネスモデルも哲学も(Amazonに関しては)本拠地も異なる無理矢理感ある乱暴過ぎるくくりに思えてあまりニュースや官の人に使って欲しくない。一括りにして本質見えなくしちゃうバカ化言葉。

とまでいわれ、Yusuke Ando さんには

Google Apple Facebook Amazonの頭文字を取ったGAFAという言葉だけど、感覚的に日本語圏でしかほぼ聞いたことがない。出版物の影響がこんなに強いとは驚きます。

ガラパゴス化を指摘されたりと、あまり評判が良くない。

FANG, FAANG, GAFAM, …

“GAFA” みたいなテック企業の頭文字をつなげた頭字語には色々あって、一昔前は “FANG” というのもよく目にした。このあたりの経緯は、Quora の Why is Microsoft not counted as one of the Big Four Tech companies (GAFA)? (2017) によくまとまっている。

Because GAFA does not describe the “Big Four Tech companies”. If it did, it would probably include both Microsoft and IBM. It’s actually about share trading….

要約すると

  • 2013年に、CNBC の “Mad Money” という番組のホストをつとめる Jim Cramer が、注目すべきテクノロジー関連株として FANG (Facebook, Amazon, Netflix, Google) というのを命名する。ここでは値動きの無さから Microsoft が除外されている。
  • その後に、Goldman Sachs のアナリストが、時価総額ベースで、FAAMG (Apple と Microsoft を追加して、小さすぎる Netflix を除外) というのを命名する。
  • さらに、JP Morgan も同じ企業群を FAAMA (Google を Alphabet といいかえ) と命名する。
  • 2012年に、Bruce Sterling が Google, Apple, Facebook, Amazon, Microsoft を、垂直に統合されたテクノロジースタックを有する企業としてまとめるが、GAFAM とは命名しなかった。

と言った歴史があるらしい。SF 作家である Bruce Sterling を除いては、そろいもそろって金融業界からの命名で、テック業界の人々の混乱もやむをえない感がある。

回答者の Jack Schofield は The Guardian や ZDNet にも書いているジャーナリストで、ZDNet のほうにも Can’t tell your FANG from your FAAMG? And should you be worried? (2017) という記事を書いている。

As a technologist, you may have wondered about the technological insight behind suddenly popular acronyms such as FANG, FAANG, and FAAMG. At the moment, there isn’t one: they are just shorthand terms being used by stock traders. However, maybe we should be worried about GAFAM, which controls so much of the technology business.

この書き出しの “suddenly popular acronyms” というのは、冒頭にあげた林さんの感覚とも一致するものがあると思う。

フランスにおける GAFA

一方で、日本以上に “GAFA” という言葉を好み、大臣までもがその名を口にする国もある。フランスだ。

France to levy digital services tax on big tech companies like Google, Apple, Facebook, Amazon in the new year (2018)

Le Maire told France24 television, “I am giving myself until March to reach a deal on a European tax on the digital giants. If the European states do not take their responsibilities on taxing the GAFA, we will do it at a national level in 2019.”

フランスの GAFA に対する執着は、この年末の “GAFA tax” でクライマックスを迎えた感があるけれど、起源はもう少し古い。これについては Quartz の American cultural imperialism has a new name: GAFA (2014) が面白い。

In France, there’s a new word: GAFA. It’s an acronym, and it has become a shorthand term for some of the most powerful companies in the world—all American, all tech giants. GAFA stands for Google, Apple, Facebook, and Amazon.

この記事によると、例えば Le Monde に “GAFA” というタイトルがはじめて登場したのは、2012年の12月のことらしい。

フランスでの流行はヨーロッパ全体にも広がっているのか、イギリスの The Guardian なんかも “GAFA” というくくりで企業をまとめることがある。

The Guardian view on big tech: a new era needs new rules (2018)

Google, Amazon, Facebook, Apple – or Gafa as they have come to be known – represent something entirely new and all too familiar.

Society will be defined by how we deal with tech giants (2017)

There is a fissure growing between European and US attitudes towards these global super-platforms – “the Gafa” as Brussels calls them (Google, Apple, Facebook, Amazon) – and the UK will soon need to decide on which side it sits.

多国籍巨大テック企業 vs. 国家というのは、今後も議論が活発になりそうなトピックだと思う。金融業界では、色々ある頭字語の一つだった “GAFA” が、ここでは一躍主役に踊り出ているのはちょっと面白い。

おまけ: Eric Schmidt 曰く

ちなみに、Wikipedia の GAFABig Four tech companies にリンクされていて、ここでは

The Big Four are four tech companies described by Eric Schmidt, Phil Simon, and Scott Galloway as driving a large amount of growth in technology.

“The Age of the Platform” (未訳?) の Phil Simon と、”The Four” が邦訳にあたり『the four GAFA』になった Scott Galloway に加えて、Google の Eric Schmidt の名が挙げられている。Eric Schmidt’s Gang Of Four: Google, Apple, Amazon, And Facebook (2011) を読んでみると、確かに Google, Apple, Amazon, Facebook を、インターネット時代に消費者向けサービスを提供して急成長した会社としてあげている。

Every technology era has its four horsemen driving growth and innovation. In the 1990s it was Microsoft, Intel, Cisco, and Dell. Today, there is anew “gang of four,” as Google chairman Eric Schmidt puts it. They are Google (of course), Apple, Amazon and Facebook, and they are behind the consumer revolution on the Internet today. Not only are all four companies “growing at incredible rates.”

当時の Google 会長が賞賛 (含む自画自賛) していたのが、巡りめぐって EU の規制対象と一致しているのは、ちょっと皮肉。

まとめ

  • GAFA といっているのは日本人だけではなくて、金融業界やフランスの人々もいっているよ
  • インターネット時代の消費者向けサービスで大成功した、という意味では4社に共通項もあるよ (と Eric Schmidt が昔いっていたよ)

多国籍巨大テック企業は本当に良いものなのか、というのはヨーロッパだけじゃなくて世界全体で議論されるであろうトピックで、規制の文脈で、これからアメリカに GAFA が輸入される可能性もあるかもなと思いました。