Yuki Watanabe's Blog

Yuki Watanabe's Blog

エンジニアリングと子育てについて

『スタッフエンジニア』を読んだ

『スタッフエンジニア マネジメントを超えるリーダーシップ』を読んだので感想を書く。

読み初めの動機

本書を読み始めた動機は、スタッフエンジニアと呼ばれる上級エンジニアの思考や習慣を知り、自分の仕事に活かしたいと考えたからだ。今までのキャリアを振り返ると、テックリードやシニアエンジニアといったエンジニアには出会ったことがあるものの、より上級のエンジニアとなるとそうそうない。書籍からそうした人々の思想に触れられるのは貴重だと感じた。

ハイライトと感想

スタッフエンジニアへのインタビューが豊富に掲載されているのが良かった。具体性に富んでおり、仕事の向き合い方に活かせる点が多かった。

ハイライトはこちら。

  1. スタッフエンジニアにおけるタイプにはテックリード、アーキテクト、ソルバー、右腕の4タイプがある
  2. リーダーシップとは現状と理想のギャップを把握し、その解決に取り組める資質のことである
  3. スタッフエンジニアは技術力に加え、ソフトスキルの重要度が上がる

まず、今後のキャリアとして、テックリードやアーキテクトに面白みを感じた。プロダクト開発が好きでエンジニアに転身してきて、3年経った現在も楽しさが日々増している。なので、今後もプロダクト開発に近いところでやっていきたいと思う。

次に、リーダーシップについてだが、意外と現状でも発揮できているシーンはいくつか想起できた。返りなどのスクラムイベントにおいて、現状の課題を共有し打ち手を提案するような場面などである。

このリーダーシップをより強く発揮するには何ができるかを現在の業務に落とし込んで考察した。

  • 現状を知る: 監視や分析系のツールへの習熟度を上げて、現状をより定量的に理解できるようにする
  • 理想を知る: 社内外からのインプットを増やす。特に書籍を通じてアーキテクチャデザインパターンを学ぶことに重きを置く。
  • 現状と理想を埋めるための行動: 振り返りなど、課題感を共有する場を大切にし、日々感じる技術・組織課題を(できれば解決策も込み)で共有する

最後に、ソフトスキルについては、自分がエンジニアになり一番強化してきたスキルかもしれない。というのも、自分はハードスキル、つまり個別具体の技術スキル1本で戦うのには向いていないと認識している。技術自体は好きではあるが、その技術を寝食も忘れるくらい大好きな人には、時間やモチベーションでは勝てっこない。しかし、ソフトスキルではどの組織でも重要なことではあるものの、エンジニアでソフトスキルをを意識的に学んでいる人は少なく、意外とブルーオーシャンに感じているからだ。

書籍の改善して欲しい点

非常に良い内容ではあったのだが、難点としてはKindle版において、本文中の注釈へのリンクがついておらず注釈の確認が大変だった。 この点が改善されると、読みやすさが大幅に上がると思う。

最後に

『スタッフエンジニア』は自身のエンジニア経験によって刺さるポイントは異なるだろうから、読んだ人と意見交換をしてみたい。

今はソフトスキルの強化のためにコンサルタント向けの書籍を読んでいる。こちらも良い内容なので読み終えたら感想を書きたいと思っている。

『System Design Interview』を読んだ

『System Design Interview – An insider's guide』(以下、System Design Interview)を読んだ。この書籍は転職面接の対策本*1ではあるものの、システム設計の学習用途として非常に有用だったので、感想を書く。

なお、最近日本語訳版が発売されたが、今回は原著の感想となる。

読み初めの動機

本書を読み始めた動機は、さまざまなシステムの設計を学びたいと考えたからだ。

目次を見るとわかるが、Chapter4~Chapter16はすべてシステムデザインに関して記載されている。YouTubeGoogle Driveなど面白そうなテーマが扱われており興味を持った。

