**ソフトウェア開発25年にわたる物語**

2026/02/07 23:42

**ソフトウェア開発25年にわたる物語**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Susam Pal は 20 年にわたるソフトウェア開発を振り返り、2001 年に個人用ウェブサイトへの情熱を燃やしたシンプルな HTML チュートリアルから始まったと述べています。2004–05 年には Intel 8086 のリセットベクターを実験し、即座に再起動を引き起こして成績よりも好奇心が刺激されました。その後 2006 年に e‑バンキングサポートチームに参加し、脆弱な Python インストーラを安定化させ、称賛されたユーザーガイドを作成。さらに「Archie」アーキテクチャチームへ移動し、企業銀行向け製品のデジタル署名を Bouncy Castle を使用して実装しました。

2007–08 年にはトリムド C で OpenTV セットトップボックスウィジェットをデバッグ。上級アーキテクトのポインタバグにより、5 分後にクラッシュが解消されました。また、通信 DTH サービス向けにアニメーション付きウィジェットデモを追加し、エミュレータで実現可能性を示したものの、実機では性能上限に直面しました。

2009 年には RSA Laboratories の Dr Burt Kaliski が数学指向の仕事を追求するよう助言。これに従い 6 年間パーサージェネレータとペタバイト規模のデータベースインデックス/クエリに取り組み、後にメールで Kaliski に感謝しました。

2019 年 10 月の Cybersecurity Awareness Month ではオフィス Capture‑the‑Flag イベントで勝利。約 90 % のパズル(SQL インジェクション、暗号化、バイナリ逆アセンブル)を 8 時間以内に解決し、スコアボードのトップに立ちました。若手同僚は「10 年以上の C 経験」が成功の鍵だと指摘し、「賢い」ではなく単なる経験豊富さが評価された変化を示しました。

Pal は常にスキル磨き、プロフェッショナリズム、倫理、親切さを「賢い」というラベルよりも重視すると強調しています。彼のキャリアは低レイヤーのシステムプログラミング(C/C++)から高レイヤーのアプリケーション開発(Go/Python)まで広がり、様々な言語で趣味プロジェクトを維持し続けています。

本文

Susam Palによる – 2026年2月6日


昨年、私は20年間にわたるプロフェッショナルなソフトウェア開発を迎えました。
当時は何かを書きたいと思っていたものの時間が取れず、本記事でその欠落分を埋めようと試みています。

二十年以上コードを書いているにしても、真剣にソフトウェアに取り組むようになったのは約25年前に大学へ入学したころです。
それ以降のほとんどのエピソードはコードより人間関係を語るものが多く、明確な教訓ではなく、単なる回想録です。


目次

  1. ソースを見る
  2. リセットベクタ
  3. 中間者攻撃
  4. スパゲッティコード
  5. 良き祝福
  6. CTFスコアボード

1 ソースを見る

最初の物語は2001年、大学に入学した直後のことです。
ある晩、コンピュータラボでウェブを閲覧しているとき、

<http://susam.com>
をアドレスバーに入力し、そのホームページへ飛びました。

大きなバナーとテキストに魅了されました。
年上の学生が私に注意を払い、「サイトを作ったんだ?」と尋ねてきました。
私は「いや」と答えると、彼はInternet Explorer の View → Source を開き、ウェブページは単なるHTMLファイルであることを説明し、メモ帳で簡単なページを書いてみせました。

<BODY><FONT COLOR="RED">HELLO</FONT></BODY>

フォントの種類・サイズを変えたり、テキストを中央揃えにしたり、背景色を変更したりする方法を示し、約10分でウェブがどんなものかを解明してくれました。

その学生にはもう一つ目的がありました。デモの後、彼は私の席から離れて行きませんでした。私は失望しながらも自分自身のサイトを作る可能性に胸を躍らせました。

susam.com
は既にトルコ料理店に登録されていたため取得できませんでしたが、その後 .net ドメインを手に入れ、個人ウェブサイトを構築する生涯の道へと踏み出しました。


2 リセットベクタ

大学時代のもう一つのエピソードです。アセンブリでリフト制御プログラムを書いている最中に、8086 が CS:IP = FFFF:0000 にリセットされることを思い出しました。好奇心から DEBUG を起動し、そこへジャンプしてみました。

