理解不能なカオスと、金曜午後の「生贄」
やあ、みんな。海外でエンジニアやってる(一応、C#とWPFで設計開発がメインね)俺だ。
「海外でエンジニア」って聞くと、どんなイメージを持つ?
最新鋭のオフィス、多国籍なチーム、スマートな議論、そして週末はパブで乾杯…みたいな? うん、まあ、だいたい合ってる。合ってるんだけど、一つだけ誰も教えてくれなかった重大な事実がある。
それは、**「海外の職場は、君が愛する秩序正しいコードの世界とは真逆の、とんでもないカオスで満ちている」**ってことだ。
俺は根っからのC#エンジニアだ。WPFのXAML(ザムル)がピクセル単位でビシッと決まるのが快感だし、ロジックがインターフェースとクリーンに分離されている設計(そう、MVVMとかね)を見ると心が安らぐ。言ってみれば「秩序」の信者だ。バグは潰すべき敵だし、予期せぬ動作(Undefined Behavior)は悪だ。
そんな俺が、初めてこっち(仮にヨーロッパの某国としておこう)のIT企業に飛び込んだ日。期待と不安が入り混じる中、自分のスキル(C#の経験は10年近くあった)がどこまで通用するのか、ワクワクしていた。
最初の数週間は順調だった。コードレビューも活発だし、技術的な議論も面白い。ああ、これが俺の求めていた環境だ、と。
あの日、あの「金曜日」が来るまでは。
あれは入社して3回目の金曜日だった。午後3時を回った頃、やけにオフィスがソワソワし始めた。みんなが続々と、オフィスの隅にあるカフェテリアスペースに集まっていく。手にはビールやコーヒー。
「おい、新人(俺のことだ)、始まるぞ! 今日は誰が『生贄』かな?」
隣の席のシニアエンジニア、マークがニヤニヤしながら俺の肩を叩く。
「生贄…?(Inquisition?)何ですか、それ?」
「ハハ、まあ見とけよ。今日は君のチームの番じゃないといいけどな!」
訳が分からないまま連れて行かれた先には、プロジェクターと、なぜか異様に盛り上がっている数十人のエンジニアたち。そして、何やら罰ゲームでもあるかのように、顔面蒼白の男が一人、PCの前に立っていた。
彼の名はステファン。俺と同じチームの、かなり優秀な中堅エンジニアだ。彼がこの2週間、必死で取り組んでいた新機能のデプロイが、今週頭に盛大にコケたのを俺は知っていた。顧客数社に影響が出た、結構ヤバめのやつだ。
(うわあ…まさか、ここで吊し上げか? 欧米の企業って合理的かと思ってたけど、こういう陰湿なところもあるのか…)
俺は日本の「障害報告会」や「反省会」の、あの重苦しい空気を思い出して、思わず胃がキリキリした。
「それじゃあ、今週の『The Grand Finale of Quirks』、始めるぞ!」
司会役(なぜか人事部長)が、やけにテンション高く叫んだ。
(Quirks…? 奇行…? 奇行のグランドフィナーレ? 何言ってんだこいつら…)
俺の混乱をよそに、スクリーンに映し出されたのは、ステファンがやらかした障害の、生々しいシステムログだった。
(うわあああ! これ公開処刑じゃん! ヤバい! ヤバすぎる!)
俺はもう、見ていられなかった。しかし、次の瞬間、俺は自分の目を疑った。
ステファンが、マイクを握り、おどけた表情でこう言ったんだ。
「皆さん、ご注目を! 今週、私がいかにして『過去最大級のデータベースロック』を達成したか、その華麗なる(?)手口をお見せしましょう!」
は?
そこから始まったのは、俺のエンジニア人生で最もワイルドで、最も記憶に残る(そして最も理解不能な)プレゼンテーションだった。
フックで言うところの**「わざと下手なパフォーマンスを伴う、競争的なタレントショー」**そのものだ。
ステファンは、自分が書いた「クソコード(彼の言葉だ)」をスクリーンにデカデカと映し出し、いかにしてテストケースの網をくぐり抜け、本番環境で見事な「大爆発」を引き起こしたかを、まるで武勇伝のように語り始めた。
「まず、ここのインデックス設計! 我ながら天才的だ! まさか実データがテストデータの1000倍あるとは夢にも思わなかった! ハッハー!」
(会場、爆笑)
「そしてこのトランザクション処理! 『とりあえず全部ロックしとけ』という俺の大胆な決断が、見事に全システムを道連れにしたんだ!」
(会場、拍手喝采)
(狂ってる…! こいつら、狂ってるぞ!)
俺は、C#のコードが目の前でアセンブリ言語に逆コンパイルされていくような、強烈な違和感と混乱に襲われた。
これは何だ?
なぜ、障害報告で笑いが起きる?
なぜ、盛大にコケた張本人が、あんなに楽しそうに(Enjoyment)プレゼンしてるんだ?
なぜ、周りのエンジニア(中にはCTOもいた)が、「やられたー!」とばかりに腹を抱えて笑っているんだ?
フックで言うところの**「raw, unedited footage (生々しく、編集されていない映像)」**を、俺はただ呆然と見つめていた。カオスだ。完全なカオス(Chaos)だ。
俺が日本で叩き込まれたのは、「失敗は隠すもの」「障害は再発防止策を100ページで報告するもの」「原因追求と責任の所在を明確にするもの」だった。
だが、目の前で繰り広げられているのは、その真逆。
失敗の「プロセス」をエンターテイメントとして消費し、その「マヌケさ」を称え、全員で爆笑している。
プレゼンが(茶番が?)終わると、ステファンには「今週のやらかし大賞」として、安物のプラスチック製トロフィーと、なぜか大量のチョコレートが贈呈された。彼はガッツポーズでそれを受け取った。
俺は、その熱狂の渦の中で、完全に迷子だった。
ビールを片手に、一人だけ全く笑えなかった。
(俺は、とんでもないところに来てしまったかもしれない…)
WPFのUI設計より、C#の非同期処理より、はるかに難解な「文化」という名のバグに、俺は直面していた。
これが、俺が海外でエンジニアとして直面した、最初の「壁」だった。
技術じゃない。言語でもない。
この、一見、非合理的で、狂気に満ちた(Madness)「習慣」の裏に隠された意味。
俺が、この「カオスの意味」を理解するまでには、そこからさらに数ヶ月を要することになる。
そして、今なら断言できる。
これから海外に出る君たちエンジニアが、技術書を読むよりも先に知っておくべき「人生術」は、間違いなくこの「カオス」の中にあるんだ。
カオスへの恐怖と、「失敗のエンタメ化」という時限爆弾
あの、悪夢のような(あるいは喜劇のような)金曜日、「The Grand Finale of Quirks」が終わった後、俺は正直、数日間まともに仕事が手につかなかった。
月曜の朝。俺は自分のデュアルモニターに向き合い、Visual Studioを立ち上げる。目の前には、美しく整理整頓されるべきWPFのXAMLコードと、C#のロジニア(秩序)の世界が広がっている。
(そう、これだ。これが俺の世界だ。ロジックは明確で、コンパイラは嘘をつかない。NullReferenceExceptionは、そこに対処すべき「穴」があると教えてくれる教師だ)
だが、頭の中には金曜のカオスがこびりついて離れない。
ステファンが、自分のクソコードを誇らしげに掲げ、CTOが腹を抱えて笑っていた、あの光景。
(あれは、バグだ。組織の文化という名の、致命的なバグじゃないのか?)
俺たちエンジニアは、バグを潰すために給料をもらってるはずだ。バグをエンタメにしてどうする。もし、あのノリで「まあ、面白いからこのバグ残しとくか!」なんてことになったら? 冗談じゃない。
俺は、隣の席のシニアエンジニア、マーク(あの時ニヤニヤしていた張本人だ)に、朝イチのコーヒーを淹れるついでに、思い切って聞いてみた。
「マーク、ちょっといいすか。あの金曜の…『Quirks』ってやつ。あれ、本気でやってるんですか?」
マークは、マグカップを片手に「ああ、アレか!」と、また楽しそうに笑う。
「本気も本気、大マジさ。あれがウチの会社の『心臓』みたいなもんだ」
「心臓…? 障害報告会が、ですか?」俺は信じられない、という顔を隠せなかった。
「おいおい、『障害報告会』なんていうカビ臭い名前で呼ぶなよ」とマークは言う。「あれは『ショー』であり、『祭り』であり、そして何より『デトックス』だ」
「デトックス…」
「そう。エンジニアはミスるだろ? 俺も君も、ステファンもCTOだって、絶対にミスる。その『毒』を、隠したり、腐らせたりしないで、金曜に笑い飛ばして全部吐き出す(デトックスする)んだ。だから月曜には、みんなスッキリした顔で『さて、どう直すか』って話ができる」
「でも、あんな風に吊し上げられたら、怖くないですか? 俺だったら、隠したくなりますけど…」
「ハッ。隠してどうする? 隠したバグは、いつか必ず、最悪のタイミングで爆発する。それこそ『時限爆弾』だろ? C#のtry-catchで握りつぶした例外(Exception)が、ある日突然、本番環境でアプリ全体を落とすみたいにな」
マークの例えは、エンジニアの俺には痛いほど分かった。
分かったが、それでも納得はできなかった。
(理屈は分かる。でも、感情が追いつかない…!)
日本で俺が受けてきた教育は、「失敗=悪」「失敗=評価が下がる」という強烈な刷り込みだ。
あの「Quirks」の舞台は、俺にとって、自分の評価が地に落ちる「公開処刑台」にしか見えなかった。
そして、恐れていたことが起きた。
あれから数週間後。俺は、あるクライアント向けにカスタマイズしていたWPFアプリケーションの、ちょっと複雑なデータバインディング(WPF使いなら分かる、あの面倒なやつだ)部分を担当していた。
要件は、「特定の条件下でのみ、ボタンAを非表示にし、ボタンBを活性化させる」というもの。俺はC#のViewModel側でロジックを組み、XAML側はConverter(コンバーター)を使ってスッキリ書いたつもりだった。
コードレビューも通った。テストも(自分では)やった。
そして、デプロイした。
水曜日の午後。クライアントから緊急の電話が入った。
「あのさあ、ボタンAが消えるのはいいんだけど、ボタンBがいつまで経っても押せない(活性化しない)んだけど? おまけに、特定の操作をすると、今まで表示されてたデータグリッドが真っ白になる!」
(血の気が、引いた)
頭が真っ白になった。すぐにローカル環境で再現テストをする。
(……再現した)
原因は、俺が書いたConverterのロジックミスと、それに伴うViewModelのプロパティ変更通知(INotifyPropertyChanged)の漏れだった。二重のミスだ。しかも、データグリッドが消えるのは、俺の例外処理(try-catch)が、エラーを握りつぶした上でnullを返していたせいだった。
(マークが言ってた『握りつぶした例外』って、これかよ…!)
幸い、すぐに修正パッチを当てて、実害は最小限(クライアントのイライラは最大限)で済んだ。
だが、問題はそこじゃない。
(金曜日が、来る)
俺の心臓は、非同期処理(async/await)を忘れたUIスレッドみたいに、ガチガチにフリーズした。
(どうする…? 俺、あの舞台に立たされるのか? ステファンみたいに、アナみたいに、自分のクソコードをスクリーンに映して、笑いものにされるのか?)
(いや、そもそも日本人の俺に、あんな自虐的なユーモア、できるわけないだろ!)
木曜日、俺は生きた心地がしなかった。
Slackで「今週のQuirksのネタ、ないかー?」と人事が陽気に呼びかけているのを見て、本気で仮病を使って休もうかと考えた。
(ダメだ、逃げたら、それこそ「隠した」ことになる…)
でも、怖い。
WPFの設計思想(MVVM)を語ることはできても、自分の失敗をエンタメとして語るスキルなんて、俺のスキルセット(C#/.NET, WPF, SQL Server…)のどこにもない。
金曜日、午後2時50分。
ついに、俺のSlackにDMが来た。
司会役の人事部長からだった。
「やあ、Mr.秩序(俺のあだ名だ)! 今週、デカいのやらかしたって聞いたぜ! 準備はいいか? 今週の主役(生贄)は君だ!」
(終わった…)
俺は、震える手でカフェテリアスペースに向かった。
プロジェクターの前には、すでにビール片手の同僚たちが集まっている。みんな、「今週は誰だ?」とワクワクした顔でこっちを見ている。
(ああ、そうだ。こいつらにとって、これはただのエンタメなんだ…)
俺はPCをプロジェクターに繋いだ。
スクリーンに映し出されたのは、俺がやらかした、あの忌まわしいコード。
(何を話せばいい? 「すみません」か? 「再発防止策は」か? いや、それは違う…この場では、それは「正解」じゃない)
俺は、マイクを握った。手が汗でびっしょりだ。
口の中がカラカラで、最初の一言が出てこない。
シーン、と静まり返る会場。
(あれ、いつもは爆笑のはずじゃ…)
みんなが俺を「値踏み」しているのが分かった。
こいつは、この「文化」に乗れるのか、と。
俺は、腹を括った。
というか、ヤケクソだった。
「…皆さん、こんにちは。今日は…皆さんに、魔法をお見せします」
「魔法?」
「ええ。WPFのデータバインディングという、この世で最も美しいはずの仕組みを使って、『あるはずのボタン』を『永遠に触れない幻』に変え、さらに『見えるはずのデータ』を『虚無(null)』に突き落とす…暗黒魔術です」
一瞬の間。
そして、一番前に座っていたマークが、ゲラッと吹き出した。
「暗黒魔術だってよ! ブッハー!」
それを皮切りに、会場がドッと沸いた。
「いいぞ、Mr.秩序! どうやったんだ、その呪文は!」
「こいつはMVVMじゃなくて、Voodoo(ブードゥー教)だ!」
俺は、火がついたように話し始めた。
「まず、このConverter! こいつは真(True)を偽(False)に、偽を真に変えるだけのはずが、何を思ったか『たまにnullを返す』という、禅のような挙動を覚えたんです!」
(爆笑)
「さらに、このViewModel! 彼は『変わったよ!』とUIに伝える(INotifyPropertyChanged)のを、面倒くさがった! 結果、UIは古い情報のまま、永遠に待ち続けることになったんです!」
(拍手喝采)
「そして極め付けは、このtry-catch! すべてのエラーを優しくキャッチし、そして…握りつぶした! ログも出さずに! こいつのおかげで、俺は半日、どこが悪いのかサッパリ分からなかった!」
(狂気の裏にある根本的な意味…?)
俺は、自分が何を言っているのか、途中から分からなくなっていた。
ただ、自分が書いたコードが、いかに「マヌケ」で「危険」だったかを、必死で説明していた。
そして、気づいた。
(あれ…? 俺、今、めちゃくちゃ楽しんでないか?)
フックで言うところの**「raw, unedited footage (生々しく、編集されていない映像)」**を、俺は自ら晒していた。
そして、**「collective enjoyment (集団的な楽しみ)」**の、ど真ん中にいた。
プレゼン(という名の自虐ショー)が終わると、俺には万雷の拍手と、例の安っぽいトロフィー、そして大量のチョコレート(なぜか激辛ソース味)が贈られた。
俺は、汗だくで、ヘトヘトだった。
でも、不思議と気分は「最悪」じゃなかった。
むしろ、何か、重いものがスッと落ちたような…そう、マークが言っていた「デトックス」されたような、奇妙な爽快感があった。
その時、CTOが俺の肩を叩いた。
「見事な暗黒魔術だったよ、Mr.秩序。ところで…」
彼は、ニヤリと笑って言った。
「君が握りつぶしたあの『例外』、あれ、他のモジュールでも同じ『呪文』を使ってるヤツがいないか、月曜に全部チェックしてくれるか? あんな『時限爆弾』、他に仕掛けられてたらたまらんからな」
俺は、ハッとした。
(ああ、そういうことか…)
これは、罰じゃない。ショーでもない。
いや、ショーではあるが、単なるショーじゃない。
これは、組織の「免疫システム」そのものだ。
失敗(バグ)という「病原体」を、あえて人前で「エンタメ」として解剖し、その情報を組織全体で「抗体」として共有する。
そのための、最高に合理的で、最高にぶっ飛んだ「儀式」なんだ。
「秩序」のC#と「カオス」の文化が生んだ、最強のデバッグ術
「月曜に、全部チェックしてくれるか?」
CTOのあの言葉は、金曜のビールの泡のように消えていく、ただのジョークじゃなかった。
俺が「暗黒魔術」と称したあのクソコード…いや、失礼、**「貴重な学習資産」**は、月曜の朝、ガチの技術レビュー対象として、俺のチームだけでなく、関連する全チームのSlackチャンネルに「今週のハイライト」として(もちろん、俺の自虐プレゼンの録画リンク付きで)共有された。
(うわああ! デジタルタトゥーだ!)
と一瞬頭を抱えたが、反応は俺の予想と全く違った。
「Mr.秩序、最高のプレゼンだったぜ! おかげで俺、自分のコードにあった似たような『呪文』を見つけたよ。危うく俺も『生贄』になるところだった!」(隣のチームのシニアエンジニア)
「WPFのConverterって、確かにこういう『禅』みたいな挙A(以下略)…気をつけます」(新人のフロントエンド担当)
「あの『握りつぶした例外』のパターン、共通ライブラリ化してるロギング処理で検知できないか、インフラチームと話してる」(アーキテクト)
(……は? 何だこれ?)
俺がたった一回、恥を忍んで(というかヤケクソで)自分の失敗をエンタメにしただけで、組織が勝手に「デバッグ」と「再発防止」を始めたんだ。
俺は、雷に打たれたような衝撃を受けていた。
Visual Studioのデバッガで、F10(ステップオーバー)を連打していたら、いきなりF5(実行)が押されて、膨大な処理が一瞬で流れていくのを呆然と見ているような感覚。
俺は、C#とWPFのエンジニアだ。
俺の信じる「正義」は**「秩序」**だ。
MVVM(Model-View-ViewModel)パターン。あれはなぜ美しい?
UI(View)とロジック(ViewModel)とデータ(Model)が、お互いの役割をきっちり守り、疎結合(そけつごう)になっているからだ。カオスが入り込む隙がない。
C#の静的型付け。あれはなぜ信頼できる?
コンパイラが「おい、お前、数値(int)が入るハコに文字列(string)を突っ込もうとしてるぞ!」と、実行する前に「秩序」を正してくれるからだ。
俺はずっと、そうやって「バグ=カオス」を排除し、「秩序」ある完璧なシステムを組み上げることこそが、エンジニアの美徳だと思っていた。
だが、間違っていた。根本的に、勘違いしていた。
俺たちが見ているモニターの外、キーボードを叩いているこの「現実世界」は、C#のコンパイラほど優しくない。
要件は平気で変わり、ユーザーは想定外の操作をし、そして何より、コードを書いている俺たち自身が、普通にミスをする。
俺が金曜に晒した「Quirks」は、俺という「人間」が引き起こした、必然的な「カオス」だったんだ。
そして、この会社がやっていた「The Grand Finale of Quirks」という狂った儀式。
あれは、「秩序あるコードの世界(C#)」と「カオスな現実(人間)」を繋ぐ、最強のブリッジ(橋渡し)だったんだ。
フックで言うところの**「underlying meaning behind the madness(狂気の裏にある根本的な意味)」**が、ようやく俺の腹の底に落ちた。
考えてみてほしい。
俺たちエンジニアは、コードに「try-catch」を書く。
なぜ書く?
「try」ブロックの中(=秩序ある理想の世界)で、予期せぬ「例外(Exception)」(=カオスな現実)が発生するかもしれないからだ。
じゃあ、catchしたらどうする?
多くの(かつての俺のような)エンジニアは、こう書く。
C#
try
{
// 完璧なはずの俺のロジック
DoSomethingMagic();
}
catch (Exception ex)
{
// あー、なんかエラー出たわ。
// とりあえずログだけ吐いて(たまにそれすらしない)、
// nullでも返しとくか。UIがクラッシュするよりマシだろ。
Logger.Error(ex.Message);
return null;
}
これが、俺が「暗黒魔術」と呼んだ「握りつぶした例外」だ。
これじゃ、エラーが起きたことは「隠蔽」され、静かにシステムは腐っていく。まさに「時限爆弾」だ。
だが、「Quirks」の洗礼を受けた後の俺は、もうこんなコードは書けない。
なぜなら、こんなコードを書いたら、**「次の金曜に、俺が死ぬ(生贄になる)」**からだ。
あの「Quirks」という名の「カオスな儀式」は、エンジニアに強烈な「当事者意識」を植え付ける。
「隠したら、後で自分のクビが締まる」と。
結果、俺のコードはこう変わった。
C#
try
{
// 俺のロジック(まあ、どうせミスるかもしれん)
DoSomethingMagic();
}
catch (MagicFailedException ex) // ちゃんと独自の例外を定義する
{
// エラーが起きたぞ!
// 握りつぶすな! 「Quirks」のネタになるぞ!
// ログは詳細に、監視システムにアラートを飛ばせ!
Logger.Critical($"暗黒魔術失敗!: {ex.Details}", ex);
// UIにも「なんかヤバい」と正直に伝える
// (nullを返して知らんぷりするな)
NotifyUIOfCriticalError("システムがカオスに陥りました。Mr.秩序を呼んでください。");
// そして、潔く例外を再スローする(上位で処理してもらう)
throw;
}
これは、技術的に言えば「フェイルファスト(Fail Fast)」とか「回復力(Resilience)のある設計」とか、そういう小難しい話になる。
だが、俺が学んだのはもっとシンプルだ。
「どうせミスるんだから、ミスった時に一番デカい声で『助けて!』と叫ぶコードを書け」
ということだ。
「Quirks」は、この「助けて!」を(エンタメという形で)叫ぶ訓練であり、同時に、「助けて!」と叫んだヤツを、組織全体で「よくやった!」と称賛し(笑い飛ばし)、全力でサポート(デバッグ)する文化そのものだった。
完璧なコード(秩序)を目指すんじゃない。
ミス(カオス)を隠さず、そこから高速で学習できるチーム(家族/Family)を目指すんだ。
俺は、C#の秩序正しい世界で「バグをゼロにすること」ばかり考えていた。
でも、このカオスな職場は、「バグはゼロにならない」という現実(Madness)を直視し、その「バグ(=人間の失敗)」すらも組織のエネルギー(Enjoyment)に変えてしまう、とんでもない「人生術」を実践していたんだ。
俺のエンジニアとしての価値観が、ガラガラと音を立てて崩れ、そして再構築されていくのを感じた。
これはもう、WPFのUIデザインがどうとか、C#の最新機能がどうとか、そういうレベルの話じゃない。
海外で、いや、カオスな現実世界でエンジニアとして生き残るための、必須の「生存戦略」だ。
俺は、あの安っぽいトロフィーと激辛チョコレートをくれた同僚(家族)たちに、本気で感謝し始めていた。
「カオス」こそが家族の証。君が日本から持っていくべき、たった一つのスキル
あれから、1年が経った。
俺が「暗黒魔術」を披露して「生贄」になった、あの金曜日から。
今の俺か?
相変わらず、C#とWPFで設計図(コード)を書いてるよ。WPFのUIがXAMLの記述通り、ビシッと動く瞬間は今でも最高に気持ちいい。俺の「秩序愛」は健在だ。
だが、一つだけ決定的に変わったことがある。
俺は今、金曜午後の「The Grand Finale of Quirks」を、心の底から楽しみにしている自分がいる。
もちろん、今でもミスはする。
先月も、.NETの非同期処理(async/await)を盛大に勘違いして、UIスレッドをフリーズさせるっていう、C#エンジニアとして恥ずかしすぎるミスをやらかした。
もちろん、即「生贄」だ。
「Mr.秩序、また暗黒魔術か!」「今度は時間停止系かよ!」と、散々イジられ、例の激辛チョコレートを美味しく(?)いただいた。
でも、もうあの頃のような「恐怖」はない。
むしろ、「どうだ、俺の失敗、面白いだろ?」と胸を張って(ヤケクソとも言う)プレゼンしてる。
なぜか?
フック(きっかけ)で提示された、あの言葉を思い出す。
「Unveil the absolute wildest, most memorable family tradition. (最もワイルドで、最も記憶に残る、家族の伝統を披露する)」
そう。
俺がずっと「狂ってる」「カオスだ」と恐れていたあの儀式は、まさに、この多国籍エンジニア集団という「疑似家族」にとっての、クソ面倒くさくて、最高に愛すべき**「家族の伝統」**だったんだ。
考えてもみてくれ。
本当の家族って、何だ?
親兄弟や、長年連れ添ったパートナーの前で、君は「完璧な自分」を演じ続けるか?
朝起きたら寝癖ゼロ、口臭ゼロ、失敗ゼロ、みたいな。
無理だろ。
寝癖まみれの顔も、しょうもないことで悩んでる姿も、盛大にやらかして落ち込んでる姿も、全部ひっくるめて「まあ、お前はそういうヤツだよな」と笑い飛ばし、それでも最後は助けてくれる。
それが「家族(Family)」だ。
俺がいた日本の職場(すべてがそうだとは言わないが)は、どちらかというと「完璧な自分」を演じ合う「社交場」に近かったかもしれない。
ミスは「恥」であり、隠すべきもの。自分の「弱み(=クソコード)」を他人に晒すなんて、もってのほか。
だが、ここ(海外)で俺が学んだのは、その真逆だった。
「お前のクソコード(弱み)を晒せ。話はそれからだ」
だった。
俺たちが金曜にやっていたのは、まさに「raw, unedoited footage (生々しく、編集されていない映像)」…つまり、**エンジニアとしての「すっぴん」**を晒し合うことだったんだ。
「俺、こんなマヌケなミスしたぜ!」
「ハハッ、俺なんか先週、本番DBのテーブル丸ごとロックしたぜ!」
「マジかよ! アホだな!」
この「アホだな!」という爆笑(Collective Enjoyment)こそが、「お前も俺も、同じようにミスをする『人間(家族)』だよな」という、最強の信頼の証だったんだ。
さて、ここまで読んできた、これから海外でエンジニアとして働こうとしている君へ。
C#の最新バージョン? .NET 8の新機能? BlazorやMAUIの勉強?
素晴らしい。その技術的な探究心は、絶対に君の武器になる。
だが、もし俺が、そんな君に「人生術として、日本から絶対に持っていくべき、たった一つのスキルは何か」と聞かれたら、こう答える。
それは、「自分の失敗を、笑い話にするスキル」だ。
もっと具体的に、「これを知ってよかった」という得するヒントとして、3つにまとめておこう。
1. 「完璧なエンジニア」の仮面を捨てろ
君がC#の神(例えば、ジョン・スキートみたいな)でもない限り、君は絶対にミスをする。WPFのデータバインディングで無限ループに陥るし、LINQの遅延実行でパフォーマンス地獄を生み出す。
問題はミスをすることじゃない。「ミスをしない完璧な俺」という仮面を被り続けることだ。
海外のチーム(家族)は、その仮面を息苦しいと感じる。彼らが知りたいのは、仮面の下の、ミスをする「生身の君」だ。その君と「家族」になりたいんだ。
だから、やらかしたら、誰より早くその仮面を叩き割れ。「俺、完璧じゃなかったわ!」と。
2. 「助けて!」を「ユーモラスな貢献」に変えろ
日本で「助けて」と言うのは、「無能の烙印」を押されるようで怖いかもしれない。
だが、こっちで学んだ「Quirks」の教えは違う。
「ヤバいバグ(カオス)見つけた! 助けて!」と叫ぶことは、**「無能」どころか、チーム(家族)を時限爆弾から救う「最高の貢献」**だ。
ただし、コツがある。
「すみません、できません、分かりません…(シクシク)」とネガティブに言うな。
「皆さん、朗報です! 俺、とんでもない『宝(クソコード)』を見つけました! 今週の『Quirks』の主役、確定です!」
と、ユーモラスに「貢献」しろ。
深刻な問題を、深刻な顔で伝えても、チームが暗くなるだけだ。カオスな時こそ、笑い飛ばせるメンタリティが、ここでは「スキル」として評価される。
3. 「他人のカオス」を全力でデバッグしろ
これが一番重要だ。
君が「Quirks」の観客席にいるとき。
誰かが「生贄」になっているとき。
その時、君はどんな顔をしている?
「うわ、俺じゃなくてよかった…」「こいつ、こんなミスしてやがる…」と冷めた目で見ていないか?
だとしたら、君は永遠に「家族」にはなれない。「ゲスト」のままだ。
「家族」になるには、他人の「カオス(失敗)」を、自分のことのように笑い、そして自分のことのように真剣にデバッグするんだ。
「マジかよ、その『暗黒魔術』最高だな! ところで、その呪文(コード)、俺のモジュールにも影響ないか、月曜に一緒に見てもらえるか?」
と。
他人の失敗を許し、それを「学習のネタ(Enjoyment)」として消費し、未来のバグを潰す。
このサイクル(狂気の裏にある根本的な意味/Underlying meaning behind the madness)こそが、俺が海外で学んだ、最強のエンジニアリングであり、最強の人生術だ。
俺たちはC#エンジニアだ。
秩序を愛し、カオスを憎むように訓練されてきた。
だが、俺たちが働く「現場」は、人間という「カオス」の塊でできている。
もし君が、その「カオス」を、君が愛する「秩序(コード)」でねじ伏せようとしたら、君はいつか、一人きりでバグの山に埋もれることになるだろう。
そうじゃない。
カオスを受け入れろ。
カオスを笑え。
カオスを「家族の伝統」にしてしまえ。
君のC#とWPFのスキルは、その「カオスな土台」の上でこそ、初めて「秩序」という名の美しい花を咲かせることができるんだ。
さあ、準備はいいか?
君のエンジニア人生をかけた、最高にワイルドな「The Grand Finale of Quirks」の幕開けだ。
君がどんな「暗黒魔術」を見せてくれるのか、楽しみにしてるぜ。

コメント