プログラミングは愛しているが、プログラミング業界は嫌悪している開発者
(deathbyabstraction.com)- プログラミングそのものの楽しさとは対照的に、ソフトウェアの職場は、設計の目的や成功基準を問うよりも、より多くのコード生産を求める環境だと感じられる
- 2023年に数週間求人票を見た経験は、「より良い場所」への期待を打ち砕き、とりわけ スタートアップ文化 が「質問は減らし、生産は増やせ」という態度を露骨に示していた
- 大手テック企業でも、開発者はバックエンドスタックの規模、面接スコア、評価スコアといった 数字 として扱われ、コードの書き方に対する個人の判断はさらに無意味になる
- 「より多く作り、より少なく問う」という態度は、コード量を増やせても、より悪いソフトウェアにつながり、流行技術と惰性は言語・ライブラリ・フレームワーク・コードパターンにまで染み込む
- 筆者が望む仕事は、社会にすでに存在する必要から出発した 工学上の問題 を解くことであり、システムの「なぜ」が言語・パラダイム・アーキテクチャ・文法に至るまで決定すべきだ
ソフトウェア職場で感じた不一致
- 筆者は、自分がこれまで経験したどのソフトウェアエンジニアリング職にも、うまく適応できなかったと語る
- コードベースの内部論理をある程度理解すると、技術的な側面は退屈になり、その後は、より多くやることよりも 違うやり方をすること を望むようになった
- 設計上の意思決定と目的をめぐって、次のような問いが絶えず浮かんだ
- なぜこれを行うのか
- なぜこのやり方なのか
- より良い方法はないのか
- 成功を判断する指標は何で、なぜそれを使うのか
- こうした問いをいつも口にしていたわけではないが、もっと多くのコードを書き出せる時間に「考えすぎだ」「気にしすぎだ」と言われた
- 単に才能と職務の相性が悪いという問題ではなく、組織の運営のされ方そのものに同意しがたく、それを維持するより変えたいと思っている
スタートアップ求人票と「より多く作り、より少なく問うこと」
- 2023年に数週間求人票を眺めた経験は、「もっと良い場所があるはずだ」という期待を崩した
- 求人説明の 90% は、採用された人が書くことになるコードが、人類にとっても個人にとっても重要な問題から切り離されているように見えたと評価している
- スタートアップ文化は、業界の「より多くのコードを生産し、問いは少なくせよ」という態度を最も露骨に示す事例として提示される
- 多くのスタートアップは投資家の資金を動かし、限定的にしか有用でない製品を、あたかも必要なものだとユーザーに説得して有料利用者を得ようとしていると批判される
- スタートアップは たいてい失敗し、その結果、数か月ではなく数週間で書くよう圧力をかけられた、保守しにくいスパゲティコードだけが残る
- そうしたコードは、悪いコーディング慣行の例として以外は二度と見られず、エンジニアの時間は浪費され、ベンチャーキャピタルはすでにかなりの資本を持つ人々のもとへ流れ、再び別のスタートアップに投じられる
- 求人広告は、こうした仕事を、人々の生活を豊かにし、エンジニアとしての成長を刺激する興味深い仕事のように装っていると批判している
大手テック企業でも失われる自律性
- 既存のテック企業はスタートアップと組織・財務構造は異なるが、文化的には大きな対照をなしていない
- FAANG で書いたコードは実際のユーザーに届くかもしれないが、コードを書くうえでのある種の個人的な考えは、さらに無関係になる
- 開発者は次のような形で 機械の歯車 になると批判している
- 製品が資本主義の 最悪の側面 を、ますます陰湿なやり方で自動化する可能性がある
- 実務的には、バックエンドスタックの規模、技術面接のスコア、評価スコアのような数字になる
- 問題は、こうした現実そのものだけでなく、エンジニアが空虚で屈辱的な反復労働を、ほかの労働者以上に渇望すべきであるかのように期待され、そのどの側面についても問えないよう、より強く抑圧されている点にある
批判的思考が排除されたエンジニアリング
- プログラマは どうやって にだけ集中させられ、何を作るかに関わることはまれで、なぜ作るのかを問うことはほとんどできない立場に置かれている
- 自分が生産するシステムを批判でき、また批判しようとする開発者に対しても、そうした態度は職場の外に置いてこいというメッセージが与えられる
- 開発者は、職務に内在する自律性と創造性の欠如を認識することさえ禁じられていると感じており、より多く作ることはできても、違うものを作ったり、より良いものを作ったりするのは難しいとみている
コード量は増えるがソフトウェアは悪化する構造
- テック業界の do-more-ask-less 的な態度は、より多くのコードを生み出せる一方で、同時に より悪いソフトウェア へとつながる
- 資本や外部条件が、持続可能で、前向きで、少なくとも実用的に有用なソフトウェアを作る余地を与える場合でさえ、惰性のためにそうしないことが多い
- 流行に従い、現状を再生産するほうがより簡単で、たいていはより実現しやすい
- 同じ惰性は、社会的に有用でない製品を支える技術スタック全体にも染み込んでいる
- 言語
- ライブラリ
- フレームワーク
- コードパターン
- 実際のイノベーションよりも新奇さやギミックを前面に出す傾向が業界全体を苦しめており、非典型的な問題を解かないのであれば、非典型的なエンジニアリングも必要なくなってしまう
望ましいエンジニアリングの基準
- 最も興味深い工学上の問題は、技術発展そのものを目的にしたり、存在しない市場需要を人為的に作り出そうとするものではなく、社会の中で自然に生じる問題である
- 社会的必要はイノベーションを駆動する最良の原動力であり、初期コンピューティングの画期的な 成果 も、より大きな公益のために生まれた
- 望む仕事の進め方は、システムを構築する なぜ が、あらゆる どうやって を導くことだ
- プログラミング言語
- パラダイム
- アーキテクチャ
- コード1行
- 文法要素
- その「なぜ」は、それ自体のために存在する事業指標ではなく、現実に存在する本当の必要を反映していなければならない
同じ価値観を持つ人を探す呼びかけ
- 筆者は、これまでこうした価値観を有意味に共有し、この種のエンジニアリングの仕事をしたいと考える人に出会ったことがない
- 業界との関わりの中で孤立感を覚えることが多いが、自分の仕事上の価値観と、自分が語るべきことの重要性には確信を持っている
- そういう人がいるなら連絡してほしいと呼びかけ、すでにそのような場があるのか知りたいし、なければ一緒に作ることに意義があると考えている
- 自身の 関心分野 にあり、価値観と合理的に合うコンサルティングの仕事には前向きである
1件のコメント
Hacker News のコメント
OP が嫌っているのは「プログラミング業界」というより、企業社会だと思う。「現実」が開発者に何を求めるのかについて期待がずれている開発者たちと働いたことがあるし、自分にもそういう時期があった
企業は洗練、抽象化、気の利いたコード、美しいコードには関心がない。ビジネス要件に合わせて機能を作り出す開発者を求めている
マネージャー、役員、同僚といった歯車の中の個人は、プログラミングの「芸術」を実践させてあげると言うかもしれないが、会社に経済的に貢献できなければ、結局は負担として扱われる
企業の外でプログラミングの楽しさや芸術性を見つけるほうがよく、「業界」がプログラミングの方法や理由を気にしてくれるとは期待しないほうがいい。画面に打ち込んだ文字を現金に変えられるかだけを見ている。これを受け入れれば、人生はずっと息苦しくなくなり、仕事にも楽しみを見いだせる。ただし必ずしも「芸術」ではないかもしれない
ただ、「企業は洗練、抽象化、機知、美しいコードに関心がない」という話については、だとすると自分は企業社会なのかと思ってしまう
同僚に言いたいのは、洗練や抽象化や機知や美しさを試みる前に、まず仕様どおりに動くようにしてほしい、ということだ。そうでなければ全部無価値だ
正しく動かせるようになることにある程度熟達してから、ようやく正しく作り、場合によっては速く作ることもできる
好きなことを自分の事業にしても、たとえば家具を作るとしても、顧客が「間違った」ものを望んだり、より良い希少な材料の代金を払いたがらなかったりすることがある
仕事の要素がない趣味として、純粋に好きなことをするほうが常に良い
お金をもらう理由は納品するためだ。効率的か、問題を解決したか、金を稼いだか、チェックボックスを埋めたかは、自分の悩みの種でも制御対象でもない。やることを計画し、実行し、人に親切に接し、5時に退勤すればいい
悪いコードを書いたり、意思決定の下流への影響を気にしなかったりするような雑な仕事をしてはいけない。そういう理由で解雇される人もいる
もっと重要なのは、やり過ぎないことだ。製品がどう進化するかを予測してあらゆるシナリオを面倒見ようとせず、明らかに優れた設計を押し通そうとせず、より早く納品しようとせず、担当作業中に見つけた別のバグを直そうとしないほうがいい。昇進を追い求めることは、自分で招いた最悪のストレスの一つだった
自分の属するプロジェクトが高負荷なのか、高成長なのか、成熟段階なのか、近く切られる対象なのかを把握し、それに合わせて行動すべきだ
そして手柄を取り、目立つ必要がある。四半期に一度デモをし、他人のコードをレビューし、設計会議に参加して質問し、午後5時前に来たメールやメッセンジャーには素早く返信し、やると言ったことを納品すればいい。有用なリソースに見えるようにしつつ、納品圧力の兆しが少しでも見えたら行動で押し返すべきだ
最後に、常に2週間以内に次の面接を受けられるよう準備しておくのがよい
職場は職場にすぎない。家族でもなければ、人材派遣所でもない
飛行中に翼が付いたままでいることは重要業績評価指標を上げないのだから、そんな無関係な心配に時間を使う人は全員解雇しよう、という話になる
暗黙の目標は、十分に一般化して、プログラマーたちが集団として「企業社会」で発言権を持つべきだと合意する地点まで行くことだ。たとえば、新機能を「量産する」速度を落とし、ソフトウェア品質にもっと投資するよう要求する、といったことだ
開発者として30年以上働いてきたが、残念ながらOPの文章に大きく反論できる点はあまり多くない。反論できればいいのだが。
若い人たちは、技術やソフトウェアを作ることは、生まれ持った情熱を発揮できる創造的な活動だと教わる。記号、抽象化、反復作業に惹かれる特定のタイプの思考が、この仕事に集まる。年月が過ぎ、株主たちは肥え太る。
真実は、ソフトウェア開発はほぼ完全に経済活動であり、しかも搾取的な性格を帯びているということだ。作業環境は金やボーキサイトを掘るよりは確実にましだが、ほとんどの場合、他人を裕福にするためにコードの鉱脈からコードを掘っている。角部屋のオフィスに座る人たち、そのさらに上でヨットを持っている人たちのことだ。
彼らは、私たちが何をしているのか、それを芸術や職人技だと見なす私たちの気取り、私たちが重要だと思っていることに関心がない。実際には、たいてい私たちのことを時間を無駄にしている負け犬だと思っている https://ribbonfarm.wpenginepowered.com/wp-content/uploads/2009/10/hughMcLeodCompanyHierarchy.jpg
ここで他の人たちが言っているように、根本的な誤りは企業の仕事に意味を見いだそうとすることにある。だが人には意味が必要で、一度きりの人生のあまりにも多くの時間を仕事に費やさなければならない以上、選択肢は多くない。答えは分からない。
ソフトウェアの「下層民」を負け犬と見る人たちにも、少なくとも2種類いる。
ひとつは、その仕事には熟練が必要で、労働者には価値ある専門性があり、耳を傾ける価値があると考える層だ。それでも彼らは給料をもらう商品にすぎず、自分たちのように「部屋で一番賢い人」や「リーダー」になって大きな報酬を得る本物のプレイヤーではないので、負け犬だと見る。
もうひとつは、ソフトウェアの仕事は低スキルの雑務で、労働者は一時的な必要悪であり、報酬や忠誠心の問題で生意気で身の程をわきまえていないと見る層だ。彼らの意見には価値がないと考える。もちろんビジネスの世界では、ソフトウェア労働者は本物のプレイヤーのように動いて個人的に利益を得ることができないので、負け犬だと見なされる。
後者のほうがはるかに悪い状況だ。
自分が作ったものが誰かを裕福にするなら、それは良いことだ。自分が作ったものに価値があるという意味だからだ。自分が作るすべてのものに価値があってほしい。
いつか十分に練習し、学び、経験と貯蓄を積めば、責任を持って他人を雇えるようになりたい。
良いアイデアがあり、きちんとやり遂げれば、自分もそのヨットを持てる可能性がある。私たちはそれを経済的インセンティブ、あるいは動機と呼ぶ。
「業界が向かっている方向」は、以前から詐欺師たちに浸透されていく過程だと見ている。ソフトウェアを書いて生み出せる価値は途方もなく大きく、テック業界の高い給与はそれを反映している。その富はあらゆる詐欺師を引き寄せる。
資格あるエンジニアを採用するためのいたちごっこの中で、これが最も露骨に見える。採用ファネルの上端と下端の比率は、かつてないほど高い。
もっと分かりにくいところでは、プロダクトマネージャーやスクラムマスターのような「詐欺師ロール」全体が生まれた。いったん入り込むと、数が多いほど安全なので、さらに多くを連れてくる。
イノベーションを起こせる賢い人たちが、いまや創造性、イノベーション、研究、発見、工学のプロセスを、無能な人物たちに手取り足取り案内しなければならない。その無能な人物たちが、賢い人たちがどこに時間を使うかの最終決定権を持っていることが多いからだ。
エンジニアたちが会議の最初の10分で顧客の問題をどう解決するか分かったあと、プロダクトマネージャーたちが順番に同じ結論まで手取り足取り案内される会議を経験したことがあるなら、それがまさにこの姿だ。
性能問題、セキュリティホール、可観測性の欠如、ひどいスケーラビリティ、ばかげた設定や依存関係の問題が生じる。
特にFAANG企業はこうしたゴミでいっぱいだ。昇進のための「自慢記事」用に書かれ、安っぽい近道が露見する前に別の場所へ行ってしまい、事実上放置されたコードたちだ。
堅牢な設計よりも滑らかな弁舌がソフトウェアエンジニアにとって最も価値あるスキルになり、その結果が至るところに表れている。
エンタープライズ向けソフトウェア開発を10年以上やってみると、結果やこのサーカスがどこへ向かうのかは、もはや気にならなくなった。
今気にしているのは、ばかげて高い金額が振り込まれる給料だけだ。
これをあとで大いに気にしなくて済むように、今ちょうど必要な分だけ気にする開発と呼んでいる。
プログラマーとして40年を過ごしたが、いつも創造性と想像力を使う方法を探し、機械的にコードだけを打つ人間にならないようにしてきた。
最後の職場では小さなチームを率い、戦略的に重要なコードを作り、成功も収めた。そのコードが常に動いていなければ、毎日10万人が怒り、怒った幹部たちも次々に出るような状況だった。
結局、あまりに働きすぎることに疲れて引退することにした。
仕事が動機を与えてくれないなら、プログラマーでいるための新しい方法や場所を探すべきだ。自分の会社を始めるとか、新しいことを試すといった形だ。あるいは別の職種を探すべきだ。
自分を作り変えるのは簡単ではなく、今ではさらに難しくなっているが、十分に望むならできる。
企業の支配者たちのために働いているときでさえ、プログラミングは活力を与えてくれる。機械を説得して自分の思いどおりに動かすことには飽きない。一日中やっていても疲れないことがある
まれにプログラミングが大量に必要になる時期には、時間がたつのも忘れて15時間ぶっ通しでやっていたことに後から気づくことがある。ほぼ20年ずっとそうだった
残念ながら、プログラミングは仕事のごく小さな一部にすぎない。キャリアを重ねるほど、それがいっそう明らかになる。実際にコードを書いている時間が週に1、2時間だけのこともある
残りは、ばかげた会議、読まない人たちの手を引いて案内すること、他の人たちが必要なとおりに機械を説得できるよう説得すること、「計画」、似たようなノイズに費やされる。やりがいがある唯一の部分は、若いプログラマーをメンタリングすることだ
続けている理由は、退職までの安全な道であり、もうほとんどそこまで来ているからだ。退職後の計画は、純粋な楽しみのために、自分が作りたいものをプログラミングすることだ
問題の一部は、多くの開発者が今 $FAANG で受け取っている給与や $STARTUP で得られる持ち分の水準を維持しながら、意味のあるプロジェクトと良い人たちと一緒に働きたいと思っている点にあると思う
実際、従業員は意味、独立性、裁量、ワークライフバランスを通貨のように扱い、意味のある仕事を得るために給与ダウンを受け入れることもある
より良い仕事はある。自分も見つけた。ただし今、広告技術企業やAIスタートアップで働いているなら、慣れ親しんだものよりはるかに低い年収を見る覚悟が、ほぼ確実に必要になる
低所得の家庭で育ち、大人になってからも何度かごく少ないお金で暮らしたことがあるので、自然にそう感じる。ある意味では、ほとんどそのほうを好んでさえいる
私のメンタルヘルスは、きつい予算よりも、過度なストレスや意味のなさによって脅かされやすい
あまり前向きに感じられない仕事、さらに悪ければ否定的な感情しか抱けない仕事を続けることが筋が通るのは、余分に稼ぐお金について非常に具体的な計画があり、その計画を実行できる可能性がとても高い場合だけだ
こういう生き方が全員に合うわけではないが、平均より物質主義的でない人や、より質素な生活を恐れない人なら、検討してみることを強く勧める。特に最近、「この良い仕事」を壊れずにあとどれくらい耐えられるのかを、週に1回以上自分に問いかけているならなおさらだ
私たちが作ったツールで、実際にモノを建てる人たちがより安全かつ効率的に働けるようにしている。目の覚めるような、手に取れるプロジェクトが建っていくのを見るのは本当に素晴らしい
言われているとおりFAANGの報酬ははるかに高いが、今働いている場所が本当に好きで、数年たったら別の場所を探さなければという衝動が、長い間で初めて湧かない場所だ
ほとんどは高い給与を払う余裕がない。関心があり、自律的に動ける人が必要だ。いろいろな面で柔軟である意思も必要で、小さな会社でははるかに多くのことが交渉可能だ
こうした会社は目の前に簡単には現れないので、自分で探さなければならない
解決策は独立して自分のアイデアを作り、消費者に売ることだ。自分のスタートアップかもしれないが、私の場合はインディーゲーム開発者になることだった
私のゲームの一つであるYOYOZOがArs Technicaの「Best Video Games of 2023」に選ばれたので、自分の決断は正しかったと感じている
セックスは好きだが売春婦になるのは嫌だ、というのと同じだ。何をするにしても自分の条件でできなければ、惨めになり得る
LeetCodeについても似たように感じる
ソフトウェア工学は好きだが、LeetCodeはソフトウェア工学を嫌いにさせる
ただ格好いいものを作りたいだけだ。LRUキャッシュや、また別の中上級LeetCode問題を40分以内に暗記して実装したいわけではない
もちろん、そのために私とは話さないという会社もあるだろうが、それで構わない。どうせそういう面接に受かったこともないし、面接中にライブコーディングをしなくて済む仕事を常に得る必要があった
期待されているのは、実質的には最適解を完璧に暗記することだ。その最適解は、アルゴリズムを研究していた博士級の誰かが見つけたものである可能性が高い
結局のところ、月間アクティブユーザー1,000人のCRUDのためのエンドポイントを実装するだけなのだ