世界を動かす技術を、日本語で。

手作業でコードを書くことに幸せを感じる

概要

  • LLMによるコード生成 は便利だが、 自己の思考力や幸福感 に影響を与える可能性
  • 自分でコードを書く行為 が問題理解や成長に不可欠
  • Vibe coding (AI任せのコーディング)は思考停止を招きやすい
  • ツールの使い方 次第で、仕事の充実度や成果が大きく変化
  • 幸福を最優先 にした働き方の選択が重要

LLMとコーディング体験の葛藤

  • Claude-code などのLLMを使うたびに、 抑うつ感や無気力 が忍び寄る実感
  • LLMが「 正しそうなコード」を生成しても、 自分の時間の価値 に疑問
  • 何度もLLMを試しては削除 し、最終的に「 自分でコードを書く楽しさ」を再発見
  • コーディングは ソフトウェアエンジニアリングの本質 ではないが、 問題空間の理解 には不可欠なプロセス
  • APIの痛みや使いづらさ は、 実際に使って初めて体感 できるもの
  • コードを書くことで、 初期アイデアの誤りや思考の深化 を経験
  • Vibe coding (AI任せのコーディング)は、 思考プロセスを阻害 する要因

書くことで深まる思考と正確性

  • Leslie Lamport の「 書かずに考えるのは、考えているつもりなだけ」という言葉の実感
  • 自分で書いたコード の方が、 正しさの検証や文脈の把握 が容易
  • LLMに依存すると、 問題領域の内面化プロセスを省略 してしまう危険性
  • 生成コードの正確性担保 が難しくなり、 責任感や安心感 の低下

Vibe codingの中毒性と受動性

  • 指示を出すだけでコードが生成 される快感と ドーパミンの刺激
  • あと一回のプロンプトで正解が出るはず」という期待感の連鎖
  • 受動的な変更受け入れ が習慣化し、 自分で考える力の鈍化
  • 単純作業すらAIに依頼 し、 作業効率の低下自己効力感の喪失
  • 大量のコード生成後 も、 最終的なレビューと理解 が自分の責任

ツールが思考を形作る危険性

  • ツールは単なる道具」という見方への疑問
  • ツールの選択ワークフローや思考プロセス に与える影響
  • 深い思考を妨げるツール は、知的労働者にとって リスク
  • 思考力こそが知的労働者のコアコンピタンス

LLM活用の最適解と幸福の追求

  • 完全自動生成 ではなく、 必要なコンテキストだけをLLMに提供 する運用
    • 変更範囲を限定 し、 巨大なdiffや複雑な変更 を避ける
    • 自分でコードベースを把握 しながらAIを活用
    • コード生成を能動的かつ意図的な行為 に変換
    • 思考の流れやフロー状態 を維持しやすい
  • 幸福感と生産性のバランス を重視する働き方
    • 全自動化による生産性向上 が、 長期的には幸福や成長を損なう可能性
    • 自分に合ったツール活用法の選択 の重要性
    • 他人のやり方に縛られず、自分の幸福を最優先 する姿勢

まとめ:自分らしい働き方の選択

  • AIやツールの進化 に流されるのではなく、 自分の思考や幸福感 を大切にした選択
  • 自分で考え、書く行為 の価値の再確認
  • 自分の責任でコードを理解し、納得して出荷 する意識
  • 最適なツール活用法 は人それぞれ
  • 長期的な幸福と成長 を見据えた働き方の模索

Hackerたちの意見

これは大工仕事と同じだよね。確かに、今は全ての家具が機械で作れるけど、手作りを選ぶ人もいる。だからって、彼らが生産性が低いわけじゃないよね。ビジネスで手作りの家具を作ることはないだろうけど、木を扱う楽しみはまだ味わえる。手作業でコーディングしたいなら、やればいいじゃん!誰も止めてないよ。でも、プロとしてそれを続けられるとは思わない方がいい。

家具のカットだけが自動化されてるだけだよ。デザインや組み立ては人間がやってる。ソファを自動で作る機械なんてないからね。

手作業でコーディングしたいなら、やればいいじゃん!誰も止めてないよ。でも、プロとしてそれを続けられるとは思わない方がいい。もし手作業でコーディングできなくなったら、何をしてお金をもらうの?LLMに仕様を持っていくの?LLMがやらなくていいように顧客とやり取りするの?

手書きでコーディングしたいなら、やればいいじゃん!誰も止めてないよ。楽しくて価値のあるスキルって少ないからさ。それが価値を失うと、私的にできてもがっかりするよね。 > でも、プロとしてそれを続けられるとは思わない方がいいよ。私はそんなこと思ってない。ただ悲しいだけ。

