3 ポイント 投稿者 GN⁺ 2024-02-11 | 1件のコメント | WhatsAppで共有

2024年に向けた簡潔なソフトウェアへの提言

  • ソフトウェアの肥大化、いわゆる「ブロート(bloat)」は、依然としてソフトウェアにおける最大の脆弱性の一つである。
  • 簡潔なソフトウェアを開発することは、ユーザー体験を向上させ、セキュリティリスクを減らし、システムの効率を高めるうえで重要である。
  • 開発者は、より少ないコードでより多くの機能を提供する方向でソフトウェアを設計すべきである。

GN⁺の見解

  • ソフトウェアの「ブロート」現象は、システムの性能低下やセキュリティ上の脆弱性を招く可能性があるため、開発者はコード最適化と効率的な設計に注力すべきである。
  • ユーザーはより高速で安全なソフトウェア体験を求めているため、簡潔なソフトウェアは市場で競争力を持つことができる。
  • この記事は開発者に対して、現在のソフトウェア開発トレンドを見直し、より良いソフトウェアを作るための動機付けに役立つ可能性がある。

1件のコメント

 
GN⁺ 2024-02-11
Hacker News のコメント
  • Vernor Vinge の小説『A Deepness in the Sky』では、人類はまだ光速を超える技術を持たないまま星々のあいだに広がっている。宇宙船は非常に古く、さまざまなシステムや文明の技術が混在している。

    • コンピューターシステムは長い時間をかけて進化しており、コードの大半はもはや誰もきちんと理解していない。人々はただそのコードを使い、その上に新しいものを積み上げている。
    • ある登場人物は長い旅とステイシス状態を経てきたため、おそらく最年長クラスの人類の一人である。彼は過去のシステムエンジニアで、その時代の動作原理や脆弱性を知っているため、未来で他の人々がその上に何層も積み重ね、何をしているのか正確には分かっていない状況でも、それを利用できる大きな優位を持っている。
    • Vernor は重要な点を突いていると思う。
  • npm のライブラリの大半は、不必要に多くの機能を持っている。作者たちは良い設計を知らず、どのライブラリも何でもやろうとしている。

    • たとえば、文字列エンコーディング変換ライブラリが、ファイルの読み込み、保存、インターネット経由のダウンロード、コマンドラインツールの提供など、あらゆる機能を含んでいる。ライブラリは一つのことだけをすべきだ。
    • Rust でも状況は良くなっていないように見える。Rust のドキュメントを編集しようとすると、1000 個近いクレートをインストールしなければならない。
    • 問題は言語ではなく、誰でもライブラリを公開できて、実際にそうしていることだ。「とにかく仕事を終わらせたい」人たちは最も機能の多いライブラリを選び、ライブラリの外で解決できる数行のコードを書くのを面倒がって、さらに多くの機能を求める。
    • これをどう解決すべきかは分からない。一つの案は「低依存性」を志向するグループを始め、ライブラリにそのバッジを付けたい人を後押しし、人々がライブラリを選ぶときにそのバッジを探すよう促すことだ。
  • アントワーヌ・ド・サン=テグジュペリの『Terre des Hommes』では、現代の飛行機を眺め、毎年進化していくその線を追いながら、人間が作るあらゆるものについて考えたことがあるかと問いかける。

    • あらゆる産業上の努力、計算、設計、そして設計図のための徹夜作業は、最終的には究極の単純さの原理を備えた物を作ることに集中している。
    • 家具の曲線、船のキール、飛行機の胴体を、しだいに人間の胸や肩のような基本的で純粋な曲線に近づけていくには、何世代もの職人たちによる試行錯誤が必要だ。
    • 完璧とは、もはや何も付け加えるものがないときではなく、もはや何も取り除くものがないときに達成されるという。
  • 現在私たちが使っているコードの量はとてつもなく多い。たとえば、ガレージのドアを開けるだけでも 5000 万行を超えるアクティブコードが必要かもしれない。

    • これほど大量のコードを動かしているが、その大半は十分に深いレビューを受けていない可能性が高い。
    • それでも、また npm の依存関係をインストールする日常に戻っていく。
  • ソフトウェアは危険だと見なされ、人々は自分で実行せず、「X as a Service」の提供者や「クラウド」に任せるよう勧められている。

    • これは、車は燃えやすいから、専門家と専門の消防士を同伴したプロに運転を任せろと言われるようなものだ。
  • ソフトウェアがもっと簡潔にならないのは、それに時間、技能、高額な人材が必要だからだ。

    • 独立開発者として見ると、昨年 node.js を学んだ人でも、node.js、コンテナ、さまざまな AWS のホスティング DB サービス、Lambda サービス、オブジェクトストレージ、Cloudflare、yaml、react、vite などを組み合わせて、1 日で脆弱な Web アプリを作れてしまう。
    • 高速で、保守コストの低いソフトウェアは、利益を出しながら書くのが難しい。
  • かつては、システム提供のフックを標準化して、すべての開発者がインターフェースなどに使い、開発者の主な仕事はプログラムロジックをコーディングすることだった。

    • こうしたシステムコールは、コードが変更されても同じ仕事を果たし、新しいソフトウェアにより多くの機能を与えつつ、古いコードも問題なくコンパイル・実行できるようにするはずだった。
    • この夢はすぐに崩れ去り(たとえば DLL 問題)、多くのパッケージ管理は正しいライブラリを使えるようにすることへと焦点を移した。
    • 今では多くの経験が蓄積されたが、この夢が実現可能なのか、それとも現在の混沌とした状況の中で、高速で、簡潔で、安定していて、セキュリティが強化されたソフトウェアへ向かっているのか、という問いが生じる。
  • Rust について言えば、Rust が C++ より 1 行あたりの脆弱性が 70% 少ないとしても、Rust で数百のパッケージを引き込み、コード行数が 10 倍になれば、脆弱性の絶対数はむしろ多くなるかもしれない。

  • 20 年前に、ソフトウェアが今日のようになると分かっていたなら、プログラマーになることを選ばなかっただろう。すべてが巨大化し、ハードウェアとソフトウェアは終わりのない競争を続けており、状況は良くも、楽にも、単純にもなっていない。

  • リンクをクリックした瞬間に CTA バナー、Google 広告、クッキーバナーが現れる。クッキーバナーを閉じたと思ったら、また別の Google 広告が出てきて、スクロールすると追いかけてくる。記事を読んでいるあいだに、少なくともさらに 3 つ以上の広告を見ることになる。

    • こんな状況では、その内容を真剣に受け止めるのは難しい。