C:\>DEBUG
-G =FFFF:0000

すぐにマシンは再起動しました。トップクラスの友人がそれを見て、「どうやって知ったんだ?」と尋ねました。

私は物理アドレス FFFF0 でリセットベクタがあること、CS:IP がリアルモードでそこにマッピングされることを説明しました。1週間後、彼は「競争ではなく探求したい」と言ってくれました。その約束を守り、再びトップになることはありませんでした。


3 中間者攻撃

大学卒業後の最初の仕事は、e‑バンキング製品の導入に関わるものでした。Pythonで書かれたインストーラが脆弱だったため、ユーザーガイドを書きました。実際にはインストーラよりもガイドの方が高く評価されました。

さらに本格的な仕事を求めて経営陣にメールを送り、別都市のチームへの転職を提案しました。2006年の面接は、当時珍しかったビデオ会議で行われました。

採用マネージャーが Archie(アーキテクチャ)という人物を紹介し、Java Servlets/JSP でウェブフレームワークを構築・保守していると説明しました。彼は SQL インジェクションや XSS、MITM 攻撃について質問したのですが、「中間者攻撃」という用語に全く触れたことがありませんでした。私は正直に知らないと答えました。

そこで彼は PKI と MITM を学ぶよう促し、デジタル署名機能を構築するためだと言いました。RFC や関連ドキュメントを調べ、Bouncy Castle を使って1か月以内に機能を実装しました。この製品はセキュリティ監査に合格し、今日でも使用されています。時折顧客としてそのページを閲覧することもあります。


4 スパゲッティコード

2007–08年頃、OpenTV のセットトップボックス用ウィジェットを C 言語で書いていたとき、頻繁にランダムクラッシュが発生していました。上位アーキテクトは私の絡み合ったコードをレビューし、数分でポインタバグを特定しました。修正するとクラッシュは止まりました。

その後、Java ME ウィジェットのアニメーションを携帯キャリアの DTH サービス向けに作成しました。セットトップボックスメーカーはアニメーションを不可能だと否定していましたが、エミュレータでデモできました。実機でテストするとパフォーマンスがぎこちなく、最終的にキャリアはそのアイデアを放棄しました。これにより製造元の見解が正しかったことが証明されました。


5 良き祝福

2009年、RSA Security に1年間在籍した後、数学とアルゴリズムに関わる知的刺激を求めていました。Dr. Burt Kaliski(RSA Laboratories のチーフサイエンティスト)が私と面談し、アドバイスをくれました。その結果、私はパーサジェネレータや形式言語実装、ペタバイト規模のインデックス/クエリエンジンに携わるチームに参加しました。6年間は学び続ける楽しみあふれる期間でした。

後に Dr. Kaliski に感謝の手紙を書きました。彼は暖かく返事をくれました。

「私の目標の一つは、他者がキャリアを築く際に励ましを与えることです。他人が私の成長に投資してくれたように、良い祝福を世代から世代へと渡すことです。」


6 CTFスコアボード

2019年、私はミッドキャリアのスタッフエンジニアでした。サイバーセキュリティ意識月間中に、オフィスで SQL インジェクションや暗号化課題、逆アセンブル、スタックオーバーフローを含む Capture‑the‑Flag(CTF)イベントが開催されました。

私は参加し、8時間で約90%のパズルを解き、スコアボードのトップに立ちました。予想外でしたが満足感は大きく、自分の経験がまだ価値あるものだと改めて実感しました。


振り返り

これらの物語は、好奇心・メンターシップ・粘り強さが私のキャリアを形作ってきた過程を示しています。教訓としてではなく、人々や瞬間が道しるべとなった記憶として綴っています。

同じ日のほかのニュース

一覧に戻る →

2026/02/08 6:45

小型 C コンパイラ

