新卒エンジニアが一年で読んだ技術書

年末ということで、私が一年で読んだ技術書を棚卸ししていく。一応ジャンルとしては3パターンに分けられると思ってて、

  1. 現場で使う技術
  2. 汎用的な技術や設計関連
  3. その他読み物とか色々

の構成で紹介していく。アフィリンクとかは貼らないから安心して欲しい。テキトーに本の書影だけ貼っておくので気になったら適宜探してほしい。

1. 現場で使う技術

私は学生時代、2年間開発のアルバイトをしていて、Web開発とかプログラミングのイロハ的な部分は全てそこで学んだ。主な技術要素としてはRuby,Rails,MySQLを使って開発をしていたので、これらについては実用レベルで使えると自負していた。しかし、配属先で使われていた技術は私が今まで使っていた技術といずれも被らなかった。具体的にはTypeScript,React,Next.js, NestJS, MongoDB。フレームワークからライブラリ、言語まで全てが未知の世界だった。早急にこれらの技術にキャッチアップする必要があった私は、同期で有志を募ってTS ,Reactの勉強会を始めることにした。そこで読んだ本をここで紹介する。

オライリー プログラミングTypeScript

言わずと知れたオライリーのTypeScript本だ。私はそれまで静的型付け言語に触れたことがなかったわけではないが、本格的に実務レベルで使用したことがなかった。そのため、とりあえずは信用できるオライリーのTypeScript本で言語仕様についての理解を深めることにした。基本的な型の紹介、合併型や共用体型、ジェネリクス、構造的型付けといった、静的型付け言語共通の知識やTS固有の機能について理解を深めることができた。仕事でTSを使うとなったらまず最初にお勧めしたい本だ。とはいえ、こんな分厚い本を一人で読むと挫折するだろうから勉強会とかで誰かと一緒に進めると良いだろう。

オライリー Reactハンズオンラーニング

これもオライリーの本。現在進行形で勉強会で使用しており、まだ読み終わってはいない。お勧めできるかと言われたら...うーん。微妙なところかもしれない。Reactを全く知らない初心者が読むならためになりそうだが、ある程度経験してる人が読んでもあまり新しい発見はないかもしれない。ぶっちゃけ、私はこの本の勉強会が始まる前に、実務でフロントエンドのタスクを振られて自分で検索しながら必死に食らいついていく過程でReactを理解できるようになった。なので、この本の恩恵をあまり感じられていないというのが正直なところだ。経験者なら公式のAPIリファレンスとかを読んだ方がためになりそうな気がする。 また、本のタイトルにハンズオンラーニングとあるが、特にハンズオン感はない。

オライリー ハンズオンNode.js

またもやオライリー、どんだけ好きだ。
これは勉強会で使用したわけではなく、自分で夜な夜な進めていた本だ。実務でNode.jsを書いていく中で、非同期処理やイベントといったNode.jsの基本的な概念についての理解が不足していると感じた。この本はそれを補ってくれるのに十分だった。Promiseとは、async/awaitとは、イベントループとは、streamとは。今までRubyを書いていて出会ったことのない新しい概念を学ぶことができた。これを読んでから「asyncとかよくわかんないけどとりあえずawait付けとけばいいっしょ!」のノリでコードを書くことはなくなった。特に2章、3章は定期的に読み直したい。仕事でNode.jsを使うことになったらまずお勧めしたい一冊だ。結構難易度は高い。 ちなみにこれを読むまで自分はPromiseで遅延実行を行ってるとか思ってた。

TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発

Next.jsについての知識をもっと付けたいなと思って読み始めた。最初の章のNext.jsのレンダリング方式の違いやReactのフックスについての説明はかなり勉強になった。後半にはハンズオンパートがあるが、コードに解説があるわけでもなく、書く量も膨大で写経を諦めてしまった。最初の章だけも自分にとっては読む価値があったので、後半のパートは読んでいない。フロントエンドのコンポーネント設計についても触れている箇所があったがちゃんと読めていない。

2. 汎用的な技術や設計関連

先ほど自分で有志を募って勉強会を開いたと言ったが、それとは別で同じオフィスの同期と行っている勉強会がある。他は知らないが、かなり勉強会が盛んな会社だと思う(お金も出るし)。こちらの勉強会は、使う技術が同じとは限らない様々な部署の同期と行っているため、全員が共通して活かせるように固有の技術は扱わないようになっている。「汎用的な技術や設計関連」とふわふわした書き方をしているのはそのためだ。

プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則

新卒が読む本では割と定番?かなと思う。関心の分離とかDRY原則とか、三大美徳とかボーイスカウト原則とか、TDDとかDDDとか、あるいはUNIX哲学とか。プログラミングの現場でよく聞く格言とか思想が101個、解説付きで載っている。勉強会はそれぞれの原則を読んで、それについてディスカッションするという方式で進めていた。この本の魅力は、何と言っても網羅性の高さにあると思う。コードレビューで指摘される事柄については大体これらのどれかに帰着できるだろう。さらに言うと、ソフトウェア開発における名著から引っ張ってきている原則も多いし出典も明記されているので、気になったものについては出典元を読んでさらに知識を深めることができる。まさにガイドブックのような位置付けだと思う。勉強会でも最初にこの本を読んだことで、次に読む本についての方針を決めることができた。とりあえず技術的なサムシングを読まないといけないけど何から読めばいいか分からない!な新卒エンジニアが最初に読む本として強くお勧めできる。