Chapter 1: Scale From Zero To Millions Of Users
Chapter 2: Back-of-the-envelope Estimation
Chapter 3: A Framework For System Design Interviews
Chapter 4: Design A Rate Limiter
Chapter 5: Design Consistent Hashing
Chapter 6: Design A Key-value Store
Chapter 7: Design A Unique Id Generator In Distributed Systems
Chapter 8: Design A Url Shortener
Chapter 9: Design A Web Crawler
Chapter 10: Design A Notification System
Chapter 11: Design A News Feed System
Chapter 12: Design A Chat System
Chapter 13: Design A Search Autocomplete System
Chapter 14: Design Youtube
Chapter 15: Design Google Drive
Chapter 16: The Learning Continues

感想

やはり良かった点は、様々なシステムの設計を知れること。 興味のあるChapterから読み進めたが、どのChapterも面白く結局全て読み通した。

例えば、Chapter 12ではチャットシステムを実現するために次の機構が紹介されていたが、Long Pollingは初めて知る用語であり、知識の幅を増やすことができた。

  • Polling
  • Long Polling
  • Web Socket

構成として、はじめはシンプルな設計を紹介し概要を示してから、Deep Diveと称して可用性やスケーラビリティ、エラーハンドリングなどを考慮して設計を磨いていくスタイルとなっている。図が豊富に使われていて都度理解しながら読むことが出来た。

次に、英語が非常に平易であり読みやすい。構文解釈に時間が取られず読み進められたため、英語ではあるが時間あたりの学習効率は日本語とさほど変わらなかった。

今後

『System Design Interview』はとにかく面白い本だった。続編となるVolume2も読みたいとは思っているが、電子版が無いのが難点であり、まだ手が出せていない。

同内容のウェブコンテンツである、ByteByteGoの方も面白そうではある。 FinTech領域に身をおいているため、Payment SystemやDigital Walletの設計はあまりにも興味深い。 bytebytego.com

*1:現状転職をする予定は全くない

苦手だった英語のリスニングを克服した

先日2年ぶりに受けたTOEICの結果が出た。

リスニングのスコアが前回より140点ほど上昇し、365/495点となった。 もちろん自慢できる点数ではないが、これまで英語のリスニングが大の苦手だったことを考えると、大きな成長を感じる。

せっかくなので、どういった過程を経たのかを記事にしてみようと思う。

これまでの英語リスニングスコア

大学受験をしたのはもう14年前。当時はリスニングがセンター試験と国立の二次試験で課されるくらいで非常にウェイトが少なかったため、学習時間をほとんど投下しなかった。 結果、センター試験のリスニングが26/50だったのを記憶している。

大学2年目と社会人8年目でTOEICを受けたが、リスニングのスコアはそれぞれ275/495, 225/495だった。 試験では音声をまったく聞き取れず、ほぼ勘でマークをするしかなかった。

自分は英語のリスニングができないのではなく、根本的に耳が悪いのではないかとすら思っていた。

2022/10~11: 転機 "英語喉"との出会い

英語は喉で発音するとクリアに発音できる、発音できると聞き取れるようになるという"英語喉"というメソッドを、Twitterでたまたま見かけた。

英語喉を提唱されている"KAZ先生"の動画を見ると妙に納得感を得て、もしかしたらリスニングを克服できるかもしれないと感じた。

さっそく著書を2冊読み、喉を使った発音やシラブル(音節)について学んだ。 特にシラブルを知れたことは大きく、英語の音の繋がりやリズムに理論があることに驚いた。

書籍を読んですぐにリスニング力が上がったという感覚はなかったけど、今後のインプットを通じてリスニング力を鍛えられたのは、英語喉のメソッドを知れたからこそだった。

2022/12~: 音読、オーバーラッピング、シャドーウィング

次は英語喉を実践するため、ひたすらオーバーラッピングやシャドーウィング、音読をした。 昔からフレーズで覚えるタイプの英単語帳*1が好きだったので、教材は『ALL IN ONE TOEIC テスト 音速チャージ!』を選んだ。

はじめは音声のみを数回聞き、その後テキストを読んで、さらにシャドーイングを繰り返すといったサイクルを、すべての251英文で実践した。 ここでのシャドーイングは、できるだけ英語喉のメソッドに倣うように意識した。

単語帳を進めるにつれて徐々に聞き取れるようになり、リスニング力が少しずつ上っている感覚を持った。