このメタファーは前に聞いたことがあるけど、あまりうまくいかないと思う。まず、バンドソーのような電動工具はケンタウロス技術だと思う。私、人間がケンタウロスの上半身。工具が私の指示で動いて、作業を早く(あるいは場合によっては全く)手伝ってくれる。GenAIツールは逆ケンタウロス技術だね。アルゴリズムがほとんどの作業をやってくれる。私はケンタウロスの下半身になって、機械が動き回ってコードを生産するのを手伝ってる。だから、大工仕事で手工具を使うことを選ぶことはあっても、電動工具を使うことに罪悪感は感じないよ。上司が私を電動工具に置き換えようとしているとも思わないし、電動工具があるからといってチームの半分を解雇されるとも思わない。ちょっと違うんだよね。

この比較はちょっと違うと思うな。大工仕事の欠点は、作るものが一つしかできないことだよね。工場の木工は、手作りではできないように同じものを何個も作れるから。出力には限界があって、出力が売上に直結するんだ。でも、コードはそんな感じじゃない。手書きのコードもAIが書いたコードも、スケールするからね。プロジェクトによってはコードを書く速さが制限になることもあるけど、もっと多いのは要件を集めることが進捗を制限するってこと。ソフトウェアは一度作ったら終わりってことはあまりないし、既存の製品を改良していくものだから。家具ではそんなことは起こらないよね。

自分で羊毛を紡いだり、布を織ったり、服を縫ったりする人もいるよね。中には、自分のアート作品を売って生計を立てている人もいるし、いいことだと思う!好きなことで生計を立てられるのは素晴らしいよね。でも、羊毛の紡ぎや布の織りは自動化されているし、服は大量生産されている。手作業でやる熟練の職人もいるけど、テキスタイル生産の良い仕事の大半はデザインや機械・工場の管理、営業や流通にあるんだ。

ねえ、家具がどうやってデザインされて作られるか知ってる?ソフトウェアがどうやってデザインされて作られるかも知ってる?このコメント、どこから来てるの?それに、みんなこれに賛同してるの?友達が「AIはもうすぐ人間の手を借りずに自分を改善する!」って言ってるのをリポストしてたんだけど、LLMがどうやってチップをデザインして製造し、そのチップを使うコンピュータを作り、さらにそのコンピュータを何千台も収容するデータセンターを作るか想像できるか友達に聞いてみたけど、全然返事がなかった。みんな視野が狭いのに、次々と大胆な主張をしてるよね。これがバブルの兆候じゃないなら、何がバブルなんだろう。

生産性についてはまだよくわからないな。前回LLMにライブラリを生成してもらったとき、数秒でできたけど、その結果をレビューして修正するのに一日かかった。同じくらいの時間がかかったよ、ゼロから書くのと。

仕事に合ったツールを使ってるなら、LLMはちょっとしたオートフィリングやクイックなスクリプトを書く以外ではあまり役に立たない気がする。仕事ではLLMをたくさん使ってるけど、半分はJavaみたいな面倒なツールや、パフォーマンスの理由もないのにC++でウェブバックエンドを書くことを強いられてるからなんだ。

このアナロジーが成り立たない理由は、ツールは通常一つのことを極めて得意に、そして非常に信頼性高く行うからだよね。テーブルソーを使うとき、あの板をこの場所で正確に二つに切るって分かってるし、毎回同じように切れるって確信してる。AIに一つのことだけをやらせて、それを極めて得意に、かつ信頼性高くやらせることはできないんだ。いろんな意見があるけど、AIが本当に解決している問題があるかどうかは非常に議論の余地があるよね。コーディングが本当にボトルネックだったのか?盛り上がりはすごいし、導入も急増してるけど、実際に生産性や品質が向上している証拠は一切ないんだ。むしろ、研究が進むにつれて、AIを使うことでスピードや品質が下がるって結果が出続けてる。

俺は、長期的に見て最も良い結果を出せる方法を選ぶよ。5~10年のスパンでね。それは主にneovimを使って手作業でやること。コードを打つプロセスが、プロジェクトへの理解を深めて、未来の機能をより早く提供できるようにしてくれるんだ。プロジェクトを深く理解することに投資すれば、長期的には主にLLMプロジェクトを超えるスピードが得られると確信してる。学びや深い理解に繋がらないタスクはLLMに任せるつもりだし、そういうタスクはめちゃくちゃ多いから、LLMの使用頻度はすごく高いよ。

