1年目の人にわかってほしいこと


今年採用した新卒者は、ウチぐらいの規模の会社ではめったに取れないレベルの猛者たちだ。
一人はTOEICのスコアが930台で、一人は年間の読書量が2000冊(200の間違いじゃない。2000なのだ)で、もう一人は特定されるのでここには書けないある大会の優勝者だ。
こういう人を集めたら何かすごいことが起きるかというと、集めただけでは別に何も起きない。
彼らにはどこかで目を覚ましてもらわなくてはならない。「目を覚ます」というのは、例えば

  • この会社で要求される技術はたいして難しいものではない。勉強すれば1日で理解できる程度のことが大半
  • 先輩は昔から何でも知っていたような顔をしているが、実はここ1,2年で覚えた技術で仕事をしている
  • だから、先輩が10年目でようやくできるようになった技を、1年目の自分があっさりものにできてもおかしくない

といったことに気付くことだ。

本当は大して難しくないのに...

1年目の人に技術的なことを、例えばPostgreSQLの実行計画にBitmap Index Scan/Bitmap Heap Scanというのが出てくるが、これが何なのかを説明する。
Bitmap Index Scanあるいはインデックスマージなる機能を理解するのに必要な前提知識は

  1. データ件数がある一定量を超えると、ランダムアクセスのコストがシーケンシャルアクセスのそれを超えること
  2. ランダムアクセスのコストの大半はディクスを回したりヘッドを動かしたりの時間だということ
  3. よって、ディクスとヘッドの動きを最小限にすることで、ランダムアクセスでいける上限のデータ件数を伸ばせること

ぐらいだろう。仕組みを理解するのに実務経験だの数学だのは要らない。
が、説明してみると「難しい...」という反応で、後日「いやー調べてみたら簡単な話でしたわ」と言ってくることもない。
これはやる気がないわけではなくて、ムダに謙虚だから「難しいから今の自分には分からない」と思って切り捨ててるのだ。
この前本人たちに越中みたいな口調で「ウチの仕事に要求される知識があんたたちの頭で分からないわけがないのだから、何かわからないことがあってもスルーしたらダメなんだって。スルーしてることの中には、勉強し直したらその日のうちにあっさりわかることがたくさんあるんだって。それを知れっていうことですよ」て言ったんだけど、一回言っただけじゃ通じないのな。

みんな昔から何でも知っていたような顔をしているが...

要らない雑誌を捨てようと思って、古いWeb+DB Pressとかザーッと読み返してたんだけど、昔の記事にはこれはどうかねえ...と思うものがたくさんあって、例えばSQLのチューニングの記事なのに「実行計画は製品依存なのでここでは取り上げない」とか書いてある。それ取り上げないでチューニングの話してもしょうがないでしょう。今のWeb+DB Pressにはこんな記事は載らない。


我々エンジニアのRDBの内部に対する理解は、ここ3年ぐらいでずいぶんよくなっていると思う。
それは小田圭二さんや松信嘉範さんのDB Magazineの連載や、名著

データベースパフォーマンスアップの教科書 基本原理編

データベースパフォーマンスアップの教科書 基本原理編

とかで、昔の方が知られていたであろうRDBの物理面が改めて周知されたからだと思っている。
この辺の成果物がなかったら、いまだに変なチューニングの記事が雑誌に載ってたんじゃないかと思う。
「データベースパフォーマンスアップの教科書」が出版されたのは2006年なんだけど、俺この本以外にHash Joinの完全な説明を見たことがない。
Hash Joinの意味が分かんないもんだから実行計画にfull table scanを見つけては何とかインデックスを使わせようと苦闘したりしてたもの。
でもそんなことは回りに言わないで、ずっと昔からわかってましたという顔をしている。そういう人けっこう多いはずだ。

ということは...

だから何かというと、先輩(俺)と新人の差は質ではなくて量でしかないで、差を詰めるのは単純作業に過ぎないということだ。
金か時間を使えばセンスなんて無くても先輩との差は日々詰まっていくのだ。
特に金を使う=例えば本買って読むのは差を詰めるいちばん安易な方法だ。時間も才能も要らない。
だから「データベースパフォーマンスアップの教科書」を読めって1年目の人に言うんだけど読まないんだ。
難しすぎると思っているのだ。代わりに入門書とか読んでるのだ。それが違うんだと。
貴方の卒論の参考文献の方がぜったい難しいのにな。それを知れって話だ。