ハクソク

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

大きな抽象の「隠れた」コスト

19時間前原文(jdgr.net)

概要

  • 抽象化によるコンピューティングの進化とその影響
  • 技術的知識の低下がもたらす課題
  • 大量生産されたソフトウェアの品質問題
  • 個人的な経験とキャリアの苦悩
  • 支援や対話への呼びかけ

抽象化とコンピューティングの進化

  • コンピューティング世界では、複雑さを抽象化する傾向
  • 抽象化によって大局的な視野を得られるメリット
  • 一方で理解の精度が低下しやすいリスク
  • 歴史的背景として、以前はプログラム実行が高コスト・高難度
  • マシンの仕組みを熟知しなければ、まともに動かせなかった時代

技術的知識の低下と現代の開発

  • メモリ・計算資源の増加による参入障壁の低下
  • 最適化やリソース節約への意識の希薄化
  • 外部ライブラリの安易な導入と品質・用途の理解不足
  • 前提知識の低下開発速度の上昇という新常態
  • ソフトウェアの量的拡大と、それに伴う品質低下・バグ増加

LLMとソフトウェア品質の新時代

  • **LLM(大規模言語モデル)**の登場で誰もがプロンプト作成可能
  • 見た目や動作は良くても本質的な品質は低いケースが大半
  • 良し悪しの判断には専門知識が不可欠
  • 未経験者がしばしば「愚者の金」に騙される現象
  • Alibabaで安価な鋼材を買う例えで品質リスクを強調

「十分であること」と現実

  • 良い」ものでなくとも十分な場合がある現実
  • Wonder Breadartisan sourdoughの比較でコストと満足度を説明
  • 健康や本物志向よりも、手軽さや入手性を優先する人も多い現状

個人的な経験と現状

  • なぜこの話をするのか、自嘲気味な問いかけ
  • 身体的な事情で肉体労働ができない現状
  • 子どもの頃からマニュアル読破・自動化スクリプト作成・メモリエディターでのゲーム改造・OllyDbgによるマルウェア解析などに熱中
  • 好きなことが仕事になる喜びを感じていた過去
  • 現在は父親として家族を支える責任
  • 2025年7月から無職で、履歴書修正・応募・Claudeを使ったPoC作成・コールドリーチなどを実施
  • 就職活動の行き詰まりと焦燥感

対話・支援の呼びかけ

  • 話を聞きたい方、興味のある方への面談依頼
  • スケジュール調整の案内

Hackerたちの意見

