エンジニア1年目で読んで良かった本

# はじめに
エンジニアに転職してちょうど1年になるので、読んで良かったと思っている本を紹介しつつ、自分の学習を振り返って、忘れている所や身についていないところ、足りないところを確認したい。

## プログラミング言語

### JavaScript

#### [JavaScriptモダンプログラミング完全ガイド　堅牢なコードを効率的に開発できる！](https://www.amazon.co.jp/gp/product/B08QVCSY1D/ref=kinw_myk_ro_title)

JavaScriptモダンプログラミング完全ガイドは他のプログラミング言語を習得している人が、JavaScriptを学ぶために書かれている。そのため、かなり解説があっさりしているところはあるものの、JavaScript特有の癖がよく説明されており、なおかつ練習問題がついている！ので、自分の理解力を確認しながらすすめることができて大変良かった。チャプターごとに難易度も開示されているため、自分の習熟度に見合った章だけを読み進めて、あとから必要になるたびに参照するのがよさそう。

#### [プロを目指す人のためのTypeScript入門　安全なコードの書き方から高度な型の使い方まで](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AETypeScript%E5%85%A5%E9%96%80-%E5%AE%89%E5%85%A8%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%8B%E3%82%89%E9%AB%98%E5%BA%A6%E3%81%AA%E5%9E%8B%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%BE%E3%81%A7-Software-Design-plus-%E9%88%B4%E6%9C%A8-ebook/dp/B09Y527YPV/ref=sr_1_3?crid=1PX6CLTU5J938&keywords=typescript&qid=1704195549&s=digital-text&sprefix=type%2Cdigital-text%2C207&sr=1-3)

TypeScriptの基礎を、JavaScriptを知らない人にもわかるように記載されている。初心者向けにかなり丁寧に（式、文とはなにかというところから）解説しており非常にわかりやすい。

### Python
#### [プロフェッショナルPython ソフトウェアデザインの原則と実践](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%ABPython-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%AE%E5%8E%9F%E5%89%87%E3%81%A8%E5%AE%9F%E8%B7%B5-impress-top-gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-ebook/dp/B09LTX6651)

Pythonのコードの書き方を、じゃんけんアプリを作りながら学んでいく。実際にアプリを創り、それを機能追加・リファクタリングしながらPythonの使い方を学ぶため、どのような書き方が好ましいのかを納得しながら身につけることができる。kindleUnlimitedで読めるのでおすすめ。

### 関数型プログラミング
#### [関数型プログラミングの基礎](https://www.amazon.co.jp/gp/product/B01MQG41Y0)

関数型プログラミングをJavaScriptで解説していくのだが、普段手続き型プログラミングにしか脳みそを利用していない私にとって非常に理解が難しかった。関数型プログラミングについてはまた再挑戦したい。。。

再挑戦する時に使おうと思っている教材を以下に自分用に貼り付けておく

https://web.sfc.keio.ac.jp/~hagino/fp23/index.html

https://www.shoeisha.co.jp/book/detail/9784798179803

全然関係ないことなんですが、上の「なっとく！関数型プログラミング」が以下の「なっとく！機械学習」とほぼ同じ表紙のため、すごくわかりにくい。。どうして？

https://www.shoeisha.co.jp/book/detail/9784798174457


## API
#### [Web API: The Good Parts](https://www.amazon.co.jp/Web-API-Parts-%E6%B0%B4%E9%87%8E-%E8%B2%B4%E6%98%8E/dp/4873116864)

よいWebAPIの設計について丁寧に説明しつつ、本自体も短いので初心者であっても非常に読みやすくわかりやすい。巻末についているAPIチェックリストは定期的に確認している。
以下読んだ際の読書メモ。

https://qiita.com/sobacha/items/c4383673257761e23b0f


## ブラウザ・Web基礎

#### [Webを支える技術 ―― HTTP，URI，HTML，そしてREST](https://www.amazon.co.jp/gp/product/B07JK7FZH2)

かなり初期の頃に読んだ、みなさんご存知のロングセラー。10年以上前に出版された本のため、最近のHTTP3などは全く解説がないものの、Web、そしてHTTPの歴史、RESTについてその起源からやさしく解説してくれている。

#### [HTML解体新書](https://www.amazon.co.jp/gp/product/B0BJ1SGBG5)
HTMLのこと何もわかってないかも、、と怯えつつ、HTMLについて書かれているWebデザイナー向けじゃない本って実は少ないのでは？と思いつつ買った本。かなり分厚く、HTMLについてその特性や使用時にアクセシビリティの点で注意すべきことなどが網羅されており、今後も辞書的に利用していきたい良書。なお、非常に脚注が多く、リンクも多いため、電子書籍で読むと注まですぐ飛べるし、その注の中のURLにもアクセスしやすいためおすすめ。