## Japanese Translation: Tiny C Compiler(TCC)は、非常に小さな(約100 KBのx86実行ファイル)Cコンパイラであり、1回のステップでコンパイル・アセンブル・リンクを行い、バイトコード層なしでネイティブx86マシンコードを生成します。2.4 GHz Pentium IV上では、Links BrowserテストをGCC(20.0 秒)より約10倍速く実行できます(2.27 秒)。これは別のコンパイルステージが不要であるためです。 TCCはISO C99を完全にサポートし、自身をコンパイルでき、任意のC動的ライブラリを直接リンクすることも可能です。完全なプリプロセッサ、GNUスタイルのアセンブラー構文、オプションのメモリと境界チェック機能、さらにはシェバンベースの「Cスクリプト」まで含まれ、コマンドラインから実行できます。libtccライブラリにより、他のプログラムがTCCをランタイムコード生成のバックエンドとして使用できるようになります。 性能テストはPentium IV上で行われました。新しい測定値(参照1–4)では、モダンハードウェアでも速度向上が継続しています。ドキュメント、メールリストサポート、およびSavannah/GitHubリポジトリは最新情報を提供します。 TCCはGNU Lesser General Public License(LGPL)の下で配布されており、商用利用も許可されています。

2026/02/08 8:23

**良質なコードの静かな終焉**

## Japanese Translation: 著者は中学時代から「Good Code™」―読みやすく、保守しやすく、特定の目的を持って存在するコード――を書き続けることに情熱を注いできました。機能提供に重点を置くソフトウェアエンジニアとして、彼は今日の高速開発環境で良いコードがますます希少になっていると感じています。 同僚の経験はこの状況をよく示しています。外部Linuxカーネル統合システムをCからRustへ書き換えた後、最初のバージョンは機能していたものの読みづらく保守が困難でした。原始的なCロジックを学習した上で再度書き直すと、コードはクリーンになり、自明であり、元のCよりも優れていると言えるようになりました。この経験が著者に品質コードへの熱意を再燃させました。 現在、彼はほとんどの場合初期バージョンを書かず、代わりに「Good Code™」ではなく許容できるものを生成するコーディングエージェントに頼っています。このようなツールへの継続的な依存が個々の行レベルでの品質への注意を薄め、業界実務におけるGood Codeの静かな消滅を招くと彼は恐れています。コード品質が低下すると保守コストや技術的負債が増大し、開発者の生産性、製品の信頼性、そして最終的には企業から提供されるソフトウェアへのユーザーの信頼まで損なわれます。

2026/02/08 2:39

**セクターC:512バイトで実装されたCコンパイラ**

## Japanese Translation: SectorCは、x86‑16アセンブリで完全に書かれたCコンパイラで、単一の512バイトのブートセクタに収まります。Ultra‑compactなトークン化スキーム「Barely C」を使用しており、各スペース区切り語を「メガトークン」とみなし、`atoi()`で識別子をハッシュし64Kテーブルに格納します。変数はこのハッシュを通じてセグメント0x3000に保存されます。最初のBarely C実装は468バイトで、シンボルテーブルなしの再帰下降パーサーでした。バイトスレッド化されたForth風の変種も試みられましたが、サイズをさらに削減することはできませんでした。 最終的なコンパイラはわずか **303 バイト** です。サイズは、フォールスルーロジック、テイルコール、コールフュージョン、`lodsw/stosw`の広範な使用、およびすべてのジャンプオフセットを1バイト内に収めるなどの手法で削減されました。残り約200バイトでBarely Cは完全なCサポートへと拡張されました:ネストされたif/whileブロック、包括的な演算子集合(+, −, *, &, |, ^, <<, >>, ==, !=, <, >, <=, >=)、ハッシュテーブルを介した関数定義と再帰、インライン`asm`ステートメント、および単一行(`//`)と複数行(`/* */`)コメントの両方が実装されました。 コンパイラのランタイムは `rt/` ディレクトリ内の2つのCファイルに分かれています:ライブラリルーチン(多くの場合インラインasmを含む)を持つ `lib.c` とエントリポイントとして機能する `_start.c` です。これらはプログラムソースと結合してからコンパイルされます。記事には、全ブートセクタのBase64文字列、VGAモード0x13hで動くサイン波を描画するデモ、および追加例(`hello.c` はビデオメモリ0xB8000に書き込み、`twinkle.c` はPCスピーカーで「Twinkle Twinkle Little Star」を再生)が含まれています。この作業は、512バイトという一見不可能な目標—完全機能のCコンパイラを実現すること—が、創造的なトークン化、ハッシュ化、および積極的なコードサイズ最適化によって達成できることを示しています。