現場で役立つシステム設計の原則

値とデータをバラバラに管理しちゃダメだよ、適切に値オブジェクトを作るんだよ、ドメインオブジェクトを作ってドメイン固有の知識を閉じ込めるだよ!と言う感じの本。基本的にオブジェクト指向における綺麗な設計の仕方について話している。
ちなみに、私自身にもあまり知識がないのでうまく要約できる自信がないので濁している。立ち位置としては、本格的なDDD本を読む前にオブジェクト思考の基礎〜DDDの基礎までの橋渡しをしている本というイメージ。

良いコード/悪いコードで学ぶ設計入門

上の本は基本設計にも踏み込んだ内容だったが、この本は詳細設計寄りで、具体的なコードを挙げてオブジェクト思考における良い設計のパターン、悪い設計のパターンを紹介してくれている。基本設計とかやらない新卒にはまずこっちの本の方が良いかもしれない。変数の名前とかコメントの書き方の良し悪し、複雑なコードを読みやすくするパターンなど、読んでそのまま使えるような実践的な内容が多い。まあ理解が不十分なパターンを手当たり次第導入しても地獄のようなコードになるので十分に理解することは必要だが。
これもかなり新卒にお勧めできる。

ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本

これは先述の勉強会とは別、部署の先輩方が始めた勉強会で題材になっていた本だ。私の配属先のプロダクトではDDDが導入されており、DDDなど遊戯王でしか聞いたことがない私は酷く困惑した。レビューで「これはドメイン知識なので〜」とか言われて全くピンと来なかった。この本は、そんなよく分からないDDDをコードベースで分かりやすく解説してくれている。値オブジェクト、エンティティ、ドメインサービス、リポジトリ。DDDの世界で出てくる聴き慣れない用語について一章一章丁寧に解説がなされている。DDD初心者はまず読んでおくと良い。サンプルコードはC#だが、別に癖のある言語ではないし、ハンズオン形式でもないのでやっていることが理解できれば良い。 あと関係ないが、DDDって少しでも間違ったことを言うと分厚いエリックエヴァンス本(聖典)をしっかり読み込んだ聖職者達からこっぴどく叩かれるイメージがあってあまりネット上で語りづらいなあと思っている。

1日1問、半年以内に習得 シェル・ワンライナー160本ノック

順番が前後してしまって申し訳ないが、これは同期とやっている勉強会で現在扱っている本。上の本とは性質が違うので最後に持っていきたかった。なぜこの本をやることになったかはあまり覚えていないが、全員が「コマンドを使いこなせていないのではないか」という意識を持ってたんじゃないかと思われる。まだ始まったばかりだが正直かなり面白い。sedとかawkとかのコマンドを組み合わせて要求を満たす処理を行う、まさにUNIX哲学を肌で感じることができる。個人的にsedコマンドをあまり使ったことがなかったので、「あ、あの強い人がよく使ってるやつを使えるようになったんだ!」感が嬉しい。あとawkの便利さ。もう何でもawkで何でもできちゃいそう。

3. その他読み物系

闘うプログラマー

革命的OS 、Windows NTを作ったMicrosoftプログラマー達の人間活劇。どこかで勧められているのを見て読んでみたが、うーん。正直私にはあまり合わなかった。フィーチャリングされてる人物のうち何人かは仕事に追われてプライベートが疎かになって離婚したり、あるいはプログラマーとしての仕事を辞めてしまったり。なんか仕事との向き合い方について考えさせられて悲しくなった。

問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本

競プロを本格的にやりたい数弱には良い本。二分探索の計算量でlogが出てくるのなんで?とかそういうのが理解できる。数学は学生のうちにしっかりやっときましょうね〜。

アルゴリズム的思考力が身につく! プログラミングコンテストAtCoder入門

この本を読んでページに載ってる参考問題とか全部解いてたら万年灰色だったのが一気に茶色までいけました。とても良い本。まだ途中までしか読めてないけど全部理解して解けるようになったら緑とかいけんのかな。

達人プログラマー(第2版)

まだ全部読めてない。全部読むのは年末年始休みのうちの課題とさせてほしい。個人的に印象に残ってるのは「プログラマーは一年に最低一つは新しい言語を学べ」ってやつ。

Rustの本をちょこちょこ

新しい言語を学べと言われたのでRustをちょこちょこ学んでるが、特に理解できた自信はないし成果物もないので載せない。来年はCLIツールとか作れたらいいね。

まとめ

改めてまとめてみたらめちゃくちゃ本読んでますね。これは将来有望ですね、たぶん。期待しないでください。
それでは皆様、良いお年を〜