ちなみに、オーバーラッピングやシャドーウィング、音読という学習法は、英語学習について体系的に知りたいと思い手にとった『英語上達完全マップ』でも推奨されていたので、納得感を持って進めることができた。

2023/01~: 英会話

英語学習の目的は、英語を話せるようになることなので、オンライン英会話に入会した。

nativecamp.net

英会話自体がリスニングにどれほど貢献したかはわからないが、講師の先生から発音に対してネガティヴなフィードバックをもらうことは少なく、自分のやり方の方向性が悪くはないことを認識できた。

2023/02: TOEIC

せっかくリスニング力が上がってきたので、実力測定のためにTOEICを受けることにした。

事前に解き方のコツを掴もうと考え、試験1ヶ月前に『TOEIC(R) L&Rテスト 直前の技術(以下、直前の技術)』を購入し、3回解いた。

しかし、リスニングのPart3, Part4はやはり難しく、問題文に気を取られて音声に集中できず、リズムを崩してパニックに陥るということが多々あった。 YouTubeでリスニングの問題の解き方やマインドを学び自分に合った方法を確立して、試験本番でもできるだけ冷静に回答できるように心がけ、以下の方法を採った。

  • 問題の先読みは、基本設問だけで解答は読まない
  • リスニングでは、聞くことのみに集中する
  • 解答は、リスニング後に行う

www.youtube.com

試験1週間前に公式問題集を購入した。時間がないため問題は解かずに、リスニングのPart3, Part4の音源でオーバーラッピング、シャドーウィングを繰り返した。 限られた時間で、各国の話者の声に効率よく慣れることができたように思う。

試験当日は、緊張もあり、練習通りには全然聞き取れなかった。 しかし、できるだけ自分のペースを崩さずに、冷静に対処するようにした。 解き方をある程度確立できていたことが大きかったように思う。

そして、冒頭にも書いたとおり、TOEICの結果が発表され、リスニングのスコアが365/495点まで上昇していた。 いつのまにかリスニングへの苦手意識が払拭でき、そこそこ聞き取れるようになってきたのが嬉しい。

2023/03: 今後

今後はテスト対策などを目的とせず、生の英語に触れていきたい。 YouTubeの「ByteByte Go」というチャンネルは、システムデザインに関する動画がメインで非常に面白く、かつスピーカーの方の声も聞き取りやすいため、当分はこのチャンネルを見ていきたいと思っている。

www.youtube.com

*1:DUO3.0

『[改訂新版]プログラマのための文字コード技術入門』を読んだ

『[改訂新版]プログラマのための文字コード技術入門』を読んだので、感想を書く。

結論としては、文字コードにまつわる話題が1冊にまとまっており、仕事でプログラムを書く人にとっては1度読んでおくと長期的に役立つことが多い書籍だと感じた。

読み初めの動機

テキスト処理をする際に、文字コードについてハマることが度々あり、その都度調べるもののすぐ忘れてしまうため、一度体系的に学ぼうと考えた。

感想

文字コードに関連する話題がわかりやすくまとまっていてよかった。リファレンス的に今後も読み直すことだろう。

本書を読むことで下記について理解できた。

いつものことながら、基本用語をMarkdownでまとめた。

github.com

今後

今回の文字コードのように、都度調べては忘れてしまうことは一度体系的に学ぶと知識の定着率が高くなる。こうしたトピックがあれば今後も短期集中で学んでいきたい。

『[試して理解]Linuxのしくみ』を読んだ

『[試して理解]Linuxのしくみ』を読んだ。

過去に第1版を読んだことがあり、Linux OSの知識が業務で役立つ機会に何度も遭遇したため、第2版も楽しみつつ読めた。

これまで

低レイヤーの技術は定期的に学習し、これまでにいくつか書籍を読んだことがあるため、メモリやCPU、プロセス、スレッドについてはなんとなくわかる状態だった。

  • プログラムはなぜ動くのか
  • なるほどUnixプロセス
  • Goならわかるシステムプログラミング
  • ふつうのLinuxプログラミング

感想

第2版も自分にとって役立つ内容が多かった。 カラフルなイラストが豊富で読み進めやすく、サンプルコードを動かしながらハンズオンで理解できる点が自分に合っている。

