Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。動くのかわからないけどプログラムはできる金子勇さんは2ちゃんねる発のP2Pソフト「Winny」の作者として(そしてそれが理由で逮捕されたという経歴でも)有名だが、1990年後半には茨城大学のドクターから日本原子力研究所に入って物理シミュレーションを専門にする傍ら、ニフティサーブなどに自作のプログラムを発表し好評を得ていた。プログラミング自体は小学校からずっとやっているが、あまり仕事にはしたことはなく、「究極の趣味プログラマー」を自認する(司会の吉岡さんは「孤高のプログラマー」と紹介した)。今回の話はそういった趣味の3Dシミュレーションにおけるプログラミング手法を中心に、そのバックグラウンドにあるプログラミング手法について語られた。「今まであまり話したことが無い」と前置きしながら語るその技術的背景はとても面白く、会場も話に引き込まれていた。Pageプログラムはシミュレーションのモデル金子さんは、表現としてプログラミングという技能は使うけども、自分自身への印象はプログラマーではない。英語がしゃべれるからといって翻訳者ではないように、プログラミングをするからプログラマーというわけではないという。自分はシミュレーション屋、コンピュータはシミュレーション物理学の道具として考えている。ここでいうシミュレーション物理学は、理論物理学と実験物理学の中間にあり、複雑だけどもある程度モデル化はでき、コンピュータ上でなら検証できるような事象を扱う。端的に言えば「カオス系」と呼ばれるものが多い。モデルは理論上かなり難しいものになるが、プログラム自体はすごく短いコードで簡単に作れるという。動かしてみると、作者自身も想像もしなかった結果が出る。「これが面白いんですよ!」と金子さんは何度も繰り返し強調した。普通のソフトウェア設計は「ウォーターフォール型」で、分析して設計したとおりに作るものだが、金子さんにとってみれば「設計したとおりに動くのは、当たり前で、つまんないんですよ」。逆に、何が起きているのかわからないようなプログラムが大好き、という金子さんのプログラミングは、次の4工程からなる。コンピュータ内にモデル(=プログラム)を構築プログラムは何らかのモデルを表した記述物。初期設計はあまり重視せず、とにかく動けばよいという感覚で、とりあえず最低限のプログラムを作ってみる。ベースとなる理屈やコンセプトは重要で、何がやりたいかがブレてはいけない。結果を検討プログラムを実際にランさせてみる。基本モデルは単純なほうがいいが、そこから生み出される結果は複雑なほうが面白い。CG、中でも物体の運動はカオス性が高くて、見ているだけでも面白いという。パラメーターを変更して、2に戻るパラメーターで挙動が変わるように仕込んでおいて、パラメータをちょっと変えて、またランさせる。カオス(複雑系)は決定論的なのでパラメータですべて決まるが、それをちょっと変えただけで結果が大きく変わる。これをすごい勢いで何回も何回も繰り返す。試行錯誤を重視し、細かいパラメータチューニングに落とし込む。モデルを変更して、1に戻るパラメータチューニングに限界を感じたら、ぜんぜん違うモデルに切り替える。プログラムを捨てることも厭わない。プログラムを書き変えたら、またパラメータを細かく変えて、トライ&エラーを延々と繰り返す。話を聞いていると、アジャイル開発手法的なところもあるようにおもえるが、何かが大きく違うようにも感じる。金子さん自身も、一般向けじゃないので「絶対にお勧めしない」と何度も念を押していた。金子開発手法ではバグも厭わない。「バグを喜んじゃうんですよ!」という。バグがあって予想外の結果が出たときには、そこに面白い切り口があるのではないかと期待して、突き詰めていく。一般のプログラム、たとえば文字処理プログラムがバグったからといって、そのまま進めば文章が自動生成されるようになることはない。シミュレーションでは、狙ってない結果がコンピューターを通すことによって出てくる。「それが非常に面白い!」これはWinnyでも同様で、プログラムはすごくけっこうシンプルだが、動かしてみると複雑な挙動をする。そこでバージョンアップを繰り返すと、「今度の実装はなんか変な挙動をしてる!」と気付くことがある。そこに、自分の能力を超えるものを新しく発見できる可能性がある。わからない挙動を切り捨てないで突き詰めると、「理屈は良くわからないんだけど、プログラムだけ作れちゃう」ことがある。「これが何で動くのかわかんない、ということがすごく多いです」。コンピュータ』(草思社)にも人工知能の将来像として描かれていたことだ。Winnyと人工知能ではずいぶん違うが、金子さん自身が「お勧めしません!」と連呼していたシミュレーション的開発手法で、Winnyのような巨大ネットワークが制御できるのなら、何か可能性はあるのかもしれないと感じないではいられなかった。育休・産休の仕事への影響は「考え方」次第、3つの事例から学ぶもっと読むこの記事の著者CodeZine編集部(コードジンヘンシュウブ)CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。12:00法務担当者、6割超が今後業務で「生成AIを使用したい」と回答。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。