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

あなたを幸せにするツールを選ぶことができます

2025年5月22日原文(borretti.me)

概要

  • 技術選択の理由がしばしば感情や美学に基づく現実
  • ブログ記事の多くが論理的理由を装いながら感情的動機を隠蔽
  • マイナー技術選択が自己表現や憧れの投影である事例
  • 自分の動機を正直に見つめる重要性
  • 最終的には自分が幸せなら好きな技術を選べば良いという結論

技術選択に潜む感情的動機

  • Hacker NewsLobsters でよく見かける「なぜObscure ThingがPopular Thingより優れているか」という記事タイトル
  • 表向きは 合理的・技術的理由 を掲げるが、実際は 感情的要素 が多分に含まれる現実
  • 技術選択の背景には「 心地よさ」「慣れ親しみ」「憧れ」などの 感覚的価値観 が存在
    • 例:NetBSDをThinkPadで使い William Gibson の主人公気分を味わう人
    • 例:LispやSmalltalkなど 歴史的英雄時代 への憧れ
  • ツールの「雰囲気」が使い手の 自己イメージ と重なるケース
    • Ada=「 保守的・重厚」、Rust=「 新進気鋭・スピード感
    • Emacs=「 Gnostic的選民意識」、VS Code=「一般向け」
  • 多くの人が 感情的動機 を認められず、 合理化 に走る傾向

論理的理由の仮装とそのパターン

  • Obscure Thingの利点を誇張し、 欠点は矮小化
    • 例:「Fortran 2023でHTTPサーバ実装に半年かかった」などの苦労を美談化
    • 「Common LispはGCがある」と主張し、 Pythonの存在を無視
  • Popular Thingへの批判は 曖昧 または 社会的要素 に依存
    • 例:「Dockerは複雑すぎる」「コミュニティが有害」「Rustは軟弱になる」
  • 稀に正しい指摘もあるが、 冷静な評価基準では決定打にならない

美学としての技術選択と自己表現

  • Emacs は「Gnosticカルト」だが、それで 幸せなら問題なし
  • 好きなものを選ぶ自由、それが人生の豊かさ
  • 美学や雰囲気 のためにツールを使うことの肯定
    • 例: ZFSをエアフライヤーにFortranで確定申告
    • Tails 利用でサイバーパンク気分、 レザージャケット 着用
    • バンコクでバックパッカー、 Geminiで小説執筆、2003年製デジカメで写真
    • Signalで家族グループチャット、ISDN公衆電話からスタンドアップ参加
  • 人生をアート作品に 仕立てる提案

自己欺瞞の否定と動機の内省

  • 他人や自分に 嘘をつかない ことの重要性
    • 例: SNOBOLが未来の言語 だと主張しない
    • Prologでフロントエンドを書き直す合理的理由 をでっち上げない
  • 自己動機の内省 と、 純粋な執着 だけで突き進む危険性
    • 極端に走ると 孤独な袋小路 で年月を浪費するリスク

結論:幸せなら好きな技術を選べ

  • 合理化せず、自分がなぜその技術に惹かれるか 正直に見つめる
  • 美学・趣味・雰囲気 で選んでも良いという 肯定的メッセージ
  • ただし、 他人や自分に嘘はつかない 誠実さが大切

Hackerたちの意見

ほとんどのことと同じように、ここにもハッピー・ミディアムがあるよね。新しくてキラキラしたuvにポエトリーを捨てたおかげで、日常の体験が格段に良くなった。特に、既存のモノレポにPythonを導入しなきゃいけなかったから。Pythonのコメントとして依存関係をインラインで書けるようになったおかげで、うちの会社の全く技術的じゃない人が、たった一つのCLIコマンドでPandasを使ったAI生成スクリプトを実行できるようになったんだ。もしポエトリーを選んでたら、彼のマシンに適切なPython環境を整えるのに半日もかかってたと思う。逆に、17人しか使ってないJSのウェブフレームワークを選んじゃうと、実際に使われてるReactやVue、Svelteのユーザーが解決済みの問題を解決するのに時間を無駄にしちゃうよ。

自分が理解できるシンプルなツールを使うのが好きなんだ。いつでも拡張できるし、複雑で常に変わるツールよりもいいよね。ほとんどのツールは新しい要素を持ち込むけど、95%の使ってるものを再発明しちゃう。新しくて役立つものを持ってくる真のラテラルツールは珍しいよ(テキストエディタのLSPとか)。大体は機能ベースじゃなくてプロトコルベースだしね。

「自分を幸せにするツールを選べ」という意見には賛成だけど、「マイナーなツールは全て価値がある」っていう暗黙の前提には反対だな。人気のないツールやソリューションをたくさん使ってきたし、今も使ってるけど、その中には自分を幸せにしてくれるものもあれば、そうじゃないものもある。どれも実用的な利点をもたらしてくれるよ。良いツールが必ずしも人気になるわけじゃないし、人気のあるツールが良いとも限らない。