低レイヤーの用語は忘れてしまいやすいため整理しながら読んだ。今までGistで管理していたけど、ファイル数が増えGitHubに1リポジトリにまとめたほうが管理しやすくなってきたため、GitHubに移行した。

github.com

ここからは、本書の特に良かった点について書く。

バックエンドエンジニアにとって活かせる点が多い

私は主にバックエンドエンジニアとしてアプリケーション開発やインフラ監視に携わっている。 普段の業務で毎日OSのしくみを意識しているかといえばそんなことはないが、とはいえOSのしくみの理解が必要な業務もそこそこにある。

  • SLIを満たせるか検証するために負荷試験をする
  • サービスのパフォーマンスの低下原因をDATADOGから読み取る
  • サービスへの膨大なリクエストを効率的にさばけるようにする

これらの業務をこなすために、都度OSの勉強をするのはあまりにも時間がかかってしまうので、1つの書籍で体系的に学べるのは本当にありがたい。

書籍に収まらない内容でも、著者の記事が紹介されているため書籍の延長として知識を拡充できるのも良かった。

手を動かしながらOSの挙動を理解できる

サンプルコードが公開されているため、Cloneして手元で動かせるのは親切で、字面だけだとわかったようなわからないような曖昧になりがちな点を手を動かしながら理解できる。

github.com

使用されている言語は第1版はC言語であり、第2版からPythonやGoがメインとなった。Go使いの自分にとってはありがたい限り。

書籍で紹介されていた、各種コマンドは普段はあまり使わないものもあけど、しかるべき時にサクッと使えるよう慣れておきたいと思っている。

  • ps←これはよく使う
  • time
  • free
  • sar
  • top

(参考)Ubuntuの動作環境

実験プログラムは、物理マシン上にインストールしたUbuntu20.04/x86_64上で動かすことを想定しています。

と本書にある通りUbuntuの環境を想定している。

私はM1 Macを利用しているため、仮想環境を利用してUbuntuの環境を用意した。初めはVirtual Boxを使ってみたがうまく動かせなくて他のツールを探したら、UTMというツールを知った。

UTMはとても使いやすい。 UTMでUbuntu環境を起動し、MacからSSHで接続をして、本書のサンプルコードを動かした。

しかし、Pythonとライブラリを使ってグラフを描画するサンプルコードに限っては、自分の環境ではうまく動かせなかった。デバッグに時間がかかりそうだったため書籍に掲載されているグラフを読んで理解するにとどめ、グラスを作成することは諦めて先へ進めることにした。

UTMのセットアップで参考にした記事はこちら。

oopsoop.com

今後

今後も低レイヤーの技術の学習は定期的にやっていきたい。 興味のある分野としては、システムのパフォーマンス改善や並行処理に関するテーマであり、それぞれ気になっている書籍があるので、また時間を見つけて読んでいく。

他にも、ハンズオン系の学習が好きなのでミドルウェアの自作に興味がある。

エンジニア3年目 2022年振り返り

エンジニア3年目の振り返りをする。

昨年までは、プライベートでの技術的な取り組みをテーマにしていたけど、今年から振り返りの内容を広げてみる。

過去の振り返り

仕事

1-6月: 前職

前職では、Ruby, Rails, Vue.jsによる開発をメインとにしつつ、以下の機能開発などをやらせてもらった。

  • Auth0による認証機能
  • WebSocketによるチャット機能

特定の言語やフレームワークによらないWebに関する技術の知見を深める良い機会となった。 初めて深夜作業をしたのだけど、エンジニアっぽい経験ができて楽しかった。

7-12月: 現職

現職では、GCPKubernetesクラスタ上の会計マイクロサービスをGoで開発している。 はじめて自社開発企業で働いているため、立ち回り方がよく分からなかったが、とにかく主体的に、どんなボールでも拾うことを意識している。

現職では半期ごとにチームメンバーからレビューを貰える制度があり、「キャッチアップが早い」「積極的に改善提案をしてくれて助かる」といった肯定的なコメントを多数もらえて、順調に馴染めてきてきたことがわかった。

