年末だからこれまで読んだ技術書でも紹介してみる

この記事は、Progate Path コミュニティ Advent Calendar 2023 の 25 日目の記事です。

はじめに

皆さん、こんにちは。Progate Path チームのプロダクトマネージャー、@nakedtatsuyaです。

最近学生と話す機会が多く、学生の皆さんには「どんな本を読んでいるのか」と聞かれることが多いです。そこで、これまで読んだ書籍でも紹介してみようと思います。

ビジネス書や小説など技術書以外も読むことが多いのですが、今回は技術書に絞って紹介します(積読している本は省いています)。年末に向けて、読みたい本があればぜひ読んでみてください。

記憶を頼りにできるだけ読んだ時系列になるように並べてみました。

読んだ本

Amazon のリンクを貼っておきます。改訂版が出ている可能性もあるので購入するときは注意してください。

イラスト図解式 この一冊で全部わかるWeb技術の基本

エンジニアになりたてのときに Web の概要を知るために読みました。Web の基本的な仕組みを図解で知ることができます。

深い解説はないですが、全体感や用語について知ることができるので、Web の基礎を知りたい方におすすめです。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

結構古い本なのですが、Web の基礎が詰まっているのでおすすめです。こっちはしっかり目に解説されているので、少し慣れたときに呼んでみるといいかもしれません。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

有名な名著。設計とかの難しい話ではなくて、初学者でもすぐに始められるコードの見た目を綺麗にする基本的なテクニックが書かれています。ページ数もそんなに多くないので読みやすいと思います。

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング

この本は様々な不確実性に向き合うための解説をしています。組織作りとかプロダクト・プロジェクトのマネージメントに興味がある方は読むと発見が多いと思います。

アジャイルサムライ−達人開発者への道−

いくつかアジャイルに関する本を読みましたが、個人的にはこの本が一番わかりやすかった気がします。アジャイルの基本的な考え方とそれを実現するための手法を学ぶことができます。

体系的に学ぶ 安全なWebアプリケーションの作り方

有名な名著。Web セキュリティを学ぶときは大体紹介されると思います。とりあえず読んでおくといいと思います。

SQLアンチパターン

SQL の良い設計について、アンチパターンから学ぶことができます。SQL やデータベースの設計に悩んだときに読むといいと思います。

ネットワークはなぜつながるのか

Web のレイヤーだけでは、全体像を深く理解できません。この本ではブラウザに URL を入力してから、Web サイトが表示されるまでの流れを知ることができます。

Webフロントエンド ハイパフォーマンス チューニング

そんなにチューニングするプロジェクトに関わったことはないのですが、フロントエンド視点で意識するネットワークの観点を知るために読んだ気がします。

測定してボトルネックを見つけていく、パフォーマンス改善の全体的なアプローチについて知ることができます。

テスト駆動開発

当時はテストを先に書いて開発していくイメージが全くわかなかったので読みました。名著です。

テストが設計にどう影響するのか、テストを書くことでどういうメリットがあるのかを知ることができます。

実践テスト駆動開発

テスト駆動開発はユニットテストについて書かれていることが多いのですが、この本ではユニットテストだけでなく、結合テストや E2E テストについても書かれています。

この本を読むまではユニットテストばかり意識していたので、テスト駆動開発とセットで読むといいと思います。

リファクタリング

テスト駆動開発における、レッド・グリーン・リファクタリングのリファクタリングについて書かれています。リファクタリングは自動テストがあってこそできるという前提があるので、テスト駆動開発とセットで読むといいと思います。

エクストリームプログラミング

大体どの本からも参照されている名著。(たしか)アジャイルの原典とも言われています。今では当たり前になっているペアプロやテストや CI/CD といったプラクティスがなぜ必要なのかを知ることができます。

ペアプロとかの観点で発見が多かったです。

レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス

色々な本を読んで「やるぞ!」となっても、現実は既にあるプロダクトコードを考慮しながら改善しなければなりません。この本では、レガシーコードをどうやって改善していくかについて書かれています。

当時は理解できなかったのですが、フィーチャーフラグについても書かれているので、今読むと発見が多いと思います。

Clean Architecture 達人に学ぶソフトウェアの構造と設計

アーキテクチャの話をするときに出てくる人気の名著。そして、この書籍だけでは理解できずに色んな解説記事や動画を見てみんな頑張って自分なりに理解しないといけない本です。原則的なものもあるのでそのあたりは分かりやすかったと思います。

そういえば、買ってはないのですがClean Coder プロフェッショナルプログラマへの道を社会人になって最初の頃に読んだ気がします。こっちもエンジニアとしての心構えとして良い本だったので置いておきます。

オブジェクト指向入門 第2版: 原則・コンセプト

これを読んでオブジェクト指向のなんとなく理解していた部分が整理されました。ただ現代では継承などはあまり使わない流れになってきていると思うので、原理主義的にならないように気をつけて読むといいと思います。

めちゃめちゃ重い本なので、読むときは机に置いて読むといいと思います。

オブジェクト指向における再利用のためのデザインパターン