俺は、長期的に見て最も良い結果を出せる方法を選ぶよ。5~10年のスパンでね。それは主にneovimを使って手作業でやること。コードを打つプロセスが、プロジェクトへの理解を深めて、未来の機能をより早く提供できるようにしてくれるんだ。プロジェクトを深く理解することに投資すれば、長期的には主にLLMプロジェクトを超えるスピードが得られると確信してる。そんな視点は考えたことなかった!これは確かにいいポイントだね!

その意見、めっちゃ共感する!自分の手作業は、学びが得られる分野に集中することにしたし、残りはできるだけ自動化しようと思ってる。

これが道だね。最初は厳しい年になると思うけど、君が言ったことが「ベストプラクティス」に落ち着くんじゃないかな(この言葉、あんまり好きじゃないけど)。次の2~3年でニュースになるような奇妙なバグや事件が楽しみだな…まあ、うちのチームから出ない限りはね、ハハ :)

コードやプロジェクト、従業員の在職期間の中央値がどれくらいかはわからないけど、たぶん10年もないだろうから、その「長期投資」ってほとんど意味がないと思う。

AIの助けを借りて機能をもっと早く提供できないなら、使い方が間違ってるか、AIがまだ対応できない非常に専門的なソフトウェアに取り組んでるかのどちらかだね。

これはvibecodingの一つの要素を指摘してるんだよね。あまり話されてないけど、気持ちがいいってこと。これが実際に達成されたことに対する判断を曇らせることが多い(つまり、コードのコントロールを失って、希望や夢だけでスムーズに進んでる状態)。

確かに。実際にその人がより生産的なのか、ただ生産的だと感じてるだけなのかは分けるのが難しいよね。

「バイブコーディング」は、気持ちいいのは最初だけだと思う。で、気づいたら自分が作ったコードの大混乱を全然理解できてないことに気づく。手書きで書くと、システムを深く理解できるから、少なくともその点では安心感がある。

逆に、これについてはよく話されてる気がする。これは、私たちがすでに快適に感じているシナリオ、例えばコンサルタントを雇ったり、オフショアリングしたり、最新のホットなフレームワークを採用したりすることに存在する本質的な認知的不協和だと思う。私たちは、自分に悪いとわかっていても気持ちいいものが好きな生き物なんだよね。もうどうしようもないってわかってる。

それが気持ちいいって人もいるよね。個人的にはそれに共感するのが難しい。ソフトウェア開発の大事な部分に反するから。私にとって気持ちいいのは、問題やコードを深く理解して、どうマッチしているかを知ることから来てる。

コードのコントロールを失って、希望と夢だけでどんどん滑らかに動いてるね。コードのコントロールはプロンプトにかかってるよ。もっと詳細なプロンプトを書けば、コントロールが戻ってくる。 (一番いいのは、AIと一緒により良いプロンプトを考えられることだけど、雑に書かれたコードとは違って、結果は小分けにされてて簡単に確認できるんだ。)

それ、めっちゃ気持ちいいよね。言いたいことわかるよ。正確には理解できないけど、バイブコーディングには確実に感情が伴ってると思う。コードが動いたり、要件をクリアしたり、問題を解決したときの感覚に関連してるかも。バイブコーディングはそのエンドルフィンへの近道をくれるのかもね。そういう感情をうまく管理して、現実とバランスを取るのが特に大事だと思う。YouTubeショートや他のSNSから得られるエンドルフィンとどれくらい似てるのか気になるな。もしそれが同じくらい中毒性があって(今のところそう見えるけど)、エンタメじゃなくて仕事に結びついてるなら、何十億ドルもの投資が正当化されるのも明らかだよね。面白い時代だね。

でも、なんで「気持ちいい」んだろう?実際にそう感じるなら。Windows Copilotを使って小さなユーティリティライブラリを書いてみたんだけど、ちょっとした経験のために(まあ、そんなにハイテクじゃないけど、今年73歳だし)それなりに印象的だったけど、自分がやった場合と比べるとかなり遅かった。特に気持ちよくはなかったな。

私にとって、うまくいったら気持ちいい。でも残念ながら、計画モードで全てが仕様通りでも、数時間かけてエージェントが問題を削ってリファクタリングしていると、結局全てを捨ててやり直すことに気づくことが多い。その時は本当に嫌な気分になる。特に、何もしていないし、何も学んでいないように感じるから、余計に嫌だ。

うん、バイブコーディングからたくさんの価値を得てるし、これが未来の働き方だと思うけど、その純粋なドーパミンラッシュには疑いを持ち始めてる。なんか、夜通しスタークラフトをプレイして、最後の最後に課題を仕上げるような汗ばむ感じがするのが嫌なんだよね。

