概要
- 技術的センス と 技術的スキル は異なる概念
- センスは 価値観の選択 に関わり、スキルは 能力 に関わる
- ソフトウェア開発では 価値観の優先順位 がセンスを決定
- 柔軟性の欠如 が悪いセンスの主因
- 良いセンスは 状況に応じた価値観の選択 で判断
技術的センスと技術的スキルの違い
- 技術的スキル :勉強や反復によって向上する能力
- 技術的センス :どのようなコードや設計が「良い」と感じるかという 価値観
- スキルが高くてもセンスが悪い、逆に スキルが低くてもセンスが良い 場合も存在
- 料理で例えると、「味の違いが分かるが、まだ自分で作れない」状態がセンス先行
- センスは 経験や観察、 価値観の選択 で育つ傾向
ソフトウェアにおけるセンスの指標
- どんなコードが「美しい」と思うか
- どんなコードや設計が「醜い」と感じるか
- どの設計判断に強い満足感を覚えるか
- どんな技術的問題に強い関心やストレスを感じるか
- どの問題を簡単に受け流せるか
センスとスキルの違いの具体例
- 例:mapやfilterの利用を好むエンジニアとforループを好むエンジニア
- mapやfilterは 純粋関数 でバグが減る、直感的に「良い」と感じる
- 一方、Golangのようにforループが性能的・拡張的に優れている場合も
- 好み=価値観の違い であり、スキルの優劣ではない
技術的センスの本質
- ソフトウェア設計は トレードオフ の連続
- 全ての技術的判断にはメリットとデメリットがある
- 未熟なエンジニア :自分の好みを「絶対正しい」と思い込む傾向
- 成熟したエンジニア :両方の立場や価値観を理解し、状況ごとに最適な選択を意識
- センスとは「技術Xが技術Yより常に優れている」ではなく、「この状況ではXのメリットがYを上回る」と判断できる柔軟性
エンジニアの価値観(センス)を構成する要素
-
Resiliency(耐障害性) :障害発生時の自動回復力
-
Speed(速度) :理論上の限界にどれだけ近いか
-
Readability(可読性) :新規参加者への説明容易性、短く分かりやすい関数名、ドキュメントの充実度
-
Correctness(正確性) :不正な状態の防止、テストや型・アサートの徹底、形式手法の活用
-
Flexibility(柔軟性) :拡張・修正の容易さ、影響範囲の小ささ
-
Portability(移植性) :特定環境への依存度、他環境への再展開の容易さ
-
Scalability(スケーラビリティ) :トラフィック増加時の対応力、自動スケールの可否
-
Development speed(開発速度) :拡張の速さ、専門知識の必要性
-
その他: エレガンス、最新技術、オープンソース活用、運用コスト など
- 価値観の優先順位が 個々のセンス を決定
- 例: 速度・正確性重視ならRust、 可搬性よりスケーラビリティ重視ならAWS特化 など
悪いセンスの特徴
- プロジェクトに合わない価値観 を押し付ける傾向
- 過去の成功体験から「自分の好きなやり方」を強く主張
- 「ベストプラクティスだから」と 文脈を無視した判断 をする
- 柔軟性の欠如 =悪いセンス
- 特定領域では有効でも、 環境やプロジェクトが変わると機能しなくなる
良いセンスの特徴
- 技術的能力 よりも 状況に合った価値観の選択 ができること
- お題や模擬問題ではなく、 実際のプロジェクト で成果が出ているかで判断
- 様々な種類のプロジェクトで 設計判断が成功しているか が指標
- 柔軟性と観察力 を持ち、状況ごとに価値観の優先順位を調整できる
良いセンスの育て方
- 多様なプロジェクト経験 を積む
- 各プロジェクトで「どこが簡単で、どこが難しいか」に注目
- 普遍的な正解や強い意見 を持ちすぎず、柔軟性を重視
- 時には 経験より早くセンスを身につける人 も存在
まとめ
- 技術的センス は、プロジェクトごとに最適な価値観を選び取る能力
- 柔軟性と観察力 が良いセンスの鍵
- 自己の価値観 を絶対視せず、状況に応じて変化させる姿勢が重要