「一度作ったら終わり」は、ソフトもキャリアも“死”を意味する。
どうも!海外(例えばシンガポールあたりを想定)で、しぶとくITエンジニアとして生き延びている者です。メインの仕事はC#を使ったWPFアプリケーションの設計と開発。クライアントのデスクトップで動く、ちょっと堅めの業務システムをゴリゴリ作ってます。
「え、今どきWPF?しかも海外で?」
って思った人、多いでしょ(笑)。ぶっちゃけ、こっち(海外)のスタートアップとかWeb系だと、WPFの「ワ」の字も聞かない日はザラにあります。それでも、特定の業界(金融とか製造とか)ではまだまだ現役バリバリ。まぁ、その話は置いといて。
よくTwitter(あ、今はXか)のDMとかで、日本で働いてるエンジニアの後輩たちから相談をもらうんすよ。
「海外で働きたいんですけど、どの技術を勉強すればいいですか?」
「C#(.NET)って、海外でも通用しますか?」
「とりあえず、TOEIC何点あればいいですか?」
こういう質問、すごく分かります。僕も日本にいた頃は、まったく同じこと考えてましたから。
「これを学べば安泰」っていう、最強のスキルセット、いわば「銀の弾丸」が欲しかった。
日本にいた時の僕のキャリアプランって、すごく「静的(Static)」だったんすよね。
当時の僕の設計図はこんな感じ。
- まず、C#とWPFを極める。誰にも負けない「WPFマスター」になる。
- そのスキルを武器に、日本の大手SIerでポジションを確立する。
- あわよくば、そのスキルセットが評価されて海外支社に転籍…!
これって、ソフトウェア開発でいうところの「ウォーターフォール型キャリアプラン」なんですよ。一度ガチガチに要件定義(=目標設定)したら、あとはその通りに設計・実装(=学習・業務)していく。
でも、このプラン、めちゃくちゃ脆い。
僕らが作るソフトウェアで考えてみてください。
最初に「完璧な設計」をしたつもりでも、リリース後に「やっぱ、あの機能も欲しい」「この仕様、今の業務と合ってないわ」って、クライアントから腐るほど要望が来ますよね?
技術的な面でも、「あ、こっちのライブラリの方がイケてるわ」「OSのアップデートで、この部分動かなくなったんだが」みたいな(苦笑)。
もし、そのシステムがガチガチの「静的」な設計、つまり「変更」を一切想定していないモノリシック(一枚岩)な構造だったら?
…はい、地獄の始まりっすよね。
ちょっとした変更のために、コードのあちこちを修正しないといけない。デグレ(修正したら別のバグが出ること)に怯えながら、深夜までデバッグ。機能Aと機能Bがベッタリと密結合してるから、Aを触るとBが死ぬ。マジで最悪。
こういうシステムって、どうなるか分かります?
最初は頑張ってメンテするけど、だんだん誰も触りたがらなくなる。修正コストが新規開発コストを超える。そして、ゆっくりと「技術的負債」の塊になって、塩漬けにされる。つまり「死ぬ」んすよ。
で、これ、キャリアにも全く同じことが言える。
僕が「WPFマスターになる!」って静的なプランを立ててた時、想定してた「要件」は、「WPFの需要が今後も安定して存在する」ことでした。
でも、いざ海外に出てみたら、市場(クライアント)の「要件」は全然違った。
「WPF?あー、知ってるけど、うちは今ReactとNode.jsに移行中なんだよね」
「君のC#のスキルは分かった。で、クラウド(AzureとかAWS)の経験は?」
「つーか、技術の前に、君、ローカルのエンジニアと設計の議論できる?(英語で)」
僕が「完璧だ」と思って磨き続けたスキル(WPF)は、ある場所では評価されるけど、別の場所では「それ、うちじゃ使わないんで」で一蹴されるコンポーネントでしかなかった。
もし僕が「WPFマスター」という一枚岩(モノリシック)なキャリア設計に固執してたら、詰んでました。海外に来たはいいけど、仕事が見つからない。あるいは、WPFを保守するためだけのレガシー部署に押し込められて、新しいスキルが何も身につかない。マジで「塩漬け」キャリアの完成です。
そこで、僕はソフトウェア設計の考え方を、そっくりそのまま自分のキャリア設計に応用することにしたんです。
それが、**「進化するアーキテクチャ(Evolutionary Architecture)」**っていう考え方。
これ、僕が作った言葉じゃなくて、ソフトウェア設計の分野でちゃんと言われてるアプローチです。
一言でいうと、「変更こそが当たり前」という前提に立って、将来の予測不可能な変化にも柔軟に対応し続けられるようにシステムを設計すること。
「静的な設計(Static Design)」が、「最初に決めた要件(ゴール)」に向かってガチガチに作るのに対し、
「進化する設計(Evolutionary Design)」は、「未来のことは分からん」という前提のもと、**変化に対応しやすい「仕組み」**そのものを設計します。
このブログで伝えたいのは、まさにこれ。
海外で働きたいなら、特定の技術(例えばReactとかGoとか)を学ぶのはもちろん大事。
でも、それ以上に大事なのは、あなたのキャリアそのものを「進化するアーキテクチャ」で設計することなんです。
「じゃあ、具体的にどうすんの?」って思いますよね。
そのための具体的な設計原則が、今回のテーマである「アーキテクトのツールキット」です。
- モジュール性(Modularity): 自分のスキルを「WPFエンジニア」みたいに一塊にするんじゃなく、個別に交換可能な「部品」として捉えること。
- 疎結合(Loose Coupling): 特定の会社や、特定の技術スタックに「依存」しすぎない状態をどう作るか。
- 明確なAPI境界(Clear API Boundaries): あなたというエンジニアが、外部(会社や市場)とどう「接続」するか。レジュメ、面接、技術ブログ、その「インターフェース」の設計。
- プラットフォーム非依存(Platform-Agnostic): 「C#エンジニア」である前に、「問題解決者」であるというマインドセット。
小手先の「この技術が儲かる」みたいな話じゃありません。
僕がC#とWPFという、一見するとWeb系全盛の海外ではニッチに見える技術スタックを使いながらも、どうやって変化の波を乗りこなし、自分の市場価値を維持(できれば向上)させているか。
そのための、**超実践的な「キャリアのサバイバル設計術」**を、実体験ベースで全部ぶちまけていこうと思います。
次の「承」のパートでは、早速この「進化するアーキテクチャ」の核となる「モジュール性」について、僕がWPFスキルと他のスキルをどう切り離して設計したかを具体的に話しますね。
キャリアの「モジュール化」:僕がWPFと英語とマネジメントを分離した理由。
「起」のパートでは、「変化に対応できないキャリア設計は、塩漬けのレガシーシステムと同じ末路を辿る」っていう、ちょっと怖い話をしました。
僕らが作るソフトウェアが、変更に次ぐ変更でボロボロになっていくのを防ぐために「進化するアーキテクチャ(Evolutionary Architecture)」っていう考え方がある。
そして、その設計思想を自分のキャリアにも応用しようぜ、と。
じゃあ、その「進化するキャリア設計」の第一歩は何か?
それが、今回のテーマである**「キャリアのモジュール化(Modularity)」**です。
あなたは「WPFエンジニア」という「モノリシック」になってないか?
ソフトウェア設計でいう「モジュール化」って、まぁ分かりますよね。
クソデカい一枚岩(モノリシック)のプログラムを、機能ごとに小さく分割(モジュール化)すること。
例えば、「ユーザー認証モジュール」「決済モジュール」「商品表示モジュール」みたいに。
こうしとけば、仮に「決済モジュール」にバグがあっても、そこだけ直せばいい。他のモジュールへの影響は最小限。「商品表示のデザインを変えたい」ってなっても、そのモジュールだけ交換(アップデート)すればOK。
システム全体が、すごく柔軟で、強くなる。
じゃあ、これをキャリアに当てはめるとどうなるか?
日本にいた頃の僕は、まさに「モノリシック・エンジニア」でした。
僕のアイデンティティは、「C#とWPFが得意なエンジニア」。これだけ。
この「〇〇エンジニア」っていう自己認識、実はめちゃくちゃ危険なんすよ。
なぜなら、「自分」というシステムと、「C# / WPF」という特定の技術コンポーネントが、ガチガチに密結合しているから。
この状態って、気分はいいんすよ。「俺はWPFマスターだ」みたいな。
でも、市場(クライアント)から「ごめん、うちWPFやめてBlazor(Web技術)に移行するわ」って言われた瞬間、「C# / WPFエンジニア」である僕は、そのプロジェクトにおいて価値がゼロになる。
システム(自分)全体がクラッシュするんです。
海外に出て、これが本当に怖かった。
僕のメインスキルはWPF。でも、こっち(海外)のスタートアップが求めるのはReactだ、Pythonだ、Goだ。
面接に行っても、「君のC#スキルは認めるけど、WPFの経験はウチではちょっと…」って言われる。
もし僕が「WPFエンジニア」というモノリシックな塊のままだったら、
「やべぇ、俺のスキルセット、海外じゃ通用しねぇ…」
「今からReactゼロから勉強し直しかよ…もうオワタ…」
ってなって、詰んでました。
自分を「分解」する。「スキル・モジュール」として再設計する
そこで僕は、自分自身を「モジュール化」することに決めたんです。
「俺はWAFエンジニア」と名乗るのをやめた。
代わりに、**「俺は、複数のスキル・モジュールで構成されたITプロフェッショナルである」**と再定義しました。
具体的に、僕(C# / WPFエンジニア)を分解してみます。
【分解前:モノリシックな僕】
- 「C#とWPFを使ったデスクトップアプリ開発が得意なエンジニア」
【分解後:モジュール化された僕】
- モジュールA:
Windowsデスクトップ開発 (WPF)- 機能:XAMLでのUI構築、MVVMパターン、Prismなどのフレームワーク知識。
- 状態:v3.0 (かなり成熟)
- モジュールB:
オブジェクト指向プログラミング (C#)- 機能:C#の言語仕様(LINQ, Task非同期処理など)、.NETランタイムの知識、SOLID原則。
- 状態:v3.0 (成熟)
- モジュールC:
ドメイン知識 (例: 金融・製造業)- 機能:クライアントの複雑な業務フローを理解し、仕様に落とし込む能力。
- 状態:v2.5 (特定の業界に強い)
- モジュールD:
英語コミュニケーション- 機能:技術仕様書の読解、設計に関するディスカッション、コードレビューでの折衝。
- 状態:v1.5 (現在アップデート中)
- モジュールE:
チーム開発・プロセス- 機能:Gitフロー、CI/CDの理解、アジャイル・スクラムのファシリテーション。
- 状態:v2.0 (安定稼働)
モジュール化する「ヤバいメリット」
こうやって自分を「分解」すると、世界がマジで変わって見えます。
メリット1:特定の技術の衰退が怖くなくなる
これが一番デカい。
仮に明日、WPFが「オワコン」認定されたとしましょう。
モノリシックな「WPFエンジニア」だった僕は、キャリア全体がクラッシュします。
でも、「モジュール化」された僕なら?
「あ、モジュールA (WPF) の需要が減ったな。OK、このモジュールは一旦塩漬けにして、新しい モジュールA-v2 (Blazor / Web) を開発(学習)しよう」
ってなるだけ。
重要なのは、僕の価値の「核」はWPFだけじゃなかった、ってこと。
モジュールB (C#のコア知識) は、BlazorでもWeb APIでもそのまま使える。
モジュールC (業務知識) や D (英語)、E (開発プロセス) は、技術スタックが何であろうと、100%再利用可能。
システム全体(僕の市場価値)は、クラッシュしないんです。
部品(WPF)を一個交換するだけで、新しい市場(Web)にすぐ適応できる。
メリット2:自分の「弱点」をピンポイントで強化できる
「モノリシック」だと、自分の弱点が曖昧になります。
「なんか、俺、海外だと評価低いな…やっぱWPFだからかな…」みたいな。
でも「モジュール化」してれば、分析が超カンタン。
「OK、モジュールA (WPF) と B (C#) はシニアレベルで評価されてる。でも、面接でいつも落とされるのは モジュールD (英語) の設計議論の部分だ。よし、今月はDの強化(英会話レッスン)にリソースを全振りしよう」
こんな風に、改善のPCDAがめちゃくちゃ回しやすくなる。
メリット3:自分の「レア度」を戦略的に設計できる
これが海外で生き残るためのキモです。
ぶっちゃけ、モジュールA (WPF) ができるヤツなんて、世界中に腐るほどいます。
モジュールD (英語) ができるヤツ(ネイティブ)なんて、もっといる。
でも、
A (WPF) + B (C#コア) + C (特定の金融業務知識) + D (ビジネスレベルの英語) + E (アジャイルの知識)
…この**「モジュールの組み合わせ」**を持ってるエンジニアは?
そう、一気に激レア人材になれるんです。
僕が今、海外でWPFというニッチな技術で食えてるのは、僕が「WPFマスター」だからじゃない。
「WPFもできるし、英語もできて、金融業務も分かってて、開発プロセスも回せる」
という、**「モジュールの組み合わせの妙」**で市場価値を出してるからです。
まずは、あなたも自分を分解してみてください。
あなたのアイデンティティは、特定の技術名になってませんか?
あなたを構成する「モジュール」は何ですか?
そのモジュールがハッキリすれば、次に考えるべきは「じゃあ、そのモジュール同士がベッタリ依存(密結合)してないか?」ってことです。
例えば、「今の会社の奇妙な独自ルール(モジュールE)」と「あなたの開発スキル(モジュールB)」が密結合しすぎていると、あなたは会社を辞められなくなる。
これが、次の「転」で話す**「疎結合(Loose Coupling)」と「明確なAPI境界(Clear API Boundaries)」**の話につながってきます。
最大の失敗:プラットフォーム(会社や技術)に依存しすぎたあの日。
「承」のパートで、「自分を『モジュール化』しようぜ」って話をしました。
「俺はWPFエンジニア」みたいな一枚岩の認識(モノリシック)を捨てて、
モジュールA (WPF)モジュールB (C#コア)モジュールC (業務知識)モジュールD (英語)
みたいに、自分を「部品の集合体」として再定義する。
そうすれば、モジュールA (WPF) が陳腐化しても、他のモジュールは生き残る。部品を交換(学習)するだけで、キャリア・システム全体はクラッシュしない。
…と、ここまではイイ話でした。
ぶっちゃけ、ここまでは「守り」の設計。
「転」でお話ししたいのは、僕が海外でやらかした最大の失敗についてです。
それは、「モジュール化」したはいいけど、そのモジュール同士がベッタリと癒着(密結合)して、使い物にならなくなった話。
そして、その結果、僕が学んだ「進化するアーキテクチャ」の残り半分の教訓。
すなわち、**「疎結合 (Loose Coupling)」と「明確なAPI境界 (Clear API Boundaries)」**の重要性です。
ソフトウェアの「密結合」が、なぜクソか
ソフトウェア設計において、「密結合(Tight Coupling)」がクソだってのは、エンジニアなら全員知ってますよね(笑)。
モジュールA が、モジュールB の「内部の、普通アクセスしないような変数」を直接イジってたり、モジュールB が「特定のOSの、特定のバージョンでしか動かない」みたいな内部実装にガッツリ依存してたら?
そりゃもう、最悪です。
モジュールB をちょっとアップデートしただけで、A がぶっ壊れる。
OSのパッチが当たっただけで、B が動かなくなる。
結局、モジュールAとBは「分離」してるように見えて、実態は「癒着」してる。
これじゃ、せっかくモジュール化した意味がない。柔軟性ゼロ。変更コストは爆上がり。
僕が「会社」というプラットフォームに依存し、市場価値を失った話
で、これをキャリアでやらかしたのが、数年前の僕です。
当時、僕は海外のある企業(プラットフォームA)で働いてました。
そこそこデカい会社で、使ってる技術はC#とWPF。僕の得意分野です。
僕は「承」で話したように、自分をモジュール化してる「つもり」でした。
モジュールA (WPF):バリバリ使ってる。モジュールB (C#コア):最新の.NET Core(当時)もキャッチアップしてる。モジュールD (英語):チームメイトと毎日議論してる。
俺、イケてるじゃん。どのモジュールもアップデートされてる。市場価値、高いだろ。
本気でそう思ってました。
…でも、これが「密結合」の罠だったんです。
その会社、すごく「独自文化」が強い会社だったんですよ。
- 独自フレームワーク: 彼らはWPFの上に、さらに独自のMVVMフレームワーク(仮に
Company-A-Frameworkと呼ぶ)を構築していました。PrismでもMvvmLightでもない、完全にオレオレ実装。 - 独自ビルドシステム: CI/CDも、JenkinsとかAzure DevOpsみたいな「標準」じゃなく、内製の謎スクリプト(
Company-A-BuildSys)でガチガチに固められてた。 - 独自プロセス: コードレビューやタスク管理も、JiraとかGitFlowとかの「標準」とは似て非なる、独特の承認フロー(
Company-A-Process)があった。
僕は、その環境でエースでした。
だって、その「独自ルール」を誰よりも深く理解して、誰よりも早く開発できたから。
Company-A-Framework のお作法をマスターし、Company-A-BuildSys のバグまで直せる。
その結果、僕の「スキル・モジュール」はどうなったか?
モジュールA (WPF)は、Company-A-Frameworkと密結合した。モジュールE (開発プロセス)は、Company-A-Processと密結合した。
僕は、**「どこの会社でも通用するエンジニア」**じゃなく、
「プラットフォームA(その会社)でしか100%の価値を発揮できない、”専用”エンジニア」
に成り下がってたんです。
それに気づいたのは、その会社を辞めて、転職活動を始めた時でした。
面接官:「あなたのWPFの経験について教えてください」
僕:「はい、Company-A-Framework を使って、MVVMで…」
面接官:「…(キョトン)…カンパニーA…フレームワーク…?それは、Prismみたいなものですか?」
僕:「あ、いや、独自のもので…(ヤバい、伝わってない)」
面接官:「CI/CDの経験は?」
僕:「はい、Company-A-BuildSys で日々のビルドを自動化し…」
面接官:「…(キョトン)…それは、Jenkinsのパイプラインを書いたとか、そういう話?」
僕:「あ、いや…(ヤバい、まただ)」
終わりました。
僕が「v3.0だ!」と思って誇っていたスキル・モジュールは、特定の会社(プラットフォーム)にガチガチに依存(密結合)していたせいで、外部の市場(別の会社)から見たら、価値がほとんど認識されなかったんです。
ソフトウェアで言えば、「Windows XP Service Pack 2でしか動かないライブラリ」を作ってたようなもん。そりゃ、Windows 11の市場じゃ売れないっすよ。
これが、キャリアにおける**「プラットフォーム依存」**の恐怖です。
解決策:「疎結合」と「明確なAPI境界」
この大失敗から、僕は「進化するアーキテクチャ」の、より深い教訓を学びました。
1. 徹底的に「疎結合(Loose Coupling)」を意識する
モジュール化するだけじゃダメ。そのモジュールを、特定の「プラットフォーム」(会社、ツール、技術)から、可能な限り「疎結合」に保つこと。
具体的に、僕がやったこと:
- 「標準(Open Standards)」を抱きしめる:会社が独自フレームワークを使っていても、それが「なぜ」作られたのか、標準的な技術(例えばPrismやDIコンテナ)ならどう解決するのかを常に考える。僕:「この独自FWは、要するにDIコンテナの役割と、Pub/Sub(イベント通知)をやりたいんだな。じゃあ、PrismのEventAggregatorとUnityコンテナの仕組みを、もう一度ドキュメント読んで理解し直しておこう」こうすれば、面接で「独自FW使ってました」じゃなくて、「DIやPub/Subの原則を理解し、それを独自FW上で実装しました」って答えられる。伝わり方がまるで違う。
- 「会社依存スキル」と「ポータブルスキル」を仕分ける:Company-A-BuildSys の知識は「会社依存スキル」。明日辞めたら価値ゼロ。Jenkins や Git の知識は「ポータブルスキル(持ち運び可能)」。自分のリソース(学習時間)を、意識して「ポータブルスキル」に割く。
2. 自分の「API境界(API Boundaries)」を設計する
これが一番重要です。
「疎結合」を保つために、ソフトウェアは「API(Application Programming Interface)」を定義しますよね。
「内部の実装(Company-A-Framework のこととか)はどうでもいい。外の世界とは、この『API』という『標準的な約束事』でやり取りしようぜ」っていうルールです。
あなたのキャリアにも「API」が必要です。
「あなた」というエンジニア・システムが、外部の「クライアント(=市場、会社)」と、どうやり取りするか?
- GET /profile (あなたのレジュメ/LinkedIn):これがあなたの「API仕様書」。ここに Company-A-BuildSys なんていう「内部実装」を書いても、誰も読めない。書くべきは、**「標準言語」**です。(ダメな例)「Company-A-BuildSysのメンテ担当」(良い例)「CI/CDパイプラインの構築・運用(Jenkins/GitLabに類似した内製システム環境)」
- POST /interview (あなたの面接での応答):これがあなたの「APIの実際の挙動」。仕様書(レジュメ)に「CI/CD」と書いてるのに、面接で「独自ツールしか…」と答えたら、「仕様書詐欺」です。「疎結合」で学んだように、「標準」の言葉で、自分の経験を「翻訳」して伝える能力。これがAPIの実装クオリティです。
- GET /proof (あなたのGitHub/技術ブログ):これがあなたの「APIのデモ」や「サンプルコード」。会社での仕事が「密結合」しすぎているなら、せめてGitHubやブログ(個人のアウトプット)では、「標準技術」だけを使った「疎結合」なデモを作る。僕:「会社じゃWPFばっかだけど、個人開発ではBlazorやAzure Functions(標準プラットフォーム)を触って、その学びをブログに書こう」これが、あなたの「API」が「ポータブルである(どこでも動く)」ことの最強の証明になります。
プラットフォーム(会社や、今のメイン技術)にどっぷり浸かるのは、楽です。居心地もいい。
でも、そのプラットフォームが沈んだら? あなたも一緒に沈むんです。
僕らエンジニアが目指すべきは、**「プラットフォーム非依存(Platform-Agnostic)」**な状態。
僕は「WPFエンジニア」じゃない。
僕は「C#という言語(ツール)を使って、MVVMという設計パターン(標準)に基づき、複雑な業務要件(ドメイン)を解決するプロフェッショナル」だ。
…その結果、今はたまたまWPF(プラットフォーム)を使っているだけ。
このマインドセットを持つこと。
自分のスキルを「標準」の言葉で「API」として定義し、いつでも他のプラットフォーム(ReactでもBlazorでも)に乗り換えられるように「疎結合」を保つこと。
これが、「進化するアーキテクチャ」の、攻撃的な側面です。
さあ、残すは「結」。
この「進化し続ける仕組み」を、どうやって10年、20年と「維持」していくか。
アーキテクチャは「作って終わり」じゃないですからね。
10年後も「食える」エンジニアになるための、今日から始めるキャリア・アーキテクチャ設計。
さて、長い旅でした。
このブログで、僕らは「キャリア設計」というフワッとしたものを、僕らエンジニアが得意な「ソフトウェア・アーキテクチャ」の言葉で解体してきました。
**「起」で、「一度作ったら終わり」の静的なキャリアプラン(例:「WPFマスターになる!」)は、変化の激しい現代、特に海外では「技術的負債」となり、塩漬けになるリスクを話しました。
だから、「変化」を前提とした「進化するアーキテクチャ(Evolutionary Architecture)」**でキャリアを設計し直そうぜ、と。
**「承」で、その第一歩として「キャリアのモジュール化」**を提唱しました。
「WPFエンジニア」という一枚岩(モノリシック)な自己認識を捨て、自分を「A: WPF」「B: C#コア」「C: 業務知識」「D: 英語」といった、交換可能な「スキル・モジュール」の集合体として再定義しました。
これにより、特定の技術(WPF)が死んでも、システム全体(自分の価値)はクラッシュしない、という「守り」を手に入れました。
**「転」では、僕の最大の失敗談をしました。モジュール化したはいいが、それが特定の会社(プラットフォーム)の「独自フレームワーク」や「独自プロセス」と「密結合」してしまい、市場で価値が認識されなくなった話です。
その解決策として、常に「標準(Open Standards)」を意識し、自分のスキルをプラットフォームから「疎結合」に保つこと。
そして、レジュメや面接といった外部との接続点を、市場が理解できる「標準語」で定義する「明確なAPI境界」**を持つこと。
これが、自分の価値をどこでも通用させる「攻め」の設計でした。
おめでとうございます。
ここまでで、あなたの「進化するキャリア・アーキテクチャ」の青写真は完成しました。
もう、あなたは特定の技術や会社に怯える必要はありません。
…と、言いたいところですが、ご存知ですよね?
ソフトウェア・アーキテクチャってやつは、「設計して終わり」じゃない。
アーキテクチャは、リリースした瞬間から「腐敗」が始まる
僕らが作るシステムがそうであるように、僕らのキャリア・アーキテクチャも、完成したと思った瞬間から「腐敗(Decay)」が始まります。
昨日まで「標準」だったものが、今日には「レガシー」と呼ばれる。
昨日まで「疎結合」だったはずのスキルが、気づけば今の会社のプロセスと「密結合」し始めている。
「承」で定義したモジュールD (英語) も、使わなければ錆びついて、バージョンがv1.5からv1.0にデグレードしていく。
今回のフック(お題)の言葉を思い出してください。
“The Architect’s Toolkit: Proactive Design for Longevity”
(アーキテクトのツールキット:「長寿」のための「プロアクティブ(積極的)」な設計)
「Longevity(長寿)」、つまり10年、20年と「食い続けられる」キャリアのためには、「設計して終わり」のリアクティブ(受動的)な姿勢じゃダメなんです。
常に「プロアクティブ(積極的)」に、自分のアーキテクチャが腐ってないか、陳腐化してないかを「監視」し、「維持(メンテナンス)」し続ける仕組みが必要。
じゃあ、どうやって?
ソフトウェア設計には、**「適応度関数(Fitness Function)」**という素晴らしい概念があります。
これは、設計したアーキテクチャが「期待通りに機能しているか」「腐敗してないか」を、自動的あるいは定期的にチェックするための「仕組み」や「テスト」のことです。
これを、キャリア設計にも導入しましょう。
今日は最後に、僕が(C#エンジニアとして)実際に自分に課している「キャリアの適応度関数」を、こっそりお教えします。
これこそが、僕が海外でWPFという(見方によっては)ニッチな技術を使いながらも、「詰まない」ために実践している「人生術」の核です。
僕が実践する「キャリアの適応度関数」3つのルール
1. 「6ヶ月・スキル棚卸し」テスト
- チェック内容: 「過去6ヶ月で、『承』で定義した自分のどのスキル・モジュールを、意識的にアップデートしたか?」
- 実行タイミング: 半年に一度、カレンダーに強制的にリマインダーを入れる。
- 合格(Pass): 「
モジュールB (C#)を、最新の.NET 9のプレビュー版を触ってアップデートした」「モジュールD (英語)のために、技術カンファレンスの動画を字幕なしで3本見た」など、具体的なアクションがある。 - 不合格(Fail): 「今のプロジェクトが忙しくて、
Company-A-Framework(今の会社の独自技術)しか触ってない…」
もし「不合格」なら、それは「密結合」が始まっている赤信号です。
アーキテクチャが「腐敗」し始めている証拠。
次の半期は、強制的にでも「ポータブルスキル(標準技術)」の学習時間を確保する。
これは、**キャリアの「継続的リファクタリング」**です。
2. 「LinkedInスカウト」テスト
- チェック内容: 「『転』で定義した自分の『API境界(=LinkedInプロフィールやレジュメ)』は、現在の市場(リクルーター)から見て魅力的か?」
- 実行タイミング: 四半期に一度。
- 合格(Pass): リクルーターから、自分が「次に行きたい」と思える分野(あるいは、今の自分の市場価値を確認できる分野)から、具体的なスカウトメッセージが(迷惑メールじゃなく)届いている。
- 不合格(Fail): スカウトが全く来ない。または、自分の専門と全く関係ないスパム的なものしか来ない。
もし「不合格」なら、あなたの「API仕様書(レジュメ)」が市場のニーズとズレているか、使っている「標準語(キーワード)」が古い可能性があります。
すぐにプロフィールを見直し、今、市場で求められている「標準語」(例えば「WPF」だけじゃなく、「MVVM」「Prism」「CI/CD」「Azure」といった関連キーワード)に書き換える。
これは、**キャリアの「APIバージョニング」**です。
3. 「プラットフォーム非依存」翻訳テスト
- チェック内容: 「今の自分の仕事(
モジュールA, B, Cの結合体)を、プラットフォーム(WPF, C#)の単語を一切使わずに、説明できるか?」 - 実行タイミング: 友人や家族(特にIT素人)と話すとき。
- 合格(Pass): 「僕は、金融機関の人が複雑なデータを間違えずに、早く処理できるようにするための『仕組み』を設計して、PCの画面上に実装する仕事をしてるんだ」
- 不合格(Fail): 「えーっと、WPFでXAML書いて、C#のコードビハインドで…いや、MVVMだからViewModelで…(相手、キョトン)」
もし「不合格」なら、あなたの思考が「プラットフォーム(ツール)」に「密結合」しすぎている証拠です。
僕らの価値は、WPFのボタンを配置することじゃない。
僕らの価値は、「クライアントの問題を解決すること」です。
このマインドセットこそが、究極の**「プラットフォーム非依存(Platform-Agnostic)」**デザインです。
この「適応度関数」をパスし続けられる限り、あなたは「WPFエンジニア」である前に、単なる「問題解決のプロフェッショナル」です。
明日、市場が「WPFじゃなくて、脳直結インターフェースで作れ」と言い出しても、このマインドセットさえあれば、あなたは「OK、じゃあその『脳直結IF』っていう新しいツールの『標準(Open Standards)』はどれ?ドキュメントちょうだい」と言えるはず。
これが、「進化するアーキテクチャ」を手に入れたエンジニアの姿です。
結論:あなたのキャリアの「アーキテクト」は、あなただ
長々と書いてきましたが、伝えたかったことはシンプルです。
会社も、上司も、技術トレンドも、あなたのキャリアを設計してはくれません。
彼らが提供するのは、あくまで「プラットフォーム」や「ツール」でしかない。
そのプラットフォームの上で、どんなアーキテクチャを組み、どう「密結合」を避けて「疎結合」を保ち、どう「API」を定義して市場と接続するか。
それを決める**「アーキテクト」は、あなた自身**しかいません。
変化を「脅威」として受け身で恐れるのではなく、変化を「当たり前の前提」として設計に組み込む。
自分のキャリアの手綱を、プロアクティブ(積極的)に握り続ける。
それが、この変化の激しい海外というフィールドで、10年、20年としぶとく生き残り、価値を提供し続けるための、僕が知る限り最強の「人生術」です。
あなたのキャリア・アーキテクチャ、ちゃんと「進化」してますか?

コメント