そろそろWebエンジニア3年目の折り返しになるので、Webエンジニアとして働く中でこれまで読んできた情報たちをまとめようと思い立ちました。
エンジニア3年目の今だからこそまとめられる情報として、「エンジニア1年目の1年間で読んでおきたかったな〜。」という本と記事をまとめておきます。
まとめ始めたら楽しくなってしまい、情報量が多くなってしまった...。全部手に取るのは不可能だと思うので、サーっと目を通して見て興味が湧いた本や情報を手にとっていただけると良いかと。
これからWebエンジニアになる人、Webエンジニア1年目の人の参考になれば幸いです。
これは何?
Webエンジニア1年目が仕事を進める上で絶対に求められるであろう知識を、技術力・Web知識・仕事の進め方・キャリアの観点からまとめました。
「これだけ読んでおけば絶対大丈夫!!」という安易なものではありませんが、「どんな知識を学べばいいのさ?!」という方の参考になればと思います。
Webエンジニア1年目で読みたい本・資料まとめ
Webサービス基礎知識
『Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)』
Webのざっくりした歴史から、Webサービスの基本的な仕組み、サーバーサイドとクライアントサイドの役割分担、APIの仕組み、HTTPの基本的な仕組みまで、Webエンジニアが知っておくべき基礎知識が一気に学べる良書。
1度読んだだけで理解できなくても、Webサービスの設計や実装を経験してから再度読み直すとWebの仕組みがスッと頭に入ってきて理解が進む。
『「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか』
今のWebの仕組みがどのような歴史的経緯で生まれたのかプログラミング実例付きで紹介されていて、具体的に理解しやすいし実務で生かしやすい。
Javaのコードで書かれているので、Javaを読んだことがない人からすると少し読みづらいかもしれないが、Webの基本的な機能であるクッキーやログイン認証の実装方法、DBアクセス時のORマッパーの必要性やMVCフレームワークの必要性など、実務で必要となる知識が盛りだくさんで何度も読みたい。
プログラミング・レビュー
『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)』
エンジニア初めてすぐの段階で読み、ある程度コードを書けるようになったらまた読み、コードレビューをする立場になったら改めて読み...と何度も読むことになるだろう本。
「理解しやすいコードとは?」という問いに対して、様々な具体例をもとに答えてくれている良書。先輩エンジニアに不毛なコードレビューをしてもらって時間を奪わないためにも1年目で読んでおきたい。
読んでおきたい記事など
やめた方が良いコーディング・設計、アンチパターン
HTML、PHP、Java、Scala、データベース、リリース手順などなど、あらゆる領域の設計・コードのアンチパターンがまとめられている。アンチパターンとしてどんなものがあるのかざっくり知っておく意味で読むと良い。
よいレビューの方法や考え方とは?全エンジニアがレビュー前に知っておきたいこと
設計・コードレビューをする/される上で大事な考え方、基本的なレビューの方法などに関してまとめらている。
初心者プログラマが犯しがちな過ち25選
プログラミングをする上で大事な態度や考え方に関してまとめらている。
業務でWebサービス開発をする際に気をつけたいこと(新卒向け)
エンジニアとしてWebサービス開発する上で意識するべきことが羅列されている。観点として知っておきたい。
プログラミング言語(サーバーサイド)
『スッキリわかるJava入門 第2版 (スッキリシリーズ)』
「プログラミング初めてで、Javaも初めて触ります」っていう人にはこの本が一番おすすめだと思う。自分も同じ状態だった時に色々本読んでみて比べたけど、この本が一番理解しやすかった。
プログラムの動作の仕組みが図示されていて、コンピューターサイエンスの知識がほとんどなくても頭に入ってきやすい。
『Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド』
「Pythonで何か便利な機能作りたい!」ってなった時に最適な本。Pythonの環境構築、クローリング・スクレイピング(Webサイトのデータを探索・収集をする技術)から、収集したデータをもとに分析できるように加工したりとPythonで何ができるのか手を動かしながら実感できる。
Pythonは上述したJavaに比べると環境構築も簡単で、個人で動かす分にはサクッと試せるのでとっかかりのサーバーサイド言語として選択するのは良いかも。
プログラミング言語(フロントエンド)
『改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで』
フロントエンド開発でJavaScriptを触らないことはないはず。JavaScriptの基礎がしっかり理解できていれば、AngularやReactやVue.jsなどフレームワークの理解も進みやすいので、まずはJavaScriptの基礎を理解しておきたい。
読んでおきたい記事など
フロントエンド言語の進化はめちゃくちゃ速く、バージョンがどんどん変わっていくので基本的な考え方を理解したら、チュートリアルをやってみる&公式ドキュメントを読んで追加された機能、変更を理解するのが良さそう。
プログラミング(オブジェクト指向)
『オブジェクト指向でなぜつくるのか 第2版』
Webサーバーサイドエンジニアとして働くなら、多くの人はJavaやRubyなどのオブジェクト指向言語を書くことになると思います。
そのオブジェクト指向というものが機械語からアセンブリ言語、構造化言語と系譜をたどってどのような問題を解決する手法として発展して生まれたのかを紐解き、その上でオブジェクト指向の何が嬉しいのかを理解させてくれる良書。
個人的にオブジェクト指向に関して一番理解しやすかった本がこの本でした。
『新装版 リファクタリング 既存のコードを安全に改善する』
「オブジェクト指向の考え方とメリットに関しては頭に入ったけど、具体的に業務で書くコードでどのように生かしていくと良いんだろう...?」に応えてくれる良書。
「このコードをオブジェクト指向で書くには?」の実装例が豊富に載っているので、業務に直結した知になる。ぜひ読んで欲しい。
読んでおきたい記事など
新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡
関数型言語の考え方を理解するために読みたい記事。オブジェクト指向との比較で書かれているのでオブジェクト指向を理解してから読みたい。
プログラミング(関数型言語)
読んでおきたい記事など
関数型プログラミングはまず考え方から理解しよう
オブジェクト指向がどんな潮流で生まれたのか、コードベースで説明されている良記事。
Haskellらしさって?「型」と「関数」の基本を解説!【第二言語としてのHaskell】
実践編!Haskellらしいアプリケーション開発。まず型を定義すべし【第二言語としてのHaskell】
関数型言語を試してみたい時に読んで欲しい記事。Haskellを動かしながら関数型言語を実感することができる。
プログラミング(デザインパターン)
『増補改訂版Java言語で学ぶデザインパターン入門』
クラス設計をする時に一から自分で考えなくても、先人たちの積み上げて来た設計パターンを参考にすることで拡張性高く保守しやすいコードを書くことができる。
オブジェクト指向プログラミングをしていく上で、クラス設計をどうするか悩んだ時に手に取りたい1冊。Javaの基礎・オブジェクト指向の基礎が理解できていない段階で読んでも頭に入って来づらいので、上述したJavaとオブジェクト指向の本を読んだあとに読みたい。
プログラミング(API設計)
『Web API: The Good Parts』
Webエンジニアとして働く上で、絶対1度は経験することになるAPI設計。API設計時に悩むエンドポイントの設計・リクエストとレスポンスの設計、保守性の高いAPIとは?などなどに答えてくれる良書。
API設計のメソッドとしてはもちろん、設計をする時に他社事例を分析してメリットデメリットを比較する手法も参考になる。
読んでおきたい記事など
翻訳: WebAPI 設計のベストプラクティス
WebAPI設計をする時に考えるべき観点と、それぞれの観点でどのように考えるのが現状の最適解か学べる。
初めてWeb API設計をする前に読みたい記事・本・API実例と個人的にハマったこと
WebAPIの設計・実装をするときに読んでおきたい情報をまとめています。
データベース(RDB)
『失敗から学ぶRDBの正しい歩き方 (Software Design plus)』
Webエンジニアが業務で利用するデータベースは大半が、リレーショナルデータベース(RDB)になると思います。
業務でRDBでのデータベース設計・運用をする中で、どのような失敗事例があるのか。その失敗事例の何が問題だったのか、その失敗をしないようにどのように設計するべきだったのか。が超わかりやすくまとまった良書。
自分が新卒1年目の時は、SQLアンチパターン をオススメされましたが、SQLアンチパターンをより実務よりにして、最近の事例も紹介されているそーだい(@soudai1025)さんの本を今のエンジニア1年目の方にはオススメしたい。
読んでおきたい記事など
PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較!
RDBの代表的なサービスであるMySQLとPostgreSQLのメリット・デメリット、どのような場合にどちらを選択するといいのかなど参考になる。
なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策
SQLの内部の動き、どのような書き方をしたら遅くなりやすいのかを学べる。
データベース(NoSQL)
NoSQLは、Redis(KVS)やCassandra(カラム指向)、MongoDB(ドキュメント指向)、Neptune(グラフ指向)などたくさん種類があるがどれか業務で使うことになったタイミングでその公式ドキュメントや詳細説明記事を読むとよさそう。1年目ではまずRDBをしっかり使えるようになりたいので。
読んでおきたい記事など
AWSのNoSQL入門
NoSQLデータベースの種類に関して、AWSのサービスを題材に違いが図示されていて理解しやすい。
エンジニアが知っておくべきNoSQLの概要と主要OSSプロダクト
RDBとの比較でNoSQLの特徴をざっくりと説明していて、ざっくり理解できる。
NoSQLデータベースの長所と短所
NoSQLのRDBと比較したメリット・デメリットを知れる。
MongoDBの様なNoSQLに勢いがあるのは何故ですか?SQLと比べてどんな利点や欠点がありますか?
NoSQLが生まれた背景、現状はRDBとNoSQLをどんなケースで採用するべきかなどが実体験ベースで考察されていて参考になる。
テスト
『テスト駆動開発』
テスト駆動開発(TDD)を学ぶ決定版。実例をもとに、自分がTDDを実践する時にどのように進めればいいのかを学ぶことができる。
「テストめんどくさい...!動けばいいじゃん...!」という人にこそ1度読んでもらいたい。
読んでおきたい記事など
Presentations by Takuto Wada - Speaker Deck
『テスト駆動開発』の著者(翻訳者)の和田さんによるプレゼン資料。TDDに関しての知見が散りばめられているので、『テスト駆動開発』読む前後に資料にも目を通すとよい。
テストがなかった無法地帯にテストを導入して開発速度を1.7倍にした話
テストがない文化にテストを書く文化を作った事例。テストを書く文化をどうやって組織で作っていくのか参考になる。
ユニットテストにまつわる10の勘違い
テストが手段の目的化になってしまわないために意識したいことに関して書いてある。
アルゴリズム
アルゴリズムとは何か!? ~ 文系理系問わず楽しめる精選 6 問 ~
アルゴリズムとは?という超基本的な説明から、有名なアルゴリズムの説明がされていて、アルゴリズムの基礎理解の助けになる。
スタックとキューを極める! 〜 考え方と使い所を特集 〜
データ構造の超基本であるスタックとキューに関して学べる。図示されていてめちゃくちゃ理解しやすい。
ソートを極める! 〜 なぜソートを学ぶのか 〜
記事内でも言及されていますが、Webエンジニアでソートアルゴリズムを独自に書くことはほぼないでしょう。ライブラリを使うほうがよっぽど確実なので。ですが、プログラムの基礎となるアルゴリズム部分を学んでおくことで、言語の変化に左右されない知恵を得ることができるので学んでおきたいところ。
CI/CD
読んでおきたい記事など
CI/CDのエキスパートが解説:CI/CDとは何か? なぜ今、必要とされるのか?
継続的インテグレーション/継続的デリバリーとは何か、なぜ重要となってきているのか超基礎的なことが理解できる。
基本的なシステム構成図を理解するためのAWS基礎をまとめてみた
Webサービス開発事業会社では、サーバーにはAWSかGCPかを採用しているケースが多いと思うが、その中でもAWSの基本用語とサービスの説明がされている。
サーバー仮想化・コンテナ
『Docker/Kubernetes 実践コンテナ開発入門』
実務で必要なDockerの知識が図式も合わせてまとまっていて理解しやすい。Dockerに関してしっかりと理解したい時に読みたい。
読んでおきたい記事など
いまさらDockerに入門したので分かりやすくまとめます
Dockerの基本的な仕組みとDocker入門時にやったことがまとめられている良記事。
今さら人に聞けない Kubernetes とは?
Kubernetesの特徴・何ができるのかがざっくり知れる。
Linux・シェル
『新しいLinuxの教科書』
Webエンジニアとして働いていると、Linuxコマンドを使ってディレクトリ移動、ファイルの読み書きなどを行う機会も多いので、始めたての段階で「使えそうなコマンド何があるんだろう?」と知っておくと作業が捗ります。
完全にコマンドを覚えてなくても、「こんな操作できるコマンドあったな〜」とだけ思い出せれば、ググってコマンドを実行できるので便利。
データ加工をシェルスクリプトで1行でササッとかけるようになると、緊急障害の調査時などにめちゃくちゃ重宝される。
読んでおきたい記事など
Linux開発環境の基礎知識
Linuxを触る時によく使うコマンド集。コマンドを忘れた時のチートシートとして活用したい。
Git/Github
読んでおきたい記事など
今日からはじめるGitHub 〜 初心者がGitをインストールして、プルリクできるようになるまでを解説
Webエンジニアとして働くなら絶対使うことになるGithub。基本的な使い方と仕組みに関して説明されているので、「仕組みあんまり理解できていないな...」という方は読んでおくとよい。
いまさらだけどGitを基本から分かりやすくまとめてみた
Gitコマンドの使い方と仕組みに関してめちゃくちゃわかりやすくまとめられている。Gitの本買わなくてもこの記事読めば業務で使っていて困ることはほとんどないのでは。
技術選定/システム構成
読んでおきたい記事など
Webアプリケーションフレームワーク導入時に考慮すべき22の観点
新しいシステムを開発しようとした時に、基本設計の前にやる技術選定。その技術選定時の観点がまとまっている。
基本的なシステム構成図を理解するためのAWS基礎をまとめてみた
Webサービス開発事業会社では、サーバーにはAWSかGCPかを採用しているケースが多いと思うが、その中でもAWSの基本用語とサービスの説明がされている。
開発手法
『アジャイルサムライ−達人開発者への道』
ソフトウェアの開発手法はウォーターフォール型、プロトタイプ型、スパイラル型、アジャイル型など、複数の手法が存在する。その中でもアジャイル型の説明が簡潔にまとめられている良書。
僕の観測範囲ではアジャイル型で開発しているor移行中のWebサービス開発組織が多い印象なので、開発手法としてしっかり学ぶならアジャイル型だと思う。
読んでおきたい記事など
『アジャイルサムライ――達人開発者への道』に学ぶ、開発フロー効率化のススメ! 【今こそ読み解きたい名著】
アジャイルサムライの特筆するべき点を取り上げて説明されている。アジャイルサムライを読む前に記事を読んでみて、読んでみたいかの参考にするとよい。
仕事の進め方(ビジネス書)
エンジニアとして働いていると、「ビジネススキルなんて必要ねえ!!実装力こそパワー!!」みたいなロックな思考になりがちですが、仕事の大半は組織内でのコミュニケーション・事業の問題解決です。
『論点思考』
エンジニア1年目は、上司が設計をしたものを実装タスクとして渡されることが多い。しかし、そもそも上司の設計が間違っていることもある。
仕事を始める前にまずは「解くべき問題は何か?」を具体化し、その問題を解決した状態を相手と共有することが何よりも大事。
「早く手を動かしたい!!」となりがちなエンジニア思考の人にこそ読んでもらって仕事で実践してもらいたい良書。
『仮説思考 BCG流 問題発見・解決の発想法』
先述した『論点思考』と同じ著者による本。
どんな作業でも、始める前に全体のアウトラインと重要な問題となっているものを仮説立てて、足りていない情報を明確にしてから取りかかること。そのメリットと具体的な進め方が書かれている。
要件定義や設計、デバッグの時にあたりをつけるときの考え方として参考になる部分が多々ある。
日々の学習・エンジニアキャリア
『ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略』
マイクロソフトとGoogleで働いた経験のある及川卓也さんの新著。
昨今のWebサービスはサブスクリプションモデルを採用している事業が多いが、黎明期のパッケージ売り切り型のモデルから今のモデルにどのような変遷で変わっていったのか、SIerが生まれた背景、エンジニアのキャリアや働き方はどのように変わってきたのか、などなどをGAFAで勤務した独自の経験をもとに解説されている。
非エンジニア経営者向けに書かれた本で、IT業界を俯瞰的に知るために活用できる。
『エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESS plusシリーズ)』
日々の業務、また業務外のプライベートな時間でどのように技術的なインプットとアウトプットをしていけばいいのか、普段からどんな習慣で過ごすと良いのか?を考える上で参考になる事例や指摘が多い良書。
「エンジニアとして成長できる環境で働きたい!」ということを言う新卒エンジニアは多い印象ですが、結局自分で学習し続けてアウトプットしていく習慣づくりをできるかどうかの方が大事。その方法を学ばせてくれる本。
読んでおきたい記事など
Webエンジニアなら知っておきたい技術ブログ32個まとめてみた
IT企業各社のテックブログをほぼ網羅的にまとめています。他社の開発事例から学べることは本当に多いので、チェックしておきたい。
エンジニアはどう生きるべきか?及川卓也氏が説く、技術者の成長戦略
上述した『ソフトウェアファースト』の著者及川さんのキャリアの考え方。自分の選択するドメインを市場と自分の観点で選択するべき話や、人工知能の学習方法を参考にした成長戦略など、目からウロコな話が多い。
『コーディングを支える技術』の西尾泰和と考える、エンジニアが学ぶべき技術の原理原則
エンジニアとして成長するための基本的な考え方が対談形式で説明されている。気になったら『コーディングを支える技術』も読んでみるとよい。
まつもとゆきひろの履歴書|仕事中にこっそり作ったRubyが世界を驚かせるまで
Rubyの生みの親であるまつもとゆきひろさんのRuby開発の変遷の話。仕事をしながらプライベートでRubyを開発し続けて、ここまで普及した話はエンジニアとして知っておきたい。
えふしんに聞く「僕が若手エンジニアならこれを学ぶ!」トップランナーの考える成長戦略
モバツイとBASEで開発を牽引してきたえふしんさんのキャリア戦略の話。自身のエンジニアキャリアを考える上で参考になる指摘が多い。
2018年の最先端バックエンドエンジニアになろう
「具体的にWebサーバーサイドエンジニアとして何を学べばいいのか?」に関して、技術ベースで網羅的にまとめられている。
2018年の最先端バックエンドエンジニアに必要なスキルについて考えてみました。
「具体的にWebサーバーサイドエンジニアとして何を学べばいいのか?」に関して、技術ベースで網羅的にまとめられているpart2。どんな技術領域があるのかな?を知っておく意味でも絶対1度は目を通したほうがいい。
すべての新米フロントエンドエンジニアに読んでほしい50の資料
フロントエンジニアとして働く上で必要となる知識がまとめらている。
エンジニアの情報収集法まとめ
日常的にどこからどうやって情報収集をしていけばいいのか、情報収集先がまとめられている良い記事。この中で自分にあったメディアを選択したい。
見たいエンジニアの職務経歴書の書き方
転職してキャリアアップすることが当たり前になりつつあるエンジニア。転職時にどのような情報をまとめておくべきなのか、それに向けてどんなふうに業務に望むのか参考になる。
プログラミング勉強を加速させる7つの習慣
独自にやっているプログラミングの学習方法に関して見直したいときに読んで欲しい。何を意識して学習するべきか簡潔にまとめっていて超参考になる。
【必見】初心者時代に知らずに損したエンジニアの技術学習を効率的かつ安くする方法
エンジニア初心者の頃にハマってしまいやすい技術学習のアンチパターンと、それを防ぐ具体的な方法がまとまっている。
番外編 ~OSS開発~
意外ととっつきやすいOSS開発参加方法まとめ
OSS開発が身近に感じられる。具体的にどうやって進めたらいいのかもまとめられている良記事。
趣味で作ったソフトウェアが海外企業に買われるまでの話
オープンソース界隈を震撼させた、Trivy買収の舞台裏 〜 オープンソースを成功させるためにできること〜
OSS開発を趣味でしていたらイスラエルの企業に買収された話。全エンジニアに衝撃を与えたと思う。こんな道もあるんだよということは知っておくとよいかも。
発信しないのは「仕事をしても請求書を出さない」のと同じ。堤修一が開発〜発信の循環を作る理由
OSS開発のモチベーションと発信することの捉え方が独特で面白い。
番外編 ~個人開発~
Webサービスを個人で開発して月10万円以上稼いでいる事例まとめ
Webサービスを個人開発して収益を得ている人たちの事例を知ることができる。
個人でも使える!おすすめAPI一覧
個人開発しよう!となったらAPIを使うことになると思う。使えそうなAPI何があるのかな?と探す時に重宝する。
番外編 ~副業~
1年目からでも副業できるし、副業することで技術力伸ばせるのは嬉しい。
【オススメ順】Webエンジニアが実際に活用した副業先を探す方法まとめ
経験年数が浅いエンジニアの副業の探し方|エンジニア副業のメリットとデメリットも解説
最後に
まとめ始めたら楽しくなって情報が多くなりすぎました。。。
これだけの情報をちゃんと読んで手を動かして理解できたら、「Webエンジニアとして1年間でめちゃくちゃ成長した!」と胸を張って言えるのでは。
「Webエンジニア1年目でこの知識も必須だろ〜!」とかツッコミがあればコメントいただければ嬉しいです🙏
関連記事
関連記事も貼っておきます。
【要保存まとめ】エンジニアになりたいプログラミング初心者のよくある疑問を全部解消します
記事の執筆者について
noteで、Webエンジニア未経験~2年目くらいの方に向けて、プログラミングチュートリアルや情報まとめて書いています。
note(プログラミングチュートリアル)
TwitterでもWebエンジニアの日常をツイートしているので、フォローしてみてください。
Twitter(仮想サーファー@virtual_techX)
気になったことを検証してみたりの雑記ブログも書いてます。
雑記ブログ(仮想サーファーの日常)