msawady’s engineering-note

なにも分からないエンジニアです。

スペシャリストを目指すためのダイナミックスキル理論

これはFOLIOアドベントカレンダー5日目の記事です。

はじめに

  • マネージャーになる気はないし、スペシャリストとしてキャリアを進めていきたい
  • とはいえ、最近は技術的に困ることが無くなったせいか、成長している感じがしない...

そんな思いを持っているミドル〜シニアなエンジニア、あるいはそんなエンジニアをサポートするマネージャーへのヒントとして、「ダイナミックスキル理論」を紹介したいと思います。

ダイナミックスキル理論とは?

ダイナミックスキル理論は成人発達理論のひとつで、カート・フィッシャーによって提唱された能力の成長に関する理論です。 「能力は多様な要因によって影響を受けながら、動的に(=ダイナミック)成長するものである」というアイデアを根幹として、人々の能力の成長を説明します。

この理論では、スキルは階段のように段階的に成長するのではなく、網の目のような相互に影響しあうネットワークのように成長すると捉えています。

また、それらのスキルは常に一定に発揮されるのではなく、課題や環境などの外部要因だけでなく、体調/メンタルなどの内部的な要因にも依存して発揮される程度が変わります。 そのような影響を受けながら実践を積むことで、スキルが「動的に」成長していくとしています。

この「スキルが動的に発揮され、成長していく」というのは直観的にも分かりやすく、以下のような例で日常的に起こっています。

  • 寝不足の日にパフォーマンスが出ない(内部要因)
    • → 業務を調整する、人を頼るスキルを発揮する
  • 同じ言語の実装でも新しいコードベースだと開発速度が落ちる(課題依存性)
    • → コードベースのお作法を学んで実装できるパターンが増える
  • スタートアップで活躍したメンバーが大企業で活躍できない(環境依存性)
    • → 会社に合わせて仕事の進め方をチューニングする

5つのスキル変容原則

ダイナミックスキル理論の中で、スキルが次のレベルに成長する(=変容する)ときの5つの原則が示されています。

  • 統合化(Intercoordination)
  • 複合化(Compounding)
  • 焦点化(Focusing)
  • 代用化(Substitution)
  • 差異化(Differentiation)

これらを組み合わせながらスキルが成長していくとしています。それぞれの原則を順番に見ていきます。

統合化(Intercoordination)

統合化は、複数のスキルを相互作用を持って組み合わせて、次のレベルのスキルを発揮できるようになることを指します。 線と線が繋がって面になる、つまり次元の変化を伴うような、まさに"飛躍"といえるような働きです。

具体的には、複数のスキルを組み合わせて課題に取り組む中で、当初は組み合わせて発揮できなかった各々のスキルたちが、試行錯誤を重ねて相互作用を生む形で統合できるようになる、といった動きを指します。

例としては「APIサーバーの実装」が挙げられます。「Javaの実装」「DB・SQLの利用」「HTTPサーバーの理解」といった要素を組み合わせて試行錯誤する中で、「APIサーバーの実装」という一つ上の次元のスキルを発揮できるようになる、というイメージです。

統合化には時間がかかります。統合化の基盤となるスキルの習熟、それらを統合できるようにするための訓練が必要になるからです。

統合化を実現し、複数の能力を相互作用を生む形で統合して質的な成長(垂直的な成長)を生むために、続く4つの変容原則を組み合わせていきます。

複合化(Compounding)

複合化は複数のスキルを組み合わせて、新たなスキルを発揮できるようになることを指します。

具体例としては、「DBのスキーマ管理ツールの利用」が挙げられます。「ライブラリのインストール」「DDLの実装」「タスクランナーの利用」といった既存の知識を組み合わせることで、「DBのスキーマ管理ツールの利用」というスキルを得られる、というイメージです。

統合化と似ていますが、複合化は"足し算"で、統合化は"掛け算"というイメージです。 複合化は量的な成長(水平的な成長)を生むもので、比較的短時間で成し遂げられます。また、統合化では要素となるスキル自体にも変化が起きるという点で違いがあります。(後述する差異化のプロセス)

焦点化(Focusing)

焦点化は状況や課題を解決するために、必要なスキルを選択する能力です。 新たなレベルのスキルを会得する統合化には時間がかかりますが、既存のスキルを正しく選び、組み合わせることで効率的な課題解決につながります。 また、統合化を成し遂げるための要素スキルを見抜くスキルを高めることで、統合化を効率的に進められるようになります。

具体例として「CIを回したい」という課題に対して、「Gradleを使おう」といった技術の選択をすることが挙げられます。

代用化(Substitution)

代用化は、ある課題を通じて獲得したスキルを一般化させて、他の課題に対して活用することです。 課題の性質が似ている場合には、ほとんど同じレベルでスキルを発揮できる一方で、課題の性質が異なる場合には代用化の働きが弱まります。

具体例としては、MySQLを利用した経験があるのでPostgresにもキャッチアップできる、といったケースが挙げられます。

差異化(differentiation)

差異化は、あるスキルを細かなサブスキルに細分化し、それぞれのサブスキルのレベルが向上することを指します。

差異化と統合化は補完関係にあるとされています。なぜならば、統合化を成し遂げる過程の中でそれぞれのスキルのレベルが上がるからです。

