The Illusion of “Just Code”:終わらないチケット消化と、「自分は工場の歯車か?」という焦燥感
憧れの海外生活、その実態は「Visual Studioとの睨めっこ」
やあ、みんな。今日もコンパイル通ってる?
僕は今、とある英語圏の国でソフトウェアエンジニアとして働いている。主な戦場はデスクトップアプリケーション開発。そう、愛すべきC#とWPF、そして終わりのないXAMLの迷宮が僕の職場だ。
「海外でエンジニア」なんて言うと、なんだかキラキラした響きがあるかもしれない。高い天井のオフィス、無料のコーヒーとスナック、フレックスタイムで優雅に出社し、流暢な英語でディスカッションして、世界を変えるようなコードを颯爽とコミットする……。
正直に言おう。半分は合っているけど、残りの半分、いや8割くらいは**「泥臭い現実」**だ。
朝、オフィスに着いて(あるいは自宅のデスクに座って)最初にすることは、優雅なディスカッションじゃない。Jiraのチケットを確認し、昨日残したバグと向き合うことだ。WPFを使っている人なら分かると思うけど、「Binding Expression Error」がOutputウィンドウに大量に吐き出されているのを見て見ぬふりをしたり、MVVMパターンの複雑怪奇なデータフローを追いかけたり、レガシーなコードベースの中で「なぜここでUpdateSourceTrigger=PropertyChangedにしていないんだ!」と過去の誰か(たいていは過去の自分)を呪ったりする。それが日常だ。
特に海外の現場に来て感じたのは、「成果(Deliverables)」に対するシビアさだ。
日本にいた頃ももちろん成果は求められたけれど、こっちではもっとドライで、かつスピード感が速い。「頑張っている姿勢」なんてものは評価の対象外。「動くコード」を「いつまでに」出したか。それが全てだと思い知らされる瞬間が多々ある。
だからこそ、僕たちは必死になる。
「The daily grind(日々の重労働)」という言葉があるけれど、まさにそれだ。機能を実装し(Shipping features)、バグを潰し(Debugging)、また次のチケットを「In Progress」に移動させる。
スプリントの終わりにはデモがあり、そこで動くものを見せられなければ、その2週間は「何もしていなかった」のと同義だとみなされる恐怖。
このプレッシャーの中で働いていると、ある種の錯覚に陥るようになるんだ。
**「エンジニアの仕事は、コードを書くことだ。それ以外はノイズだ」**と。
「機能リリース」という名の麻薬
エンジニアにとって、コードを書いている時間は至福だ。
複雑なロジックがきれいにハマった時、非同期処理が完璧に制御できた時、あるいはXAMLのデザインが一発で意図通りにレンダリングされた時(これは奇跡に近いけど)。脳内にはドーパミンがドバドバ出ているのがわかる。
「俺は今、生産的だ!」
「俺は今、価値を生み出している!」
キーボードを叩く音が心地よいリズムを刻む。Visual Studioのショートカットキーを駆使して、誰よりも速くリファクタリングを行う。Gitのコミットログが自分の名前で埋め尽くされていくのを見ると、まるで自分がこのプロジェクトの英雄になったような気分になる。
特に海外に来てからは、言葉の壁がある分、**「コードで語る」**ことに安住しがちになる。
英語のミーティングで複雑なニュアンスを伝えるのには骨が折れるし、時には悔しい思いもする。でも、コードは世界共通だ。C#の文法は国境を越える。だから、ついついコミュニケーションという「不確実な戦場」から逃げて、確実な成果が出る「IDE(統合開発環境)」という安全地帯に引きこもりたくなるんだ。
「言葉で勝てなくても、技術力で黙らせてやる」
「誰よりも多くのチケットを消化すれば、誰も文句は言わないはずだ」
そう信じて、僕はひたすらコードを書き続けた。来る日も来る日も、朝のスタンドアップミーティングが終わった瞬間にヘッドホンをして、外界を遮断し、ひたすら「自分のタスク」に没頭した。
同僚がアーキテクチャの議論をしていても、「それは俺の担当じゃない」と聞き流し、PM(プロダクトマネージャー)が仕様の相談に来ても、「チケットに書いておいて」と素っ気なく返す。
なぜなら、僕にとっての価値は**「今日、何行コードを書いたか」「いくつの機能を実装したか」**にあると信じて疑わなかったからだ。
でも、ある日ふと気づいたんだ。
完了したチケットの山を眺めながら、得体の知れない虚無感に襲われた。
「あれ? 俺、ただの『高給取りのタイピスト』になってないか?」
巨大なマシーンの「交換可能な部品」である感覚
「The feeling of being a cog in the machine(巨大な機械の歯車の一つであるという感覚)」
どれだけ素晴らしいコードを書いても、どれだけ高速にWPFのコンバーターを実装しても、結局それは誰かが決めた仕様を、誰かが決めた期限までに、形にするだけの作業になっていた。
例えば、ある大規模な機能追加のプロジェクトがあったとする。
僕はアサインされたUI部分の実装を完璧にこなした。DataGridのパフォーマンスチューニングもしたし、スタイルもResourceDictionaryできれいに管理した。コードレビューでも「Good job」と言われた。
でも、プロジェクト全体がリリースされた後、ユーザーからの反応は芳しくなかった。「使いにくい」「この機能は業務フローに合っていない」というフィードバックが相次いだのだ。
僕は思った。「俺のコードは完璧だった。悪いのは仕様を決めたPMだ。UXを考えなかったデザイナーだ」
そうやって自分を正当化しようとした瞬間、背筋が寒くなった。
「俺は今、自分の書いたコードのことしか考えていない」
海外のエンジニア市場は流動性が高い。レイオフ(解雇)も日常茶飯事だ。
もし僕の価値が「仕様書通りにC#のコードを書くこと」だけだとしたら、もっと給料が安くて、もっと若くて、もっと新しい技術(例えばBlazorやMAUI、あるいはReactなど)に詳しいエンジニアが現れた瞬間、僕の居場所はなくなるんじゃないか?
もっと言えば、最近話題のAIだ。
定型的なWPFのViewModelを書くなんて作業は、Copilotに任せれば数秒で終わる。プロパティの変更通知(INotifyPropertyChanged)の実装なんて、もはや人間が手打ちするようなものじゃない。
「ただコードを書く」「機能を実装する」という行為自体の価値が、恐ろしい勢いで暴落していることに気づいてしまったんだ。
それなのに、僕は毎日「今日はどれだけ進捗が出せたか」という、近視眼的な「Immediate code output(即時のコード出力)」に一喜一憂している。
これはまるで、沈みゆく船の上で、誰よりも速く甲板掃除をしているようなものかもしれない。
「行数」という幻想と、エンジニアの孤独
海外で働いていると、成果主義の裏返しとして「孤独」を感じることがある。
特にリモートワークが普及してからは、チャットツール上の文字と、GitHubのプルリクエストだけが他者との接点になりがちだ。
そんな環境下では、目に見える数字(Metrics)にすがりたくなる。
「今週はプルリクを15個出した」「バグを5個修正した」
これらは分かりやすい。上司へのアピールもしやすい。だからこそ、僕たちはこの数字を追いかけるゲームに没頭してしまう。
だが、ここに大きな罠がある。
「Lines of code(コードの行数)」は、ビジネスの価値とは何の関係もないということだ。
むしろ、優秀なエンジニアは「コードを書かない」選択肢を常に持っている。
既存のライブラリで代用できないか? そもそもこの機能は本当に必要なのか? 仕様を少し変えるだけで、実装工数を半分にできないか?
僕が陥っていたのは、「手を動かしている=仕事をしている」という、一種の思考停止状態だった。
汗をかいてコーディングすることに酔いしれて、そのコードが「本当にユーザーの課題を解決しているか」「チーム全体の生産性を上げているか」という、より広い視点(Broader contributions)を見失っていたのだ。
海外の優秀なエンジニアたち——特に「シニア」や「スタッフエンジニア」と呼ばれる人たち——を観察していると、彼らは驚くほどコードを書く時間が短いことに気づく。
彼らは一日中、誰かと話していたり、ホワイトボード(あるいはMiro)で図を書いていたり、ドキュメントを整備していたりする。
それなのに、彼らの評価は僕より遥かに高く、チームからの信頼も厚い。そして何より、彼らが動くとプロジェクトが劇的に前に進む。
僕はずっと思っていた。「あいつらは口だけで、コードを書いてないじゃないか」と。
でも、それは完全に間違いだった。
彼らは「コードを書く」という狭い定義の仕事ではなく、**「エンジニアリング」**をしていたのだ。
僕は「コーダー(Coder)」であり、彼らは「エンジニア(Engineer)」だった。この差は、とてつもなく大きい。
このブログでは、僕が海外の現場で痛感した、この「コードを書くだけの豚になるな(言い過ぎかもしれないが自戒を込めて)」という教訓について、深く掘り下げていきたいと思う。
もしあなたが、毎日チケット消化に追われて「これでいいのか?」と不安を感じているなら、あるいは海外で通用するエンジニアになりたいと思っているなら、この話はきっと役に立つはずだ。
技術力が不要だと言っているわけじゃない。C#の深い知識も、WPFのレンダリングパイプラインへの理解も、もちろん強力な武器だ。
でも、それだけでは「戦えない」領域がある。そして、そこを攻略することこそが、エンジニアとしての寿命を延ばし、より自由に、より楽しく働くための鍵になるんだ。
次章からは、具体的に「コード以外の価値」とは何なのか、そしてどうすればその「見えない筋肉」を鍛えることができるのかについて、僕の恥ずかしい失敗談も交えながら話していこうと思う。
Beyond the Lines:なぜ「即座のアウトプット」があなたの価値の全てではないのか
そのシニアエンジニアは、なぜコードを書かずに評価されるのか?
僕のチームには、ベン(仮名)というシニア・スタッフエンジニアがいる。
彼は技術的に非常に優秀だが、GitHubの貢献グラフ(草)だけを見れば、スカスカだ。僕の方がよっぽど多くのコミットをしているし、チケットも消化している。
ある時、僕は不満に思っていた。「ベンは最近、ミーティングやドキュメント作成ばかりで、全然コードを書いてないじゃないか。これでなぜ僕より給料が高いんだ?」と。
しかし、ある難解なWPFのパフォーマンス問題が発生した時、その認識は間違っていたと思い知らされた。
僕たちは数週間、DataGridのスクロールがカクつく問題に悩まされていた。僕はUIの仮想化(Virtualization)の設定を見直したり、バインディングを非同期にしたりと、ひたすら「コードをいじって」解決しようとしていた。いわゆる**「モグラ叩き」**の状態だ。
ベンは、僕のプルリクエストを眺めた後、こう言った。
「コードを直す前に、データフローの全体像を整理しよう」
彼はコードを書く代わりに、ホワイトボードにシステムのアーキテクチャ図を描き始めた。そして、データソースからViewModel、そしてViewに至るまでのデータの流れを可視化した。
すると、根本的な問題が見えてきた。個々のGridの設定ミスではなく、バックグラウンドのスレッド管理と、メモリのアロケーション戦略そのものに構造的な欠陥があったのだ。
ベンは言った。「ここを直そう。そうすれば、君が今修正している10箇所のUIバグは、修正する必要すらなくなるよ」
彼の提案通りにアーキテクチャの一部を修正(リファクタリング)した結果、問題は嘘のように解決した。しかも、僕が書こうとしていた数百行の「対症療法的なコード」は不要になり、コードベースはむしろスリムになった。
この時、僕は強烈なパンチを食らった気分だった。
僕が**「足し算」でコードを書いて価値を出そうとしていたのに対し、彼は「掛け算」でチーム全体の課題を解決し、さらに不要なコードを削除するという「引き算」**の価値を提供していたのだ。
これが、**「Beyond the Lines(コードの行数を超えて)」**ということだ。
「見えない仕事(Invisible Work)」の正体
海外のテック企業、特にシリコンバレー流の文化を取り入れている企業では、エンジニアの評価軸として**「Impact(インパクト)」**という言葉がよく使われる。
「どれだけ頑張ったか(Effort)」ではなく、「どれだけ事業やチームに良い影響を与えたか(Outcome)」だ。
コードを書くことは、インパクトを出すための手段の一つに過ぎない。そして、キャリアが上がれば上がるほど、コード以外の手段の比重が大きくなっていく。これを僕は**「見えない仕事(Invisible Work)」**と呼んでいるが、具体的には以下のようなものだ。
1. 「作らない」という決断(Negative Coding)
エンジニアとして最も価値がある瞬間の一つは、「その機能は作るべきではない」と説得できた時だ。
PM(プロダクトマネージャー)やデザイナーは、夢見がちな仕様を持ってくることがある。
「画面遷移のアニメーションをリッチにしたい」
「全てのデータをリアルタイムで同期させたい」
ジュニアな頃の僕は、「Yes, I can do it!」と言って技術力を誇示しようとした。
だが、今の僕はこう返す。「そのアニメーションを入れると、古いマシンのユーザー体験が損なわれる。開発に2週間かかるが、それに見合うビジネス価値はあるか? シンプルなフェードインで十分ではないか?」
結果として、無駄な機能開発を阻止し、その時間をリファクタリングやテストの自動化に充てる。
**「書かなかったコード」**は、バグを生まず、保守コストもかからない、最高のコードなのだ。
2. 「グルー・ワーク(Glue Work)」
これは、チームの隙間を埋める仕事だ。
例えば、オンボーディングのドキュメントを整備する、CI/CDパイプラインのエラーを調査して安定させる、他チームとのAPI仕様の認識ズレを調整する、といった作業だ。
これらは、Jiraのチケットにはなりにくいし、「機能リリース」として華々しく発表されることもない。まさに「接着剤(Glue)」のような地味な仕事だ。
しかし、この接着剤がなければ、チームはバラバラになり、開発速度はガタ落ちする。
優秀なエンジニアは、誰に言われなくてもこのグルー・ワークを拾いに行き、チーム全体の「開発者体験(Developer Experience)」を向上させる。
自分のコードのアウトプットを少し犠牲にしてでも、チーム全体のアウトプットを最大化する動きができる人。それが真のシニアだ。
3. レビューという名の「教育」
コードレビューを「バグを見つける作業」だと思っているなら、それはもったいない。
レビューは、知識を伝播させ、チームの技術水準を底上げする最大のチャンスだ。
「ここはLINQを使うともっと短く書けるよ」という指摘もいいが、もっと高い視点で、
「このクラス設計だと将来的に拡張しづらいから、Strategyパターンを検討してみては?」
「この例外処理の方針は、チーム全体のポリシーとずれているよ」
といったフィードバックをする。
これは、自分の分身を増やす作業だ。
一人のスーパープログラマーが100の成果を出すより、5人のメンバーを教育して、全員が80の成果を出せるようにした方が、チーム全体では400の成果になる(5人×80 = 400)。
「自分のコード」に固執しているうちは、このレバレッジを効かせることができない。
コードは「資産」であり「負債」である
僕たちエンジニアは、コードを愛している。だから、コードを「資産」だと思いたがる。
「この素晴らしいクラスライブラリは、俺の遺産だ!」と。
しかし、ビジネスの観点から見れば、**コードは「負債(Liability)」**としての側面が強い。
コードは書かれた瞬間から古くなり、メンテナンスが必要になり、バグの温床になり、誰かが理解しなければならない「認知負荷」となる。
少ないコードで同じ機能を実現できるなら、それがベストだ。
複雑な独自ロジックよりも、ありふれた標準ライブラリを使う方が(たとえ処理速度が数ミリ秒遅くても)価値がある場合が多い。なぜなら、誰でも読めるからだ。
海外の現場で「Keep it Simple, Stupid (KISS)」や「You Aren’t Gonna Need It (YAGNI)」が口酸っぱく言われるのは、このためだ。
「自分が書いたコードの行数」を誇ることは、「自分が会社に押し付けた将来のメンテナンスコスト」を誇るようなものかもしれない。
こう考えると、評価されるべきは「大量のコードを書いた人」ではなく、「最小限のコードで最大限の問題を解決した人」であり、「コードを書かずに問題を回避した人」であることがわかるだろう。
英語の壁を越えるための「技術力」の使い方
「でも、英語が苦手だから、議論よりもコードで貢献したいんだ」
という反論があるかもしれない。僕もそうだったから痛いほどわかる。
しかし、逆説的だが、言葉の壁があるからこそ、「コード以外の貢献」が重要になる。
流暢な英語でジョークを飛ばせなくても、
「この設計図を見てくれ。ここがボトルネックになる可能性がある」
と、一枚のダイアグラム(図)を示すことはできる。
複雑な口頭説明をする代わりに、Markdownで分かりやすいドキュメント(ADR: Architecture Decision Recordsなど)を残すことはできる。
これらも立派な「Beyond the Lines」の貢献だ。
コードそのものではなく、「コードを取り巻く情報」をエンジニアリングすること。
これなら、英語のハンデを技術的知見とドキュメンテーション能力でカバーできる。
実際、僕の拙い英語でも、論理的な図解と、要点を押さえたドキュメントがあれば、ネイティブの同僚たちは真剣に耳を傾けてくれるようになった。
「彼の言うことは、コードにする前に聞く価値がある」と信頼されるようになったのだ。
次章への架け橋:それでも陥る「罠」
ここまで読んだあなたは、もしかしたらこう思ったかもしれない。
「なるほど、じゃあコードを書くのを減らして、会議に出まくって、ドキュメントばかり書けばいいんだな?」
いや、ちょっと待ってほしい。
そこにはまた別の、致命的な落とし穴が待っている。
「コードを書くことの幻想」から脱却しようとして、逆に「技術」を軽視しすぎたり、政治的な動きばかりに注力してしまうと、エンジニアとしてのアイデンティティを見失い、**「口だけの技術屋」**に成り下がってしまうリスクがある。
また、会社やチームの文化によっては、「見えない貢献」が全く評価されず、「結局、チケットを何枚消化したんだ?」と詰められる現場も悲しいかな存在する(特にレガシーな企業や、未成熟な組織では)。
次の章では、このバランスをどう取るか。そして、**「コードに逃げるエンジニア」が陥りやすい、キャリア上の「死の谷」**について、僕の失敗談——「アーキテクト気取りで現場を混乱させた話」——を交えて語っていこう。
コードを書くだけではダメだ。でも、コードから離れすぎてもダメだ。
この絶妙な綱渡りをどう生き抜くか。それが次のテーマだ。
The Dangerous Trap:「コード」に逃げるエンジニアが陥る、キャリアの死の谷
「アーキテクト気取り」で現場を混乱させた、僕の黒歴史
「承」の話を読んで、「よし、これからはコーディングは若手に任せて、自分は設計と会議に専念しよう!」と思ったあなた。
ちょっと待ってほしい。かつての僕のように、大火傷をする可能性がある。
海外の現場に慣れ、英語での議論も少しできるようになってきた頃、僕は「コードを書くだけの作業員」から脱却しようと焦っていた。
そこで僕は、自ら手を挙げて、プロジェクト全体の**「共通基盤(Common Library)」の設計**を担当することになった。
「現場の泥臭いUI実装は他のメンバーに任せて、俺は高尚なアーキテクチャを作るんだ」
「WPFのベストプラクティスを詰め込んだ、最強のMVVMフレームワークを作ってやる」
僕は意気揚々とVisual Studioを開き、ジェネリクスを駆使した抽象度の高いBaseクラスを量産し始めた。
PrismやReactivePropertyといったライブラリをラップし、「誰が書いても同じコードになる」ような、ガチガチの制約を持ったフレームワークを構築したのだ。
数週間後、僕はチームメンバーを集めて、ドヤ顔で説明会を開いた。
「この基盤を使えば、開発効率は2倍になる。君たちは何も考えずに、この継承元クラスを使えばいいんだ」
しかし、返ってきた反応は冷ややかだった。
「これ、複雑すぎてデバッグしにくいよ」
「簡単な画面を作るだけなのに、なんでこんなに儀式(Boilerplate)が必要なんだ?」
「お前の作った基盤のせいで、Bindingのエラーが追えなくなったぞ」
僕は反論した。「それは君たちの理解度が足りないからだ。モダンな設計とはこういうものだ」と。
まさに**「象牙の塔(Ivory Tower)」**に住むアーキテクト気取りだ。
結果どうなったか?
誰も僕のフレームワークを使わなくなった。
結局、現場のエンジニアたちは、それぞれのやり方で、泥臭いが「確実に動く」コードを書き続けた。僕が数週間かけて作った「高尚なコード」は、Gitのリポジトリの片隅で、誰からも参照されずに腐っていった。
この時、僕は痛感した。
「現場の痛み(Pain Points)」を共有せずに、上から目線で設計を押し付けても、誰もついてこないということを。
「Hands-on」を失ったエンジニアの末路
海外のジョブディスクリプション(職務記述書)を見ていると、シニア以上のポジションでも**「Hands-on experience(実務経験/手を動かす能力)」**がしつこいくらい要求されることに気づく。
マネージャークラスの求人でさえ、「WPF/C#の深い知識」が必須だったりする。
なぜか?
技術の進歩が速いこの業界では、「手を動かしていない期間」が半年もあれば、その技術的直感は錆びつくからだ。
僕が失敗した理由は、現場のエンジニアが日々直面している「XAMLのプレビューが表示されないイライラ」や「特定のデータ量で重くなるDataGridの挙動」といったリアリティから離れてしまったことにある。
自分で汗をかいてバグと格闘していない人間が、「こうすればいい」と口だけで指示を出しても、そこには説得力がない。
「コード以外の価値」を出すことと、「コードを書かなくなる」ことはイコールではない。
真に優秀なスタッフエンジニアやアーキテクトは、**「誰よりも現場のコードを知っている」**からこそ、的確な設計ができるのだ。
彼らは、普段はドキュメントを書いたり調整役をしているが、いざという時(クリティカルなバグや、難易度の高いプロトタイプ作成時)には、誰よりも速く、鋭いコードを書く。
その「いつでも抜ける伝家の宝刀」を持っているからこそ、周囲は彼らをリスペクトし、彼らの言葉(コード以外の貢献)に耳を傾けるのだ。
「俺はもうシニアだから」といってコードから逃げた瞬間、君はただの**「口うるさい昔の人」**になる。
本当の敵は「コンフォートゾーン」への逃避
逆に、「やはりコードを書くのが一番だ」といって、「IDE(統合開発環境)」という殻に閉じこもる罠についても触れておこう。これが今回のテーマの核心だ。
海外で働いていると、**「分からないこと(Ambiguity)」へのストレスが半端じゃない。
仕様がふわっとしている、英語のミーティングで何が決まったのか曖昧、ステークホルダー間の政治的な対立……。
こうした「不確実性」に晒され続けると、僕たちエンジニアは無意識に「確実な世界」**へ逃げ込みたくなる。
それが、コードだ。
コンパイラは嘘をつかない。0か1か。動くか動かないか。
そこは、英語力も政治力も関係ない、自分だけのサンクチュアリ(聖域)だ。
「今日は面倒な仕様確認のメールを無視して、ひたすらリファクタリングをしよう」
「テストカバレッジを100%にすることに没頭しよう」
これは一見、仕事をしているように見える。だが、厳しい言い方をすれば**「現実逃避」**だ。
ビジネスにとって重要なのは「不確実な仕様をクリアにすること」かもしれないのに、エンジニアとしての精神安定を求めて、「どうでもいいコードの美しさ」に逃げているだけかもしれない。
これを**「The Illusion of “Just Code”(コードを書くだけという幻想)」**と呼ぶ。
この罠にハマると、君は**「扱いやすいコーダー」**として固定されてしまう。
「彼は難しい話には入ってこないけど、言われた機能は作るから、まあ便利だよね」
そう評価されたら、キャリアアップはそこで止まる。そして、より安価なオフショア開発や、AIにその座を奪われる日を震えて待つことになる。
「死の谷」を越えるためのマインドセット
ここまでの話を整理しよう。
- ジュニア/ミドル層の罠:「コード行数=価値」と信じ込み、ビジネスインパクトを無視した作業に没頭する。(視野狭窄)
- シニア/アーキテクト層の罠:「コード以外の仕事=価値」と勘違いし、現場のリアリティ(Hands-on)を失い、空理空論を振りかざす。(現場乖離)
この2つの罠の間に、深く暗い**「キャリアの死の谷」**がある。
多くのエンジニアが、この谷底で「自分は頑張っているのに評価されない」と嘆いている。
では、どうすればこの谷を越えられるのか?
答えはシンプルだが、実践するのは難しい。
「コードを武器にしつつ、コードに執着しない」
コードはあくまで「道具」だ。
釘を打つためにハンマーが必要な時もあれば、図面を書くためにペンが必要な時もある。
「俺はハンマー職人だから、図面を書く時もハンマーを使う」というのは愚かだし、「俺は現場監督だから、もうハンマーには触らない」というのも、いざという時に役に立たない。
必要なのは、**「モードの切り替え」**だ。
- 朝の集中タイムは、ヘッドホンをしてDeep Workモード。ゴリゴリとC#のコードを書き、技術的な難題を解決する。(Hands-onの維持)
- 午後のミーティングでは、Architectモード。コードの詳細は一旦忘れ、ビジネスのゴールやチームの課題解決(Glue Work)に視座を上げる。(Impactの最大化)
この「往復運動」を繰り返すことでしか、本物の筋肉はつかない。
片方だけに偏るのは、楽だ。コンフォートゾーンだ。
でも、海外の荒波で生き残るエンジニアは、この**「行ったり来たり」のストレス**に耐え、両方の領域をブリッジできる人間だけだ。
僕自身、あの「フレームワーク大失敗事件」以来、心を入れ替えた。
今は、設計を提案する時は、まず**一番面倒な部分を自分で実装(PoC)**してみることにしている。
「やってみたけど、ここが辛かった。だからこう設計しようと思う」
そう言うと、チームのみんなは納得してくれる。「あ、この人は俺たちの痛みを知っている」と分かるからだ。
次がいよいよ最終章だ。
これまでの話を踏まえて、明日から具体的にどう行動を変えればいいのか。
単なる「コーダー」から、替えの利かない「エンジニア」へと進化するための、具体的なアクションプランを提示したい。
「コードを書かない時間を愛せ。でも、コードへの愛は捨てるな」
この矛盾するメッセージの真意を、最後にまとめよう。
The Engineer’s Real Job:コードを書かない時間を愛せ。本当の「生産性」を手に入れるためのマインドセット
エンジニアの本当の仕事は「タイピング」ではない
ここまで長い旅に付き合ってくれてありがとう。
最後に、僕たちが目指すべきゴールを再定義しよう。
僕たちエンジニアの仕事は、C#でクラスを定義することでも、WPFで美しいXAMLを書くことでもない。
それは**「技術を使って、現実世界の課題を解決すること」**だ。
極論を言えば、もしコードを一行も書かずに課題が解決するなら、それが最も優秀なエンジニアリングだと言える。
(例えば、Excelのマクロで十分な業務に、工数3ヶ月かけてReactのSPAを作るのは「エンジニアリング」ではなく「自己満足」だ)
海外のシビアな環境で生き残るために必要なのは、この**「ROI(投資対効果)への執着」**だ。
自分の時間(給料)というリソースを投資して、どれだけのリターン(ビジネス価値)を生み出せるか。
その手段として、今日は「コーディング」を選ぶのか、「ミーティング」を選ぶのか、「ドキュメント作成」を選ぶのか。その選択権は常に僕たちの手にある。
「コードを書かない時間」=「サボっている時間」「生産性が低い時間」という罪悪感は、今ここでゴミ箱に捨てよう。
むしろ、コードを書く前の**「思考の時間」こそが、勝負を決める**のだ。
明日から変わるための3つの「マイクロ・アクション」
概念的な話はもう十分だ。
明日、オフィスのドアを開けた(あるいはSlackにログインした)瞬間から実践できる、具体的なアクションを3つ紹介しよう。
1. チケットを見たら、5分間はキーボードに触らない(The 5-Minute Freeze)
Jiraのチケットを開いた瞬間、反射的にVisual Studioを立ち上げていないだろうか?
これをやめよう。これを僕は**「脊髄反射コーディング」**と呼んで戒めている。
チケットを読んだら、まず5分間、手を膝の上に置いて考える。あるいは紙とペンを持つ。
- 「この機能は、誰(Who)がどんな状況(Context)で使うんだ?」
- 「この実装で、本当にその課題は解決するのか?(Why)」
- 「もっと簡単な方法(既存機能の流用など)はないか?(How)」
このたった5分の「寸止め」が、後の5時間の「無駄な手戻り」を防ぐ。
英語環境だと、仕様の読み間違いも起こりやすい。だからこそ、まず「理解と設計」に脳のリソースを全振りする。
「とりあえず動くものを作ってから考えよう」は、海外では「とりあえず借金してから返済計画を立てよう」と同じくらい危険だ。
2. PMやデザイナーとの「雑談」を仕事に組み込む
英語に自信がないと、どうしても開発チーム(エンジニア同士)の殻に閉じこもりがちだ。
だが、**本当の情報(仕様書の行間にあるニュアンス)**は、Jiraには書かれていない。
勇気を出して、PMやデザイナーに「ちょっと5分いい?(Do you have 5 mins?)」と声をかけよう。
「このチケットのここなんだけど、こういう理解で合ってる?」
「ここをこう変えると実装が半分で済むけど、どう思う?」
これをやるだけで、君は「言われた通りに作る人(Coder)」から、**「製品を一緒に良くしてくれるパートナー(Collaborator)」**へと昇格する。
海外の文化では、沈黙は金ではない。沈黙は「同意」か「無関心」のどちらかだ。
拙い英語でもいい。「あなたの仕様に興味がある」という姿勢を見せることが、信頼残高を爆発的に増やす。
3. 「やったこと」ではなく「得られた結果」をアピールする
スタンドアップミーティングや週報での発言を変えよう。
- Bad: “I implemented the DataGrid sorting feature. I wrote 500 lines of code.”(DataGridのソート機能を実装しました。500行書きました。)→ これは「作業報告」だ。「ふーん、でお疲れ様」で終わる。
- Good: “I enabled sorting on the DataGrid, which reduces the time users spend searching for items by 50%.”(ソート機能を有効にしました。これにより、ユーザーの検索時間が50%削減されます。)→ これは「成果報告」だ。「おお、それはすごい!」となる。
エンジニアとしての主語を「I(私)」から「The Product(製品)」や「The Team(チーム)」に変える意識を持つこと。
「俺がどれだけ苦労してXAMLを書いたか」なんて、誰も興味がない。**「そのXAMLが世界をどう良くしたか」**を語るんだ。
C#とWPFを「最強の武器」にするために
ここまで「コード以外の話」ばかりしてきたが、誤解しないでほしい。
僕はC#が大好きだ。WPFの強力なデータバインディング機能には今でも感動するし、LINQの美しさには惚れ惚れする。
「コードを書くだけの幻想」から目覚めた時、君の技術力はさらに輝く。
なぜなら、「書くべきコード」と「書かざるべきコード」の区別がついているからだ。
無駄な機能を作らなくなった分、本当に重要なコアロジック(ドメインロジック)に時間をかけられる。
テストコードをしっかり書く余裕が生まれる。
パフォーマンスチューニングに本気を出せる。
「思考停止でコードを書く」のをやめた時、初めて「魂の入ったコード」が書けるようになる。
海外のエンジニアたちは、ドライに見えて、実は技術に対してものすごく情熱的だ。
彼らが評価するのは、「長時間働く人」でも「大量のコードを書く人」でもない。
**「スマートに働き、クールなコードで、確実に問題を仕留める人」**だ。
C#という武器を磨き続けろ。
でも、その使い所(Where to use)を見極める「眼」を養うことを忘れないでほしい。
最後に:荒波を越えていくあなたへ
海外で働くエンジニアとしての毎日は、正直しんどいことの連続だ。
言葉の壁、文化の壁、そして技術の進化の速さ。
「もう日本に帰りたい」と思う夜もあるだろう(僕も数え切れないほどある)。
でも、そこで「コード」という安全地帯に逃げ込まず、**「エンジニアとしての価値とは何か」**を問い続け、もがきながら前に進む経験は、何物にも代えがたい財産になる。
あなたが書くコードの1行1行が、そしてあなたが発する拙い英語の提案の一つ一つが、確実にチームを動かし、プロダクトを育てている。
「Just Code」の幻想を捨て、広い視野を持ったエンジニアになった時、あなたは気づくはずだ。
**「エンジニアって、こんなに自由で、こんなに面白い仕事だったんだ」**と。
さあ、Visual Studioを開こう。
でもその前に、一杯のコーヒーを飲みながら、少しだけ未来のことを考えよう。
素晴らしいコードは、その「余白」から生まれるのだから。
Happy Coding, and Happy Engineering!

コメント