色んな本で参照されている名著。実装のデザインパターンとしてカタログ形式でまとめられています。それぞれにデザインパターンの名前がついているので、実装の会話をするときにも利用されることがあります。ただし、解決方法に関しての記述は一部古くなっているので、実装を真似するというよりはデザインパターンが解決しようとしている「状況と問題」を理解するために読むといいと思います。

この本は GoF と呼ばれているのですが、技術書のニックネーム的なのってカッコよくていいですよね。

エリック・エヴァンスのドメイン駆動設計

ドメイン駆動設計について知りたくて読みました。新しい概念を生み出したというよりは、これまで言語化されてこなかったものを体系化したという印象です。クリーンアーキテクチャとかと組み合わせて読むといいと思います。

実践ドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計をさらに具体的にした本です。ドメイン駆動設計を実際にどうやって実現していくかについて書かれています。セットで読むといいと思います。

Docker実践ガイド

Dockerfile とか Docker Compose とかの基本的な使い方を知ることができます。コードを模写しながら読んでいくことで、ボリュームとかネットワークについても一通り触ることができたので、Docker 入門したい方にはおすすめです。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

アルゴリズムとデータ構造について理解を深めたい!と思って読みました。本の構成がAIZU ONLINE JUDGEのアルゴリズムとデータ構造入門と連動する形で作られているので、AIZU ONLINE JUDGE で問題を解きながら読むといいと思います。

分かりやすくてとても勉強になりました。会津大学に感謝です。

珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造

おすすめしてもらって読んだ本。この本では実際に現実で起きる問題を解くためのストーリーとセットで紹介されており、要件や制約からどのようなアルゴリズムやデータ構造を選択するかを知ることができます。

実践Rust入門[言語仕様から開発手法まで]

アルゴリズム系のコードを書くときは Rust を使っていたので、Rust の基本的な使い方を知るために読みました。電卓を作る実装があるのですが、Progate Path の 逆ポーランド記法で計算できる電卓の実装 のタスクを作るときに参考にさせていただきました。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

そろそろ機械学習も学んでいきたいと思って最初に読んだ本です。入門に良いと思います。

scikit-learn、Keras、TensorFlowによる実践機械学習

機械学習からディープラーニングまで体系的に学ぶことができます。模写しながら一通り読み進めることで機械学習のジャンルを知ることができました。

Google Colab で実行しながら読むといいと思います。便利。

A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは

Path の中で A/B テストの基盤を作るときに参考にさせていただいた本です。A/B テストの基本的な考え方と実践的な手法を知ることができます。

Progate Path では Launch Darkly というツールを使ってフラグを管理しています。分析基盤との紐づけやコンテンツの A/B テストなど色々考えないといけないことがあって奥が深いですね。

実践Node.js入門―基礎・開発・運用

Progate Path のタスクでは Node.js を使っているので、改めて Node.js の基本的な使い方を知るために読みました。わかりやすい解説で、現場の開発の知見も紹介されているので、Node.js を学びたい方におすすめです。

Go言語プログラミングエッセンス

Progate Path の API は Go で実装されているので、Go の基本的な使い方を知るために読みました。本当はもっとコードを書きながら身につけていきたいのですがとりあえず読んで学びました。

プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ

コードリーディングについて書かれている珍しい本です。新しいコードを学ぶのがなぜ難しいのかが認知科学の観点で解説されています。

長期記憶・短期記憶の話など、学ぶ側でも教える側でも役立ち発見があったので別途まとめたいと思います。

ユーザーの問題解決とプロダクトの成功を導く エンジニアのためのドキュメントライティング

Progate Path のタスクではドキュメントを書くことが多いので、ドキュメントを書くための基本的な考え方を知るために読みました。

ベースはテックライティングという領域でGoogle の Technical Writing 資料などでも学ぶことができます。

Progate Path のタスクでどのような工夫がされているかはわかりやすい文章を書くコツ に書かれているので、良かったらご覧ください。

システム設計の面接試験

サービスの要件に合わせたシステムの設計を学んでいく本です。

最近はエンジニアの選考課題で技術選定や設計の意図について問われることも多くなってきていると感じます。そのようなスキルを Progate Path のタスクでも学べるように、参考にしています。

最後に

以上、これまで読んだ書籍を紹介してみました。

抜け漏れがありそうですが、一通り紹介できたと思います。

技術的なノウハウは書籍以外にもブログやカンファレンス動画など様々なリソースから学ぶことができていいですよね。ぜひ色んなリソースを活用して、自分のスキルを高めていってください。

また、学びたいことが多すぎても不安になるかもしれませんが、自分のペースで少しずつ学んでいけばいいと思います。まずは年末年始で1冊読んでみてはいかがでしょうか。

アドベントカレンダーへ参加してくれた方々ありがとうございました!

毎日が早すぎてついていくのが大変でしたが、楽しかったです。

こういったコミュニティ活動を通して、プロダクトだけではなかなかサポートできない機会も作っていけたらと思っているので、来年もよろしくお願いします!

それでは、良い年末をお過ごしください!