ソフトウェアエンジニア育成について
はじめに
この文書ではソフトウェアエンジニア育成の要点整理と考え方を示します。 現在、業務委託として参画している企業で共有した文書を公開できる形に書き直したものになりますので、 観点が偏っている可能性がありますが一定の価値があるかなというところでブログポストとしてまとめることにしました。
文書の構成としては
- ソフトウェアエンジニアの能力の構造の定義
- ステップアップの手段
について記載していきます。
Engineering Ladder について
ソフトウェアエンジニア市場における各々のソフトウェアエンジニアの絶対値を表現するための指標としての Ladder 例を定義します。 私の経験則的に、ほとんどの会社での Ladder 定義と近しい内容になっているように見えたので Urban Airship の事例 を引用します。
Ladder 例
Urban Airship の事例からの引用で 4 段階分のソフトウェアエンジニアのレイヤを示します。(マネジメント分類は含んでいません)
職業としてのソフトウェアエンジニアは Ladder 表の Lv.1 からキャリアをスタートし(例外はあります)、徐々に数値が上の Lv にレベルアップしていくイメージの成長曲線になります。 私の経験則としては、上記表の各 Lv は以下のイメージになります。
- Lv1
- 初学者、日本だと新卒でソフトウェアエンジニアになった人たちのゾーン
- 1〜3年で Lv2 になることを期待されている人たちになります
- Lv2
- 世界のソフトウェアエンジニア市場のボリュームゾーン
- 取り扱っている事業が小さい企業のソフトウェアエンジニアは扱うシステムが小さいがゆえにこのゾーンに滞留しがちです
- Lv3
- グローバルトップ以外の企業であれば、どのような企業でもソフトウェアエンジニアをやれるゾーン
- アーリーステージのスタートアップで CTO (システムが簡単な事業の場合によく見ますね)
- Lv4
- シニアエンジニア・リードエンジニア・スタッフエンジニアなど、上級エンジニアのタイトルが付くゾーン
- アーリーステージのスタートアップでの CTO (システムの難易度が高い事業の場合ですね)
- レイターステージのスタートアップで TechLead、たまに CTO
- 日本のメガベンチャーで 1 ラインを任せて数億〜数十億を作る期待値のソフトウェアエンジニア
- 開発組織が 100 人で構成されていたとすると 5〜10 人がこのゾーンです(これくらいいないと回らない)
ソフトウェアエンジニア育成プラン: No.1 課題図書をこなす
ソフトウェアエンジニアを育成することは非常に難しく、一般的な人材育成のようにフォーマットを揃えたカリキュラムを実施しただけでベースラインをクリアできるようなものではありません。 本質的な問題は、ソフトウェアエンジニアが成長するステップの最初の一段目を登ることが非常に困難なことに由来しています。 IPA の基本情報処理技術者試験のシラバス の巨大さをみると一目瞭然ですが、 最初の一歩目に求める知識量が大きすぎることそのものが原因です。
そこで、最初の一段目を登るにあたり必要な要素を明確にすることを目的として課題図書リストを定義する試みを実施した結果を以下に記載していきます。 課題図書をこなしていく対象は、上記 Ladder でいうところの Lv1. Associate Engineer を想定しています。
課題図書
分類は基本情報処理技術者試験の分類を参考にしています。 (一部 Wikipedia などの外部サイトを参照しています)
概論・スタンス
- 達人プログラマー
- 優秀なプログラマの姿とはどのような姿かを理解することができます。それを通じてそこに到達するための道筋がみえるようになります。
- スーパーエンジニアへの道―技術リーダーシップの人間学
- よきソフトウェアエンジニアとしての心得が書いてある古典です。
基礎理論
基礎理論: 数学 / 情報理論 / 通信 / 計測 / 制御
- Wikipedia/計算機科学
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/ソフトウェア工学
- ざっと目を通して脳内インデックスを作っておくとよいです
アルゴリズムとプログラミング: データ構造 / アルゴリズム / プログラミング / 言語
- Wikipedia/データ構造
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/アルゴリズム
- ざっと目を通して脳内インデックスを作っておくとよいです
- リーダブルコード――より良いコードを書くためのシンプルで実践的なテクニック
- タイトルママな感じで、よいコードとは?が理解できるようになります
- Code Complete 第2版 完全なプログラミングを目指して
- 2000年代の本なので内容古めではありますが、ソフトウェアエンジニアとして日々活動する中で行っている活動をよりよくするためのお話がたくさん書いてあります
- プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで
- スタートアップでは Rails を使うことが多いかと思いますので、Ruby 言語の本で一番評判良さそうな本をでピックアップしてみました
- JavaScript Primer 迷わないための入門書
- こちらもスタートアップでは Web のバックエンドもフロントエンドも全部やると思いますので、Javascript 言語の本で新しめでちゃんとした人が書いてそうな本をピックアップしてみました
コンピュータシステム
コンピュータ構成要素: プロセッサ / メモリ / バス / 入出力デバイス / 入出力装置
- Wikipedia/コンピュータ
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/コンピュータの構成要素
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
システム構成要素: システムの構成 / システム評価指標
- 外部サイト/システムの評価指標
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
ソフトウェア: OS / ミドルウェア / ファイルシステム / 開発ツール / OSS
- Wikipedia/オペレーティングシステム
- ざっと目を通して脳内インデックスを作っておくとよいです
- オペレーティングシステム 第3版
- 古典です。OS を作りたくなったときに読む教科書的立ち位置の書籍になります。
- パーフェクト Ruby on Rails 【増補改訂版】
- スタートアップでは Rails を使うことが多いかと思いますので、Rails 本で一番新しい本をピックアップしてみました
- メタプログラミングRuby 第2版
- こちらも Rails のコードを読むにあたってメタプログラミングをわかっておかないと読めないのでピックアップしてみました
- Wikipedia/ファイルシステム
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/バックアップ
- ざっと目を通して脳内インデックスを作っておくとよいです
- 外部サイト/開発ツール
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/オープンソースソフトウェア
- ざっと目を通して脳内インデックスを作っておくとよいです
技術要素
ヒューマンインターフェース: 技術 / 設計
- 外部サイト/情報アーキテクチャとは
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/ユーザビリティ
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/アクセシビリティ
- ざっと目を通して脳内インデックスを作っておくとよいです
- Web制作者のためのCSS設計の教科書 モダンWeb 開発に欠かせない「修正しやすいCSS」の設計手法
- スタートアップでは Web のバックエンドもフロントエンドも全部やると思いますので、CSS 本の中でちゃんとした人が書いてそうな本をピックアップしてみました
マルチメディア
- 外部サイト/マルチメディア
- ざっと目を通して脳内インデックスを作っておくとよいです
データベース
- Wikipedia/データベース
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/関係データベース
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/データベース設計
- ざっと目を通して脳内インデックスを作っておくとよいです
- Wikipedia/Template:Database
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
- MySQL5.6リファレンスマニュアル/最適化
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
- SQLアンチパターン
- ざっと目を通して脳内インデックスを作っておくとよいです
- テーブル設計の際に思い出しつつ、むやみにアンチパターンを踏み抜かないようにしたいですね
- 外部サイト/Dive Deep Redis ~ 入門から実装の確認まで ~
- ざっと目を通して脳内インデックスを作っておくとよいです
ネットワーク
- Wikipedia/インターネット・プロトコル・スイート
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
- マスタリングTCP/IP 入門編(第6版)
- 古からよく読まれてきた、TCP/IP を中心としたネットワークの基礎を学ぶための最初の一冊です
- Webを支える技術 ―― HTTP,URI,HTML,そしてREST
- タイトルママですが、HTTP / URI および REST について学べます
- Web サービスの開発をするにあたって、ひとまず読んでおいて損はないと思います
セキュリティ
- 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理と対策の実践
- もしかすると古くなっているかもしれませんが、タイトル通り全体的によくある脆弱性を理解するのに役立つ内容だったと記憶しています
- OWASP Japan
- OWASP(Open Web Application Security Project) Japan のポータルサイトです。OWASP Top 10(PDF) など脆弱性の流行に関するレポートやその対策についてなどを網羅的かつ体系的に整理してくれてるありがたいサイトです。
- 外部サイト/一番分かりやすい OAuth の説明
- 事実上、Web サービスでの認可プロトコルの標準となった OAuth の解説記事です
- Authlete という OAuth/OIDC プロバイダーの会社をやってる川崎さんが qiita に良質な記事を大量にあげてくれてるので紹介してみました。
開発技術
システム開発技術: 要件定義・方式設計・詳細設計・構築・結合・適格性確認・導入・受け入れ・保守・廃棄
- 要求仕様の探検学―設計に先立つ品質の作り込み
- 手法の話ではなく考え方そのものに焦点をあてている、上流工程を取り扱う良質な古典です。
- [入門+実践] 要求を仕様化する技術・表現する技術 〜仕様が書けていますか?
- 事業をソフトウェアで表現する際の、要求〜仕様化する際の話が書いてあります
- 仕様を書くための技術についての書籍は、この本もそうですが、硬くて読みづらい本が多くて紹介しづらいですね…
- ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
- もしかすると絶版してるかもしれません
- 1章の「パターン」部分を読んで、残りはざっと目を通して脳内インデックスを作っておくとよいです
- エンタープライズアプリケーションアーキテクチャパターン
- ざっと目を通して脳内インデックスを作っておくとよいです
- オブジェクト指向における再利用のためのデザインパターン
- ざっと目を通して脳内インデックスを作っておくとよいです
- ソフトウェアテスト入門 押さえておきたい«要点・重点»
- もっとよい本があるかもしれませんが、私の手持ちの本でソフトウェアテスト全般を理解できるものはこれだったのでピックアップしてみました
- ざっと目を通して脳内インデックスを作っておくとよいです
- Everyday Rails - RSpecによるRailsテスト入門 テスト駆動開発の習得に向けた実践的アプローチ
- スタートアップでは Rails と RSpec を使うことが多いかと思いますので、RSpec の本で定番のこちらをピックアップしてみました
開発管理: 開発プロセス・手法・知的財産・開発環境管理・構成管理・変更管理
- Wikipedia/ソフトウェア開発工程
- リンク先含めてざっと目を通して脳内インデックスを作っておくとよいです
- ウォーターフォール・モデル / Vモデル / アジャイルソフトウェア開発 あたりも目を通しておくとよいです
- Wikipedia/ソフトウェアプロジェクト管理
- ざっと目を通して脳内インデックスを作っておくとよいです
- 担当になったら知っておきたい「プロジェクトマネジメント」実践講座
- 概要部分から体系的に学習するのに良さそうなのでピックアップしてみました
- アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~
- アジャイル x プロジェクトマネジメントの本としては最もしっかりした内容になっていたと記憶しています
- Wikipedia/ソフトウェア構成管理
- ざっと目を通して脳内インデックスを作っておくとよいです
Web の歴史を通して学ぶシリーズ
- [24時間365日]サーバ/インフラを支える技術 ……スケーラビリティ、ハイパフォーマンス、省力運用
- Web 界隈が事業的にも技術的にも急速に成長していた 2000 年代後半の様子がわかります
- 高負荷なサービス運営の勘所のようなところを学ぶことができます
- 記載されている要素技術は現代では役に立たないと思います
- [Web開発者のための]大規模サービス技術入門 ―データ構造,メモリ,OS,DB,サーバ/インフラ
- 2010 年前後の日本でもっとも負荷が高いサービスのひとつであったはてなブックマークなどの様子を通して高負荷なサービス運営の勘所を学べます
- Mobageを支える技術 ~ソーシャルゲームの舞台裏~
- DeNA さんの最盛期であった 2012 年頃の高負荷サービスの運営の勘所を学べます
- ソーシャルゲームなので、Read < Write なシステムとは?といったあたりが学びになるかとおもいます
ソフトウェアエンジニア育成プラン No.2 xxx
以降は後日追記します〜!
おわり