正直言って、クソみたいに感じる。これが一番の問題だね。瞬間瞬間のフィードバックが、自分で作るよりも時間がかかるし、あと少しで完成っていうのがイライラする。あと、記事にもあるけど、LLMを待つのが本当に退屈すぎる。

最近のソフトウェアエンジニアの採用状況について、何か知ってる人いる?今仕事を持ってて採用してないから、想像しづらいんだ。コーディングの面接に何かパラダイムシフトがあったのかな?LLMの使用は期待されてるのか、推奨されてるのか、それとも嫌われてるのか?もし企業がまだ手作業でコードを書く人を探してるなら、著者は何か掴んでるかもしれないけど、業界が進んでるなら、適応できない人は趣味人に relegated されるのかな?

今、採用が進んでるのは主に重いAIコーディングの会社ばかりで、中小企業は採用を凍結してるか、AIを使って10倍の開発者だと主張する人だけを雇ってる感じ。嘘をつかない開発者には、大企業しか採用してないみたいで、プロセスもあまり変わってないね。相変わらずLeetCodeを解いて、システムデザインの面接も受けることを期待されるよ。

ほとんどの企業は、LLMのチートが非常に効果的で広まっていることにまだ気づいていない。採用のやり方も追いついてないね。

まだ私の会社ではあまり変化を感じてないな。でも、700,000人以上の従業員がいる大企業で働いてるから、彼らは追いつくのに苦労してる。弁護士たちも、エージェントが生成したコードのIPを私たちが所有しているかどうかすら確信が持てないし、クライアントのIPをモデルプロバイダーに送ることの法的リスクについても不明だ。これには時間がかかりそうだね。

明らかだよね:企業は手書きのコーディングとAIコーディングのスキルの両方を求めるだろうし。就職活動はずっとハードルを飛び越えるようなもので、だからもう一つハードルがあってもいいんじゃない?

たとえClaudeが100%コードを書くとしても、10行のコードにこだわる人と、高レベルのプロダクト体験にこだわる人の間には分岐があると思う。10行のコードにこだわる人は、自分の仕事が今後 obsolete になることを心配してるだろうね。特定の技術でXをどうするかをググる必要があるコードの場合、それは本当だよ。そんなのは簡単に解決できちゃうから、開発者が必要なくなるかもしれない。でも、私の経験では、10行のこだわりコードのユースケースには特定の属性があるんだ。1. 要件が明確に定義されてない。進むにつれて正しさを発見してる感じ。問題を解決するために「コーディング」して、テストを追加したり削除したり変えたりしてる。2. このコードの制約や正しさは非常に多面的。速さ、正確さ、安全性、使いやすさなど、すべてが同時に重要。3. 一般的な解決策(例えばログインフロー)を自分たちの特定の会社やドメインに適応させてる。これには、LLMに正しい出力を得るための慎重なガイダンスが必要だね。少ないコードの周りでClaude Codeがあるかもしれないけど、こういう場合でもコードの詳細に対するセンスや気配りが重要なんだ。Slackクローンを一発で作ることはできるかもしれないけど、私たちが気にしてる2つの小さな機能を変更するのには時間がかかるし、考えが必要なんだよね。

10行のコードにこだわる人は、自分の仕事が今後 obsolete になることを心配してると思う。あなたは別の立場だと思ってるけど、間違ってたら教えてね。私は10行のコードの立場だけど、そのグループはフィクションのキャリア脅威を一番恐れてないと思う。10行にこだわる人たちは、プロダクションがダウンしたときにシステムを直しに来る人たちだよ。彼らは2行のコードを変えて35%のパフォーマンス向上を実現する。壊れたコードを出荷する人たちには本当にイライラする。バイブコーディングの雑なコードは、ほぼいつも壊れてるから、その10行のせいなんだよね。

10行のコードにこだわる人と、高レベルなプロダクト体験にこだわる人の間に分かれると思う。誰もランダムな10行のコードなんか気にしないよ。AIがLoCにこだわるのは気持ち悪い。コードが正しいか良いか(後で変更できるかどうか)か、それともそうじゃないかのどちらかだよ。 > 一発でスラックのクローンを作れる可能性があるのに、私たちが気にしている2つの小さな機能を変更するのに時間がかかって、考えが必要になるのは変なことだよね。git cloneがどれだけ簡単か覚えてる?

