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

ソフトウェア危機

  • ソフトウェア危機とは?

    • 1968年の最初のNATOソフトウェア工学会議で「ソフトウェア危機」という用語が初めて使われた
    • これらの会議は、プログラミング実践を定義し体系化しようとする初期の取り組みの一つだった
    • 1969年のアポロ11号打ち上げと同時期に、最後のNATOソフトウェア工学会議が開催された
  • ソフトウェア危機の原因

    • 1972年のチューリング賞受賞者 Edsger Dijkstra は、ソフトウェア危機の原因をハードウェアの複雑さと速度の増大で説明した
    • 「機械がより強力になるほど、プログラミングの問題も大きくなる」 - Edsger Dijkstra
  • 現在のソフトウェア危機

    • 現在では、ソフトウェア危機についてあまり語られなくなっている
    • 新しい言語や組織化の方法の発展によって、問題は解決されたと考えられている
    • しかしそれは、本当の安堵ではなく、敗北と受容の感覚から来ているのかもしれない
  • 抽象化の問題

    • ソフトウェア危機を解決するためのさまざまな努力があったが、その多くは「抽象化」によって問題を解決しようとしている
    • 抽象化は、性能という代償を払いながら、ある程度の独立性を提供する
    • パーソナルコンピュータの商業化以降、抽象化は基本的な思考様式になった
  • 開発者とユーザーの間の隔たり

    • ソフトウェア危機は、ソフトウェアを作る人だけでなく、それを使う人にも影響を与える
    • ユーザーは、作者が提供するもの以外をほとんど制御できない
    • Alan Perlis: 「良いアイデアがあるなら、責任を負う覚悟が必要だ」
  • 責任の不在

    • ソフトウェアの作り手は、自分が作った道具に対する責任から切り離されている
    • 商業化が進むにつれて、この傾向は強まった
    • 抽象化は、難しい思考を避けるための道具として使われている
  • 解決策

    • ソフトウェア危機の解決策は、より制約の強いプラットフォームへ回帰することではなく、抽象化レイヤーの数を制限し、情報の保存を要求することにある
    • プログラミングモデル、ユーザーインターフェース、基盤ハードウェアは、浅く構成可能であるべきだ
    • 道具のユーザーに権限を与えるべきだ
  • 現在の動き

    • Handmade、Permacomputing、レトロコンピューティングなど、ソフトウェア危機への認識を高めるための動きがある
    • こうしたカウンターカルチャー的な運動は健全な兆候であり、状況が良くなりうることを示している

GN⁺のまとめ

  • ソフトウェア危機は、ハードウェアの複雑さと速度の増大によって生じた問題である
  • 現在は抽象化によって問題を解決しようとしているが、それは性能という代償を伴う
  • ソフトウェアの作り手は、自分が作った道具への責任から切り離されており、これは商業化によって強化されている
  • 解決策は、抽象化レイヤーの数を制限し、情報の保存を要求することにある
  • Handmade、Permacomputing などの動きは、ソフトウェア危機への認識を高めている

1件のコメント

 
GN⁺ 2024-07-07
Hacker Newsの意見
  • 著者の意見

    • 抽象化そのものではなく、無制限な適用に反対している
    • より制限されたプラットフォームへの回帰を解決策だとは主張していない
    • ユーザーが「より技術的」になるべきだとは主張していない
    • ソフトウェア危機を理解するには、「プラットフォーム習熟度」と「成長/リリース周期」の曲線を理解する必要がある
    • この記事はクリックベイトではなく、開発者としての状況を反映したものである
    • 問題解決の一部を提示したいと考えており、続編を計画中である
  • ソフトウェア危機

    • プロジェクトの予算超過、納期超過、非効率なソフトウェア、低品質、要件未達、保守の困難さ、ソフトウェア未提供などの問題を含む
    • 成功したソフトウェアは見過ごされ、失敗や欠陥だけが注目される
    • コンピューターがデスクトップに到達するまでに数百の抽象化を経ており、これは世界中で毎日何十億回も起きている
  • ソフトウェア開発とリーダーシップ

    • 自動車会社のリーダーシップは技術的知識を重視するが、アジャイルなソフトウェア開発では技術的能力は下層で止まってしまう
    • ソフトウェア開発者は哲学的な考慮なしにチケット単位で作業し、リーダーシップの役割へ昇進しない
    • ソフトウェア危機への認識は趣味の活動に限定される可能性が高い
  • 抽象化の必要性

    • 抽象化は不可欠な道具であり、悪い抽象化や多すぎる抽象化が問題である
    • ソフトウェア開発はより簡単になり、ドキュメント化もよく進んでいる
  • ツールと情報

    • 適切なツールを知っていれば、ソフトウェア開発は非常に簡単である
    • ほとんどの人が知っているツールは良くなく、資本の影響が大きい
    • たとえば、サーバーレス環境で複雑なマーケットプレイスアプリを3時間で構築する動画を作ったが、再生回数は少なかった
  • GUIと組み合わせ可能性

    • UNIXツールを使うときは、浅く組み合わせ可能な体験をする
    • GUIは互いに通信せず、組み合わせ可能でもない
    • GUIとシェルパイプラインを結合したツールを実験中である
  • ソフトウェアの重要性

    • ほとんどのソフトウェアは致命的ではなく、品質が低くても大きな問題にならない
    • ほとんどのソフトウェア開発者は、シリコンバレーのような動機づけなしに作業している
  • モジュール性と抽象化

    • インターネットのような複雑なシステムは、層化された抽象化によって維持されている
    • ソフトウェアツールは70年代以降大きく改善されている
    • たとえば、VSCodeのcopilotを使えば、API全体を自動補完できる
  • プロジェクト管理の危機

    • ソフトウェア危機というより、プロジェクト管理の危機が存在する
    • 計画担当者と実行担当者の間に隔たりがある
    • ソフトウェア開発の商業化により、さまざまなレベルの人々が参加できる
    • これは外食産業に似ており、レストラン危機とは言わない