- 大学時代から続く25年間のプログラミングの旅を振り返り、技術そのものよりも人間関係や経験に焦点を当てた回顧
- 大学のコンピュータ室で偶然教わったHTMLのソース表示10分が、個人Webサイトを作り維持してきた長い時間の出発点となった
- 8086プロセッサのリセットベクタへジャンプしてシステムを再起動した小さな実験が、同級生に好奇心から始まる学習姿勢を刻み込んだ
- スパゲッティコードのデバッグ、セットトップボックスのアニメーションの現実的な失敗、CTF大会での上位成績など、試行錯誤と成長が繰り返された
- 時間が経つにつれて、問題解決能力が才能ではなく経験の結果として受け止められる変化を実感し、結局残るのは専門性・倫理・人に接する姿勢だとまとめる
Webの始まり: ソースを見る(Viewing the Source)
- 2001年に大学へ入学した直後、夕方のコンピュータ室でWebを眺めていて、アドレスバーに
susam.com を入力しながら初めてWebと出会った
- 肩越しに見ていた先輩がInternet ExplorerのView > Sourceメニューを開き、WebサイトはHTMLで書かれたテキストだと説明した
- Notepadを開いて
<BODY><FONT COLOR="RED">HELLO</FONT></BODY> のような簡単なHTMLを直接書き、ブラウザでどう表示されるかを実演した
- 当時は
FONT タグが広く使われており、HTMLタグを大文字で書く慣習が一般的だった
- フォントサイズや色の変更、中央揃え、背景色の変更などを見せながら、Webが動く仕組みを短く紹介した
- 10分ほどの説明だったが、ワールドワイドウェブは急に神秘的でなくなり、はるかに興味深い対象に感じられ始めた
- 説明を終えた先輩は席を返してくれずそのままWebを使い続け、席が足りなかったためそのまま寮へ戻るしかなかった
susam.com ドメインはトルコ料理関連の事業者がすでに使っていたため登録できず、その後**.net ドメイン**を選んだ
- この短い出会いが、その後個人Webサイトを作り維持してきた長い旅の出発点となった
リセットベクタ(The Reset Vector)
- 大学時代、コンピュータ室でIntel 8086ベースのMS-DOSマシン向けにアセンブリ言語のエレベーター制御プログラムを書いていたときのこと
- 授業で学んだ、8086がリセットされるとCS:IPがFFFF:0000に設定されるという内容を思い出した
DEBUG.EXE でそのアドレスへジャンプすると何が起こるのか気になり、自分で実行してみた
C:\>DEBUG -G =FFFF:0000 コマンドを実行した直後、システムが即座に再起動した
- それを見ていた毎学期首席だった友人が大いに驚き、どうしてそんな発想をしたのかと尋ねた
- 1週間後に寮を訪ねてきて、自分は成績はいつも1位だが、小さな事実を思い出して自分で試してみる好奇心は持っていないと打ち明けた
- もう首席を目標にはせず、学んだことを探究し、実験し、楽しむやり方で勉強すると宣言した
- その後も上位の成績は維持したが、実際に二度と1位にはならなかった
- プロセッサのリセット突入点へジャンプした一度の実験が、誰かの学習姿勢を競争から探究へ変えるきっかけになった
中間者攻撃と最初のエンジニア職(Man in the Middle)
- 大学卒業後の最初の職場でe-バンキング製品の技術サポートチームに配属され、特定コンポーネントを配布するためのインストーラ実行業務を担当した
- Pythonで書かれたインストーラは対象環境に対する前提が脆弱で頻繁に失敗したため、最初の1週間でインストーラを安定化させ、段階別ユーザーガイドを作成した
- コード改善よりユーザーガイドのほうが大きな反響を得た
- 反復的なサポート業務に限界を感じ、より本格的な開発の仕事を望んで何度もチーム異動を願い出た
- 結局、別の都市にあるArchie(アーキテクチャ)チームの面接機会を紹介された
- Archieチームはe-バンキング製品全体を支えるWebフレームワークと中核アーキテクチャコンポーネントを担当していた
- APIルーティング、認証・認可、Cookie管理などをJava ServletとJSPで独自実装
- SpringやDjangoのようなオープンソースフレームワークが登場する以前に作られた構造
- 銀行環境で使われるため、厳格なセキュリティテストと定期監査が必須だった
- 2006年の電話面接でSQLインジェクションやXSS対策のようなセキュリティ質問には答えたが、MITM(中間者攻撃) という用語は初めて聞き、知らないと認めた
- 面接官は「PKIとMITMを徹底的に勉強しなさい。法人向けバンキング製品にデジタル署名機能を実装する予定だ」と説明した
- その後数週間、RFC文書と公開鍵基盤(PKI)、公開鍵暗号標準の資料を集中的に学習した
- 最初は難しく負担に感じたが、時間がたつにつれて次第に直感的で精巧な体系として理解できるようになった
- 新しい都市へ移ってから約1か月で、オープンソースのBouncy Castleライブラリを活用してデジタル署名機能を完成させた
- その後も製品のさまざまな中核部分を開発し、数百の銀行と数百万の利用者が使う成熟したシステムに自分のコードが組み込まれる経験を積んだ
- マネージャーは優れたメンターであり、その支えは長いあいだ自信の土台となった
- 約20年が過ぎた今もその製品は稼働しており、ときどき顧客の立場でブラウザの開発者ツールを開くと、当時書いたコードの痕跡を見つけることがある
スパゲッティコード(Spaghetti Code)
- 2007〜2008年ごろ、OpenTVセットトップボックス向けウィジェット開発の概念実証(PoC)作業に参加した
- 極度に縮小されたC言語環境でコードを書いているうちに、ウィジェットが断続的にクラッシュする問題が発生した
- 複雑に絡み合ったロジックと無秩序なポインタ演算のせいで、自分が書いたコードですら理解しにくいスパゲッティコード状態に陥った
- 4人で構成されたチームのリード兼アーキテクトにコードをtarball形式で渡した
- 何時間も解決できなかった問題を、アーキテクトはコードを受け取ってわずか5分で特定ファイルのポインタバグだと正確に突き止めた
- この経験を通じて、自分はかなりできると思っていたが、よいソフトウェア開発者になるまでまだ道のりは遠いと痛感した
- その後何年にもわたって成長し、今では当時と比べものにならないほどソフトウェアの複雑さを扱う力を身につけた
アニメーション付きテレビウィジェット(Animated Television Widgets)
- 同時期の別プロジェクトでは、Java ME(Micro Edition) ベースのセットトップボックスプラットフォーム向けウィジェット開発を担当した
- プロジェクトは3者が協力する構図で進められた
- 自社: ソフトウェアベンダーの役割
- 大手通信会社: DTHテレビサービスのブランド保有
- セットトップボックス製造会社: ハードウェアとプラットフォームを提供
- 通信会社側から、ウィジェットにスライドイン・スライドアウトのようなアニメーション効果を適用できるかという問い合わせがあった
- パートナー会議でセットトップボックス製造会社は「そのセットトップボックスはアニメーションをサポートしておらず、不可能だ」と断言した
- ウィジェットを描画できるなら位置を少しずつ変えて繰り返し再描画する方式でアニメーションは可能だと判断した
- この原理でエミュレータ上では正常に動くデモを実装した
- 次の会議でデモを共有すると、セットトップボックス製造会社は激しい反応を示し、即時に作業を中断するよう求めた
- 公式に不可能と表明していた立場と矛盾するという理由だった
- 通信会社の代表が介入し、「不可能だと言った機能をこの人たちは実装して見せている。製造会社の側が自社製品の性能を知らないというのはあり得るのか」と強く叱責した
- その後、実機ハードウェアでテストした結果、エミュレータでは滑らかだったアニメーションがテレビ画面でははっきりしたカクつきとして現れた
- 数週間にわたり、フレームレート調整、バッファリング方式の変更、レンダリングループ最適化を試みた
- 制限の多い組み込みハードウェアの性能では演算と描画を処理しきれない限界が明らかになった
- 結局、通信会社は「中途半端なアニメーションならないほうがよい」と判断し、機能そのものを廃棄した
- 結果として、セットトップボックス製造会社の判断が現実的には正しかったことが確認された
よい祝福(Good Blessings)
- 2009年、RSA Securityで約1年間働いた後、数学とアルゴリズム中心のより知的な仕事を求めるようになった
- RSA Laboratoriesの主任科学者Dr. Burt Kaliskiが直接面談を提案し、キャリアの方向性について助言した
- その助言をもとに新しいチームへ加わり、その後6年間勤務した
- パーサジェネレータ、形式言語仕様と実装
- ペタバイト規模データベースのインデクシングとクエリエンジン開発
- ほぼ毎日新しいことを学び、キャリアの中で最も楽しい時期を過ごした
- 数年後、短いあの面談が自分のキャリアの軌道を変えたことに気づき、感謝のメールを送った
- Dr. Kaliskiからの返信には次のような一文が含まれていた
- 他の人々が自分のキャリアに投資してくれたように、成長途中の人たちへ励ましを伝えることが目標
- よい祝福を一世代から次の世代へ渡していくこと
CTFスコアボード(The CTF Scoreboard)
- 2019年当時、もはや20代前半の新人エンジニアではなく、何年にもわたりC/C++ベースの低レベルなネットワーキングおよびデータベースシステムを開発してきた中堅スタッフエンジニアだった
- キャリアはGoとPythonベースのマイクロサービス開発を率いる新たな段階へ移行していた
- 個人プロジェクトですでにPythonとGoを使っていたおかげで、移行は比較的自然だった
- 10月のサイバーセキュリティ意識向上月間に合わせて、社内でCTF(Capture the Flag) 大会が開かれた
- SQLインジェクション、脆弱な暗号、バイナリリバース、スタックオーバーフローエクスプロイトなど、さまざまな種類の技術パズルで構成されていた
- 競争と時間制限のある問題解きに負担を感じつつも参加し、約8時間で問題の約90%を解いて1位を記録した
- 大会中、同僚たちがしばしば席を訪れて進捗を見て驚きを示し、オフィスの話題になった
- 尊敬していた2人の若い同僚エンジニアが成績について話すのを偶然耳にした
- 1人が成果を高く評価すると、もう1人が「当然だよ、Cを10年以上やってきたんだから」と答えた
- 若いころにはこうした問題解決は「頭のよさ」と受け止められていたが、今では自然に経験の結果として解釈される変化を実感した
- 技術的成果が経験のおかげと見なされるとしても、これからは専門性、倫理、そして同僚への接し方でよい印象を残したいと考える
全体の回顧
- 25年にわたるコンピューティングの旅は、好奇心から始まり、実験、協業、感謝、内省へと続く流れだった
- 目立つ技術的達成よりも、その過程で結ばれた人と学びの関係のほうが長く残る
- 各時期の経験は互いにつながり、継続的な成長と謙虚な姿勢として積み重なっていく
- ソフトウェア開発キャリアの核心は結局、コードそのものより、学び、ともに働いてきた人々の物語にある
1件のコメント
Hacker Newsの意見
昔は、人に仕事を任せれば自分でうまくやってくれるという信頼があった
ところが最近は、ジュニアエンジニアにTwitter級のシステム設計を求めたり、Leetcodeの問題の解き方を暗記させたりしている
こういうものは昔は無意味な手続きだったし、今はLLMがこうした文化をなくしてくれることを期待している
私も似たような始まり方だった
小学3年生のとき、"Make Your Own Web Page! A Guide for Kids" という本を学校のブックフェアで見つけて、母に買ってほしいと頼んだ
その頃はインターネットがまるで企業専用のもののように思っていたが、自分でウェブページを作れると知って完全に夢中になった
HTMLを学びながらハッカーになった気分で、先生があまりに驚いて親に電話までしてきた
その後は "Sams Teach Yourself C in 24 Hours" や Flash MX 2004向けのActionScript本、それにC++の本でプログラミングを学んだ
今ではそのおかげで decent なキャリアを築けたし、最近eBayでその本をもう一度手に入れて読み返し、思わず微笑んだ
通信会社の社員がセットトップボックス担当者に「黙っててください」と言ったくだりで吹き出した
状況全体が呆れつつも笑える場面だった。人はどうでもいいことに執着して、自分で自分を困らせることがよくある
余計なことを言って自分をばかみたいに見せてしまった。それでも本当に面白い文章だった
Pythonで書かれたインストーラが環境の前提を間違えていて、いつも手動介入が必要だったという話に共感する
私もSDR開発環境のセットアップに半日かかった。依存関係地獄は今も健在だ
最終的には動いたが、本当にひどいものだった
サーバーサイドのようにコンテナで環境を制御できるときは良いが、それ以外では絶対に使いたくない
古い商用ソフトウェアや放置されたOSSプロジェクトが入り混じっていて、数か月ごとにランダムに壊れて開発停止になることがあった
結局、ある会社はAMIベースのEC2インスタンスを開発者ごとに立ち上げる方式を取ったが、それを管理するCLIですら頻繁に壊れていた
本当に「楽しい」時代だった
私ももう20年選手になりつつあるが、ウェブ開発ばかりやってきたせいか、面白い逸話はあまりない気がする
年を取るほど、技術的な問題を解いても人は驚かなくなる
それでも、いつか老人になってもコーディングしていたら、そのときはまた印象的に見えるのかもしれない
「プロセッサのリセットポイントにジャンプした」という一文を読んで、単にCPUだけでなく、その人の学ぶ姿勢までリセットされたように思えた
DevOpsに興味があるなら、Davide Bianchiの"Tales from the Machine Room"をおすすめする
「susam.com」のドメインは昔は買えなかったそうだが、今は販売中だ
定価より安く買えるかもしれない。もちろん .net でも十分だが、感情的な愛着があるなら試してみる価値はある
良い話を共有してくれてありがとう
LLM以前のソフトウェア業界で働いた経験は、実際に体験してみないと理解できないものだ