僕はその論文のポジティブな部分には賛成だね。つまり、物事を好きになるのはいいことで、感情を持った人間だからこそ選ぶ理由があって、素敵なものを持つべきだってこと。だけど、データや制約を見たときに、人々が非合理的に行動してるとか、それが詭弁だとかいうのは違うと思う。実際には多くの人がある程度の評価をしていて、それを無視するのは知的に怠惰だよ。僕はニッチなソフトウェアをたくさん使ってるけど、自分の美的好みと、そうする具体的な理由を完全に分けるのは難しい。美的好みや特定のものを使う喜びは、実際にはその具体的な利点から来てることもあるんだ。

実用的な利点があるのは信じてるよ。人気のあるものには、俺がやりたいことには不十分な問題がいくつかあることが多いけど、時々はそれぞれに利点と欠点があって、俺が好きなものは他のと違うってこともある。ファイルフォーマットや文字セット、プロトコル、プログラムにも同じことが言えるよ。> 「良いツールが必ずしも人気になるわけではなく、多くの人気ツールは良くない。」その通りだね。(俺の意見では、良いと思う特徴があったり、逆に悪いと思う特徴があったりすることもあるけど、一般的に良い特徴や悪い特徴もあるよね。)(ただし、何かが特定の目的には良いけど他の目的には悪いこともあるし、明らかにもっと良いものがあるのに、悪い目的に使われることもあるよね。)

ソフトウェアエンジニアリングがどれだけ主観的な感情に基づいた決定が多いか、みんな過小評価してるよね。実際、選択肢がたくさんあって、厳しい制約が少ない分野にいるってことなんだ。ウェブアプリやCLIをJava、Go、Rust、JavaScript、Ruby、Pythonなどで書けるし、それぞれに合理的な理由がある。AWS、Vercel、GCP、Azure、Cloudflareにデプロイもできるし、Postgres、Mongo、SQLite、MySQLも使える。どのスタックが他より優れているっていう実際の証拠はある? いや、あんまりないよね。結局は、自分の脳が好きだと思うものを選ぶだけで、その後に理由を補完するんだ。ソフトウェアエンジニアは、自分たちが完全に合理的な存在だと思いたがるけど、実際は社会の他の人たちと同じように主観的な理由で動いてるんだよ。

特定のプロジェクトに対して、特定のスタックを選ぶ客観的な理由は確かにあると思う。どれも強みと弱みがあるし、スタックの選択に関係なく多くの同じタスクを技術的に達成できるけど、時間枠、エレガンス、利用可能なエコシステム、コスト、スタックの人材確保のしやすさはかなり変わるかもしれない。とはいえ、他の誰かのお金を使ってないなら、自分が楽しめるスタックや生産性を感じるスタックを選ぶよ。自分のプロジェクトにはElixirを使ってるけど、働いているスタートアップには一般的に悪い選択肢だね。人材確保が難しいし、エコシステムも限られてるし、独特で時には賛否が分かれる概念だから。TypeScriptやGoと比べるとビジネスリスクがある。ただ、素晴らしい同時実行モデルとクールなパイプライン機能はあるけどね。 :)

TCLを忘れてるよ。俺はTCLとApache/Rivetでウェブアプリを書いてるんだ。 :)

俺は約6年間、いくつかのPHPの会社でバックエンドインフラチームで働いてきたけど、ダイナミック言語はリファクタリングをしたいときには本当に最悪だよね。:) それで、Goのようなコンパイル言語のありがたみを実感したよ。重すぎず、ダイナミック言語に近い感覚があるのに、リファクタリングも楽にできるからね。

ソフトウェアエンジニアは、自分が完全に合理的な存在だと振る舞いたがるだけなんだよね。これ、めっちゃ同意。合理的に考えるべき要素もあるけど、結局は直感やUXが人々が認めたがらないよりもずっと大きな要因なんだよね。私の経験上、「事実が感情よりも大事」って言う人は、しばしば感情をうまく表現できてないだけの意見を持ってることが多い。自分の感情を理解して、認められる人と話す方が好きだな。

結局、コードは人間のために書かれてるんだよ。そうじゃなきゃ、みんなアセンブラを使ってるはずだし。だから、コードの可読性や管理のしやすさは重要だよね。それに対する意見もたくさんあるし、だいたい「ケースバイケース」って感じ。コメントの核心には反対してないけど、これを単なる職人技として扱うのは厳しいと思う。私の意見としてはね。

AWS、Vercel、GCP、Azure、Cloudflareなどにデプロイできるよ。これが今やデフォルトになってるのは面白いよね。ずっと前からそうだったし。人々がこれらのプラットフォームでの運用が本当に高額(EC2/RDS)か、特定のプラットフォームに依存している(「サーバーレス」、Cloudflareワーカー、ラムダなど)ことに気づく瞬間をまだ待ってるよ。

Hacker Newsで議論の続きを見る