機能開発以外にはいくつか開発フローに関する課題感を共有し、実行までやりきってチームに一定貢献できた。

  • 会計ドメインの知見共有
  • 開発フローの策定
  • タスクのレビューフローの改善
  • ログ・監視基盤の改善
  • 振り返りの改善

個人学習、転職活動

1~3月: 転職活動

前職で2年が経ち、新しいことをやりたくなったため転職活動をした。

必須条件として「Goを使えること」「FinTech領域であること」を掲げ、自社開発企業に絞り選考を受けることに。

結果6社ほど内定をいただき、メルカリへの入社を決めた。

当時はエンジニアの経験としては2年程度だったため転職活動は難航することが想定されたが、スムーズに進んでよかった。

転職活動の振り返りはこちら。

yuki0920.hatenablog.jp

4~5月: コンピューターと向き合う

定期的にコンピューターサイエンスの知識増強をしている。 今回はゴールデンウィークを使って、名著との呼び声高い『コンピュータシステムの理論と実装』を読んだ。

コンパイラやバーチャルマシン、アセンブラをハンズオンで作る過程で、プログラミングがコンパイルされ、機械語へ変換されてCPUやメモリがどのように動くのか手触り感を持って理解できたのはよかった。

2ヶ月間集中し100時間以上かかったけど、大量の時間を投下するに相応しい価値のある書籍だったと思う。

読んだ感想はこちら。

zenn.dev

6月: 新しい技術のキャッチアップ

新しい会社で使う技術は、次のような未経験の技術ばかりだったので、入社前に基本を抑えておくことにした。

  • Go
  • GCP
  • Kuberentes
  • React
  • GraphQL

公式ドキュメントや技術書、Udemyを利用してざっと基本を学んだくらいではあるけど、結果的には入社後にとても役立った。

なお、ReactやGraphQLはまだ業務で使えていない。

7~9月: 入社 & キャッチアップ

7月に入社し3ヶ月かけて、事業面、技術面のキャッチアップに注力した。 入社してすぐは、膨大な情報があることに驚いた。リリースから10年が経っている大規模サービスとなると、こんなにも情報に溢れているのかと。

ドキュメントとソースコードを読む、知ったことをドキュメントにまとめる、のサイクルを高速で回し続けていたらいつの間にかキャッチアップが完了した。 今までの経験で、スタートアップのような少人数のエンジニア組織でバリューを出せる自負はあったけど、大規模組織でもバリューを出せることがわかって大きな自信となった。

エンジニアとしてのオンボーディングについて意識していることを詳しく書いた。

yuki0920.hatenablog.jp

10月: ソフトウェアアーキテクチャ

この頃から今後のキャリアとしてテックリードを目指したいと考えるようになり、アーキテクチャ設計に関する知見を深めたいと考えるように。 マイクロサービスを含めたさまざまなアーキテクチャについて学習するために、『ソフトウェアアーキテクチャの基礎』を読んだ。

yuki0920.hatenablog.jp

12月: 英語

10月より週に1度英語のミーティングが開催されることとなった。

この日から自分の英語へのモチベーションは急激に上がり、少しずつ英語の学習量を増やしてきた。 そして将来的には、英語で技術的なディスカッションができるようになりたいと思っている。

現在はリーディングとリスニングに注力しており、英単語帳を使って学習をしているところ。

私生活

子供が0歳から1歳になり、日々の成長を見守るのがとても楽しい。

今年だけでも、いろいろなことが出来るようになった。

いつかは子離れしなければならない時が来るので、今はできるだけ多くの時間を子供と一緒に過ごすようにしている。

また、9月にスプラトゥーンが発売されて、めちゃくちゃはまり、1ヶ月100時間くらいプレイしていた。とても面白いのだけど、ある程度のレベル(ウデマエS+)まで上がると急に勝てなくなり、ここ最近は幸いゲームへの熱が落ち着いてきた。

まとめ

2022年を振り返った。

例年通り興味のある領域が数ヶ月単位で遷移しているけど、これが自分のスタイルなのだなと思う。 来年も興味駆動でいろいろなことに挑戦していきたい。

2022年買ってよかったもの

2022年も例年通りデスク周りの環境を改善し、理想の環境に近づいた。

