これってなんなの?
【ど素人状態=社会人になって初めてプログラミングを勉強したぜ!(特に新卒)】〜【Webエンジニアの3年生ぐらい】になるまでに読むと良い本まとめです。「どんな目的で学ぶか?」*「いつぐらいまでに読むといいか?」を段階的にまとめました。「これだけ読めばいい!」と、そんな簡単な話ではありませんが、「今いるレベルより少し上の人がどんなジャンルのことを学んでんだろ?」という方の参考になれば嬉しいです。過去の自分に向けてでもあります、自戒。これからWebエンジニアになる人、なって間もない人の参考になれば幸いですm(__)m
※続編
【Webエンジニアど素人】が【3〜4年生】くらいになったら読むといい本を目的別にまとめた
”Webエンジニアど素人から3年生ぐらいになるまでに読むと良い本”の段階的まとめ(一部外部記事あり)
ど素人の方々が手を動かしながら1〜6ヶ月以内に学ぼう!
◆どの職種のエンジニアも全員学ぼう!
「プログラムを動作させることができるレベルになろう!」
「SQLの基礎を理解して、操作できるレベルになろう!」
「HTML/CSS/JSの基本的な記法とそれぞれの役割を理解したレベルになろう!」
「Linux基本操作を身につけたレベルになろう!」
「他人が読めるコードをかけるレベルになろう!」
「アルゴリズムとデータ構造を最低限理解したレベルになろう!」
「Webエンジニアとして働くなら絶対使う・・・学ぼう!」
1年〜2年以内に頑張って学ぼう!
※ここからは、学ぶ分野の全体感、概要を把握して、人に応じて挫折しないように理解や学びの濃淡はつけた方が良いと思います。
◆どの職種のエンジニアも全員学ぼう!
「基礎的な知識を身につけたレベルになろう!」
「オブジェクト指向言語について何がありがたいのか?を説明、理解をしているレベルになろう!」
「RDBの仕組みについての基礎知識・SQLの基本的な書き方を身につけたレベルになろう!」
「Linuxの仕組みについて基礎的な知識を身につけたレベルになろう!」
「インフラ・ミドルウェアに関する基礎的な知識を身につけたレベルになろう!」
「自動テストについて基礎的な知識を身につけたレベルになろう!」
「アジャイルの基礎知識を身につけたレベルになろう!」(技術マネジメントを理解)
「エンジニアとして自立するために基本的な考え方を身につけたレベルになろう!」(心得的なもの)
「良いお作法の基礎的な知識を身につけたレベルになろう!」
「要件定義とは何か?非機能要件とは何か?基本的な考え方を身につけているレベルになろう!」
「Webアプリケーションの脆弱性を理解し、対策する知識を身につけたレベルになろう!」
「テスト設計の基本的な考え方を身につけているレベルになろう!」
「コンピュータが動くメカニズムを最低限理解するレベルになろう!」
◆ここからはフロントエンジニア、バックエンジニアやQA寄りの人
「効率の良いアルゴリズムとはなんなのかを理解し、それぞ実際のコードに対して反映することができるレベルになろう!」
「適切なクラス設計ができるレベルになろう!」
- Java言語で学ぶデザインパターン入門
- オブジェクト指向における再利用のためのデザインパターン
- Java言語で学ぶデザインパターン入門 マルチスレッド編
- レガシーコード改善ガイド
- Webアプリケーション設計・実装のためのフレームワーク活用の技術
- Webを支える技術 -HTTP、URI、HTML、そしてREST
- Web API: The Good Parts
※ちょいここ欲張りすぎ感あるかも…
「フレームワークも大事だけど、JavaScriptの基礎を理解したレベルになろう!」
「UI/UXの基本ルールを理解したレベルになろう!」
「サービスの作り方について基本的な考え方を身につけたレベルになろう!」
◆ここからはインフラエンジニアやSRE寄りの人
「基本的な運用知識を身につけているレベルになろう!」
「TCP/IPの基本的な知識を身につけているレベルになろう!」
「仮想技術を理解して基本的な知識を身につけたレベルになろう!」
- 仮想化の基本と技術 *古いので以下のほうがいいかも。
- ネットワーク仮想化~基礎からすっきりわかる入門書
「Linuxの最低限のセキュリティ知識を身につけているレベルになろう!」
2年〜3年以内に頑張って学ぼう!
◆どの職種のエンジニアも全員学ぼう!
「テーブル設計に合わせて、SQLをちゃんとかけるレベルになろうね!]
「開発〜運用に必要な、ミドルウェアの知識を身につけるレベルになろう!」
「チームとして実施される開発手法を理解し、メンバーとして適切な実践ができるレベルになろう!」(技術マネジメントを理解)
「サービスの分析についての基本的な知識を身につけるレベルになろう!」
「組織の技術的なリスクを把握。マネジメントと協力し、運営に改善提案できるレベルになろう!」
◆ここからはフロントエンジニア、バックエンジニアやQA寄りの人
「基本的なフレームワークと設計思想を身につけた(MVVM, Reduxなど)レベルになろう!」
「自動テストの応用レベルの知識を身につけたレベルになろう!」
「言語について複数パラダイムの理解と特徴を捉えているレベルになろう!」
「堅牢なシステムを作るための手法について理解できているレベルになろう!」
「フレームワークやライブラリを適切に利用することができるレベルになろう!」
「正しいアルゴリズムを選択し、実装ができるレベルになろう!」
「UI/UXの正しい知識をもった上で、改善提案することができるレベルになろう!」
◆ここからはインフラエンジニアやSRE寄りの人
「全体のアーキテクチャを考える上で、インフラとMWの必要な知識を身につけているレベルになろう!」
- [24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用
- [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ
「サーバ構成の理解、構築〜運用ができるレベルになろう!」
「運用管理の基礎知識を身につけているレベルになろう!」
「サーバの基本的なトラブルシュートを一人で実施ができるレベルになろう!」
「Webサービス稼働に必要な環境構築ができるレベルになろう!」
- エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
- Elasticsearch実践ガイド
- 30分NetWorkng *書籍ではなくWebサイトです。
- ネットワークエンジニアとして *書籍ではなくWebサイトです。
「仮想技術を理解・運用することができるレベルになろう!」
「クラウドを運用することができるレベルになろう!」
「脆弱性診断(テスト)ができるレベルになろう!」
3年目くらいに頑張って学ぼう!
今後整理、追加します…
「アーキテクチャを理解できるレベルになろう!」
「方針を理解したうえで、テストの設計・実行ができるレベルになろう」
・・・
補足
- MacやWindowsの操作などITに関する一定以上のリテラシーはあることを前提にしています。
- 言語の部分はRuby、OSはLinux、DBはMySQL、クラウドはAWS、JavaScriptのフレームワークは Vue.js からはじめた人を前提にしています。
- NoSQL(RedisやDynamoなど)、正規化・非正規化などのテーブル設計とか入っていないものもいくつか・・・今後追記していきたい。
- 弊社の状況に合わせた内容であるため、一般とあっていないとこがあるかもしれません。
そもそもの背景
リンクアンドモチベーションの開発組織には、パートナーの方、中途、新卒がいます。新卒は研修、OJTなどを通じ育成しています。"個の効力感の観点"と"事業の観点"から、勉強する技術分野を必要最小限に絞ることが効果的と思います。一方「自主的にどんどん学びたい」「どういった本読むのがいい?」という相談も受けます。そう言った人向けに自分や中途が読んできた本、技術顧問からも、色んな方々からお勧め、アドバイスいただいたり、外部から得た情報を元に、本、まとめかたを整理しました。
仲間への願い
基礎から理解して、「再現性」と「実効性」の高いレベルになってほしい。たまたま簡単な改修に当たった→できた!だけでは再現性がなく、勘違いも生まれやすく後々苦しみます。
基礎を理解せずに、ツールを使って動くものを作る、というだけの中身のないエンジニアになって欲しくはない。
- ex.「設計」をするのに、機能だけでなく、非機能、サーバー、DB、PG(アルゴリズムなど)、ビジネスの拡張性を踏まえてどういう設計にすべきか?などを考えて設計できるかどうか?
- ex.「テスト」をする/テストコードを書くのに、どんなケースを書かなければ、網羅しなければならないのか?を知識として知り、それをコードに落とすことができるか?
・・・そのために、最低限、どういう知識を身につけておけばいいのか?そのためにどんな本を読んで学べばいいかな?という1つのマップになればいいかなと。
最後に
書いている最中に「あれもあるこれもある」とどんどん増えてしまいました...学んでいると、やるべきことがより見えてきて、こうなりがちなので、目的を定めて学ぶことの重要性を今更感じました。
ボリュームありすぎる感じが否めませんが、社会人になって初めてプログラミングをはじめた方や、新人エンジニアの方が勉強する際の参考として役立ててもらえれば幸いです。
こんなんおかしい、これのほうがいい、こうしたほうがいいなどアドバイスありましたら、いただけると幸いです。
今後は一言紹介文を足したり、新しいものを足したり、もうちょい順番つけたり、組織編を作ったり、などここをアップデートしながら運用していこうと思います。
メリークリスマス🎅🤶