## Vue
#### [Vue 3　フロントエンド開発の教科書](https://www.amazon.co.jp/Vue-3-%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88-%E9%BD%8A%E8%97%A4%E6%96%B0%E4%B8%89-ebook/dp/B0BG3YF6ZY)
Vue3の本はかなり少ない上に、CompositionAPIを解説している日本語の本となると当時（といっても2023年の春ぐらい？）はこの本しかなかったように思う。サンプルコードも豊富でハンズオンですすめられるため、非常におすすめ。

#### [Design Patterns for Vue.js 3: A test driven approach to maintainable applications](https://lachlanmiller.gumroad.com/l/vuejs-design-patterns?layout=profile)
著者はVue.jsやCypressのコントリビュータ。Vueの設計やテストってどうしたらいいんだろうなと思っていたところに正にドンピシャなタイトルだったため、購入。あまりフロントエンドでTDDをやるイメージがなかったのだが、表示と内部の状態設計や計算のロジックを分離することでテストコードを書きやすい、かつ再利用のしやすいコードに書き方を学ぶことができた。
[日本語版](https://lachlanmiller.gumroad.com/l/MdYVT?layout=profile)もあるのだが、多分版が違って英語版の方が最新のようだったので、英語版を購入。

## Docker

#### [仕組みと使い方がわかる Docker＆Kubernetesのきほんのきほん](https://www.amazon.co.jp/gp/product/B08T961HKP)
Dockerなにもわからない！状態からでも理解できるように、絵や図も交えながら丁寧に細かく解説されている。充実したハンズオンのみならず、コマンド穴埋め問題もありちゃんと自分が理解しているか把握しつつ読める。Dockerわからない、、となったら都度この本に立ち返って読み直している。

## Linux

#### [ふつうのLinuxプログラミング 第2版　Linuxの仕組みから学べるgccプログラミングの王道](https://www.amazon.co.jp/gp/product/B075ST51Y5/ref=kinw_myk_ro_title)
全然Linuxのことを理解していないし、かつC言語も理解していない状態で読んだので、理解度が非常に低くなってしまい、再読を誓っている本。ただ、前半部分（Cのコードが出てくる前）を読んだだけでも、システムコールでLinuxがどのように働いてくれているのかをイメージできるようになった。Linuxはまだまだ知識も理解も足りていないので、もっと触りながら学んでいきたい。

## セキュリティ

#### [フロントエンド開発のためのセキュリティ入門 知らなかったでは済まされない脆弱性対策の必須知識](https://www.amazon.co.jp/gp/product/B0BQM1KMBG/ref=kinw_myk_ro_title)

#### [Webブラウザセキュリティ Webアプリケーションの安全性を支える仕組みを整理する](https://www.amazon.co.jp/Web%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%AE%89%E5%85%A8%E6%80%A7%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E4%BB%95%E7%B5%84%E3%81%BF%E3%82%92%E6%95%B4%E7%90%86%E3%81%99%E3%82%8B-%E7%B1%B3%E5%86%85%E8%B2%B4%E5%BF%97/dp/4908686106)

フロントエンドのセキュリティについて学ぼうと思って読んだ本。フロントエンド開発のためのセキュリティ入門の方にWebブラウザセキュリティが参考文献として記載されている。どちらもサンプルコードがついていてハンズオンで脆弱性を作ってしまうコードや、攻撃を防ぐための対策について学べる。2冊の本での対象としている脆弱性や攻撃はほぼ同じであるものの、それぞれ異なる目的と視点を持って書かれているために、より脆弱性の仕組みやその対策への理解を深めることができた。

## テスト

#### [フロントエンド開発のためのテスト入門 今からでも知っておきたい自動テスト戦略の必須知識](https://www.amazon.co.jp/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E5%85%A5%E9%96%80-%E4%BB%8A%E3%81%8B%E3%82%89%E3%81%A7%E3%82%82%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E6%88%A6%E7%95%A5%E3%81%AE%E5%BF%85%E9%A0%88%E7%9F%A5%E8%AD%98-%E5%90%89%E4%BA%95-%E5%81%A5%E6%96%87-ebook/dp/B0BWR5GHMP)

フロントエンドにおけるテストについて、UnitテストからUIコンポーネントテスト、E2Eテストまでその戦略とツールの使い方について書かれており、実践で有効にテストを整備していくための道筋がわかるようになっている。

#### [テスト駆動Python 第2版](https://www.amazon.co.jp/gp/product/B0B77CW8MF)

Pytestの使い方を細かい点まで解説しつつ、その上でどのようなテストを書くべきかという点についても記載されている。

#### [知識ゼロから学ぶソフトウェアテスト 第3版 アジャイル・AI時代の必携教科書](https://www.amazon.co.jp/%E7%9F%A5%E8%AD%98%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88-%E7%AC%AC3%E7%89%88-%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%83%BBAI%E6%99%82%E4%BB%A3%E3%81%AE%E5%BF%85%E6%90%BA%E6%95%99%E7%A7%91%E6%9B%B8-%E9%AB%98%E6%A9%8B-%E5%AF%BF%E4%B8%80-ebook/dp/B0CJLHXSJJ)
私が読んだのは第二版なのだが、リンク先は新しく出た第三版を。
#### [ソフトウェア品質を高める開発者テスト 改訂版 アジャイル時代の実践的・効率的でスムーズなテストのやり方](https://www.amazon.co.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%93%81%E8%B3%AA%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B%E9%96%8B%E7%99%BA%E8%80%85%E3%83%86%E3%82%B9%E3%83%88-%E6%94%B9%E8%A8%82%E7%89%88-%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E6%99%82%E4%BB%A3%E3%81%AE%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%83%BB%E5%8A%B9%E7%8E%87%E7%9A%84%E3%81%A7%E3%82%B9%E3%83%A0%E3%83%BC%E3%82%BA%E3%81%AA%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E3%82%84%E3%82%8A%E6%96%B9-%E9%AB%98%E6%A9%8B-%E5%AF%BF%E4%B8%80-ebook/dp/B09YTSXFW8)

どちらも同じ著者のため内容に重複があり、もしかしたら開発者は開発者テストだけでも十分かもしれないが、ソフトウェアテストの方にしか書かれていない著者のMicrosoftやコンサルでの経験談も非常に面白いため、両方読むのをお勧めしたい。一般的なソフトウェアテストの種類や実行方法、コツについて語りかけるような文体、かつ大きめの文字で書かれているため通勤の往復（１時間半程度）で一冊読み終わることができた。３版での変更点が知りたい。。

以下私の読書メモ

https://qiita.com/sobacha/items/18914df3972c693f7ee3


## コンピュータシステム

#### [CPUの創りかた](https://www.amazon.co.jp/CPU%E3%81%AE%E5%89%B5%E3%82%8A%E3%81%8B%E3%81%9F-%E6%B8%A1%E6%B3%A2-%E9%83%81-ebook/dp/B08639XM13)

CPUを電子回路から作れる本。私は実際に組み立てはしなかったものの、基本情報技術者試験などで学んだ論理回路が、どのようにCPUを構成しているのかを知ることができて大変満足。

## コーディング

#### [Good Code, Bad Code ～持続可能な開発のためのソフトウェアエンジニア的思考](https://www.amazon.co.jp/gp/product/B0BSW72QKZ/ref=kinw_myk_ro_title)

googleでコードの書き方をジュニアエンジニアに教えている著者による、良いコード悪いコードを比較しながらより良いコードの書き方、設計について説明してくれる本。正直難しいと感じるポイントも多かったが、エラーの処理やより疎結合なモジュールを作る方法まで、例やメリットデメリットをあげつつ、最終的な著者の判断についても記載されているため、コードを書く時にどのような意思決定を行っているのかを垣間見ることができた。何度も読み直していきたい本。
以下読書メモ

https://qiita.com/sobacha/items/2b9378db5d1c4cc41578



## （おまけ）これから読みたい本・今読んでいる本
今読んでいる本

* [A Philosophy of Software Design, 2nd Edition (English Edition)](https://www.amazon.co.jp/gp/product/B09B8LFKQL)
* [基礎からの新しいストレージ入門 基本技術から設計・運用管理の実践まで](https://www.amazon.co.jp/gp/product/B0CG9957GK)

積読になっているもの

* [ザ・ダークパターン ユーザーの心や行動をあざむくデザイン](https://www.amazon.co.jp/gp/product/B0B5X6WHDB/ref=kinw_myk_ro_title)

* [コンピュータの構成と設計　MIPS Edition　第6版 　上・下電子合本版](https://www.amazon.co.jp/gp/product/B0BLTQS81T)

* [［試して理解］Linuxのしくみ　―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】](https://www.amazon.co.jp/gp/product/B0BG8J5QJ1/ref=ppx_yo_dt_b_d_asin_title_351_o04?ie=UTF8&psc=1)