デスク・仕事用

オカムラ バロンチェア

ニトリの5000円ほどのチェアを3年ほど使っていて、かなりヘタってきたので買い替えを検討していた。 予算を10万円に据えてWORKAHOLICに行ったら、20万円近くするバロンチェアに魅了され、もはやバロンチェア以外考えられなくなった。さすがに20万円は払えなかったため、オフィスバスターズで中古品を購入。

あたりが特に気に入っている。1日10時間以上椅子に座っても疲れないので、本当に良かった。

Logitech MX ERGO

これまでApple Magicpadを使っていた。

操作性には何の不満もなかったものの、充電が頻繁に切れるのがストレスフルで、充電の持ちがよいポインタデバイスが欲しくなった。

エンジニア界隈で使っている方が多いMX ERGOを買ってみたら、めちゃくちゃよい。

腕を動かす必要がないため、かなりスムーズにポインタの移動をすることができる。 多数のボタンがあるため、Magic Trackpadの操作性も兼ねられているのもポイントが高い。

  • ブラウザの次へ/戻る
  • タブの右/左の切り替え
  • Mission Control

Apple iPad mini

iPad miniによって気軽に学習できるようになり、学習時間が増えた。 ソファに座りながら、技術書を読んだり英語学習アプリをやったりなど、1日1時間以上使っている。

実は5月頃に学習用途でFire HD 10を購入したけど、

  • 指紋認証、Face IDが使えず、1Passwordの認証が非常に手間
  • 物理的に重い

との理由で全然使わなくなってしまった。

iPad miniはこれらの課題を一気に解決した最高のプロダクトであり、常用している。

Jabra スピーカーフォン

スピーカーフォンは昨年Ankerのものを購入したけど、マイクの音質がかなり悪く使い物にならなかった。

Jabraというメーカーは定評があるらしく、値は張るものの購入してみた。 マイク音質が劇的に良くなり、長時間ミーティングを快適に過ごせるようになり満足度が高い。

Bose PC スピーカー

Netflixを見るようになり、迫力あるサウンドが欲しくなった。 やはりBoseなだけあって音質が良い。

Shokz OpenRun 骨伝導イヤホン

かねてより骨伝導イヤフォンに興味があったけど、やっぱり良かった。 イヤフォンを耳にかけても生活音が耳に入ってくるため、リビングにいながら英語などの音声を聞きたいときに重宝している。 主に英語学習用。

Apple AirPods 第3世代

AirPods第1世代からの買い替え。

カナル型イヤフォンは苦手なため、Proではなく無印版を購入。 空間オーディオ機能により立体的な音を感じられたり、オーディオの制御がしやすくなっって、使いやすさが向上した。

Nintendo Switch 有機ELモデル

我が家は元々Switchを1台所有していた。 しかし9月にスプラトゥーンが発売されてからは、妻とSwitchの争奪戦が繰り広げられるようになったため、自室へ追加で1台購入。 あまりゲームはしないけれども、やりたいときに出来るのはやっぱり良い。

私生活用

Panasonic 49インチ 4K TV

10年以上使っていたリビングのテレビを買い替えた。

リビングに設置する都合上、視野角が広めで、かつ音質がそこそこ良いものを購入。 コロナ渦で外出頻度が減り妻とテレビをみて過ごす時間が増え、テレビは夫婦の貴重な娯楽の1つとなっているので、満足度を上げられてよかった。

Panasonic ブルーレイレコーダー

我が家はテレビをリアルタイムというよりは、録画でまとめてみることが多い。

全自動で全チャンネルを録画してくれる全録機能のあるレコーダーを購入し、快適なテレビ環境が整った。

炭酸水

お酒を飲むことが多くなっていたのだけど、翌日の寝起きが悪くてどうにかしたいと思っていた。 お酒の代わりに炭酸水を飲むことにしたら、晩酌の頻度が減って体調も良好に。

僕が欲しかったのは、お酒と言うよりシュワシュワだったのかもしれない。

500mのペットボトル1本50円くらいなので、気軽に飲めるのも良い。仕事の気分転換にもなる。

今のデスク環境

こんな感じ。