個人的に勉強になった本やネット記事

# はじめに
個人的に学習を進めていく中で、勉強になったなと感じた本やネット記事がいくつか有りましたので、まとめてみたいと思います。

# 勉強になった本やネット記事たち
## SQL実践入門 
- 発売日：2015/4/11
- 出版社：技術評論社
- 著者：ミック

この本では、「グルグル系のクエリ」「ガツンと系のクエリ」という著者独自の表現で、SQLで欲しいレコードを一発で取得する実装方法を解説してくれています。
SQLに慣れていないプログラマは、どうしてもSQLでクエリを実装する時も手続き的なループ処理で実装してしまうという問題に触れていて、SQLでクエリを実装するときは、そうではなく集合論の観点から欲しいレコードの集合を表現し「ガツンと」一発で取得する方法を解説してくれています。
SQLは実務でも使用することは多いのですが、この辺りの知見をちゃんとインプットできる機会は以外と少ないと思うのでとても勉強になりました。

## ふつうのLinuxプログラミング 
- 発売日：2017/9/22
- 出版社：SBクリエイティブ
- 著者：青木峰郎

C言語でLinuxのシステムコールを叩いてプログラミングする方法を解説してくれています。
特に、Linuxがプロセス間の連携をどのように行なっているのかを簡単な図で解説されていて、Linuxプログラミングの詳細までは知る必要はないんだけど、入門書よりももう少し具体的な解説が欲しい場合に役立つかもしれません。
私は、仕事でLinuxを使用することはほとんどないのですが、Linuxプログラミングの雰囲気を知りたくて購入しました。

## Dockerイメージの理解を目指すチュートリアル
https://qiita.com/zembutsu/items/24558f9d0d254e33088f

他の本やネットの記事でDockerについての解説を読んでも、漠然とした説明のものが多くいまいちピンとこないのですが、この記事では、Dockerのコンテナが具体的にどういうものかというのを、詳細な図と実際の動作を交えて解説されており、Dockerの仕組みをより正確に知ることができます。
コンテナというと何か箱のようなものに入っているのか？と疑問に思っていたのですが、この記事を読んでコンテナというのが実は特別な状態でLinuxのプロセスを起動していることなのだということを理解できたのが大きな学びでした。

## Node.js の過去、現在、未来 
https://gihyo.jp/dev/serial/01/nodefest2011/0002

Node.jsはサーバーサイドでJavaScriptを使いたいのかぐらいの認識だったのですが、この記事ではNode.jsの開発動機は、サーバーサイドでJavaScriptを使いたいからではなく、大量のアクセスを簡単かつ高速に捌くことのできる環境を実現したいからだということを解説してくれています。むしろ言語としてJavaScriptが採用されたのは、その環境を実現するためのイベントループ方式とJavaScriptが相性が良かったのが理由の1つというのも知れたのは良かったです。
このような特性を知れることで、Node.jsの使い所を知ることができるので、技術選択をする場面でこういう知識はとても役に立つなと思いました。

## Go言語による並行処理
- 発売日：2018/10/26
- 出版社：オライリージャパン
- 著者：Katherine Cox-Buday

この本では、Goルーチンとチャネルの機能を駆使して並行処理を実装していくテクニックを解説してくれています。
Go言語は、このGoルーチンとチャネルのおかげで他の言語よりは多少並行処理を実装する敷居が低くなっているのも特徴の一つな気がしていますが、それでも何も参考にせずに並行処理を実装していくことは難しいです。
この本で紹介されているテクニックを勉強することで、Go言語で並行処理を実装するとっかかりは掴めるかもしれません。
私はまだ本当に簡単なパターンしか吸収できていないので、今後も適宜読み返していきたいと思っています。

## りあクト！ TypeScriptで始めるつらくないReact開発 【Ⅰ. 言語・環境編】
- 発売日：2022/9/8
- 出版社：くるみ割り書房
- 著者：大岡由佳

この本は、「BOOTH」というサイトで販売されている電子書籍？です。
フロントエンドの世界では、暗黙の了解として解説されない部分も多いように感じるのですが、このシリーズはとにかく細かいところまでほとんど全てしっかり解説してくれているのが特徴で、これからフロントエンドに関わっていく場合にとても参考になる本だと思います。
題名の通りこのシリーズはReactの解説書ですが、この言語・環境編ではJavaScript自体の解説をしてくれています。特にES2015で一気にモダンな仕様となり、現代のJavaScriptではES2015以降の書き方を意識するという話は、知らないとなかなか気づけないのでとても貴重でした。
また、プログラミングスタイルとして「関数型プログラミング」の必要性についても解説されているのがとても貴重なポイントです。これはJavaScript以外にも通じる話だと思うのですが、それも知らないとなかなか気づけないので、とても勉強になりました。

## サバイバルTypeScript 
https://typescriptbook.jp/

このサイトでもTypeScriptだけでなく、JavaScirpt自体のES2015以降の仕様について言及があり、例えば変数宣言に`var`を使うことの問題点についても解説されていてとても勉強になりました。`var`だけでなく、従来の`function`を使用した関数とアロー関数の違いについての解説や、CommonJSとES Moduleについても簡潔に解説されているのも嬉しいところです。上記の「りあクト！」とかぶっている部分もあますが、「りあクト！」の方が歴史的経緯も含めて詳しく解説されている印象です。
「サバイバルTypeScript」はもう少し簡潔ですが、それでも単純な文法＋αで知っておいた方が良いノウハウが解説されているのでとても勉強になります。

## Vue3 フロントエンド開発の教科書
- 発売日：2022/9/28
- 出版社：技術評論社
- 著者：齊藤新三

この本では全編TypeScriptとVueのCompositionAPIを使用して開発する手法を解説してくれています。
Vueの基本的なコンポーネントや`ref()`についての解説から、Piniaを使用したデータ管理など応用例まで解説されていて、これ1冊でVueの基本的なところが網羅されているのではないかと思うぐらい充実していて分かりやすいです。
Vueのビルド環境がViteになったとのことで、この本でも全編でViteでのやり方を解説されていて、Vueの最新の開発手法を学ぶにはとても良い本だと思いました。

# 今後読みたい本たち
## Go言語 100Tips ありがちなミスを把握し、実装を最適化する
- 発売日：2023/8/18
- 出版社：インプレス
- 著者：Teiva Harsanyi

Go言語は、言語仕様が比較的少なく学習コストが低いと紹介されることも多いように思いますが、個人的には結構難しい言語だと思います。というのも、他の言語と比べて独特な部分が多く、Go言語でちゃんと実装していくには、いわゆる「Go Way」を意識する必要があるからです。
この本では、Go言語でのありがちな失敗を回避するテクニックを解説してくれているとのことで、今後読んで行きたいと思っています。
また、この本の翻訳者である[柴田芳樹さんの記事](https://logmi.jp/tech/articles/329158)に、Go言語は仕様の把握をするのは簡単だが習得するのは難しい旨の記載があり、この本を読んでみたくなったというのもあります。

## インタプリタの作り方 －言語設計／開発の基本と2つの方式による実装
- 発売日：2023/9/26
- 出版社：インプレス
- 著者：Robert Nystrom

個人的には、ただ目的もなくアルゴリズムの解説をしている本みたいなのを読んでもつまらないのですが、この本のように実際に何かの仕組みを解説してくれている本にはとても興味があります。
この本ではインタプリターの仕組みを理解していく中でアルゴリズムを考えていくスキルも向上できるかもと思い、近いうちに読みたいと思っています。