例えば、統合化の中で説明した「APIサーバーの実装」を出来るようになるためには、「Javaの実装」というサブスキルをとっても「DBとのadapter実装」「レイヤーを分けた実装」「クラスやインターフェースの分割」など、様々な面でレベルアップすることが想像されます。 また、「DB/SQLの利用」というサブスキルに関しても「DDLの理解」「トランザクション管理」「インデックスやパフォーマンスの理解」などの面でレベルアップしています。

統合化にいたるための5つの変容原則まとめ

5つの変容原則は、以下のような関係になっています。

5つの変容原則の関係

まず、ゴールとなるのは「統合化」で、それに向けて他の変容原則を適用してスキルを伸ばしていきます。 「焦点化」によって発揮すべきスキルを見定め、「複合化(A+B=D)」や「代用化(C→E)」によってスキルを獲得します。「統合化」するための試行錯誤の中でスキルの「差異化(C→C+1, B→B+1)」が起こり、最終的に「統合化(N+1の獲得)」がなされます。

スペシャリストを目指すためにダイナミックスキル理論を取り入れる

ここまで、ダイナミックスキル理論および5つのスキル変容原則を見てきました。これらはスペシャリストとしてスキルを高めていくための大きなヒントになると思います。 具体例として、以下の3つの方策を挙げて考えていきます。他にも様々な方策が考えられるので、自分のwillや環境にあった方策を考えてみるのが良いでしょう。

  • 違うチームで働いてみる
  • 毛色の違うスキルを身につける
  • ニッチなスキルを伸ばす

違うチームで働いてみる

ダイナミックスキル理論の根幹である「能力は多様な要因によって影響を受けながら、動的に(=ダイナミック)に成長していくものである」というアイデアを安直に 取り入れて働くチームを変えるのは、飛躍のきっかけになりえます。

チームが変わり環境や課題が変化することで、今までとは違う実装方法を試したり、出来ることができなくなったり、逆に出来ないことが出来るようになったり...といったことが起こりやすくなります。 そういった環境や課題による自身のスキルの「変動性」を経験することで、「スキルの網の目」がより強くなっていくでしょう。

また、個人の振り返りやマネージャーとの1on1などで「変動性」を言語化して認識することで、変容原則の中の「差異化」や「代用化」を引き起こしやすくなり、「統合化」を起こしやすくなると考えられます。*1

毛色の違うスキルを身につける

統合化を起こすための条件に「複数の一定レベルのスキルを保持していること」があります。そのため「エンジニアリング」のスキルだけでは統合化を起こしづらい面があります。

いわゆる"マネージャー"は既存の「エンジニアリング」のスキルに加えて、「マネジメント」のスキルを伸ばして統合していくという分かりやすい成長の方法があるのに対し、スペシャリストは統合する他のスキルが自明でないのが難しいところではないでしょうか。

逆に言えば、統合する別のスキルを身に着けて伸ばしていくことで、スペシャリストとして成長していけると考えられます。

  • ビジネスメンバーと対等に議論できるようなビジネス知識
  • デザイナーと同等ののUIやUXに関する体系的な知識やスキル
  • バックオフィスメンバーと同レベルの経営管理の知識...

このような「エンジニアリング」とは距離のあるスキルや知識を身に着け、それを「エンジニアリング」と統合することで一つ上のレベルへ移行するチャンスが得られます。

難しい点として、自分自身を"エンジニア"として捉えてしまうと、エンジニアリングと距離のあるスキルを身につけるモチベーションが得難いことが挙げられます。また、新しいスキルを身につける間は"エンジニア"としてのパフォーマンスよりも数段低いパフォーマンスしか出せない期間があることを受け入れる必要があります。

ただ、ダイナミックスキル理論をもとに「成長のための1ステップ」として捉えることができれば、そういった精神的な障壁と向き合って乗り越えやすくなるでしょうし、支援するマネージャーも伴走しやすいのではないでしょうか。

ニッチなスキルを伸ばす

こちらは、主に「差異化」に着目したアプローチです。

ミドル〜シニアエンジニアであれば、これまでの経験の中で様々なスキルを身に着けてきているでしょう。一方で、意外と知らない分野や、あまり理解せずに使っている技術、などもあるのではないでしょうか。

例えばですが、以下のような分野すべてに精通している、という方は多くないと思われます。

  • 認証・認可
  • QA・品質保証
  • データベース
  • 並行処理やマルチスレッドプログラミング

このような、(自分にとって)ニッチなスキルについての知識の穴を埋めたり深ぼったりすることで、既存の高いレベルのスキルとの「統合化」が起こりやすくなると考えられます。

おわりに

具体的なアクションは比較的ありふれたものになりますが、ダイナミックスキル理論というフレームを通すことでより立体的に捉えられるようになったと感じています。 自分自身を分析することでスキル形成やキャリア形成を考えるヒントになっただけでなく、社内外の「すごい人」を分析して「統合化」されている要素を考えることで、様々なヒントが得られたと考えています。

スペシャリストを目指すエンジニアのスキル形成、あるいはそれを支援するマネージャーの参考になれば幸いです。

参考文献

*1:コルプの経験学習モデルなどにも通じる話ですね