本連載では、業界の第一線で活躍する著名エンジニアたちが、それぞれの視点で選んだ書籍について語ります。ただのレビューに留まらず、エンジニアリングの深層に迫る洞察や、実際の現場で役立つ知見をシェア!初心者からベテランまで、新たな発見や学びが得られる、エンジニア必読の「読書感想文」です。
「テスト駆動開発」は時を超える技術。凡人が天才と肩を並べるための秘密兵器【米マイクロソフト・牛尾 剛】
著名エンジニアが、独自の視点で「おすすめ書籍」の紹介を行う本連載。
今回は、米マイクロソフトのエンジニア・牛尾 剛さんによる『テスト駆動開発』(オーム社)の読書感想文を紹介する。
本書をピックアップした背景
一般的に、コンピューターの書籍は常に新しいものが良いことは疑いようもありません。
ただ、自分が本を読んで身に付けた技術の中で、2024年の現在でも最高に役に立った本は何だろうと考えた時に、最終的に自分がピックアップしたのは『テスト駆動開発』(オーム社)です。これは相当古い本で、新しいバージョンが日本語では2017年に出ていますが、オリジナルが出版されたのは02年と、めちゃめちゃ古いです。
では、自分の流儀に沿わずなぜそれを推すかというと、ガチで自分のエンジニアライフに一番役に立ったからです。自分のエンジニア人生に最高に役に立った本は何かと聞かれたら、この本と『リファクタリング』(オーム社)という古い本を答えます。
自分の性格を一言で説明すると、僕はADHDです。注意欠陥症候群ですので、めっちゃくちゃ不注意でケアレスミスを良くします。だから、似たような人がもしいたらと思って筆を執っています。このような人にとって、テスト駆動は心強い助けになります。(ちなみにC#は、Visual Studioで開発することを前提に設計されており、IDEのサポートがえぐいので、僕のような人には最高です)
僕は現在、Azure Functionsというサーバーレスのサービスの中の人をやっています。過去のキャリアでは、プログラマーになりたくても才能がなく日本でも通用しませんでしたが、今アメリカで楽しく働いています。
そんな、才能もなんもなくADHDの自分を救ってくれたのが、この「テスト駆動開発」で得た習慣なのです。
本書で得られた教訓・学び
現在Public Preview段階にある、新しいプラットフォーム「Flex Consumption」の開発において、僕はHttp Scalingという重要な機能の実装を任せてもらえました。ここのコードがバグっていると、サービス全体の評価が大きく下がる可能性があるため、かなり責任の大きな仕事です。
そこで僕は、『テスト駆動開発』で学んだ習慣でコードを書きました。
まずは小さなステップごとにテストコードを記述し、それに合わせた実装を進める。そして、再度テストを追加してから実装を更新し、重複部分があればリファクタリングする。現代の分散システムではこのスタイルが難しい場合もありますが、現代的な『Unit Testing』の本がその方法を補完してくれます。
このように、最初にスケールのシミュレーションコードから始め、全ての本番コードをテスト駆動で開発しました。他の人より開発スピードが遅く見えるかもしれませんが、そうすることでめちゃくちゃケアレスミスの多い僕でも、少しずつ確実にプログラミングを進められます。
あまり才能が無いので設計も下手くそですが、テスト駆動の習慣で設計をしていくと、考えることが小さくなるので、最初はそうでもありませんが、徐々に良い設計になっていきます。テストがあるので、リファクタリングをするのにも躊躇がありません。
そうしてプログラミングを進めていき、Balaという同僚の書いたコードと統合を行ったときのこと。その過程で起こった驚くべき結果に、僕は非常に感動しました。
自分から見たら、Balaはまさしく天才といえる、高度な技術力を持ったプログラマーです。彼の作ったコードと僕が書いたコードは、どちらも全く新しいもので大規模な統合になるため、当初その統合には時間が掛かると思われていました。
ところが、その天才プログラマー・Bala、そしてADHDで才能のかけらもない僕のコードは、一発で動作しました。しかも、なんの問題もなく。周りの同僚たちも、統合のスムーズさに驚いていました。
僕にはいまだに、才能のかけらもありません。しかし周りの人と唯一違う事が、テスト駆動の「習慣」を身に付けていることでした。全員ではありませんが、自分のチームで最高のデザインをするMathewはテスト駆動のことを「時を超える技術」といっていました。自分のメンターのChrisも、テスト駆動はめっちゃ役に立つと口を揃えます。
現在のアーキテクチャでは、テスト駆動は常に使わなくても良いと思いますが、あなたが僕のような凡人なら、この「習慣」を練習してポケットに入れておくだけで、天才と肩を並べることが出来る秘密兵器になります。
本の内容に関しては、あまりここでは述べません。なぜならネタバレするよりも、読んで楽しんでほしいからです。
テスト駆動は、テストを書くことでもなく、テストに駆動されて開発をする習慣です。ぜひ皆さんも、この秘密兵器を手に入れてみませんか? 古い本ですが、最新の本と組み合わせるとものすごい力を発揮しますよ。
あとがき
ちなみに、僕が読書感想文を書こうと思って最初に頭に浮かんだのは、『Good Code, Bad Code』と『Unit Testing Principles, Practices, and Patterns: Effective testing styles, patterns, and reliable automation for unit testing, mocking and integration testing with examples in C#』でした。
『Good Code, Bad Code』の素晴らしさは、現代的なコードを対象に書いてあるところです。
この手の本では『リーダブルコード』(オライリージャパン)が有名ですけど、これは日本語版で2012年に書かれたものなので、残念ながら現代のコーディングスタイルからすると少し古いところがあると思います。
その点『Good Code, Bad Code』には、かなり現代的なコーディングスタイルでの良いコードと悪いコードが書かれています。10年もたつと、どんな言語でも言語仕様がもの凄くアップデートされていますので、過去からいろいろあった良いコードやデザインについて知りたいなら、新しい良書を読むといいでしょう。
『Unit Testing』についても同様に、「現代的」な分散システムでのC#のコーディングにおける様々なUnit Testの考え方、パターンが整理されています。C#使いの人なら、ぜひ読んでいただきたい素晴らしい本です。
このように、コンピューターの書籍は考え方のアップデートが激しいので、新しい書籍を継続的にアップデートして読んでおくのがお勧めです。例えばC#とかにしても、毎年新しいバージョンが出てきて新しいコーディングスタイルが導入されます。昔良かったコードが良くないコードになるケースはよくあるので、自分自身のアップデートを継続することが大切です。
【語り手】
『世界一流エンジニアの思考法』著者
牛尾 剛さん(@sandayuu)
1971年、大阪府生まれ。米マイクロソフトAzure Functionsプロダクトチーム シニアソフトウェアエンジニア。シアトル在住。関西大学卒業後、日本電気株式会社でITエンジニアをはじめ、その後オブジェクト指向やアジャイル開発に傾倒し、株式会社豆蔵を経由し、独立。アジャイル、DevOpsのコンサルタントとして数多くのコンサルティングや講演を手掛けてきた。2015年、米国マイクロソフトに入社。エバンジェリストとしての活躍を経て、19年より米国本社でAzure Functionsの開発に従事する。ソフトウェア開発の最前線での学びを伝えるnoteが人気を博す
文/牛尾 剛 写真/赤松洋太 編集/今中康達(編集部)
「怠惰であれ!」「早く失敗せよ」――
米マイクロソフトの現役ソフトウェアエンジニアの著者が、超巨大クラウドの開発の最前線で学んだ思考法とは? “三流プログラマ”でもできた〈生産性爆上がり〉の技術!
・試行錯誤は「悪」。“基礎の理解”に時間をかける
・より少ない時間で価値を最大化する考え方とは?
・「準備」と「持ち帰り」をやめて、その場で解決する
・マルチタスクは生産性が最低なのでやらない
・“脳の負荷を減らす”コミュニケーションの極意
・コントリビュート文化で「感謝」の好循環を生む etc
仕事と人生を「自分の手でコントロールする」最高のスキルがここに!
>>購入はこちら
RELATED関連記事
RANKING人気記事ランキング
NEW!
AWS認定15冠のエンジニアとIT起業家が明かす、「資格取得者=ただの物知り君」で終わらせない環境とは?
AWS認定資格10種類を一覧で解説! 難易度や費用、おすすめの学習方法も
米国優位が揺らぐ?ひろゆき「CPUの進化でGPU神話って崩壊しません?」【AI研究者・今井翔太が回答】
NEW!
野田クリスタル「自分の考えは“頑張って”伝えてる」集団開発率いる等身大の悩み【スーパー野田ゲーMAKER】
【Udemyとは?】基本的な使い方から専門家の評価、おすすめコースやセール情報まで詳しく解説!
JOB BOARD編集部オススメ求人特集
タグ