よんログ

初学者にオススメするソフトウェアエンジニアリングの技術書 8選

ITエンジニアのための業務知識がわかる本

会社法から企業会計原則などのあらゆる業務の根幹をなす法律知識から始まり、マーケティング, 生産管理, 在庫管理 (SCM), 販売管理などの業務知識を、実際のシステム設計や画面を交えて解説している。 専門用語も多数解説しているため、ドメインエキスパートと同じ言語で会話する上でも役に立つ。

BtoB領域の開発に従事していると分かるが、このような業務知識や業務システムのノウハウは大変貴重である。 BtoBソフトウェアベンダーが探りを入れるために競合他社のBtoBソフトウェアサービスを申し込むことも多々ある。 (大抵は出禁になる)

キタミ式イラストIT塾 応用情報技術者

なにかと馬鹿にされがちな応用情報技術者 (AP) 資格だが、ソフトウェアエンジニアとしてやっていく上での必要な知識を浅く広く学ぶには最適な試験内容である。 その試験内容はコンピュータアーキテクチャの基礎からデータベース, ネットワーク, プロジェクト管理経営学など、非常に幅広い。

キタミ式イラストIT塾は分かりやすい一方、試験内容のカバレッジが若干狭いため、他の参考書と併読することがオススメ。

「徹底攻略」シリーズは、物理本を買うと電子版 (PDF) も貰える。 「電子書籍で持ち運び、物理本で見直す」という勉強方法ができるため、資格試験の受験を考えている人に特にオススメ。

キタミ式イラストIT塾では深く触れられていない、演算器, レジスタ, メモリキャッシュの仕組みに加え、Out-of-Order実行, 分岐予測, スーパースカラパイプラインなど低レイヤーの最適化技術を学ぶのに以下の本もオススメ。

実践ドメイン駆動設計

ドメイン駆動設計の話を中心にバックエンドエンジニアリングを網羅的に解説している。 異なるステークホルダーが対話をするための共通言語 (ユビキタス言語) の定義から始まり、基本的なアーキテクチャから集約, エンティティ, 値オブジェクトなどの実装パターン, ES, CQRSなどのアーキテクチャにも触れつつ、マイクロサービス, データ一貫性など幅広いバックエンドエンジニアリングの諸問題に触れている。

本著で登場する「境界づけられたコンテキスト」の実装例として、以下のGitHubレポジトリをコードリーディングすることもオススメ。 ただし、実装例のJavaのバージョンがかなり古い。

本著の内容は非常に網羅的である反面、初学者 (特にバックエンド未経験者) には重いかもしれない。 よりライトに読めるDDD本の選択肢として @little_hand_s さんの著書も紹介しておく。

Zalando RESTful APIとイベントスキーマのガイドライン

Zalando社におけるRESTful APIの設計ガイドライン。 リソース指向アーキテクチャ (resource-oriented architecture, ROA) でRESTful APIを設計するためのガイドラインがまとまっている。 無料で読める。

Cassandra The Definitive Guide

とある企業の基盤チームに配属されていた頃のバイブル。 分散システムの基本から始まり、Cassandraのアーキテクチャについて詳しく解説していく。

Cassandraはレプリケーション・ファクターやQuorumなどの設定により、データ一貫性のレベルを変更でき、BrewerのCAP定理におけるCPとAPの間でその特性をコントロールできる。 つまり、Cassandraのアーキテクチャを学ぶことは、分散データベースそのものを学ぶことに近い。 日本語版はないが、分散システムを学びたい方へオススメである。

加えて、分散システムを学ぶ上で一読すべき記事やフォローすべきブログを紹介しておく。

自分はまだ読書途中だが、以下の本の第2部でも分散システムに触れているようだ。 ただ、この本の内容は初学者には重すぎるかもしれない。

The Twelve-Factor App

保守性に優れるソフトウェアサービスを設計するための方法論がまとまっている。 無料で読める。

AWS認定アソシエイト3資格対策

AWS中級資格の試験対策本で、AWSサービスの基本的な使い方がまとまっている。 IAMなどのゼロトラスト的な考え方、VPCなどの仮想ネットワーク, セキュリティグループやACLなどの多層防御など、AWSサービスの概要から学ぶべきクラウド設計のノウハウは多くある。

特にAWS Well-Architectedフレームワークの5本の柱には、クラウドネイティブ設計の重要な考え方がまとめられているので是非一読してほしい。

Pythonで理解する統計解析の基礎

統計解析の基礎をPythonで動かしながら学べる。 あらゆる箇所で数学的な証明を欠いているのは難点だが、Google先生と併用しながら読み進めることができた。

教育系YouTuberのヨビノリ先生の解説動画も是非見てほしい。 前述の著書に欠けている数学的証明や各統計量の気持ちなどを丁寧に解説している。