AIには価値のある場所があるってことは、ほぼ間違いないと思う。最近、すごくひどいDBスキーマに関わらなきゃいけなかったんだ。私が考えた最適なアプローチは、300カラムのテーブルをモデル化することだった。SQLのDDLをRustの構造体に変換するのは簡単だけど、めっちゃ面倒だった。15語以下のプロンプトでAIに900行以上のコードを生成させたんだ。それをスキャンするのに数秒かかったけど、各フィールドに必要なアノテーションがあって、データ型も正常だったのを確認できた。これこそがAIの助けがあって嬉しい瞬間だね。どれだけ電気を使ったかは全然わからないけど、私より賢い誰かがAIに構造体を使って他の100行のコードを生成させたかもしれない。でも、プロンプトを作るのにかかる時間の方が、コードを書く時間より長くなると思う。もしかしたら、AIがもっと賢い解決策を思いついたかもしれないし、プロンプトをコメントに残すのはすごく有益なドキュメンテーションになるかも。でも、AIに全部やってもらう必要はないし、そうしたくもない。自分が嬉しいと思う使い方をしてる。今はあまり使ってないけど、使わないことに満足してる。主に使い方を学ぶ時間を取ってないからだけど、満足してるよ。

コードを書くために、そのコーヒー(とその成長やサプライチェーン)だけで、2倍以上のエネルギーを消費したかもしれないよ。建物や食べ物、交通手段を考えたら…人間って機械の中で高くつく存在だよね。

悪いコードやスキーマ、デザインが改善されないんじゃないかって心配してる。こういうのを片付けるのにキャリアの多くを費やしてきたけど、AIがあるともう気にしなくなるのかな?

ここで一番重要な考えは、著者が「LLMはまあまあ見た目が良いコードを生成できるけど、私は何をするためにもっと時間が必要なの? ドゥームスクロール?」って聞いているところだよね。LLMは放置しておけるほど良くない。近くで見守って、半分目を配っておかないといけない。それが多くの人にとってはがっかりするところなんだ。私のキャリアでは、ジュニアエンジニアを指導して、彼らが新しいことをすぐに学んで能力を高めるのを見てきた。彼らをしばらく見守るのは結構やりがいがあるよ。契約開発者とも働いたことがあるけど、彼らは今のLLMとあまり変わらなかったし、LLMのように私から直接学ぶことができないみたいだった。むしろ学ぼうともしなかった。彼らは「わかった、次は違うやり方でやるよ」っていい言葉をすぐに言うけど、全然変わらなかった。そういうのは、私のキャリアの中で一番イライラした瞬間の一つだった。LLMを使ってコードを書くときに感じる気持ちなんだ。

それで、何をするためにもっと時間があるの?仕事では、同時に2〜4人のエージェントが動いてて、1〜3の機能やバグ修正、ドキュメントの更新をしてる。ダウンタイムの間にそれらを行き来したり、出力をレビューしたり、次のことの要件を準備したり、同僚のMRを見たりしてる。ドゥームスクロールする暇なんてないよ。

LLMが登場するずっと前から、「バイブコーディング」のスピードで開発してたんだ。すごく考えを圧縮したツールやフレームワーク、スニペットを使ってね。ほとんどのアプリはモデル駆動開発を使ってて、データモデルが自動的にアプリケーションのDAOやコントローラー、バリデーション、マイグレーションを構築する。データモデルがアプリケーションそのものなんだ。LLMはこのデータモデルに基づいて手続きを書くのを少しだけ早く手伝ってくれるけど、データモデルがデザインだからね。デザイン全体をLLMに任せない限り、データモデルについては常に自分が決定権を持ってる。データモデルを進化させたい方向について、僕はいつもより多くの文脈を持ってるし、データモデリングの部分を楽しんでるから、運転席にいたいんだ。LLMは手続きを実行する役割でいてほしいな。

妻と父は家具を組み立てるのが好きなんだ(妻は自由に、父は説明書を見ながら)。僕は組み立てられた家具は好きだけど、自分でやるのは耐えられない。人それぞれだよね。僕にとってLLMは楽しい体験なんだ。アイデアを考えると、それを実現してくれる。素晴らしくて楽しいよ。家具を組み立てたり、作ったりする方が好きな人の気持ちもわかるけど、あまり共感はできないかな。でも理解はできるよ。

新しい区別だね。ソフトウェアを作ることは、以前はソフトウェアをコーディングすることと同じだったけど、今は違う。

OPと似たような立場だね。私にとっての喜びは、作ることじゃなくて理解することなんだ。実際、これが私にとってソフトウェアエンジニアリングをあまり良いキャリアパスにしなかった理由でもあるんだけど、それはまた別の話…私にとって、LLMは学びの面で本当に大きな助けになってる。