🗂

お前のこと誰が好きなん?選手権 Google流に反するイタいエンジニア

に公開

今回はですね、なんとあの天下のGoogleさんが出している
『Googleのソフトウェアエンジニアリング』 から、開発のコツを学んでいこうという企画でございます。

ただ普通に解説してもおもんないんでね、お馴染みの企画
「お前のこと誰が好きなん?選手権」 の形式で、
Google流に反するイタいエンジニアを紹介しながら、その解決策をツッコんでいきたいと思います!

それでは早速いきましょう。最初のエントリーはこちら。


① 「天才」気取ってコード隠すやつ

投稿者:孤高のプログラマー

「自分のコードは完璧になるまで誰にも見せたくないんです。
未完成のものを見られて批判されたくないし、完成した時に『すげえ!』って言われて、
一目置かれる天才になりたいんで、完成するまで隠れて開発してます。」

お前のこと誰が好きなん!?

なぁ!お前のこと誰が好きやねん!
「天才やと思われたい」?
お前そんなスティーブ・ジョブズとかリーナス・トーバルズみたいな
「孤独な天才」ちゃうやろ!

Googleは言うてますよ。「天才神話」を捨てろと。
お前が隠れてコソコソやってる間に、もし方向性が間違ってたらどうすんねん。

「早期に失敗して、高速に失敗せよ」
早く見せてフィードバックもらわんと、
間違った方向に全力疾走することになるで!

あと 「バス係数」 って知ってるか?
お前がもし明日バスに轢かれたら、その隠したプロジェクトどうなんねんって話や。
お前しか知らんコードなんか、チームにとってはリスクでしかないねん!

隠れんと、さっさとチームに見せろ!
チームが全てや!


② 「バグ」に依存して文句言うやつ

投稿者:現状維持バイアス

「ライブラリーのアップデートがあったんですけど、そのせいで俺のシステムが動かんようなったんです。
どうやらバグが修正されたらしいんですけど、俺はそのバグった挙動を利用してコード書いてたのに!
勝手に直すなよ!」

お前のこと誰が好きなん!?

いや、お前のこと誰が好きやねん!
バグ利用して逆ギレて!

それ、Googleでは
「Hyrum(ハイラム)の法則」 って言うねん。

APIに十分なユーザーがおったら、
契約で何を約束してようが関係ない。
システムのあらゆる観察可能な挙動(バグ含む)に依存するユーザーが出てくる

例えば、ハッシュテーブルの順番とかな。
たまたまその順序で出てくるからって、それに依存したコード書くなよ!

Googleのソフトウェアエンジニアリングは
「時間で積分したプログラミング」 やねん。

時間が経てば変更は避けられへん。
「変化しない」ことに賭けるのは、ハイリスクなギャンブルやで!


③ テスト書いてへんのに文句言うやつ

投稿者:ノーテスト・ノーライフ

「インフラチームが大規模な変更した時に、俺の機能が壊れたんですよ。
CI(継続的インテグレーション)? テスト?
いや、そんなん書いてないですけど、壊した方が悪いんで、ちゃんと謝ってほしいですね。」

お前のこと誰が好きなん!?

お前のこと誰が好きやねん!被害者ぶるな!

Googleにはな、
「Beyoncé(ビヨンセ)ルール」 っていう最強のルールがあんねん。

If you liked it, then you should have put a test on it
(そんなに好きなら、テスト付けときゃよかったのに)

CIでテストされてへん機能が壊れても、
それは壊した方の責任ちゃうねん。

テスト書いてへんお前が悪いねん!

インフラチームは、
CIのテストが通ってる限りは安全やと判断して変更を加える。
文句言う暇あったらテスト書け!


④ 信頼不能なテスト(Flaky Test)放置するやつ

投稿者:運ゲーマー

「テストは書いてるんですけど、たまに失敗するんですよね。
でも再実行したら通るんで、まあええかと思って放置してます。
100回に1回くらいしか失敗しないですし。」

お前のこと誰が好きなん!?

それ
「信頼不能テスト(Flaky Test)」
って言うねん!

お前な、Google規模で毎日何億回もテストしてたら、
その「たまに」が毎日何千回も失敗すんねん!

そんなんエンジニアが
「あ、これまたあのFlakyなやつや、無視しよ」
ってなりだしたら、テストの意味ないやろ!

テストへの信頼が失われるのが一番アカンねん。

Googleでは、
信頼不能なテストは直すか、
直らへんのやったら無視されるだけやから
テストスイートから外さなあかんねん。


結論

はい、というわけでね。
Googleのソフトウェアエンジニアリング、要するに
「時間」と「変化」 にどう立ち向かうかって話でした。

  • 自分は天才じゃないと認める(謙虚)
  • チームメイトを信頼する
  • 変化に対応できるようにテストを書いて自動化する

ま、これ全部やったからってGoogleに入れるわけちゃうけどな!

お前のこと誰が好きなん!?

以上です!

Discussion