#概要
この記事では、学部卒でほとんど情報系の勉強をしてこなかった筆者が面接受けがいいだけで運良くメガベンチャーにバックエンドエンジニアとして入社し、国内最大規模のECプラットフォームの開発運用担当になり、悪戦苦闘、もはや死闘を繰り広げるなかで、日々を生き抜くために読んだ本を紹介します。2年目になった今は少しづつ手応えも感じ始め、入社時からの圧倒的な成長を感じているため、何も勉強してないけどエンジニアになりたい!スキル身につけたい!みたいな意識が高い方々の参考になればと思います。
#入社前〜研修中に読んだ本
###プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識
www.amazon.co.jp/dp/4822283151
progateとかudemyとかでプログラミング言語に触れた後に読むと良い本です。プログラミングの使い方じゃなくて、大学の情報系で習いそうな基礎的な知識をわかりやすく解説してます。CPU、2進数、アセンブリ言語といったキーワードにピンと来ない人は読みましょう。実際の現場ではここまで基礎的な知識は常識レベルでもはや空気みたいなものなので、これ読んですぐ現場で活躍できるわけではないので、できるだけ早い段階で読んでおきたい本です。
###小悪魔女子大生のサーバエンジニア日記 ― インターネットやサーバのしくみが楽しくわかる
www.amazon.co.jp/dp/B00UV2TSBE
一見なにこれ??ってなりそうな見た目ですが、バックエンド、インフラエンジニアになりたいorさせられた初心者の方にとてもいい本です。バックエンド周りの技術について解説した本は多いですが、そもそもバックエンドって何?インフラって何?って初心者の方はなると思います。この本はそこをイラストや例えをふんだんに交えて解説していて、サーバ?何それ美味しいの状態の初心者をギリギリ現場で教育していける新人くらいの知識レベルに引き上げてくれます。IPアドレス、TCP/IP、メールサーバ、webサーバ、公開鍵認証といったキーワードにピンと来ない方は是非ご一読ください。
###Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
www.amazon.co.jp/dp/B071D8RYR5
なんかいきなりムズそうな本が出てきてね?って思われた方もいるかもしれません。独学で勉強しにくいサーバサイド、インフラ運用系の知識は業務経験のない方には難しいと感じたため、基礎から掘っていく勉強を意識しました。しかし、プログラミング言語系の教材はここ数年のプログラミングスクールブームに伴って世の中に腐る程あって質も高く、本よりも安いので(udemyなど)、書籍よりもそちらの動画教材で学ぶのがいいと思います。とくにフレームワーク系はアップデートが早くて本が追いついていない感があり、更新がしやすい動画教材の方が新し目の知識を学びやすいです。
前置きが長くなりましたが、一通りプログラミングの文法、プログラムで何か作ってみることを経験した方におすすめな本がこのJava本格入門です。オブジェクト指向を学ぶのに個人的に最適だとおもわれるJavaの中級レベルの知識を解説しています。Java8から追加されたstreamAPIを通じて関数型言語的な書き方も紹介しています。また、現場では死ぬほど使うけど独学だとほとんど学ばないであろう分野ランキング1位のテストコードについても説明があります。全体的にプログラミングかけるよ!レベルから現場でプログラムの成果物作って金稼ぐよ!レベルに上がるために必要な知識が解説されていて、非常にいい本でした。
#配属後〜バックエンドエンジニア2年目までに読んだ本
###初めての自動テスト ―Webシステムのための自動テスト基礎
www.amazon.co.jp/dp/4873118166
テストコードわからねええええってなってすがる思いで手に取った本。テストコードとは何かをわかりやすく解説しています。しかし、サンプルコードがrubyでrubyやったこともやる予定もなかった筆者は嵐のような忙しさにかまけて途中で積読してしまいました。
###GitHub実践入門──Pull Requestによる開発の変革
www.amazon.co.jp/dp/B07JLJSDMJ
配属後業務レベルの圧倒的なコード量とバカデカくて重たいロジック、大量のレポジトリ、CICDで整備されたブランチなどなどにぶちあたり、当時git周りの知識については、サルでもわかるgit入門のサル以下の知識しかなかった筆者がmasterブランチに誤ってマージする事故を起こしたくない一心で読みふけった本です。
gitのコミットとプッシュ以外の技がふんだんに盛り込まれています。いっぱしのエンジニアなら息を吸うようにブランチを切ってoriginからpullしてコンフリクト直してapproveされたプルリクをマージしてcicdでビルドを回して各環境にデプロイまでできると思いますが、初心者はそうはいきません。現場に入ったらgitをいちいち教えてもらえる可能性は0に近いので、git操作間違えて先輩に迷惑をかけないようにgitについては血眼で勉強しましょう。この本を一冊読めば十分だと思います。
2020年版: なぜ仮想 DOM / 宣言的 UI という概念が、あのときの俺達の魂を震えさせたのか
https://zenn.dev/mizchi/books/0c55c230f5cc754c38b9
こちらは書籍ではなくzennですが、良かったので紹介します。配属後2個目の案件でバックエンドといいつつReact+reduxのフロントエンドのコンポーネントを改修する必要があり、javascriptすら全く知識がなかった筆者がReact+reduxのアプリの肝である仮想DOM周りの知識を入れるために読んだ記事です。まずqiitaとかの記事でReactって何?reduxって何?を分かった上で読むと仮想DOMの理解が深まると思います。フロントエンド専門じゃないけどフロントエンド開発はできる状態にスピーディにもっていくのにおすすめの記事です。
###インフラエンジニアの教科書
www.amazon.co.jp/dp/B01L8CANUK
サーバサイドの運用を体験して、ああ、俺先輩の運用コマンド脳死で打ってるだけだわ。。。てなった時に読む本です。先ほど紹介した小悪魔女子の本よりもしっかりとサーバサイドの基礎を解説しています。ところどころで著者のインフラエンジニアの経験談も交えて解説しており、知識の現場での使い所も学ぶことができます。これらの知識を身につけて、日々の運用業務をこなしていくと、ただの作業にしか見えてこなかった手順がなんでこの手順になっているのか、その意図が見えてくるようになります。
###令和03年 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 情報処理技術者試験
www.amazon.co.jp/dp/B08P6Z2F4N
ここで基本情報??と驚かれた方も多いでしょう。あえてここで基本情報技術者なのです。意識高い学生が基本情報学んでいるのを見聞きしますが、個人的には現場の業務を経験した後、基本情報を勉強すると、その知識が現場で使われている概念の基礎の体系化になっていることに気づいて爽快です。web系メガベンチャーでもベテラン社員はSIer出身の方も非常に多い(むしろ多数派)なので、ウォーターフォール開発、プロジェクトマネジメントの知識は非常に役に立ちます。エンジニアの共通言語、普段意識していない空気のようなイメージで基本情報の知識は常識です。知ってて当たり前レベルなので、是非勉強しましょう。
この参考書はイラストを交えた非常に本質的な部分に絞って解説されていて、一回難しい参考書で挫折した自分でも非常に読みやすくていい本でした。オチ的な話ですが、さっきから基本情報は空気とか言いながら筆者は3回基本情報に落ちています。(まだ受かってません。受かりてえ。)学生時代受かる気がせず2回飛んで、社会人になり万全の対策を講じた3回目、会場を間違えて遅刻し、受験資格を失いました。
###オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識
www.amazon.co.jp/dp/B092HDFJKK
死ぬほどいい本です。全エンジニア必読書と言っても良いでしょう。近年のweb技術の進化を支えた最も革命的な技術であるオブジェクト指向について、例えを使わずに開発・設計両面の視点で深く説明しています。そして、説明も非常にわかりやすいので、慣れてきた新人エンジニアでも読める内容だと思います。これを読めば、普段の開発にプログラムの可読性を上げるためのリファクタ、デザインパターン、より良い設計といった一歩先を行った視点が加わります。開発のレベルを上げていくための意識づけができる本だと思います。とはいえ、すぐに良いコーディング、設計ができるようになるわけではないので、この本を足かがりにコーディング・設計のレベルを上げていきたいところです。
###ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
www.amazon.co.jp/dp/B082WXZVPC
上司にお勧めしていただき、読んだ本です。ドメイン駆動設計に関する本は入門書が少ないなか、この本は丁寧に章を分けて1章1テーマでドメイン駆動設計のパターンを解説しています。少し難点なのが、入門と言いながら取り上げるトピックの難易度にばらつきがあること、DBのトランザクション周りの制御実装などドメイン駆動設計以外のトピックも取り上げていて、もりもりの内容になっていることです。ドメイン駆動設計の部分に絞って読めば、非常にわかりやすい解説と単純化した実装例もついているので非常に勉強になります。ただ、サンプルコードがuserとcircleというドメインが2つしかなく、この本をよんで実際にDDD設計のアプリケーションが構築できるかは人によると思います。
筆者は現場でDDD設計のアプリがあったので、その知識を前提にこの本を読むと理解が非常に深まりました。DDD周りの知識はこの1冊で完結しないので、この本を足掛かりに、DDD、ひいてはデザインパターンについて知見を深めていきたいところです。
#積読している本
※また更新します。
#おわりに
サルレベルの知識の未経験新卒がバックエンドエンジニアとして1年間荒波にもまれるなかで読んできた本を紹介しました。ちゃぶ台を返すようですが、本は現場で学んだ知識の体系化に過ぎません。自分が最も成長した要因は現場で修羅場を超えた経験であり、本はあくまで現場ですぐ使えるように基礎知識を入れておく、または現場で学んだ知識を後で応用効く形に整理するために使っていました。
深夜メンテで脳死んでいる状態でミスったらとんでもない損失を起こすような状況下で何十台のサーバを同時に操作する、リリース日直前に発見した不具合を残された少ない時間で直してデグレを起こさないようにする、システムでおこっている不具合の原因をログを掘って特定し、修正する。こういうプレッシャーのかかる状況で爆速で調べて使ってテストして、成功体験とともに覚えた知識こそが本当に使える知識だと思います。
本はあくまで補助だと思って、現場に飛び込んで鍛えていきましょう!
Comments
Let's comment your feelings that are more than good