【エンジニアの日常】エンジニア達の人生を変えた一冊 Part1では大変ご好評をいただきました。
今回はPart2としまして、弊社エンジニアの人生を変えた一冊をご紹介いたします。
ぜひ、読書の秋のお供としてご参考にしていただければ幸いです!
人生を変えた一冊
SRE サイトリライアビリティエンジニアリング
―Googleの信頼性を支えるエンジニアリングチーム
こんにちは。ファインディでSREを担当している大矢です。ファインディ一人目のSREとして入社し、SRE歴は8年目になります。
「Site Reliability Engineering -- How Google Runs Production System」の日本語訳は、多くのエンジニアに愛読されている名著です。
GoogleのSREチームの取り組みも書かれており、これからSREを目指す方はもちろん、既にSREとしてご活躍されている方も、まだ本書を読まれていないようでしたら是非一度手に取って頂きたい一冊です。
私はかつて2010年代前半から中盤まで大規模なシステムでインフラエンジニアとして働いていましたが、実際はSREに近い業務を担っていました。
同システムでは開発メンバーとのコミュニケーションは活発でモニタリングやCI/CDも導入していましたが、運用面に対して次のようなプレッシャーを感じていました。
- システム変更に対する失敗は許容されない
- 手作業による環境構築や運用が多い
- 24/7でのオンコール担当
これらのプレッシャーに対する答えの1つが「SRE Book」でした。
この本ではSLIやSLO、エラーバジェット、ポストモーテム、トイルといったSREにとって重要な概念や、オンコール体制の考え方が解説されています。
例えば前述のプレッシャーに対しては次のようなアプローチをとることができます。
- SLI/SLOを定めエラーバジェットに基づいた運用をおこないポストモーテムを活かす
- トイルを減らすため自動化を進める
- オンコール体制は適切な人数で適切な持ち回りを行う
上記は当たり前のことかもしれませんが、私自身の考えを整理するうえで強力な後押しをしてくれました。
ところで、ファインディではプロダクト毎にSLI/SLOを設定しエラーバジェットに基づいた振り返りを推進しています。
弊社SREチームは立ち上げから日が浅いですが、これからもこの一冊で得た知識を活かし、ファインディのサービスをより信頼性の高いものにしていきたいと考えています。
プログラマが知るべき97のこと
開発推進チームで、RubyとRustとTypeScriptを書いているバックエンドエンジニアの西村です。エンジニア歴は4年目です。
この本はエンジニアとして仕事していく中で素晴らしい知見を共有してくれるエッセイ集です。 エッセイ集であるため、タイトルが気になるエッセイから読んでいく形でも問題ないです。
どのエッセイも経験豊かなエンジニア達が執筆しています。例えば、システム設計に熟練したエンジニアやプログラミング言語のコミッタが執筆している豪華な一冊になっています。
エッセイのテーマは、リファクタリング、設計原則、エンジニアとして仕事をしていく姿勢、テスト等の様々なものがあります。
この本を読んだきっかけ
私がエンジニアとして働いて半年ほど経った頃、自分の理想の姿へ近づくために、どうすればいいのか分からなくなった時期でもありました。
そんな中、毎週通っていたジュンク堂書店池袋本店でたまたま「プログラマが知るべき」という文字が目に入って、この本を読み始めました。
次のエッセイを読んで、自分がどうすればいいのかを思いつくきっかけになりました。
当時の私を助けてくれたエッセイは次のものです。
Clint Shankさんのエッセイ「学び続ける姿勢」
このエッセイでは、自分自身で学び続けるために、書籍やインターネットを利用した学習やレベルの高い人と仕事をすることなどが推奨されています。
また、技術の進化に対応できるように、常に学び続ける重要性についても書かれています。
このエッセイを読んで、当時は次のことを毎日欠かさずやっていました。
- 仕事でわからなかったライブラリのメソッドや仕組みをその日のうちにライブラリのドキュメントを読む
- ライブラリの挙動を理解するためにローカルPCでコードを動かす
このエッセイにある「普段利用しているライブラリについての知識を深める」という記述を参考にしていました。
現在、数ヶ月前から新規プロダクトでRustの検証をしています。そんな中、Rustのことをもっと知りたいと思い、Osaki.rsというコミュニティを立ち上げて、勉強会を開催しています。
この勉強を立ち上げた背景のひとつに、このエッセイにある「勉強会を自ら立ち上げる」という記述を参考にしています。
このOsaki.rsは、connpassのメンバー数が40人ほどになりました。これからもRustの勉強会を続けていきます。
Karianne Bergさんのエッセイ「コードを読む」
このエッセイでは、エンジニアが他のエンジニアや自分の過去のコードを読むことの重要性について述べられています。他のエンジニアが書いた読みやすいコードを読むことで、自身の成長につながると強調されています。
また、過去に自分が書いたコードを読み返すことで、スキルの向上を確認でき、さらなるやる気が湧くとも述べられています。
このエッセイを読んで、当時は次のことを毎日欠かさずやっていました。
- 自分が関わるプロダクトのリポジトリの全てのプルリクエストに目を通す
チームメンバーが作成したプルリクエストを読むことで、チームメンバーがどのようなコードを書いているのかを知ることができ、自分のスキルアップにつながると考えていました。
現在、Rustらしい書き方と読みやすいコードの書き方が分からない時、スター数が多いライブラリのソースコードを読んで、Rustらしい書き方を日々学んでいます。
この本から学んだこと
上記のエッセイを読んで、当時悩んでいた自分がどうすればいいのかを思いつくきっかけになりました。
ぐずぐず悩んでなにも動かないより、少しだけでもいいから知らなかったことを潰していく・挑戦していくことの大切さを学べたと思います。
キャリアやこれから何を学ぶ?と悩んだときは、今でもこの本を読み直します。 また、定期的に書店へ行って、素晴らしい書籍を探しています。
Clean Coder プロフェッショナルプログラマへの道
2024年4月にファインディへ入社して、Findy Tools の開発をしている林です。
私からは Clean Coderプロフェッショナルプログラマへの道 という本を紹介します。
私はエンジニアとして働き始めて2年目に本書を読みましたが、自身が業務の中で感じていた課題とその解決策のヒントの多くを得られました。
そして、この本の考え方が日々の業務に大きな影響を与えてくれたと考えています。
本書は、タイトルの通り「プロフェッショナルプログラマ」になるための技術的なスキルだけでなく、コミュニケーション力やエンジニアリングに対する向き合い方などのソフトスキルに焦点を当てて紹介されています。
ここでいう「プロフェッショナル」とは、「責任を取る」姿勢を持つことと定義されています。これは、エンジニアが求められた仕様を実現するためのコードを書くだけでなく、最終的にビジネスの成果を達成する責任を果たすことを意味します。
本書では、エンジニアが直面しやすい具体的な課題とその解決策が解説されています。例えば:
プロダクトにバグが生じる
- テスト駆動開発(TDD)や、効果的なテスト戦略の構築が重要。
無理な要求や納期に間に合わない場合
- 明確に「ノー」と言い、仕様を交渉することがプロの姿勢。
精度の高い見積もりができない
- PERTやプランニングポーカーなどで具体的な数値を挙げ、現実的な見積もりをする。
チームワークの問題
- プログラミングは一人で完結するものではなく、他者との円滑なコミュニケーションが不可欠。
特に印象に残ったのは、本書の第2章にある無理な要求に対して「ノー」と言うことの重要性です。
私は本書を読む前、プロフェッショナルなエンジニアとは、どんな要求にも対応する技術力を持つべきだと考えていました。
しかし、本書を読んで、「できないことは断る」ということもプロフェッショナルの責務であることに気づかされました。
さらに、「試しにやってみる」という曖昧な言葉も問題視されています。
このフレーズは、調査の時間を指しているのか、あるいは実装を試すことを意味しているのかが不明瞭で、誤解を招きかねません。
私自身、何気なく使っていた言葉なのでより明確に何が問題で何をするのかを具体的に言うようにしました。
本書の内容は一朝一夕で身につくものではありませんが、私は業務で困ったときに何度も読み返しています。
特に、最近エンジニアになった方や「プロフェッショナルとは何か?」と漠然としている方にとって、強い指針となる一冊です。ぜひ手に取ってみてください。
まとめ
いかがでしたでしょうか?
ファインディでは一緒に会社を盛り上げてくれるメンバーを募集中です。興味を持っていただいた方はこちらのページからご応募お願いします。