#これってなんなの?
**【ど素人状態=社会人になって初めてプログラミングを勉強したぜ!(特に新卒)】でスタートした方々が【3年生】**ぐらいになったら読むと良い本まとめです。
**「どんな目的で学ぶか?」*「職種(バックエンド/フロントエンド/SRE・インフラ/データエンジニア/どの職種のエンジニアも)」**で整理しました。
[「【Webエンジニアど素人から3年生ぐらいになるまでに読むと良い本】を段階的にまとめた」] (https://qiita.com/JunyaShibato/items/3aa5f7f3fc991de17f3f)の続編です。少しでも皆さまの学びと成長に貢献できると幸いです。
”Webエンジニアど素人が、3〜4年生くらいになったら読むといい本”の段階的まとめ(一部外部記事あり)
バックエンドエンジニア
###「より整理・洗練されたコードに改善できるレベルになろう!」
###「複雑なドメインに対する基本原則を理解して設計できるレベルになろう!」
###「アーキテクチャを考えられる、理解できるレベルになろう!」
- Clean Architecture 達人に学ぶソフトウェアの構造と設計
- ビューティフルアーキテクチャ (THEORY/IN/PRACTICE)
- Design It! ―プログラマーのためのアーキテクティング入門
- データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理
- エンタープライズ アプリケーションアーキテクチャパターン
###「フレームワークに頼るだけでなく、今一度、仕組みから学び直そう!」
- Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術
- コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方
- 暗号技術入門 第3版 秘密の国のアリス
- ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
###「DB設計、パフォーマンスチューニングの知識を見直そう!」
フロントエンドエンジニア
###「ブラウザの仕組みを理解して、パフォーマンス改善できるレベルになろう!」
###「デザインのことも理解して、UI/UXを継続的に改善できるレベルになろう!」
- 誰のためのデザイン?
- Material Design
- Human Interface Guidelines - Apple Developer
- Sociomedia ヒューマンインターフェース ガイドライン
- ユーザーエクスペリエンスの測定
###「今一度、JavaScriptを言語仕様、お作法から理解するレベルになろう!」
インフラ・SREエンジニア
###「SREの使命は?を理解しよう!」
###「柔軟かつ迅速に対応できるシステムインフラを実現するための知識を身につけよう!」
- 入門 監視 ―モダンなモニタリングのためのデザインパターン
- Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
- 高信頼システム構築標準教科書
- 詳解 システム・パフォーマンス
- Building Secure and Reliable Systems
###「ハイパフォーマンスを実現するケイパビリティを理解し、実践できるレベルになろう!」
- LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する (impress top gear)
- The DevOps ハンドブック 理論・原則・実践のすべて
- The DevOps 逆転だ!
- The Site Reliability Workbook: Practical Ways to Implement SRE
- 継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化
###「今一度、ネットワークの基礎を学び直そう!」
###「今一度、体系的にOS・クラウドの基礎を学び直そう!」
- Linux教科書 LinuCレベル2
- AWS認定ソリューションアーキテクト-プロフェッショナル
- Amazon Web Servicesインフラサービス活用大全 システム構築/自動化、データストア、高信頼化 impress top gearシリーズ
##どの職種のエンジニアも
###「前例としてどんなキャリアがあるのか?も知って、今一度自分自身と向き合って、改めて楽しく目的・目標を設定しよう!」
- SOFT SKILLS ソフトウェア開発者の人生マニュアル
- CAREER SKILLS ソフトウェア開発者の完全キャリアガイド
- エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド
- 情熱プログラマー ソフトウェア開発者の幸せな生き方
- スーパーエンジニアへの道―技術リーダーシップの人間学
###「ソフトウェア品質の全体像、対策を理解したレベルになろう!」
###「テストも一体化したソフトウェア開発を実現しよう!」
###「品質をビジネスと繋げて理解しよう!」 *QAエンジニアの人だけでもいいかも
###「不確実性を見える化するプロジェクト管理の基礎を理解しよう!」
###「正確に要求を分析できるレベルになろう!」
- モデルベース要件定義テクニック
- 【改訂第2版】[入門+実践]要求を仕様化する技術・表現する技術 ~仕様が書けていますか?
- 正しいものを正しくつくる プロダクトをつくるとはどういうことなのか、あるいはアジャイルのその先について
##おまけ:データエンジニア、データサイエンティスト(ここは1年目に読んだ方がいいものも混じってますmm)
###「ビッグデータの使い所、各ミドルウェアの分類などを把握するレベルになろう!」
###「データサイエンスの実践的な技術を身につけよう!」
###「機械学習って何が実現できるのか?の基礎知識を身につけよう〜機械学習を深堀ろう!」
###「自然言語処理に関連する動向をキャッチアップしよう!」
#補足
弊社都合で、DBはMySQL、クラウドはAWSだけを対象にしています。
#対象読者
動くものは作れるようになった!! が・・・
- あれ?後輩に説明ができない…
- データが増えたら急に動かなくなる…
- ファイルサイズが大きくなると動かない…
- 調査しようとしたらログが追跡できない…
- TOIL多いよ…
- リリースするたびにエラーが生じる…うんざり…
- 1つ共通の処理を追加したいが、変更が多岐に渡りすぎる…
- 何が足りなくて何を得ればいいのか、どの技術領域を学べばいいのか…
- “簡単に”作ってという言葉にイラつく…
などなど・・・という経験をしたことのある方もいらっしゃるのではないでしょうか。「ただ動くもの」と「いいもの」「使えるもの」「誇れるもの」とのギャップ。そういった方々に少しでも学びと成長になることを願っています。
仲間への想い
昔も今も尊敬している人に「インプットの質はアウトプットの質で決まる」(Goal-setting)と教わりました。何かを読む際にはどんな目的で読むのか、どんな行動をしたくて読むのかを設定して読むと効果が高まると考えています。
また、技術書紹介の中で矛盾するかもしれませんが、
実際のところ、ソフトウェア開発上の問題の多くは、技術的というより社会学的なものである。
つまり、技術は大事、でも問題の多くは組織・人間系が原因であるという視点、そして、技術の先にある目的(お客様の問題解決・願望の実現、成し遂げたいこと・貢献したいことなど)も大事にしていきたいと思っています。これらをORではなくANDで考えられるエンジニアになって欲しいと思っています。
最後に
3年〜4年目くらいですと、ご自身の興味や向き不向き、キャリアに対するお考えを元に、ある程度領域を絞って専門性を磨いている/磨こうという方が多いのではないでしょうか。
「新卒の子にどこまで勉強すれば良いですかね?と聞かれた件」の記事でもおっしゃっているように、分野や職種は以下のように5つあったり、
- Application Engineer
- Infrastructure Engineer
- Database Administrator
- Security Engineer
- Technical Program Manager
[「ITエンジニア職種一覧・種類と仕事内容を解説」] (https://www.bigdata-navi.com/aidrops/3115/) などでは、片手では数えられないぐらい細分化しています。
今回の記事で分類した職種、役割は、弊社の状況に合わせた内容かつ、一部であるため、一般と合っていない所があるかもしれません。組織の規模やステージにもよると思いますが、多くのソフトウェア企業でも共通して存在する職種だと思うので、何か1つでも助けになればと思います。
日々新たな技術や分野が誕生し、学び続けることは大変だという壁に当たっている方もいらっしゃるかもしれませんが、楽しみながら学んでいきましょ〜!
「これを知る者はこれを好む者に如かず。これを好む者はこれを楽しむ者に如かず」孔子『論語』
(何かを知っているだけという人は、それを好む者には負けてしまう。好きだ、という人は楽しむ人には及ばない。という意味)
メリークリスマス🎅🤶