プログラミング

【初心者~中級者】プログラミング学習で読むべき本を体系的に紹介

本

この記事の対象者

プログラミングを学びたいと考えている人から現場でまだまだ新人の域を出ない人が対象です。

Webエンジニアど素人が読むべき本の段階的まとめ(一部外部記事あり)

◆どの職種のエンジニアも全員学ぼう!

「プログラムを動作させることができるレベルになろう!」

「SQLの基礎を理解して、操作できるレベルになろう!」

「HTML/CSS/JSの基本的な記法とそれぞれの役割を理解したレベルになろう!」

「Linux基本操作を身につけたレベルになろう!」

「他人が読めるコードをかけるレベルになろう!」

「アルゴリズムとデータ構造を最低限理解したレベルになろう!」

「Webエンジニアとして働くなら絶対使う・・・学ぼう!」

1年〜2年以内に頑張って学ぼう!

※ここからは、学ぶ分野の全体感、概要を把握して、人に応じて挫折しないように理解や学びの濃淡はつけた方が良いと思います。

◆どの職種のエンジニアも全員学ぼう!

「基礎的な知識を身につけたレベルになろう!」

「オブジェクト指向言語について何がありがたいのか?を説明、理解をしているレベルになろう!」

「RDBの仕組みについての基礎知識・SQLの基本的な書き方を身につけたレベルになろう!」

「Linuxの仕組みについて基礎的な知識を身につけたレベルになろう!」

「インフラ・ミドルウェアに関する基礎的な知識を身につけたレベルになろう!」

「自動テストについて基礎的な知識を身につけたレベルになろう!」

「アジャイルの基礎知識を身につけたレベルになろう!」(技術マネジメントを理解)

「エンジニアとして自立するために基本的な考え方を身につけたレベルになろう!」(心得的なもの)

「良いお作法の基礎的な知識を身につけたレベルになろう!」

「要件定義とは何か?非機能要件とは何か?基本的な考え方を身につけているレベルになろう!」

「Webアプリケーションの脆弱性を理解し、対策する知識を身につけたレベルになろう!」

「テスト設計の基本的な考え方を身につけているレベルになろう!」

「コンピュータが動くメカニズムを最低限理解するレベルになろう!」

◆ここからはフロントエンジニア、バックエンジニアやQA寄りの人

「効率の良いアルゴリズムとはなんなのかを理解し、それぞ実際のコードに対して反映することができるレベルになろう!」

「適切なクラス設計ができるレベルになろう!」

※ちょいここ欲張りすぎ感あるかも…

「フレームワークも大事だけど、JavaScriptの基礎を理解したレベルになろう!」

「UI/UXの基本ルールを理解したレベルになろう!」

「サービスの作り方について基本的な考え方を身につけたレベルになろう!」

◆ここからはインフラエンジニアやSRE寄りの人

「TCP/IPの基本的な知識を身につけているレベルになろう!」

「仮想技術を理解して基本的な知識を身につけたレベルになろう!」

「Linuxの最低限のセキュリティ知識を身につけているレベルになろう!」

2年〜3年以内に頑張って学ぼう!

◆どの職種のエンジニアも全員学ぼう!

「テーブル設計に合わせて、SQLをちゃんとかけるレベルになろうね!]

「開発〜運用に必要な、ミドルウェアの知識を身につけるレベルになろう!」

「チームとして実施される開発手法を理解し、メンバーとして適切な実践ができるレベルになろう!」(技術マネジメントを理解)

「サービスの分析についての基本的な知識を身につけるレベルになろう!」

「組織の技術的なリスクを把握。マネジメントと協力し、運営に改善提案できるレベルになろう!」

◆ここからはフロントエンジニア、バックエンジニアやQA寄りの人

「基本的なフレームワークと設計思想を身につけた(MVVM, Reduxなど)レベルになろう!」

「自動テストの応用レベルの知識を身につけたレベルになろう!」

「言語について複数パラダイムの理解と特徴を捉えているレベルになろう!」

「堅牢なシステムを作るための手法について理解できているレベルになろう!」

「フレームワークやライブラリを適切に利用することができるレベルになろう!」

「正しいアルゴリズムを選択し、実装ができるレベルになろう!」

「UI/UXの正しい知識をもった上で、改善提案することができるレベルになろう!」

◆ここからはインフラエンジニアやSRE寄りの人

「全体のアーキテクチャを考える上で、インフラとMWの必要な知識を身につけているレベルになろう!」

「サーバ構成の理解、構築〜運用ができるレベルになろう!」

「運用管理の基礎知識を身につけているレベルになろう!」

「サーバの基本的なトラブルシュートを一人で実施ができるレベルになろう!」

「Webサービス稼働に必要な環境構築ができるレベルになろう!」

「仮想技術を理解・運用することができるレベルになろう!」

「クラウドを運用することができるレベルになろう!」

「脆弱性診断(テスト)ができるレベルになろう!」

3年目くらいに頑張って学ぼう!

今後整理、追加します…

「アーキテクチャを理解できるレベルになろう!」

「方針を理解したうえで、テストの設計・実行ができるレベルになろう」

・・・

補足

  • MacやWindowsの操作などITに関する一定以上のリテラシーはあることを前提にしています。
  • 言語の部分はRuby、OSはLinux、DBはMySQL、クラウドはAWS、JavaScriptのフレームワークは Vue.js からはじめた人を前提にしています。
  • NoSQL(RedisやDynamoなど)、正規化・非正規化などのテーブル設計とか入っていないものもいくつか・・・今後追記していきたい。
  • 弊社の状況に合わせた内容であるため、一般とあっていないとこがあるかもしれません。

 

まとめ

基礎から理解して、「再現性」と「実効性」の高いレベルになってほしい。たまたま簡単な改修に当たった→できた!だけでは再現性がなく、勘違いも生まれやすく後々苦しみます。

基礎を理解せずに、ツールを使って動くものを作る、というだけの中身のないエンジニアになって欲しくはない。

  • ex.「設計」をするのに、機能だけでなく、非機能、サーバー、DB、PG(アルゴリズムなど)、ビジネスの拡張性を踏まえてどういう設計にすべきか?などを考えて設計できるかどうか?
  • ex.「テスト」をする/テストコードを書くのに、どんなケースを書かなければ、網羅しなければならないのか?を知識として知り、それをコードに落とすことができるか?

・・・そのために、最低限、どういう知識を身につけておけばいいのか?そのためにどんな本を読んで学べばいいかな?という1つのマップになればいいかなと。