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

道産子エンジニア

毎週好きなこと書きます。

Googleを支える技術

これまで技術書のブログを書かなかったのは、技術書は読んだ感想を聞いても意味がないからだった。 実際に読んでみて、自分の手元で実践しないとどんな技術書も役に立たないと思う。けど、読んでみて自分が理解できなかったけど、人はできていることもあるだろうから、小さくても書いておくことに意味はある気がしてきたので書いてる。もう死ぬまでに読める本の数は限界があるし、技術書に関してはできるだけ効率よく読めるのが理想だと思う。だとしたら少しでも情報をまとめておいて、後から読み返すときにささっと整理した情報を見たいし、他の人がすぐに内容を把握できるようにしておくのが先人たちのできることじゃないかな。この辺は情報密度的なアレですが。かといって、本の内容を書くだけじゃ読む人からも著者からも迷惑なので、書き方は考えないといけない。寝かせておいてる記事が塩辛くなってくるので放出中。

とても基本的なこと

今更でめちゃくちゃ恥ずかしいけど、「インデックスを貼る=索引の文字列を数値に変換する」 だというとんでもなく基本的なことをわかっていなかったので、それだけでも自分には結構勉強になる本だった。サーバーサイドを少しでもやっていたら当たり前なのかもしれないけど、インデックスを貼れば検索が早くなるはわかってたけど、それがなぜ?という説明まで理解していなかった。インデックスサーバーはマルチコアにすれば効率がいいは当たり前のなぜ?も。昨年のISUCONのときはなんとなくしか分かっていなかったが、CPUを増やしてスレッド数を増やし、マルチスレッドプログラミングを行うことが重要の意味が分かってきた。 クローリング -> 構文解析 -> ワードIDをつける -> バレルに保存とかの基本的なGoogleの高速検索の仕組みも知って、まだまだ知らないことだらけなので勉強せねばという気持ち。

Googleを支える関数型言語

MapReduceについて具体的に書いてありよかった。Googleを支えるのも関数型だったのだ。GoogleMapReduceについてはまたまたこの記事の話を思い出した。

関数プログラミングを理解していなければ、GoogleをあれほどスケーラブルにしているアルゴリズムであるMapReduceは発明できない。MapとReduceという用語はLisp関数プログラミングから来ている。純関数プログラムは副作用がなく容易に並列化できるということを6.001に相当するプログラミングの授業で聞いて覚えている人には、MapReduceは容易に理解できる。GoogleMapReduceを発明し、Microsoftが発明しなかったという事実は、Microsoftが基本的な検索機能についてキャッチアップの途上にあり、一方Googleは次なる課題へと進んでいることを示している。

重要なのは実際のデータを数値に変換(map)、単語IDとページIDの対応付(map)、ページIDとそれに含まれる単語IDの合成(reduce)。効率化のためにバラバラにされたデータを複合する。全てのデータが数値化されたのでカウント、grep、ソートなどが行いやすいし、複合にも時間がかからない。本当にどんなところにでも生かせるのだなぁ。ネイティブアプリでもiOSではSwiftAndroidではKotlinがあるからこれからもどんどん関数型やらないといけないな。

PCの電源アダプタは電圧変換しているのはわかってたけど、12Vやそれ以下でCPUが動いているのは知らなかった。車と同じやん。

Googleのマインド

前にTeam Geek ―Googleのギークたちはいかにしてチームを作るのかを読んでいるので大体知ってたのもあって、最後の方のGoogleマインドに関してや、Googleの論文に書いてある内部事情をそのまま文章にしているようであまり読み応えはない。けれどGoogleのマインドについてはやっぱどんな本で読んでもすごく共感できていい。20%ルールやってみようとか設計についてもっと文章として記述することとかできるだけ自動化したいとか情報共有することの大切さとかとか。何度も聞いてるし、見てるけど、やっぱりちゃんと実践できている環境って少ない。実際のGoogleでもどこまで実践されているのかわからないけど、それをみんなが意識していることに意味がありそう。経営している人もモノづくりのスペシャリストだなぁと羨ましくなる。そしてそこが弊社と圧倒的に違う部分だなと。自分にできるのはそれを習い実践して、周りに広めていくことくらいだな。忙しさに甘えず、しっかりやっていこう。そう再認識した。


古めの本なのでまぁ大体見てる人が多いと思うけど、おすすめです。

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)