今こそストイックになる時だね。物を持っていても、何も持っていないかのように生きるべきだ。でも、著者が言うように、これは予測可能でもあった。今の私の国では、4GBのRAMとセレロンしか搭載していないノートパソコンが高値で売られている。2000年代に、ハードウェアが安いから効率の悪いコードを書こうなんて考えなければ、素晴らしいことができたはずだ。同じハードウェアが2000年代にはYouTubeの動画を再生できたのに、今ではそのウェブサイトすら開けない。Electronが抱きしめてくれる... 今、人々はAIに怒っているけど、いつまで続くのかな?オブリビオンの映画みたいに海が干上がるの?専門家たちは?専門家の世代は過ぎ去ってしまう... もしこの流れが止まらなければ、あるいは少なくとも修正されなければ、人々は盲目的にAIに依存するようになるだろう。著者には未来に明るい日々が待っていると思うし(今も隠れたニッチで考えているだろう)、知識はいつでも貴重だからね。私が得た主な教訓は、TIや流行の約束を買うのを減らして、知識と技術が共に歩む場所を見つけることだ。
でも、そのアドバイスは全部役に立たなかった。ストイックになれ。支え合え。存在することを受け入れろ。エルドリッチな神々のランチになるのが運命だって。ストイックってのは、牛がスロープを上がるときに期待される態度だよ。静かに夜に消え去るな、光の消えゆくことに怒れ。
「重複は間違った抽象化よりもはるかに安い。」
ここ数年で、抽象化がどのように機能しているかを理解している人が、企業からは美徳よりも負担として扱われることが多いと結論づけた。ますます多くの場所が、誰かが反論したり、これが最良の方法かどうかを問いただすよりも、Jiraのチケットを早く終わらせることを求めている。彼らは物を欲しがるだけで、それがうまく機能するかどうかは気にしない。効率がどうかも気にしない。今すぐ欲しいんだ。私たちはReactに移行していて、10年以上使ってきた内部フレームワークを置き換えようとしている。移行の最大の部分は「採用」だ。私の一般的な感覚では、誰もReactがどのように機能しているかを理解していない。質問すると、一般的に返ってくる答えは「心配しないで」だ。すべてが巨大にオーバービルドされていて、ひどい状態だ。ほとんどの人が自分の仕事のレベルから一つ上のことを学ぶことすら気にしないから。学ぶ人は雇われなくなる。すべてが本来必要な何百倍、何千倍も多くのサイクルと電力を消費するのは、人々が自分のやっていることを理解することを面倒に思っているからだ。
> ますます多くの場所が、誰かが反論したり、これが最良の方法かどうかを問いただすよりも、Jiraのチケットを早く終わらせることを求めている。これは、私が技術的な決定を下す立場でない限り、やりたくないことの一つだ。私がするのは、物を作ることだけど、防御的プログラミングを取り入れている。私のコードが良いことを保証し、インターフェースを強化して、新しいバグの原因が私でないことを示せるようにしている。人々は無頓着だから、あなたの仕事と彼らの仕事の間に防護扉を設けることが大事だ。それに、私は新しいツールの抽象化について学ぶ時間を取る。たとえそれがオーバーエンジニアリングされていても。目を閉じて間違いを犯すのは私のスタイルじゃない。
> ここ数年で、抽象化がどのように機能しているかを理解している人が、企業からは美徳よりも負担として扱われることが多いと結論づけた。これは現代のソフトウェアエンジニアリング業界で最も疎外感を感じさせることの一つだ。5歳の頃からコンピュータで遊んでいた人が、16週間のブートキャンプを受けて、Claudeのサブスクリプションを持っている人と同じ立場にいるなんて。最近、ドラムとベースのショーに行って、他の人と話した。私があまりドラムとベースを聴いていないのが明らかで、最も人気のあるアーティスト以外の名前を挙げられなかった。人々は、あなたが彼らの音楽シーンの一部ではないと気づくと、反応が少し変わる。あなたは外部者、観光客、あるいはポーズを取っているだけの人だ。それは問題ではなく、サブカルチャーのあり方だ。あなたはそのライフスタイルを生きているか、そうでないかのどちらかだ。LLMがやっていることは、ポーズを取る人や文化の盗用者を大量に自動化している。あなたはこの領域の細かい部分を本当に理解していないし、IRCやbashターミナルで実際に生活したこともない。でも、簡略化された地図を振り回して、すべての裏路地や小道が欠けている中で、翻訳されたフレーズ集を使ってネイティブのふりをすることはできる。 > 私の一般的な感覚では、誰もReactがどのように機能しているかを理解していない。質問すると、一般的に返ってくる答えは「心配しないで」だ。ソフトウェアの問題は、コンピュータオタク文化の盗用者と、プログラミング言語をネイティブに「話す」人々の区別ができなくなっているように思えることだ。基準が低すぎて、ランタイムとコンパイルタイムの違いを理解することすら期待できない。そんな高度で難解な(つまり高校レベルのコンピュータ)トピックを持ち出す人は、軽蔑される。基礎的なトピックで無知をさらけ出す能力が、存在的(またはキャリアの)脅威を示すかのように。非STEMのバックグラウンドを持つ人々の間で、知識を求めることを軽蔑する反知性主義が増えている。勉強するのは全く無駄だ - 数学と同じように。特にトロントでは、抽象化の下に潜ることを気にするホビー愛好者を見つけるのがますます難しくなっている。
私は「ソフトウェアデザイン」を専攻して卒業した時から、これが明らかだった。大学ではソフトウェアデザインとソフトウェアアーキテクチャが私の中心的な興味だった。卒業した時、どの会社も私が学んだアーキテクチャの概念に興味を持っていないことにショックを受けた。UMLクラス図、シーケンス図、ER図などは、すでに廃れていた。インターネット企業がスケールアップする中で、シーケンス図への関心が一時的に復活したこともあった... 特に複雑なバグやメッセージパッシングのシナリオを説明するためのコミュニケーション手段として。しかし、それも長続きしなかった。今では、ほとんどのソフトウェアがレースコンディションや深刻な脆弱なアーキテクチャの欠陥に悩まされている。暗号通貨は多くの攻撃の被害を受けている。レースコンディションによって数十億ドルが失われた... それは発見されたものだけの話だ。実装後に見つけるのは非常に難しい。今日私たちが使用しているプログラミングのプリミティブは、レースコンディションを避けるように最適化されていないし、良い並行性パターンを促すことすらしていない。むしろ、便利だけど無秩序な並列化を促進し、型安全性に焦点を当てるように最適化されている。スキーマ検証のギャップに正当に警鐘を鳴らしていた多くの人々(APIの境界で重要なこと)は、型安全性に過度に執着するようになった。私はNode.js用の非同期プリミティブを構築したが、誰も気にしなかった!誰も!他の開発者もほとんどの他の言語で同じ経験をしている。Elixirのようなニッチな言語だけが、実際にそれを重要視していると思う。でも、誰も既存の言語で問題を解決できるとは認めなかった。ひどい状況で、まるで誰かがそうあってほしいと思っているかのようだ。「並行性の安全性」という用語すら存在しない!スレッドセーフティについて漠然としたアイデアを持っている人もいるが、それは特定の並行性プリミティブに特有のものだ。でも、非同期ロジックの並行性(今ではもっと一般的)についてはどうだろう?その点では、私はキャリアの中で完全に抑圧されていると感じている。アーキテクチャに関する唯一の声が「メインストリーム」に届いたのは、アジャイルソフトウェア開発の発明者の一人であるマーチン・ファウラーだった。その後、Reduxのダン・アブラモフが続いた。いくつかの著名な意見を持つアーキテクチャの本が出版されたが、良いアーキテクチャの根底にある本質的な哲学を特定したものはなかった。私がこのテーマについて読んだ中で最も簡潔な引用は、OOPの発明者であるアラン・ケイのもので、「このトピックのために『オブジェクト』という用語を早くに作ってしまったことを申し訳なく思っている。多くの人が小さなアイデアに焦点を当ててしまうからだ。大きなアイデアはメッセージングだ。」この引用が好きな理由はいくつかある。まず、知恵を示していること、次に、問題が何であるかを非常にシンプルに伝えていること、そして、私たちが数千の複雑な重なり合った部分的に矛盾するアイデアで飽和状態にあるこの分野で、「焦点」の重要性をほのめかしていることだ。FPのトレンドは、ある意味で赤いニシンだったと思う。型安全性も同様だ。はい、ある程度は役に立ったし、良いアイデアもいくつかあったが、人々はそれに夢中になりすぎて、最も基本的な改善の領域が完全に無視されてしまった。私にとって、FPの核心的な価値提案は「値渡しは参照渡しよりも安全だ」と言える。アラン・ケイの「大きなアイデアはメッセージングだ」という文脈で考えてみてほしい。オブジェクト参照はメッセージか?NO!ライブインスタンスはメッセージではない!まさにその通り!彼のポイントは値渡しを支持し、さらに簡潔で最小限のパラメータを促す。良いアーキテクチャは2つのコアコンセプトに根ざしている。1. 緩やかな結合。2. 高い凝集性。これらはロジックと構造
ハードウェアは安いけど、人間の労働はそうじゃない。企業は、顧客からお金を引き出す最善の方法は、今はほとんど機能しないものを提供することだと気づいたんだ。後で素晴らしいものを提供するよりもね。
まあ、もっとReact開発者が内部の仕組みを知ってたら、別のものを選ぶかもしれないね。冗談はさておき、双方向データバインディングが必要ないなら、Reactフレームワークを使うと、必要のないクソみたいなものがたくさん引っ張られてくるよ。ほとんどのウェブアプリにはReactは必要ない。-------- [1] 私が無神論者である理由は、あなたの宗教についてあまり知らないからじゃなくて、逆に知りすぎてるからだっていつも冗談を言ってる。
> この移行の最大の部分は「雇用」だ。つまり、アウトソーシングのことを指している。
> 10年以上使ってきた内部フレームワークを置き換えること その内部フレームワークが何か教えてくれる?
> 彼らはそのものを欲しがっていて、うまく動くかどうかは気にしない。効率的かどうかも気にしない。今すぐ欲しいんだ。それは、成功するプロダクトを何を作るべきか分からないから、いろんなアイデアを試してみて、どれがうまくいくかを見ようとしているからだ。この早い反復ループの中で、人々は適当にいろんなものを組み合わせて何かを作り、その何かが traction を得ると、その不安定な基盤の上にさらに積み重ねていく。
あなたの状況にはいないけど、絶望の底に落ちて「もうどうにでもなれ」って気持ちを見つけたよ。あなたにとって何が選択肢かは分からないけど、私はバーテンディングを学んだり、棚を整理したり、リテールで働いてる若い女の子たちと無責任なセックスを楽しんでる。ソフトウェア開発が好きで、いつか戻りたいと思ってるけど、今はこのクソみたいな海の中の小さなトウモロコシの粒みたいなもんだから、波に逆らうよりは乗っちゃった方がいいかな。もしかしたら、あなたの呼びかけはインディアンを騙したり、アメリカ人を騙したり、インディアンの詐欺師を騙したりすることかもしれない。あなたは一人じゃないけど、その態度は決して無視できないよ。学校に戻るか、子供たちのためのチュータリングプログラムを始めてみたら?モチベーションなんてバカのためのもの、何か行動を起こそう。
よく書かれた記事から:私は数ヶ月かけて履歴書を調整し、自分のスキルが役立ちそうな全ての仕事に応募し、Claudeを使って概念実証を作り、私の潜在的な製品やサービスに興味を持ってくれそうな人に冷やかしの連絡をしてきた。でも、もう限界だ。企業が直面している大きな問題の一つは「履歴書詐欺」で、これは応募者が殺到するけど、99%以上がGenAIを使って求人に合わせた偽の職歴を作っているということ。多くの企業がオンラインで「本物の」応募者を特定するのを諦めてしまうほどだ。90年代のメールスパムに似ていて、アンチスパム技術が成熟する前の話だね。
ほんとにひどいよ。Redditでプロジェクトを見て回ることもできない。ほとんどがクソみたいなものだから。
候補者をフィルタリングして、既存の社員にGenAIを強制するつもりなんだね。全く理にかなってるわ。
厳しく聞こえたらごめんだけど、多くの開発者がやっと自分たちの高給や平均以上の雇用の安定が、競争があまりないビジネスモデルに基づいていたことを理解し始めていると思う。そんな環境では、実際の基本や、物事そのもの、行動の背後にある理論に焦点を当てる余地があったんだ。これらのことは良いことで、その余裕があったのは有益だった。でも、ビジネスの現実は変わってしまった。主にAIツールのおかげでビジネス目標を達成するのが劇的に楽になったから。これがしっかりした基盤を築くことへの焦点を削いでしまうし、多くの場合、ビジネスにとって痛手になるだろう。でも、そうならないケースも多いし、業界はそのまま進んでいく。マーケティングやジャーナリズム、教育の分野で働いている私たちは、ソフトウェア開発者の発明のおかげで、もう何十年も前からこの新しい現実を受け入れざるを得なかった。今、開発者たちは自分たちのパーティーに遅れてきたって感じだね。
「実際の基本、物事そのもの、行動の背後にある理論」は消えない、変わるだけだ。プログラマーは昔、パンチカードを使っていたし、その後アセンブリ言語や奇妙な特性を持つ低レベル言語を使っていた。今では、ほとんどの開発者がファーストパーティコードのサイズやマイクロ最適化、レジスタ割り当てについて考えることすらない。LLMはただの別の抽象化に過ぎない。理想的なAIコードライター(まだそこには達していないけど)を持つ開発者は、プロダクトオーナーやマネージャーのようにアイデア、デザイン、スコープなどについて考えなければならない。これらの概念には理論があり、時には数学(例えば、時間の複雑さ)も関わってくる。記事にコメントするために追記:すべての抽象化には漏れがあるけど、時にはそれがあまり問題にならないこともある。今でも、LLMを使うときにはコードの質やアーキテクチャを理解する必要がある。そうしないと、ソフトウェアが悪化して会社に影響を与えることになる。でも、来年はそうならないかもしれない。アナロジーとして、スタックとヒープ、メモリの割り当てなどは、高性能ソフトウェアではまだ重要だけど、プログラマーはほとんどレジスタの割り当てについて考えない。
これ全然厳しくないよ。前にもコメントしたけど(今回は証拠やリンクはないけど)、アメリカの高給プログラマーがたくさんの利益をもたらしているって報告があった。彼らの雇い主が労働コストが高いから薄利だったわけじゃない。100Kドルの給料に対して、100万ドルの利益を出しているって話だし。彼らは自分たちの価値に近いものを稼いでいたわけじゃない。マルクスの労働価値説によればね。今どう転がるかは分からないけど、可能性の一つとして、テックの億万長者たちがその100Kドルを自分たちのものにするってこともある。自動化資産に座っている非常に価値のある人たちがね。一方で、他の業界の労働者たちは、今や彼らと同じ船に乗っていることを自慢できる。いつも少ない現実を受け入れる船に。
フランスで10年以上開発者として働いてきたけど、最初から給料はそんなに高くなかったし、仕事を見つけるのが難しくなって競争が増えたのは確かだ。高給の役割を求めて「戦う」のをやめたから、経験的には純粋な利益はなかったけど、インフレからは守られた。純粋な「利益」は、賃貸から住宅ローンに移って、さらに小さくすることで得られた。今はこれで大丈夫、仕方ないけど、これらの年はスムーズではなくて、浮き沈みがあったし、上がった後の下がりは、準備ができていないとストレスになる。
多くのヨーロッパの国では、開発者に高給や平均以上の雇用の安定はない。みんなと同じオフィスワーカーとして見なされる。ここはシリコンバレーじゃないし、特に南ヨーロッパの国から来たらそうだね。
賃金を抑えるために仕事がなくなる脅威。これ、何度も見てきたシナリオだよね。典型的な資本主義だ。でも、それが mediocre(平凡)を受け入れる理由にはならない。企業は気にしないかもしれないけど、コードの行数やメンテナンスのしやすさで製品を買う企業なんてほとんどないよ。30年近くソフトウェアを作ってきたけど、早い段階で企業が気にしないってことが明らかになった。常に争点だったのは、今すぐ出荷すること、早く、そして正しいものをしっかりと出荷すること。どこで妥協し、どこで強く引くべきかを学ばなきゃいけなかった…結局、絶対に重要な時があるからね。ビジネスが自分の足を撃つ瞬間を認識できないからって、私たちがそれを許すべきじゃない。これが平凡な開発者たちの言い訳になってきたのも何十年も前からだよ。だからこそ、プロダクションに雑なコードが残ってしまった。ちらつきなしにスクロールできない端末や、大量のデータを扱えないアプリ。スパコンでさえローディング画面が出るアプリ。たまにしか動かないソフトウェア。早く出荷して、壊れたものを作る。
>「あまり厳しく聞こえないといいんだけど、たくさんの開発者が自分たちの高い給料と平均以上の職の安定が、競争があまりないビジネスモデルに根ざしていたことを理解せざるを得なくなっていると思う。ビジネスやマネージャーの人たちがソフトウェアやインフラを管理するのを見てみたい。最悪の事態は何だろう?さあ、やってみて。足を撃つようなことが起きるたびに、見下したような笑いが続くだろうね。以前は『情熱』がこの業界で成功するための決定的な要素だと思っていたし、それは業界に入りたいと思っている人たちに与えられたアドバイスだった -- 最低限の興味を示した人たちにね。今は、確実に興味がなく、情熱もない非技術的な人たちが質の高いソフトウェアを作ったり管理したりしようとしているんだ。」
いい第一原則の分析だけど、現実とのつながりが薄いね。たった1〜2年を振り返っているだけだ。開発労働のアウトソーシングが国内市場を壊したんだ。エンジニアリングの役割は今や海外(ラテンアメリカ、南ヨーロッパ、インド)に移っている。今のアメリカの開発者は国際的な同僚を持つことが多いけど、15年前にはほとんどなかったことだよ。AIツールが貢献しないわけじゃないけど、結局職業への参入障壁を下げるからね。でも、C-suiteや採用マネージャーはAIのサブスクリプションよりも労働コストを重視しているよ。
多くのソフトウェアの実践はエンジニアリングではなく、むしろ心理学に基づいているし、ソフトウェアの開発と維持にはお金がかかるという事実に基づいている。AIによって完全にパラダイムシフトが起きて、これがすべてを際立たせている。少なくとも高レベルのプログラミングでは、ベストプラクティスやデザインパターン、コードの衛生状態が必要ない可能性がある。なぜなら、誰もそれを見ないし、AIが小さな機能を追加するためにサービス全体を書き直すことができるから。スケーラブルや拡張可能にするために何かを書く必要がなくなるかもしれない。このコストが無料になるならね。これが現実にどんどん近づいている。
早すぎる抽象化はすべての悪の根源だ。
その痛みは分かるよ。もし今50代で失業したら、たぶんコンピュータの外で何か別のことをするだろうね。生産性が上がったと褒める人たちは、企業が私たちをあまり必要としなくなるってことを忘れがちだ。私はエンタープライズコンサルティングに携わっていて、マネージドクラウドインフラへの移行や、ローコード/ノーコードツールの導入がチームサイズに与える影響を見てきた。つまり、同じ成果を得るために必要な開発者が減っている。AI主導の開発は、そのチームサイズをさらに減少させている。多くのヨーロッパの国では、年齢が上がるにつれて仕事を得るのが本当にほぼ不可能なタスクになっている。最も簡単な解決策は、早期退職の地位を得るか、自営業を始めることだけど、これにも独自の複雑さがある。
ジェネレーションZには同情するよ。経験や判断力、センスがある人たちですら大変なのに、どうやってこの業界に入れるんだろう?