Software Transactional Memo

STM関係のことをメモっていこうと思います。

Binary Hacks Rebootedを読んで

TL;DR 良い本、買うべき

www.oreilly.co.jp

学部生時代に前作Binary Hacksに大変お世話になった上で、続編が出ると聞いて必ず買うつもりでいたら献本をいただいたので謹んでオススメしたい。

この本は低レイヤー寄りかつ実装寄りのTipsが89件載っている本で(と言っても用語集や文献案内などはTipsではないので実際はすこし少ないが)個々のTipsはちょっとした技術ブログぐらいの文量なのでさっと読めるし個々のTipsに依存関係は殆どないので興味のないところは飛ばし読みしても差し支えない構造をしている。

実行ファイルフォーマットとかコンテナとかトレーシングとかファームウェアとかそういった系統の現代の知識がまとめて手に入る機会は意外と少なくて、LLMに訊けば大抵の知識のさわりは収集できる現代においても正確な情報の入手が意外と難しいのが低レイヤーである。その点がこの本を特に希少な物にしている。

LLMについてもう少し言及すると、言語モデルに叩き込まれる学習量は今後とも増加の一途を辿ることは間違いなく、低レイヤーの知識も依然として増え続ける事は間違いない。しかしながら実際に低レイヤーの問題をチャットAI系のサービスの助けと共に解決しようとするとまず直面するのが「試行錯誤の過程を助けてくれない」という問題である。ハルシネーションで誤情報が提示されること自体は時間の経過と共にマシになると期待するにしても、そもそもソフトウェアエンジニアに要求される問題解決とはコードを提出することではなく、目の前のソフトウェアが期待に沿う動きをするまで付き合うことである。もしくは提示された期待がそもそも構造的に不可能であれば正しくそれを説明し、次善策を提示することさえも必要になる。そのためには座学ではなく生きた知識として低レイヤーの構造を理解しなくてはならない。

何をもってして「理解」と呼ぶかは自明ではないのだが、僕の最近の持論としては「知識の外の自体に出くわした時にどこまで食い下がれるか」が特に重要であると感じている。科学という雄大なプロセスの中では仮説と実験と考察の繰り返しが必要であり、実験と考察についてはLLMが大いにサポートしてくれる余地があるのだが、仮説というステップがどうにかなる気がしてこない。「禅とオートバイ修理技術」にはこう書いてある。

仮説を立てる作業は、科学の方法におけるあらゆるカテゴリーのなかで最も不可思議なものである。それがどこから生じてくるのかまったく分からない。どこかに腰をおろして自分の仕事に精神を集中させていると、それまで把握できなかったことが突然閃くのである。だがこの仮説は検証されるまでは真理ではない。また仮説はさまざまな検証を経て生み出されるものではないから、それはどこか別のところに源を発している。

ソフトウェアエンジニアリングにおける試行錯誤とは科学的プロセスの一種であり「仮説」という不確かなものを必要としている(それは例えば「この行にログ出力入れてみたらわかるんじゃない?」とかに始まる)。プログラミングは論理的思考の塊とみなされがちだがその構成における重要なステップは悔しいほど直観に基づいている。その直観をどう養うかというと僕の知る限り「実際に手を動かして実物と向き合うこと」以外にない。その点においてBinary Hacks Rebootedはそのまま手を動かすのに向いた、すぐに実物と向き合えるコマンド群に満ちている。この本をただ読むだけでは足らず、手を動かして直観を血肉として養い続けた果てに構築される脳内モデルこそがこれからの10年を生きるソフトウェアエンジニアの強い武器となると僕は信じている。

binary hackをテーマにBingに作ってもらった画像