HN 日本語サマリー

← 一覧へ戻る
プログラミング

「コードは決して難しい部分ではなかった」は全てのプログラマーへの侮辱である

"Code was never the hard part" is an insult to all programmers (blog.senko.net)

758 pointsby senko445 コメント

要約

この記事は、「コードを書くのは簡単で、何をコード化するかを決めるのが難しい」という考え方に異議を唱えています。AIの進化がプログラミングのあり方を変えつつある中で、著者は、コードを書くことは高度なスキル、経験、注意深さを要する複雑な職人技であり、その難しさはプログラマーへの高い需要や、ソフトウェア開発に関する膨大な文献、そしてバグのない効率的なソフトウェアを書くことの困難さによって証明されていると主張しています。著者は、プログラマーは単に指示をコードに変換するのではなく、複雑な問題を解決し、変化する技術環境に適応する必要があると説いています。

全文翻訳

「コードは決して難しい部分ではなかった」は全てのプログラマーへの侮辱である 2026年8月8日 ソフトウェア開発の専門職は激動の最中にあります。AI革命が最終的にどのように展開するかは誰にもわかりませんが、仕事や生活の多くの側面が変革されることは明らかです。プログラミングもその一つです。 最近よく耳にするコメントの1つは、「LLMはコーディングが得意かもしれないが、ソフトウェアは決して難しい部分ではなかった」とか、「コーディングは簡単で、難しいのは何をコード化するかを決めることだ」というものです。 私は、これはあらゆる場所の全てのプログラマーに対するひどい侮辱だと信じています。 もしコーディングが簡単なら… もしコーディングが簡単なら、なぜプログラマーは何年も(ZIRPの前でさえ)高い需要があり、高額な給料を要求されてきたのでしょうか?AIが5000行のPRを生成し始める前から、なぜこれほど多くのストレス、過労、燃え尽き症候群があったのでしょうか?なぜ企業は10倍のニンジャ・ロックスター・コーダーを求め、彼らにLeetCodeの面接を課したのでしょうか?もしそれがとても簡単なら、大学を卒業したばかりのジュニアでも何かを生み出せたはずです。 もしコーディングが簡単なら、なぜ私たちはClean CodeやThe Pragmatic Programmerのような分厚い本を持っているのでしょうか?The Art of Computer Programmingは軽い夏の読書なのでしょうか?SICPはコーヒーテーブルの本なのでしょうか?なぜ私たちはブートキャンプや、それらに特化した大学の学位まで持っているのでしょうか? もしコーディングが簡単なら、Carmackはただタイミングが良かっただけなのでしょうか?なぜ私たちはFabrice Bellardを天才と見なすのでしょうか? もしコーディングが簡単なら、なぜ人々はAI(あるいは他の誰か)が自分たちのコードをコピーすることに怒るのでしょうか?なぜ彼らは、そんな些細なことに汗と魂、そして膨大な時間を注ぎ込んだかのように振る舞うのでしょうか? もしコーディングが簡単なら、なぜ多くの人が今、自分のアイデンティティと職業上の目的が剥ぎ取られているように感じるのでしょうか? もしコーディングが簡単なら、なぜソフトウェアはあんなにもバグだらけなのでしょうか? もし何を構築するかを決めるのが難しいなら… もし何を構築するかを決めるのが難しいなら、なぜ多くのプロダクトマネージャーは無能に見えるのでしょうか?なぜ彼らには厳格な10段階の面接がないのでしょうか?なぜ彼らは開発者よりも多く支払われていないのでしょうか? もし何を構築するかを決めるのが難しいなら、なぜソフトウェア会社において、市場調査員、ユーザビリティ専門家、そして顧客サクセス担当者がロックスターと見なされないのでしょうか? もし「顧客を理解する」ことがより難しいなら、なぜビジネスアナリストは「ペンを動かすだけの連中」として見下されるのでしょうか? もし実装が簡単で、需要を見つけるのが難しいなら、なぜセールス担当者が販売を成立させるために顧客に新機能の約束をしたときに、プログラマーは怒るのでしょうか?彼らは本物の需要、つまり人々がお金を払うものを見つけたのです! もしコーディングが簡単なら、なぜ誰もが物事の10のバリエーションを構築して、どれがうまくいくかを見ようとしないのでしょうか? 中間的なプログラマーはいない もう一つの陳腐なコメントは、「ソフトウェア開発におけるほとんどの仕事は、ステークホルダーとの会話、顧客のニーズの理解、そして優先順位の明確化である」というものです。 私はキャリアを通じて多くのプログラマーに会ってきましたが、ステークホルダー、ましてや顧客と話したがる人はごく少数です(フリーランサーや、特にソフトウェア開発会社の創業者を除く)。そして、「優先順位の明確化」は「私に何をすべきか教えてくれ、2日ごとにそれを変えないでくれ」ということに尽きます。 一部のソフトウェア開発者は、「私はコードを書くのではなく、顧客の問題を解決する」と言います。しかし、彼らはモナド、メモリ安全性、DRY原則について意見を述べ始め、顧客への理解は作り物の「ユーザーペルソナ」であり、「アフォーダンス」とは親がお小遣いをくれた週末のことだと考えています。 また、「ソフトウェア開発は理論構築である」と言う人もいます。プログラムは実際には証明(数学的証明のような)です。すべてのコミットは物語を語るべきです。そして、FTPでPHPファイルを転送して顧客の問題を解決することは、重大な罪です。 私は、ソフトウェア開発という工芸を深く気にかけ、同時に顧客に深く共感できる開発者がいないと示唆しているわけではありません。彼らは分裂症の専門医に診てもらう必要があるかもしれませんが。 何が重要か? ユーザーと話し、彼らの経験を理解し、彼らに共感し、顧客の問題を解決し、全てのステークホルダーが同じページにいることが、ソフトウェアプロジェクトの成功にとって極めて重要だと私は信じています。また、良いコードを作成することは、スキル、忍耐、細部への注意、経験、そして知恵を必要とする工芸であり、今後も関連性を持ち続けると信じています。 ¿Por qué no los dos? 私たちがそれを実行できる限り、両方を目指すべきだと私は思います。私たちが構築しているシステムについての深い理解と、なぜそれを構築しているのかについての深い理解の両方です。 「コードは簡単だ」と大声で宣言すること、あるいはその反対に、「コードは芸術であり、自動化できない創造的な人間の表現だ」と宣言することは、単に砂に頭を埋めているだけです。それは対処法です。そして、あなたは対処法ではなく、繁栄したいのです。 これによって、私は「LLMの流行に乗れ」と言っているのではありません。「AIエージェントの艦隊のマネージャーになれ」とも言っていません。「AI生成コードは盗まれたゴミだ、歯を食いしばって戦え、いずれバブルは弾ける」とも言っていません。しかし、私たちは業界全体の地殻変動の最中にいることを認識してください。 私たちは、どのように適応するかを理解する必要があります。何が変化しやすく、何が決して変わらないかを理解する必要があります。 何が変わらないか? ソフトウェアはより複雑になるでしょう。ソフトウェアは常にメンテナンスを必要とするでしょう。ビットの腐敗は人生の事実です。エントロピーも同様です。テクノロジー(ハードウェアとソフトウェア)は、良くも悪くも進歩するでしょう。抽象化の塔(超高層ビル?)はますます高くなるでしょう。ユーザーは常にさらに多くのものを求め、より少なく費やすことをいとわないでしょう。彼らはまだ、自分のニーズや欲求を伝える方法を知らないでしょう。さらに悪いことに、彼らは自分が本当に何を望んでいるのかを正確に知らないでしょう。 顧客(ソフトウェアにお金を払う人)とユーザー(それを使う人)の間の断絶は、ビジネスのニーズと顧客のニーズの間の緊張と同様に、まだ存在するでしょう。また、詐欺師がいなくなることはないでしょう。今日のテクノロジーは来ては去ります(私は新しいVRルネッサンスをまだ待っています!)。 何が変わるか? プログラマーは、最初から自分たちの業界を破壊することに携わってきました。パンチカードを使う人はもういません。アセンブリ言語やCOBOLでコードを書く必要がある人はほとんどいません。CやC++でメモリバグと戦った数十年間の経験(その傷跡が証明です)は、Rust、Go、Python、JavaScriptの時代には無価値です。 私はValgrindを評価するほど年をとっているか、PHP4時代のmysql_real_escape_string()を覚えています。これらは私の人生で二度と必要とされないでしょう。そして、それはそれほど昔のことではありません!私はdBase、Clipper、HyperCard、Accessの時代をかすかに逃しました。これらのテクノロジーは、店、カフェ、あるいは埃っぽい、かつてはベージュで今は黄金茶色のミディタワーで、まだ幸せにカスタムビジネスソリューションを実行しているのを見かけることがあります(バックアップ?何のバックアップ?)。 どうすれば繁栄できるか? 変化が起こることを受け入れましょう。新しいものに対して、好奇心と批判心の両方を等しく持ちましょう。多くの誇大広告があることを理解し、空虚な言葉と本当に機能するもの(そしてどの程度か)を区別しようとしましょう。また、常に変化する目標についても意識してください。立ち止まって、過去1年、あるいは5年を振り返り、変化の速度(技術的、経済的、社会的)を評価してください。 あなたの役割と責任は変化するでしょう。あなたの隣接分野や役割をより深く理解するために、時間とエネルギーを投資する意欲を持ちましょう。あなたがシニア開発者なら、専門知識を深めることだけに安堵しないでください。ユーザーエクスペリエンス、顧客インタビュー、またはあなたのドメインの企業のビジネス戦略について学びましょう。それは、あなたが実際に他の部分をやらなければならないかどうかに関わらず、ソフトウェアをユーザーの手に入れるために行われたすべての作業をよりよく理解するのに役立ちます。 あなたが始めたばかり、あるいはジュニアの役割なら:ソフトウェアがどのように機能するかについての理解を深めることに投資しましょう。ポインタ、再帰、またはメモリ階層を理解することは、JavaScript開発者であっても役立ちます。ネットワークプロトコルとHTTPがどのように機能するかを理解することは、WordPressプラグインを構築している場合でも役立ちます。LeetCodeを行い、アルゴリズムとデータ構造について学びましょう。