ソフトウェアを破壊している私たちの現実とは
引用元:https://news.ycombinator.com/item?id=42983275
記事を読み終えた時、Dieter Ramsの“良いデザインの10原則”が思い浮かんだ。彼の原則はUNIXの哲学と似てるな。特にデザインは革新的で、役に立ち、長持ちするものだよ。
UNIXの哲学は、実際にはいくつかの良いデザイン原則と一致してるけど、実態はちょっと苦笑い。UNIXは簡素化を進めたけど、それが本当に良いかどうかは微妙だし、Linuxも複製しただけなんだよね。
UNIX-HATERSハンドブックに出てきそうな内容だね。古い時代の悪文句で、笑える。
UNIXハーターズハンドブックはUNIXを言葉だけで崇拝する人たちには理解されないだろう。UNIXには良い面もあったけど、批判的に見るべきだ。彼ら自身が新しいアプローチを開発してるのが全てを物語ってるよ。
UNIX Hater’s Handbookは、UNIXの哲学を否定するものではなく、実装の不整合や独自性への不満に関するものだよ。多くの人が哲学と実装を混同してるのも問題。
それは両方とも言えるね。FOSS界隈ではUNIXが崇拝されてるけど、それ以外の人はその哲学なんて気にしてないよ。
みんなが何かの根本的な哲学なんて気にしないよ。結果に関心があるだけだから、UNIXは今でも多くの人にとってちゃんと機能してる。
その本の内容の多くは今では古く、笑いのネタになってるよ。未来の革新についての予測も全然当たってないし。
実際に読んでみると、つい最近まで全然現役だった部分も多いけどね。特に設計やユーザビリティの観点は今でも有効。
ユーザビリティの問題は結局、使い慣れたものが好きってだけだと思ってる。色んなOS使ったけど、今はLinuxが自分に合ってる。結果的にLinuxが動作するのが一番大事だからね。
Win7が最高で、アップグレードしたくない気持ち分かるわ。更新もせず、特にテレメトリ含むやつは避けてるし。Linuxと戦う時間もないし、BeOSやOS/2みたいに良いOSが消えたのが残念。HaikuはBeOSの後継だけど寄付が少ないのが問題。
俺も同じような技術背景だけど、>”使い慣れたXだからYが嫌いだ”って意見には賛同できないな。UnixやCの使い勝手の問題は本物だし、プログラマー向けに作られてるから、それ以外の人には厳しいよ。GUIが shiny になっても、ユーザーフレンドリーさは変わらない。
>創設者がPlan 9やGoを作って進化したって言ってるけど、それは単に違うアプローチであって良くなったわけじゃないよ。Plan 9は分散コンピューティング向けに設計されて、UNIXの目標とは違ったけど、結局は普及しなかった。今もUNIX系が主流だし、それが「良いアプローチ」という考えにどう反映されるのかな。
’creat’って略し方はちょっとバカっぽいけど、そこが逆に居心地良いんだよね。逆の例もあるけど、あんな世界から抜け出して仕事変えたこともある。
これってUNIXの哲学っぽくないね。俺の印象では、UNIXはここの説明みたいだな。
この考え方は非公式に半分体系化されてる。
規則が一般的すぎて、何が“革新的”、何が“役立つ”かわからないから、あんまり役に立たない。残りの7と9は測定可能だけど、主観的な部分が多いよ。
>良いデザインは革新的だって言うけど、なんで?芸術的な観点でそう言ってるのかもしれないけど、工学的には見えないな。
革新的でなければ、単に車輪を作り直してるだけで、他の良いデザインを使った方が良いよ。
記事からの引用だけど、>“新しいプログラマーに‘車輪を再発明するな’って言ってるけど、車輪を再発明することで学ぶことができるし、新しい、違う車輪を作る最初のステップなんだ。”
車輪を再発明するのは素晴らしい学習体験だけど、いいソフトウェアにはならないよね。 Dieter Ramsは工業デザイナーだから、彼の10の原則はデザインについてで、ソフトウェアではないんだ。デザインの文脈では”良いデザイン”は何かしら革新があるべきだけど、エンジニアリングでは必ずしもそうじゃないし、むしろそうすべきじゃない場合も多い。 アート的デザインはiOS1〜6の不必要なスキューモーフィズムにつながる。 最近の、何がクリックできるのかを推測するデザインよりは、昔の方が大分良かったよ。 これって”どれか2つ選べ”ジョークの一種だと思うけど、だいたいの項目が相反してる気がする。 >良いデザインは正直であるべき この2つの言葉が対立しているって解釈してるの? ”ファイル”とは何を意味するのかも気になる。ある意味では、アクセスできるファイルディスクリプタのことかもしれないし、複数のファイルを持つべきハードウェアもある。 Ramsの原則は、当時のデザインの話が未熟だったので注目されただけで、今は単純で空虚な印象で、実際の意思決定には役立たない。まずお客からの様々な要望を考える方が大事だよ。 私の見解はね、”良いデザインはできるだけ少ないデザイン”ってこと。お客の自然な流れを作るべきで、無駄にオプションを足しすぎちゃダメ。まあ、哲学と同じで自分なりのフレームを見つけないと意味が薄れるんだよね。 でも、君が言ってる当然の結果が意図に基づいて批評されることってどれくらいある?ソフトウェアが本当に他の手段と比較されて、結局は面倒で時間がかかる方法になってたりすることも多いよね。 ソフトウェアを作るときに、他の効果的な方法と定期的に比較してるかっていうと、あんまりないよね。A/Bテストは細かいレベルではそれをやってるけど、全体的にはそうじゃないな。 実際、チームが廊下での使いやすさテストを真剣に受け止めることは少ないし、ユーザーにとっての品質を測るインセンティブもない気がする。いくつかのデザインスタジオは、多様なデバイスを持っていて、できるだけ多くのシナリオで良い感じにするよう努力してるけどね。 ほとんどの人がソフトウェアを書く理由を見失ってると思う。ビジネスのためにソフトウェアを書くのは、誰かがその会社にお金を払うためか、その会社がコストを削減するため。それに集中しないと意味がないよ。 ビジネスのためにソフトウェアを書く人ばかりじゃないよ。親のためにユーティリティ作ったり、子どものためにゲーム作ったり、自分や友達のためにツールを書くこともあるし、ただ楽しむために書くこともある。だから、ソフトウェアを書くことをビジネスゴールと結びつけるのは、ちょっと悲しいね。 Nimを学んだことがあるけど、すごく楽しい言語だよ。CやC++、Pythonは古い決定や混乱があって、学ぶのが大変だった。Nimに出会って楽しんで学べたのが良かった。 ソフトウェアを書くことと、外に出ることを対極として捉えているけど、実際にはその両方が違う楽しみを持つよね。自分は家族と過ごすことや趣味を大切にしてるし、ビジネスのためにだけ動いているわけではない。 コメントの親は、”外に出る”というのは必ずしも物理的に外に出ることではなく、幸せを感じられることを指してたはずだよね。それを理解しながら、貶してコメントするのはどうかと思う。 コンピュータの前にずっといることは、健康に良くないと思う。家族と過ごす時間を大切にすることだって大切だよ。 バーに行って飲むのは、健康に良くないと思う。 ビジネスのためにソフトウェアを書く理由は、効率的にワークフローを改善するためだよ。お客さんが満足しないと、お金をもらえないから、実際の利用者を意識している。 2000年代に働いてた会社では、サーバールームにたくさんのコンピュータがあって手作りのVB6ジョブスケジューラで仕事を管理してたんだ。今なら同じセッティングを一週間でyamlファイルとクラウドサービスで再現できる。サーバー構築が抽象化されてるし、逆互換性についてもWindowsがそうなってるのは、逆互換性を崇拝しすぎるせいだと思う。Appleは逆互換性を破って5種類のプロセッサに移行してるしね。 Windowsの混乱はリーダーシップがバラバラだから。逆互換性のおかげで生き延びてきたけど、なぜ数ヶ月ごとに新しいソフトをインストールしなきゃいけないのか、何の違いも感じないことが多いから不満だね。それが信頼の侵食に繋がってるよ。 90年代のMicrosoftの成功は珍しくないと思う。低価格で価値のある商品を作って、マーケティングも良かった。実行力があったから成功したんだ。ただ、OSXがMicrosoftの市場を奪ったのは意外かも。 WindowsではVisual StudioとC++がないと自動化が難しい。スクリプトやコマンドラインがしっかりしていないから、Linuxと比べると開発者には厳しい環境。OSXが成功するのは当然だよ。 アプリの更新はGoogleやAppleのエコシステムではクライアントサイドのコードを簡単にホットアップデートできない問題から来てるんじゃないかな。Webはサービスワーカーを使ってバージョン管理やキャッシングができるから逆互換性が問題にならないんだ。 それってセキュリティアップデートのことを言ってるの? 定期的な更新が心配な理由は?フロッピーディスクに積んでアップグレードするわけじゃないし、全て自動で更新されるよ。iOSだって、iOS 18は2018年以降のデバイスに対応してるしね。 更新があなたの作業を邪魔したり、時間を無駄にすることがあるからだよ。 どういうこと? 何かを書いたら1000年は動くようにすべきだと思う。何でできないの?それぞれのアプリが独自のCPUやメモリ、ストレージを持ってて、仕様が固定されてるシンプルなアーキテクチャを想像してみて。一緒にいる理由はあるのか? お前のニーズや技術は千年も変わらないのか?1996年みたいにダイヤルアップモデムで一日一回銀行に電話して残高を更新するのって2025年に意味あるの?1960年にトースターが洗濯機をコントロールし始めたらどうなってたんだ?でも、同じデバイスにMP3プレーヤー、ポータブルテレビ、カメラ、懐中電灯、GPS、PC、電話が入ってたらどうなるんだ? >”本当に1996年のようにダイヤルアップモデムで銀行に電話して残高を更新する意味はあるのか?” 今は単にウェブサイトに行くか、携帯アプリを使ったり、スマートウォッチに表示されるだけだね。 その全てが簿記を扱っていないから、Quickenが使われていたのが分かるだろ。 すごく高い基準だな、どんなソフトも満たさないよ。それに千年も使われてきたものはちゃんと手入れされてるだろうし。 うん、千年ってのは誇張だけど、過去25年のソフトの変遷にイライラして「5年後も使えるのか?」って考えながら新しいソフトを選んでる。答えが自信を持って「はい」じゃないことが多いのが怖い。 それは確かに。言語やフレームワークが無駄なクリーンアップや名前変更で壊すことが多すぎる。Pythonなんてマイナーリリースでも壊れる変更を平気でやるし、特に実行時に気が付くのが最悪なんだ。 >”後方互換性を崇拝するのがWindowsをめちゃくちゃにしてる理由” >”十年前に作ったバイナリがWindowsで動くのはすごく良い” Linuxはドライバーの標準がないから問題があるんだよ。 ドライバー標準がないのは、ドライバーをメインラインカーネルに入れるためなんだよね。標準化されると、低品質のバグだらけのドライバーがふえちゃうし、OEMは閉じたソースだから改善してくれない。だから、カーネルツリー外でメンテナンスするのが大変になる結果、もっと多くの会社がドライバーをカーネルに入れるようになる。そうすると、カーネルメンテナが更新を面倒見てくれるし、他の人もバグを直せるようになる。 この哲学がエンドユーザーにどう影響しているのか知りたい。Androidフォンのアップデートに関する問題はどうなってるの? ほとんどのPCハードのドライバーはカーネルツリーに入ってるから、そこはうまくいってるね。モバイル側ではもっと積極的にドライバーをカーネルツリーに入れる必要がある。例えば、十年間のサポートを義務づけるなどの権利を修理する法律があれば、コードを公開することへのインセンティブが強まるかも。GoogleもOEMに対して圧力をかけることができるかも。でも、カーネルを直接変更できないから間接的な方法に限られるのが問題だね。 この問題は、有名な記事の核心に触れてるね。個人のプロジェクトと企業レベルのものの対立。著者の意見に賛成なのは、個人のいじりをできるようにしておく必要があるってこと。だけど、誰かの好みを一般化するのは不可能だよ。 >Appleはバックワードコンパチビリティを壊すことで5つのプロセッサ間を移行できている。大半の人が失ったものを認識している。新しいものを保つのは素晴らしいけど、互換性を無視することで失われた価値は無視できないよ。 代替案は何だったの?65x02や68KやPPCに固執すること?x86に留まる選択肢もあったけど、ARMに移行するのが本当に悪いアイデアだったの? >代替案は何だったの?Rosettaのようなインタープリターを使うことができた。Appleの目標は、ソフトとハードの最新のものが一緒に機能すること。だからバックワードコンパチビリティとは相反する。古いソフトウェアを捨てることになったのは否定できない。 >インタープリターを含むのが代替案だった。インタープリターに終わりがないと、企業は怠慢になってソフトを更新しなくなる。古い互換性を維持するには誰かがそれを面倒見なきゃいけない。Windowsの古いAPIでも脆弱性が見つかってるし。 そのおかげで、バッテリーの持続時間がすごく良くなったよ。IntelのMacBook Proじゃ1時間半しか持たなかったけど、今はM4で1日以上使える。古いソフトウェアのサポートがなくても、全然気にしてないし、むしろこのトレードオフに満足してるよ。 私はほとんどの人と同じように、このトレードオフに満足しているよ。それでも、各移行で失われた価値が完全になくなったわけじゃないと思う。 Windowsは本当にクソだな。Linuxのゲームプラットフォームが動くのは、Linuxにとっての最良のAPIが…Win32だから。Linuxの方がプラットフォームレベルではもっと問題だよ。Windowsはプレゼンテーションレイヤーの面ではマシな方。 考え直すと、ユーザーとしてWindows自体は…そんなに悪くないんだよね。VSCodeとWSLを使った開発者としても…まあまあ。x86の使用は2025年には古臭く感じる。M2のMacBook AirやM3のMacBook Proと比べると、ただMacOSのエコシステム統合が優れているだけ。 >”x86の使用が古臭いのでは?”ユーザー視点では、それってあまり関係ないものじゃない?技術的に詳しいユーザーも、自分が使っているコンピュータがx86やARMだなんて知らないし、気にもしないと思うよ。ただ、M1/M2/M3/M4のバッテリーライフは優れているけど、ソフトウェアの選択肢が制限されるのもUXの一部。 Windowsのノートパソコンは本当にひどいね。これはx86対ARMの問題じゃないと思う。むしろそれは赤いヘリングだよ。 間違った。AndroidはLinuxのインストール数よりももっとゲームがある。 私はAndroidをLinuxと同一視しない。人によるかな。 >”私は他のLinuxデバイスも持ってるから、個人的にはその市場でもAndroidが浸透したら嬉しい。”Linus Torvalds。彼は何を知ってるんだろう? おそらく彼は知らないよ、だって彼は電話のOEMじゃないし。実際にはほとんどのAndroid電話は、純粋なアップストリームLinuxは動いてない。ひどい独自改造されたカーネルばかり。だから、Androidは技術的な狭い意味でのLinuxですらない。 32ビットを削除することで、どんな大きな利益があったの?Swiftで一つの文字列型を変換なしで使えるって本当?それは5回の移行で消えたことはないの? いろんな意見が真逆になってる気がするんだよね。互換性を維持しつつ複雑さは避けろって言われたり、新しい言語やフレームワークはダメだと言われたり。みんながコーディングをやめるしか解決方法が無い気がする。実際、そんな毎日あればいいかなと思う部分もあるけど、誇りには思えないよね。もっとコメントを表示(1)
>すべてはファイルだもっとコメントを表示(2)
今のIntuitのソフトはトランザクションを保存するのに5〜15秒かかり、たまにエラーが出て役に立たないメッセージが表示されて再実行しかない、UIの不具合があって、マッチしたトランザクションが消えないし、マッチを見つけることもできない。進歩したっていうのは笑えちゃうよ。今のはやっていて遅いし、全然安定してないんだから。
Windowsは糞だって言うけど、Linuxも同じくらいめちゃくちゃだよ。十年前に作ったバイナリがWindowsで動くのが信頼できるのはありがたいよ。
これって古いアーキテクチャのエミュレーターで解決されるべきじゃないかな?パフォーマンスコストはあるけど、新しいプロセッサがそれを補うかもしれない。もっとコメントを表示(3)