純粋な最適化の技術を、私たちは失ってしまったのだろうか?
初期のエンジニアたちは、極めて限られた制約の中で作業していました。アポロ誘導コンピュータのRAMはわずか2KBでした。あらゆるビットが重要であり、あらゆるCPUサイクルが不可欠だったのです。
今日、私たちにはギガバイト単位のメモリがあります。問題が起きれば、ハードウェアを追加することで解決しようとしがちです。コードが遅かったり重かったりすれば、RAMを増やします。こうした習慣が、純粋な最適化というスキルを失わせているのです。
制約について考えることで、より優れたソフトウェアを書くことができます。
Pythonで大きなテキストファイルを処理する方法を見てみましょう。
一般的な方法: 多くの開発者は、ファイル全体を一度にメモリに読み込みます。
- f.readlines() を使用します。
- これにより、すべての行がRAM上のリストに読み込まれます。
- ファイルが10GBであれば、10GBのRAMが必要です。
- このアプローチは、小規模なサーバーやリソースの限られたデバイスでは失敗します。
最適化された方法: ファイルを1行ずつ処理します。
- ファイルオブジェクトを直接イテレートします。
- Pythonは1行を読み込み、それを処理し、次の行へと進みます。
- メモリ使用量は低く、一定に保たれます。
- ファイルが1MBであっても100GBであっても関係ありません。
この違いは、エンジニアリングの哲学に関わるものです。
リソースを追加することは一時的な解決策に過ぎません。それは脆弱なソフトウェアを生み出します。制約を設計の原動力にすることで、堅牢なソフトウェアが生まれるのです。
最適化とは、単に速度を上げることだけではありません。リソースを意識することなのです。
コードを書くとき、自問してみてください:
- これにはどれくらいのメモリが使用されるか?
- データが10倍に増えても動作するか?
- 質の低いコードを隠すために、高価なハードウェアに依存していないか?
より優れたソフトウェアは、規律から生まれます。
出典: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9