憧れの海外エンジニア? 冗談抜きで「潰れる」かと思った日々のこと
やあ、どうも。こっち(今いるのはヨーロッパの某国)で、シニアC#デベロッパーとして働いてます。メインはWPFを使ったデスクトップアプリの設計と開発。クライアントは医療機器とか、ちょっとお堅い(ミスが許されない)業界が多いかな。
さて、このブログを読んでくれてるってことは、君も「将来は海外でエンジニアとしてバリバリ働きたい!」って思ってるクチだよね?
わかる。すっごくわかるよ、その気持ち。
日本にいた頃の僕もそうだった。
「海外エンジニア」って聞くと、どんなイメージ?
高い給料、自由なフレックスタイム、デカいモニターが3枚並んだおしゃれなオフィス(もちろんフリードリンク)、優秀な多国籍チームと英語で交わすスマートな技術ディスカッション、週末はサクッと隣国へ旅行…。
うん、だいたい合ってる(笑)。
正直に言うと、そういうキラキラした側面は間違いなくある。コードレビューがGitHub上でサクサク進むし、リモートワークも当たり前。日本で満員電車に乗ってた頃を思うと、天国みたいな環境だ。
でもね、今日はあえて、そのキラキラの裏側にある「マジでキツい現実」について話そうと思う。
なんでかって?
スキルさえあれば、英語さえできれば、海外でハッピーになれる――そんな風に思ってたら、君、半年で潰れるよ。
僕が、まさにそうなりかけたから。
「ソフトウェア・アーキテクト」という名の重圧
僕の専門はC#とWPF。もう10年以上このスタックで飯を食ってる。日本でもそれなりにデカいプロジェクトの設計(アーキテクチャ)を任されてた自負はあった。
だから、こっちに来た時も「まあ、WPFなら負けないだろ」って、ちょっとナメてたんだよね。
甘かった。
こっちで僕が直面したのは、日本とは比べ物にならないレベルの「複雑さ」と「要求のシビアさ」だった。
まず、コードベースがデカい。平気で10年モノのレガシーコードが鎮座してる。WPFアプリなんだけど、XAMLのバインディングは地獄みたいに絡み合い、ViewModelは数千行の「神クラス」化。もちろん、前任者たちはとっくに退職済み。
「おいおい、MVVM(Model-View-ViewModel)はどうしたんだよ…」って頭を抱える日々。
君もWPFエンジニアならわかるよね? WPFって、データバインディングやDI(依存性注入)をきっちりやらないと、一瞬で「保守不可能なゴミ」が出来上がる。
で、僕の役割は、この「ゴミ」…いや失礼、歴史的建造物(レガシーコード)を改修しながら、新しい機能を「堅牢かつスケーラブル」に実装すること。しかも、僕は「シニア」兼「アーキテクト」の肩書き。つまり、僕の設計が、この先の5年、10年のプロダクトの命運を左右するわけだ。
プレッシャー、ヤバくない?
新しい機能の設計レビュー。会議室には、ドイツ人の厳格なプロダクトオーナー、インド人の超優秀なテックリード、アメリカ人のやたら早口なQAマネージャー。
僕がホワイトボードに書いた設計図(クラス図やシーケンス図)に対して、質問の嵐が飛んでくる。
「その設計だと、将来の拡張性に問題がないか?」
「ここのパフォーマンスボトルネック、どう解消するつもりだ?」
「なぜRepositoryパターンを使わない? その理由を説明しろ」
全部、英語で。
日本でなら、10秒で答えられる。でも、ここは海外。
「えーっと、それはですね…(because, uh…)」
言葉に詰まる。
言いたいことの7割も伝わらないもどかしさ。技術的には間違ってないはずなのに、英語のせいで「自信なさげ」に見えてしまう。
その結果、どうなるか。
「OK、わかった。ここは、俺たち(ネイティブ)がもう一度議論し直すから、君はとりあえずそこのバグ修正やっといて」
…これ、言われた時の絶望、わかる?
プライドも自信もズタズタ。俺、設計(アーキテクト)として雇われたんじゃないのかよ? WPFの知見なら誰にも負けないのに、それを「伝える」ことができない。
これが、僕が最初にぶち当たった「クリエイティブ・ブロック」であり、キャリアの危機だった。
24時間鳴り止まない「時差」という名の敵
技術的なプレッシャーだけなら、まだマシだったかもしれない。
僕のチームはグローバル分散型。僕がいるヨーロッパ。アメリカ(東海岸)にQAチーム。そして、開発の一部はベトナムのオフショアチーム。
地球をまたにかけたプロジェクト。聞こえはいいけど、現実は「24時間戦えますか?」状態だ。
ヨーロッパの朝イチ(日本時間だと夕方)。ベトナムチームからの大量の質問(昨日の夜に投げたタスク)に目を通す。
昼間。自分の開発と設計に集中。ドイツ人やフランス人の同僚と(英語で)議論。
夕方。定時? そんなものはない。ここからがアメリカチームの「朝」だ。QAチームから「おい、このバグ、クリティカルだぞ!」ってSlackが飛んでくる。
そこから、アメリカチームとのオンライン会議。WPFの画面(UI)の挙動について、画面共有しながらデバッグ。
「こっちの環境では再現しないんだけど…」
「いや、こっちでは100%出る。OSのバージョンは?」
「ログ送ってくれ!」
気づけば、時計は夜の10時を回ってる。
晩飯? シャワー浴びながら食パンかじってたよ、マジで。
日本にいた頃は、「仕事とプライベートの分離」なんて意識しなくても出来てた。会社を出れば、物理的にオフになれたから。
でも、海外でのリモートワーク(あるいはフレックス)は、その境界線をいとも簡単に溶かしちまう。
時差があるから「今対応しないと、アメリカは明日になっちゃう」という焦り。
言語の壁があるから「Slackのテキストチャットで済ませられることも、会議で1時間拘束される」という非効率。
家で仕事してるはずなのに、家で全く休まらない。
Slackの通知音(あの「カコッ!」って音)が鳴るたびに、心臓がビクッて跳ね上がる。ベッドに入っても、頭の中では英語でバグ報告の文章を組み立ててる。
「これは、やばい」
身体は疲れてるのに、脳がずっと「オン」の状態。
アドレナリンが出続けてるのに、パフォーマンスは一向に上がらない。
これが「燃え尽き(バーンアウト)」の入り口だって、その時の僕はまだ気づいてなかったんだ。
決定打:あの日の深夜デバッグ
忘れもしない。ある大規模リリースの3日前。
僕が設計・実装したWPFの新しいモジュールで、致命的なメモリリークが見つかった。特定の操作を繰り返すと、アプリがクラッシュする。
「おい、Taro(僕の名前とする)。お前の作った機能が原因だ」
テックリードからのチャット。冷や汗が噴き出す。
すぐに調査開始。
WPFのメモリリーク調査って、やったことある? 地獄だよ。
Visual Studioの診断ツールを睨みつけ、イベントハンドラの購読解除漏れ、バインディングのゾンビ、静的リソースの参照切れ…考えられる原因を片っ端から潰していく。
XAMLの複雑なツリーと、ViewModelのロジックが絡み合い、どこでメモリを掴んだまま離してないのか、全くわからない。
時間は刻一刻と過ぎていく。
ヨーロッパは深夜。アメリカは昼過ぎ。ベトナムは朝。
「Taro、進捗どうだ?」
1時間おきに飛んでくる、悪魔のチャット。
「今、調査中です(Investigating…)」
もう、それしか返せない。
設計(アーキテクチャ)のミスだ。僕が「イケてる」と思って導入した某ライブラリが、WPFの特定のコンテキストと相性が悪かったんだ。
でも、今さら設計変更なんて間に合わない。
「クソッ、クソッ…!」
声に出してキーボードを叩いてた。
その時、ふと、窓の外を見た。
空が、白み始めてた。
「あ、俺、何やってんだろ」
憧れてた海外エンジニア。
設計(アーキテクト)として活躍するはずだった自分。
現実は、異国の地でたった一人、誰にも(まともに)相談できず、WPFのメモリリークと格闘し、徹夜明けの死んだ目でモニターを睨みつけてる。
技術力? C#の知識? WPFの経験?
そんなもの、この「絶望的なプレッシャー」の前では、何の役にも立たなかった。
スキルを積み上げることばかり考えていた。でも、それ以前に、自分を守る「何か」が完全に欠けていた。このままじゃ、スキルアップどころか、再起不能(リタイア)だ。
「もう、無理かもしれない」
本気でそう思った、あの朝。
これが、僕が「ただのスキル」や「気合と根性」以外の、何か別の戦略的ツール――今、僕が「デコンプレッション・ゾーン(減圧室)」と呼んでいるもの――の必要性を、骨身にしみて理解した瞬間だったんだ。
「気合」と「技術書」じゃダメだった。僕がさまよった暗黒トンネル
あの徹夜明けの朝。
結局、メモリリークのバグは、リリースに間に合わせた。
ほぼ30時間ぶっ続けのデバッグの末、特定ライブラリのイベントハンドラの解除が、WPFの特定のウィンドウ破棄(Window Closing)のシーケンスと競合してた、っていう超マニアックな原因を突き止めて、なんとか修正パッチをねじ込んだんだ。
チームからは「Taro、ヒーローだ!」「よくやった!」ってSlackで褒められたよ。
でも、僕の心は、ビタイチ嬉しくなかった。
「ヒーロー」だって?
冗談じゃない。これは、僕の設計(アーキテクチャ)のミスが招いた、ただの「デスマ」だ。
しかも、僕はボロボロ。
その日を境に、僕のパフォーマンスは目に見えて落ちていった。
いや、「落ちた」っていうか、「落とした」んだ、無意識に。
もう、あんな思いをしたくない。
もう、徹夜でデバッグしたくない。
もう、あの心臓が縮み上がるような「お前のせいだ」っていうプレッシャーを浴びたくない。
その恐怖心が、僕を「守り」に入らせた。
新しい技術の採用?
「うーん、リスクがあるから、既存のやり方でいこう(I prefer the traditional approach because it’s stable.)」
設計レビューでの指摘?
「ああ、そうだね、そこは直しておくよ(Sure, I’ll fix that.)」
(前は、技術的に正しいと信じるなら、英語がしどろもどろでも食い下がってたのに)
僕は、海外まで来て「アーキテクト」として雇われたはずの僕が、「ただの言われたことを(波風立てずに)こなすC#コーダー」に成り下がっていくのを感じてた。
WPFの新しいUIデザインを考えるのも億劫。前は「ここにPrismのRegionをこう配置して…」なんてワクワクしてたのに、今は「頼む、これ以上ややこしいXAML、書かせないでくれ」って思う始末。
これが、燃え尽き(バーンアウト)の典型的な症状だって、後から知った。
情熱の枯渇。そして、極度の防衛本能。
失敗した処方箋(1):エンジニア的「根性」アプローチ
このままじゃマズい。それはわかってる。
僕は、典型的なエンジニア脳で、この「問題」を解決しようとした。
問題: パフォーマンスが低い。自信がない。
*原因: * スキル不足だ。英語力の不足だ。
解決策: もっとインプット(勉強)するしかない。
そう結論付けた僕は、狂ったように「インプット」を再開した。
日本から「Domain-Driven Design(ドメイン駆動設計)」「Clean Architecture」の分厚い技術書を取り寄せ、寝る前に読む。
朝は1時間早く起きて、ビジネス英語のオンラインレッスン。
昼休みは、WPFの最新技術(.NET Core以降の進化とか)を追うためにテックブログを漁る。
週末?
もちろん、趣味の個人開発だ。C#とWPFで、何か「イケてる」アプリを作ろうとした。
君、これがどれだけ「最悪の処方箋」だったか、わかる?
バケツの底が抜けて、水がダダ漏れになってるのに、上から必死で水を注ぎ込むようなもんだった。
脳みそは、すでに日中の「英語でのコミュニケーション」と「レガシーコードの解読」で、CPU使用率100%に張り付いてるんだ。
そこに、さらに「勉強」という名の負荷(プロセス)を起動しようとする。
どうなる?
フリーズだよ。
技術書を読んでも、同じ行をグルグルと目でなぞるだけ。英語のレッスンも、先生の言ってる意味はわかるけど、口から出てこない。
インプットすればするほど、自分のできてなさが浮き彫りになって、自己嫌悪が加速するだけだった。
「ダメだ、俺はもう、アーキテクトとして終わってるかもしれない…」
失敗した処方箋(2):「なんちゃって」リラックス
「OK、わかった。勉強がダメなら、逆だ。休もう」
次に試したのは、いわゆる「リラックス」だ。
「今日はもう仕事のことは一切考えない!」
そう宣言して、夜7時にPCを(強制的に)閉じる。
こっち(海外)の連中は、アフターファイブの切り替えが上手い。ビール片手に談笑したり、ジムに行ったり。
僕も真似てみた。
同僚に誘われて、パブに行った。
「Taro、最近元気ないじゃないか。飲め飲め!」
楽しい。確かに、その場は楽しいんだ。
でも、心の底で、ずっとタイマーがカチカチ鳴ってる。
(あ、今メールの通知が来た。アメリカのQAチームからだ…)
(さっきのパブでの会話、あの表現で合ってたかな…変に思われてないかな…)
家に帰って、Netflixを開く。
面白いドラマを見てるはずなのに、30分後、ストーリーが全く頭に入ってないことに気づく。
脳が、休んでない。
日本にいた頃は、よかった。
物理的に会社(オフィス)から離れれば、嫌でも「切り替え」ができた。
でも、今は違う。
僕の「家」は、僕の「オフィス」でもあるんだ。
(リモートワークとフレックスが主流だからね)
リラックスしてるはずのこのリビングルームのソファは、昼間、アメリカチームと(英語で)激論を交わした「戦場」でもある。
PCの電源はオフにできても、僕の頭の中の「Slack」と「Visual Studio」は、バックグラウンドで動き続けてる。
休もうとすればするほど、休めていない自分にイライラする。
意味、わかるかな?
「リラックス」すら、僕にとっては「達成すべきタスク」みたいになってたんだ。
「関心の分離」ができてない
僕は、絶望してた。
頑張ってもダメ。休んでもダメ。
じゃあ、どうしろと?
ある週末。
僕は、もう何もする気が起きなくて、近所の公園のベンチで、ただぼーっと、噴水を見てた。
(ああ、もうダメだ。日本に帰ろうかな…)
キャリアも、自信も、全部失って、ただ途方に暮れてた。
その時だ。
僕の、C#エンジニアとしての、WPFアーキテクトとしての「設計脳」が、最後の力を振り絞って、ささやいた。
「おい、お前…自分の『人生』の設計、破綻してるぞ」
…え?
「お前、いつもWPFアプリ作る時、何て言ってる?」
「**『関心の分離(Separation of Concerns)』**が大事だ、って」
「WPFアプリ(View)が、ビジネスロジック(Model)とベッタリ癒着してたら、保守もテストもできない『神クラス』が出来上がる。だから、間に『ViewModel』を置いて、きっちり責務を分離するんだろ?」
「今の、お前の人生、どうなってる?」
「『仕事(Work)』と『プライベート(Life)』が、完全に癒着してるじゃないか」
「お前の『脳(Brain)』は、ViewModelどころか、ViewとModelがぐちゃぐちゃに混ざり合った、最悪の『コードビハインド』(※WPFでアンチパターンとされる書き方)だ」
…ハッとした。
そうだ。
僕は、技術的なスキル(勉強)や、単純な休息(リラックス)の問題だと思ってた。
違う。
これは、「設計(アーキテクチャ)」の問題なんだ。
僕の人生は、「仕事」という強烈なプレッシャー(High Pressure)と、「プライベート」という平穏な日常(Normal Pressure)を、直接つなごうとしていた。
そりゃ、ぶっ壊れるに決まってる。
高圧のガスボンベのバルブを、いきなり全開にするようなもんだ。
何が必要か?
スキルじゃない。休暇でもない。
高圧と常圧の「間」にあって、安全に、ゆっくりと、圧力を調整するための「何か」。
深海ダイバーが、海上に上がる前に必ず入る、あの部屋。
「そうだ…『減圧室』だ」
僕には、精神的な「減圧室(デコンプレッション・ゾーン)」が必要なんだ。
仕事という名の深海(高圧)から、プライベートという名の地上(常圧)へ、安全に「浮上」するための戦略的な「空間」と「時間」が。
僕は、技術や英語にばかり目を向けて、自分の「精神のアーキテクチャ」を、完全に無視していた。
じゃあ、その「減圧室」って、具体的にどうやって作るんだ?
僕の「設計」は、そこから始まったんだ。
C#エンジニアが設計した「精神の減圧室」Ver 1.0 と、その大失敗
公園のベンチで、「僕の人生、アーキテクチャが破綻してる」って気づいたあの日。
僕は、エンジニアとして、この「精神の破綻(System Failure)」に対して、まともに取り組むことに決めた。
もう、根性論(=CPUに無駄な負荷をかける)や、なんちゃってリラックス(=スリープモードのフリしてバックグラウンドでプロセスが動いてる)は、やめだ。
僕がやるべきは、「人生のアーキテクチャ」の再設計。
特に、「仕事(高圧)」と「プライベート(常圧)」の間で安全に圧力を調整する「デコンプレッション・ゾーン(減圧室)」の実装だ。
C#エンジニアとしての血が騒ぐ。
よーし、いっちょ、最強の「減圧室」を設計(デザイン)してやるか。
【設計フェーズ】減圧室の「要求仕様」
まず、僕はこの「減圧室」モジュールに、どんな「要求仕様」が必要か定義した。
- 分離(Isolation):「仕事」モジュールと、「プライベート」モジュールから、完全に分離・独立していること。依存関係(Dependency)は一切持たない。(=仕事のスキルアップや、プライベートの用事・タスクであってはならない)
- バッファリング(Buffering):「仕事」の高速で高圧な思考(ロジカル、英語、緊張)を、直接「プライベート」(リラックス、日本語、弛緩)に流し込まない。一度、このモジュールで受け止めて、ゆっくりと圧力を下げる。
- 非同期(Asynchronous):このモジュールが実行中、他のプロセス(仕事、プライベート)からの割り込み(Interrupt)を極力ブロックする。(=Slackの通知や、家族からの「メシまだ?」コールに邪魔されない聖域であること)
- 低CPU負荷(Low CPU Load):このモジュール自体が、脳のCPU(特に論理思考や言語野)を食いつぶさないこと。むしろ、CPUを解放(Release)するものであること。
完璧だ。
WPFアプリの設計(アーキテクチャ)で、UIスレッドをブロックしないために非同期処理(async/await)を使うのと同じ発想だ。
僕の「人生」という名のUIスレッドが、仕事(重い処理)のせいで固まって(フリーズして)たんだ。
【実装フェーズ】Ver 1.0:物理と時間で「分離」してみた
設計書はできた。次はいよいよ実装(コーディング)だ。
僕は、手始めに「わかりやすい」分離から試してみた。
試作A:物理的コンテナ(場所)分離
僕の家は、リビングの一角が仕事場(リモートワークスペース)になってる。
だから、「仕事」と「プライベート」が癒着してた。
なら、物理的に分けてしまえ。
僕はまず、近所のカフェと契約した。
「朝9時から夕方6時までは、絶対に家で仕事をしない。カフェでやる」
そして、「カフェから一歩出たら、絶対に仕事のことは考えない」
というルールを課した。
結果:大失敗。
まず、カネがかかる(笑)。
いや、それより問題だったのは、アメリカチームとの時差だ。
僕が「さあ、仕事終わり!」ってカフェを出る夕方6時。それは、アメリカ東海岸の「おはよう、Taro!」の時間(昼の12時)なんだよ。
結局、カフェを出た後の帰り道、スマホにガンガン飛んでくるSlackの通知。
「Taro、昨日のWPFのビルド、コケてるぞ」
「設計レビュー、明日の朝イチ(=こっちの夜)でセットしたから」
家に帰っても、結局PCを開く。
「減圧室」どころか、通勤時間がプラスされただけで、ストレスは倍増した。
試作B:時間的ゲート(儀式)分離
物理がダメなら、時間だ。
「シャットダウン・リチュアル(終業の儀式)」っていう、欧米のデキるビジネスマン(笑)がやってるっていうアレを試した。
- 夕方6時になったら、アラームを鳴らす。
- PCの電源を完全に落とす(スリープじゃない)。
- 仕事用のSlackをログアウトする。
- 「今日も一日、よくやった」と(心の中で)つぶやく。
これで、脳に「仕事モード、終わり!」ってスイッチを叩き込もうとした。
結果:3日で破綻。
わかるよね?
アラームが鳴った瞬間、WPFの超ややこしいバインディングエラーと格闘してたら、どうなる?
「うるせえ! 俺は今、DataContext が null になる原因を探ってるんだ! あと5分!」
ってなるに決まってる。
エンジニアの仕事は、工場のライン作業じゃない。
「はい、6時です」で、思考をスパッと中断できるわけがない。
特に、アーキテクチャとか、メモリリークとか、「思考のカタマリ」を扱ってる時は、なおさらだ。
この「儀式」は、僕にとって「減圧」どころか、思考を無理やり中断させる、新たな「ストレス源」にしかならなかった。
【デバッグフェーズ】Ver 1.0は、なぜ失敗したのか
ダメだ。うまくいかない。
僕の「減圧室」Ver 1.0 は、バグだらけのクソコードだった。
僕は、再び公園のベンチ(そこが僕のデバッグルームになりつつあった)で、頭を抱えた。
なぜ、僕の「設計」は失敗した?
物理的な「場所」や、時間的な「儀式」は、ただの「インターフェース」だ。
大事なのは、その「中身(実装)」だ。
僕は、「仕事が終わった後」に、何をすべきか、全く定義していなかった。
「減圧室」とは、「仕事(高圧)」から「プライベート(常圧)」へ移行する、その「中間の活動」そのものであるべきなんだ。
じゃあ、その「活動」って、具体的に何だ?
僕は、また典型的なエンジニア脳で考えた。
「よし、生産的なことをしよう」
「ジムで運動する」
「料理教室に通う」
「WPFと関係ない技術、例えばPythonでも勉強するか」
全部、ブブー! 不正解。
僕は、「承」で学んだはずの教訓を、すっかり忘れていた。
ジムは、確かに汗をかく。でも「週3回、必ず1時間」って決めた途端、それは「タスク」になる。
料理は、確かに楽しい。でも「栄養バランスを考えて…」って思った途端、それは「論理的思考」になる。
Pythonの勉強? 論外だ。それは「インプット」であり、脳の別領域に負荷をかけるだけだ。
僕が実装しようとしていたのは、「第二の仕事」だ。
【ブレイクスルー】Ver 2.0:「無目的」という名のコア・ロジック
もう一度、要求仕様に立ち返ろう。
「減圧室」の目的は、リラックスすることでも、生産的になることでもない。
「圧力を、安全に、抜くこと」
それだけだ。
高圧の空気が詰まった脳みそ(パンパンになったメモリ)から、どうやって空気を抜くか。
その時、C#の「ガベージコレクション(GC)」の仕組みが、ふと頭をよぎった。
C#(.NET)は、使われなくなったメモリ(オブジェクト)を、GCが自動的に見つけて、解放(お掃除)してくれる。
プログラマ(僕ら)は、通常、メモリ解放のタイミングを意識しなくていい。
でも、僕の「脳」は、どうだ?
「仕事」で使った大量の「一時オブジェクト」(英語での議論、WPFのバグ、設計の悩み)が、解放されないまま、ヒープ領域(頭の中)に残り続けてる。
GCが、うまく動いてない。
なぜ?
僕が、GCに「お掃除するヒマ」を与えてないからだ。
僕は、脳のCPUを、常に「仕事」か「インプット」か「タスク(ジムや料理)」で、100%使い切ろうとしていた。
ガベージコレクションが動くためには、「スキマ時間(アイドルタイム)」が必要なんだ。
これだ。
僕が実装すべき「減圧室」のコア・ロジック。
それは、**「脳のCPUを意図的にアイドル状態にする活動」**だった。
生産性? 効率? スキルアップ?
そんなもの、クソくらえだ。
僕の「減圧室」Ver 2.0 に必要なのは、
「無目的」であること。
「評価」から切り離されていること。
「上達」しなくていいこと。
具体的に、僕が始めたこと?
笑うなよ。
仕事が終わったら、まずPCを閉じる。ここまではVer 1.0 と同じだ。
その後、僕は、**「30分間、あてもなく近所を散歩する」**ことにした。
ただ、歩く。
音楽も聴かない。ポッドキャストも聴かない。
(インプットになるから)
「今日はこっちの道に行ってみよう」
「あ、あの家のネコ、また寝てるな」
「このコンクリートのひび割れ、なんかWPFのツリービューみたいだな」
どうでもいい、本当に、どうでもいいことを考える。
これが、僕の「減圧室」Ver 2.0 だった。
「戦略的非効率」と名付けた、この「散歩」という名のガベージコレクション・タイム。
最初は、怖かったよ。
「おいおい、俺、こんな無駄なことしてていいのか?」
「この30分で、C#の技術記事、1本読めるぞ」
「アメリカチーム、もう起きてるぞ」
そういう「効率主義の悪魔」が、頭の中でささやく。
でも、僕は続けた。
そして、1週間も続けた頃だ。
僕の「脳」に、明らかな変化が起き始めた。
散歩から帰ってきて、晩飯を食う。
その時、飯が、ちゃんと「美味い」と感じられるようになっていた。
Netflixのドラマのストーリーが、ちゃんと頭に入ってくるようになっていた。
そして、何より。
あれだけ悪夢にまで見た、WPFのレガシーコード。
それが、散歩中に、ふっと、
「あ。もしかして、あのバグ、あそこの静的リソースの参照が原因じゃね?」
って、何の脈絡もなく、答えが「降ってくる」ようになったんだ。
君の「人生のアーキテクチャ」は、破綻していないか?
あの「無目的で、あてもない30分の散歩」。
僕が「戦略的非効率」と名付けた、C#エンジニアとしてのプライドを(ある意味)捨てた「減圧室 Ver 2.0」。
これが、僕の海外エンジニア人生を、文字通り「救った」んだ。
馬鹿馬鹿しいと思う?
「いやいや、結局必要なのはC#のスキルでしょ」って思う?
わかるよ。
数ヶ月前の僕が聞いたら、間違いなく「そんなオカルトより、WPFのパフォーマンスチューニングの記事でも読んだ方がマシだ」って一蹴してた。
でも、断言する。
海外という高圧環境で、設計(アーキテクト)という「思考」そのものを商品にしている僕らにとって、この「減圧室」は、最新のフレームワークを学ぶことと、同じか、それ以上に重要な「生存戦略」だ。
「余白」が生んだ、本当の副産物
「減圧室(散歩)」を習慣にして、数週間。
僕の日常は、劇的に変わった。
まず、夜、ぐっすり眠れるようになった。
ベッドに入っても、頭の中でVisual Studioが起動しなくなったんだ。
次に、メシが美味くなった。
晩飯のパスタの味を、ちゃんと「美味しい」と感じられるようになった。脳が「今、ここ」に集中できるようになった証拠だ。
そして、何より驚いたのが、「仕事のパフォーマンス」そのものが、劇的に改善したこと。
不思議なもんだよ。
僕は、スキルアップのためのインプット(技術書の読書やオンライン英会話)を、あの「暗黒期」よりも減らしてるんだ。
なのに、成果は、圧倒的に「今」の方が出てる。
なぜか?
答えは、僕らの本業である「設計」に隠されてた。
君もWPFでXAMLを書いてて、経験ない?
UI要素(ButtonとかTextBox)を、Gridの中にギチギチに詰め込むと、どうなる?
最悪にダサくて、使いにくいUIが出来上がる。
イケてるUIデザインって、何が大事?
そう、**「余白(Margin / Padding)」**だ。
要素と要素の間に、適切な「余白」があるからこそ、ユーザーはどこに注目すべきか、次に何をすべきかが、直感的にわかる。余白は、情報を整理し、本当に伝えたいことを「際立たせる」ための、積極的な「設計」だ。
僕の脳みそは、あの時、情報とタスクでギチギチに詰まった、最悪のXAMLデザインだったんだ。
「効率」や「インプット」という名のコントロール(UI要素)で埋め尽くされ、「余白」が1ピクセルもなかった。
あの「30分の散歩」は、僕の脳みそに、意図的に「余白」を作る行為だった。
その「余白」に、何が起きたか。
散歩中、ぼーっと空を見てる時。
ふっと、昨日から悩んでたレガシーコード(C#)のバグの原因が、点と点として繋がる瞬間が来た。
「あ。待てよ。あのモジュール、WPFのDispatcher(UIスレッド)をWait()で無理やり同期で待ってるから、デッドロック起こしてんじゃね?」
これ。
この「あ。」という閃き。
これは、机に向かって、Visual Studioのデバッガを睨みつけてる時には、絶対に出てこない「答え」だった。
僕の脳のガベージコレクション(GC)が正常に動き出し、断片化してたメモリ(知識)がキレイに整理(デフラグ)された結果、本当に必要な情報(=バグの解決策)が「降ってきた」んだ。
僕は、インプット(勉強)こそが正義だと思ってた。
でも、僕らエンジニアに本当に必要なのは、インプットした知識を「結合」させ、「熟成」させるための「余白(=減圧室)」だったんだ。
君だけの「減圧室」を設計(デザイン)しよう
ここまで、僕の「徹夜明けの絶望」から「散歩での復活」まで、赤裸々に話してきた。
君に、僕の真似をして「毎日30分散歩しろ」と言いたいわけじゃない。
僕にとっての「散歩」が、君にとっての「正解」とは限らないからだ。
僕がやったのは、「僕の人生のアーキテクチャ」を分析し、「要求仕様」を定義し、プロトタイプ(Ver 1.0)を作り、デバッグし、そして「Ver 2.0」にたどり着いた…という「設計プロセス」そのものだ。
君も、君だけの「減圧室」を、自分で設計(デザイン)しなきゃいけない。
それは、WPFで「カスタムコントロール」を自作するのと同じだ。
既存のボタン(Button)じゃ、要求仕様を満たせない。だから、ControlTemplateをいじって、自分だけのコンポーネントを作る。
その「要求仕様」、もう一度おさらいしよう。
- 無目的であること(Not Task-Oriented):「上達」や「成果」を求めた瞬間に、それは「第二の仕事」になる。僕が試した「ジム(週3回)」や「料理(栄養バランス)」が失敗したのは、これだ。
- 非評価であること(Non-Evaluative):他人からも、自分からも、「うまい」「へた」「正しい」「間違い」の物差しで測られないこと。評価軸(KPI)が存在した瞬間に、脳は「仕事モード」に戻る。
- 低CPU負荷であること(Low Cognitive Load):脳の「論理思考」や「言語野」を、できるだけ使わないこと。ポッドキャストや技術ブログは、一見リラックスに見えて、脳に「インプット」という負荷をかけてる。
この3つの条件を満たすものなら、何でもいい。
- ただ、楽器を(うまく弾こうとせず)鳴らす。
- ただ、粘土を(何を作るとも決めずに)こねる。
- ただ、近所のスーパーの「スパイスの棚」を、端から端まで眺める。
- ただ、意味のない落書きを、ノートに書きなぐる。
ポイントは、**「戦略的に、非効率になる勇気」**を持つことだ。
これから海外を目指す「君」へ
これから海外で働こうと、今まさにC#の勉強や、英語の学習を(それこそ燃え尽きるほど)頑張っている君に、伝えたい。
君のその努力は、絶対に正しい。
スキル(矛)がなきゃ、この「海外」という戦場では、そもそもスタートラインにすら立てないから。
でも、忘れないでほしい。
海外の現場は、君が想像してるより、ずっと「高圧」だ。
言語の壁、時差のプレッシャー、文化の壁、そして「アーキテクト」としての設計責任。
その「高圧」は、君の「脳」を、君が思うよりずっと早く、すり減らしていく。
スキル(矛)だけを必死に磨いて、自分を守る「鎧(よろい)」の設計をサボってると、どうなるか。
僕みたいに、半年で潰れる。
「減圧室」は、その「鎧」だ。
それは、逃げでも、サボりでもない。
高圧環境下で、君の最高のパフォーマンスを「持続」させるための、最もクレバーで、最もプロフェッショナルな「戦略的ツール」なんだ。
C#のコーディング規約を設計するように、
WPFのアーキテクチャ(MVVM)を設計するように、
君の「人生のアーキテクチャ」を、真剣に、設計してほしい。
君の「人生」、コードビハインド(※WPFのアンチパターン)みたいに、仕事とプライベートがグチャグチャに癒着してないか?
「関心の分離」、ちゃんと出来てるか?
僕も、まだまだこっちでC#エンジニアとして、悪戦苦闘の毎日だ。
でも、「減圧室」という名の最強の「鎧」を手に入れた今、あの頃みたいに「潰れる」気は、もうしない。
さあ、この記事を読み終えたら、まずはPCを閉じてみよう。
そして、15分でいい。
何の目的も持たずに、外の空気を吸ってみたらどうだ?
君の「減圧室」の、設計(デザイン)の始まりだ。

コメント