「ものづくり」の神髄:ゼロから何かを生み出す喜び
Making
Making
「Making」という言葉には、ただモノを作る以上の深い意味が込められています。新しいプロジェクトをゼロから立ち上げたり、独自のツールを開発したりすることは、エンジニアにとって究極のクリエイティブ活動です。皆さんは今、何を作っていますか?
本当その通り。LLMが生成したHacker Newsへの投稿を見るのは好きじゃないな。Hacker Newsの楽しさって、人間が工夫を凝らした成果を見ることだったはず。どうせ大したプロダクトじゃないものも多いしね。チェスAIの対局を観戦しないのと同じで、AIが生成したソフトウェアやアートを簡単に区別できる仕組みがあれば、それらを避けて楽しく過ごせるようになるんだけど。
「作ること」と「作らせること」の違いについてだよね。境界線は曖昧かもしれないけど、自分にとっては、入力の変化が結果にどう影響するかをどれだけ論理的に説明できるかが肝なんだ。コンパイラが吐き出した実行ファイルの挙動が想定と違ったとき、その99.99%は自分の責任だし、ソースコードを読めば予測可能だったはず。逆に言えば、ソースコードを分析すれば誤動作の理由も突き止められる。でも、いわゆる「バイブコーディング(LLMに丸投げするプログラミング)」で書かれたプログラムと、それを生成するプロンプトの間には、そんな論理的な関係はほとんど存在しない。
最近AIにやらせた作業なんて、細かい内容どころか概要すら思い出せないことが増えて困ってる。逆に、何年も前に自分で書いた10万行規模のコードベースなら、今でも頭の中でだいたい全体を追いかけられるんだけどな。
今、それを取り戻そうとしてるところ。2ヶ月くらい何もしたくない時期があって、テレビすら観ずにお酒ばかり飲んでた。今は数週間断酒してて、ようやく感覚が戻ってきた気がするけど、まだめちゃくちゃ怠い。ハードウェア作りが恋しいよ。自作のカメラや小さな自律走行ロボットを設計したり作ったりしてたんだ。車の急旋回でシートから転げ落ちて動かなくなったカメラをようやく修理できたしね。何だろう…昔のCマウントレンズをたくさん買い込んで、一本ずつ動画を撮ってたんだけど、その作業にも飽きてしまって。今じゃ中古レンズの箱と、デスクの置物(カメラ)が残ってるだけ。でも救いなのは、これらのハードウェアプロジェクトのおかげでソフトウェアエンジニアの職に2回も就けたことかな。まあ、なんとか元通りになりたいね。プロジェクトがバイブコーディングで作られたと聞くと反射的に敬意を失ってしまうんだ。今の時代の流れなのは分かるけどさ。「自分が作った」と言いながら、実際はClaudeに書かせただけのコードだとね……。結局のところ、お金と自由の問題なんだよね。やりたいことをやるためには、まず自分の自由を手に入れて、それから自分の楽しみたいことをするしかない。
多くの人が同意してるのは分かってるけど、自分にはその感覚がちょっと理解できないな。LLMを使ってコードを一行も自分で書かずに作ったものでも、誇りに思えることはある。もちろん「俺、すごいプログラマーだろ?」なんて人に自慢はしないよ、自分でプログラミングしたわけじゃないからね。でも、コーディングはあくまで目的を達成するための手段であって、最終成果物が大事なんだ。庭をリメイクする計画を立てて、プロの造園業者に施工してもらったとしても、夕暮れ時にビールを飲みながら居心地の良い庭を眺めて誇らしく思うことはできるでしょ。ソフトウェアも同じ感覚なんだ。自分が作ったギタータブ編集ソフトには、他のソフトにはない必要な機能が備わっていて、自分の抱えていた現実的な問題を解決してくれた。AIがなければ作る時間はなかったはず(仕事や家族、趣味のギターの練習で手一杯だし)。だから、「誇りに思うな」と言われても気にしない。ただ、「自分で作ったんじゃない」と言われるのは違うかな。自分が動かなければそのソフトは存在しなかったわけだからね。
LLMが特に便利だと感じている分野があるんだ。BlackMagic ATEMのようなビデオスイッチャーやコントローラーの制御で、これまで苦労していた部分だね。これらは非常に強力で、空間を最高のビデオスタジオに変えてくれる。付属のソフトウェアは経験豊富なビデオ技術者向けだから、前回のウェビナー設定ではまともに動かすまでに数日かかった。もちろんハードをいじり回すのは好きだし、仕組みを理解するプロセス自体は楽しかったよ。でも今日、急遽ウェビナーをセットアップする必要があって、Zoomの生配信だけじゃ厳しいなと思っていた。それが、LLMのおかげで1時間以内にビデオ切り替えシステム、グラフィック埋め込み、ライブコンテンツを流すPC、複数のカメラ、そして今日のウェビナー専用のカスタムHTMLページまで全て構築できた。ATEMシリーズのサードパーティアプリもいくつか使ったけど、どれも全部入りすぎてて扱いづらい。この手の「パーソナライズされたプロジェクト」こそ、LLMが埋めるべき完璧な隙間だと思う。
自分は少し違うアプローチをとってる。18年くらいプロと趣味の両方でやってきて、今でも誇れるものを作るのにかなり時間をかけてるよ。意思決定(意思決定疲れって本当に戦いだよね)や書かれたコード、アーキテクチャの改善なんかにね。この部分で不足を感じることはあんまりない。ただ、ここ5年くらいで感じているのは「アウトプット」の不足だね。次から次に湧き出るアイデアを形にするエネルギーが追いつかないんだ。LLMは面白いツールだと思う。LLM自体も別の意味で疲れるけど、自分が欲しいと思っていたのに時間を割けなかった、あるいは見つける暇がなかったソフトウェアを作れる可能性を広げてくれる。LLMはソフトウェアにおける3Dプリンターみたいなものだね。手作業で削り出す必要がなくなった。でも3Dプリンターと同様に、LLMには圧倒的に向かないタスクもある。だから、教師なし開発に向いているソフトウェアを見極めるのは一種のスキルであり、ニッチな能力だよね。もちろんインターネットへのアクセス権限なんかによっては3Dプリンターの小細工よりはるかにリスクが高いけど。とはいえ、バイブコーディングで作ったものに誇りまでは持てないかな。ただ、欲しかったけど時間がなくて作れなかったものを利用できるという楽しさを享受してる感じだよ。
えっ、BeejがOSU(オハイオ州立大学)で教えてるなんて知らなかった!学生時代、実践的なシステムプログラミングを独学してた時にBeejのネットワークプログラミングガイドを毎日読み込んでたんだ。高額な学費を払ってる大学の講義よりも、この人の無料ウェブサイトの方がよっぽど役に立つなって嘆いてたのを覚えてるよ。巡り巡って教鞭をとってるなんて最高だね。素晴らしい採用だと思う。
ここしばらく同じような感情と格闘してるよ。Luddite(機械化反対論者)だとは思われたくないけど、コードを書く行為そのものが大好きなんだ。真っさらなVS Codeを前にすると、ワクワクと可能性で満たされていて本当に美しい光景だよね :-) 自分のなかでは、この二つをこう整理してる。仕事に対する誇りや満足感は、どれだけ苦労して習得した専門知識を適用できたかに比例する。だから初心者が温度変換プログラムを作った時の誇りと、プロの分散システムエンジニアが2PC(2相コミット)モジュールを完成させた時の誇りは同等なんだ。Naval Ravikantの言葉だったか忘れたけど、この核心を突く言葉がある。「創造者が(人間として)介在しない創作物には意味がない」という言葉がね。
自分の気持ちを代弁してくれてる。LLMを使うと速いからという理由で頼ってしまうせいで、昔のような喜びを感じられなくなってるんだ。効率よりも楽しさを優先させることと、ちゃんと向き合わないとな。コードを書くことの「非効率性」を心配するんじゃなくて、書くことそのものにもう一度集中し直す必要がある。13歳の頃、夜中に夢中でコードを書いていた時のような感覚を取り戻したいな。Beejの文章はいつも感銘を受けるよ。