ソフトウェアエンジニアリングの荒廃

作成者:カランカラン
💡

質問やフィードバックがありましたら、フォームからお願いします

本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください

原文:Software disenchantment

ネットでこの文章を見かけました。私はすべてのソフトウェアエンジニアにこの文章を読むことをお勧めします。いくつかの意見は過激すぎるとは思いますが、全体的には同意しています。

なぜソフトウェアは「遅い」のか?

冒頭で著者は、車、飛行機、建築といった分野が現在までに確立されたモデルがあると述べています。飛行機の翼や形状設計、機能などはほぼ同じであり、その成果は目に見える形で表れています。

私も最近考えています。なぜこれらの分野は進化しているのに、ソフトウェア開発はどんどん悪化しているように思えるのでしょうか?毎回、MacBook ProやiMacでnpm installを実行すると、ファンが全速で回る音がします。ウェブ開発は、まるで不安定な砂の塔の上に立っているかのようで、フロントエンドで使えるフレームワークやステート管理ツールは数え切れないほど存在します。

ただし、ソフトウェア開発を飛行機のような例と比較するのは少し不公平かもしれません。飛行機(特に旅客機)の設計目的は、乗客を迅速かつ安全にA地点からB地点へ運ぶことです。また、家は人々に安定かつ耐久性のある避難所を提供するために設計されています。これらの目的は非常に明確であり、時代の進化によって変わることは少ないでしょう。

しかし、ソフトウェアはどうでしょうか?迅速なイテレーションのため、可能性が増えています。ウェブページの最初の目的は情報を閲覧することだったかもしれませんが、今では動画視聴、音楽再生、投稿、画像アップロード、ゲームプレイなど、さまざまなことが一つのブラウザで可能になっています。ハードウェアのアップグレードと技術の進歩のおかげで、私たちは一つのブラウザで様々なことができるのです。

また、JavaScriptの「原罪」にも言及するべきでしょう。短期間で作られたプログラミング言語が、今では世界で最も人気のある言語に成長したのは、著者自身も予想外だったかもしれません。

Javaを引き合いに出してJavaScriptを揶揄するのは、少し不公平だと思います。Javaには独自のVM、Runtime、JDKなどがあり、ウェブ開発では私たちはさまざまなブラウザに依存せざるを得ません。それがBabelやWebpackといったツールの出現をもたらしました。

この観点から見ると、「ハードウェアが速くなったがソフトウェアが遅くなった」と一概に言うことはできません。20年前にブラウザだけであれほど多くのことができたでしょうか?20年前のソフトウェアは現在のソフトウェアと同じ機能性や複雑さを持っていたのでしょうか?

コンピュータユーザーとして、私たちはシンプルなソフトウェアを求め続けているようです。ユーザーが必要なときに、履歴やダウンロードファイル、devtoolのない簡略化されたブラウザを使えるようにすることが重要です。

著者はまた、現代のウェブが非常に重くなっていることに不満を述べています。Gmailがスムーズにスクロールできないなど、Slackのアプリは資源の怪物のようだと。私自身も、なぜリソース消費がそんなに高いのか気になります。Electronを使っていることは理解していますが、なぜElectronを使うとリソース消費がそんなに増えるのでしょうか?

私はElectronがGUIにもたらす可能性に対して前向きですが、多くの人がElectronが非常にリソースを消費することに不満を持っています。これは今後改善されるべきことだと思いますが、SlackやVS Codeのように、Electronで成功したケースもあります。

著者はテキストエディタに話を移し、42年前に開発されたEmacsの入力遅延が現代のテキストエディタよりも少ないと述べています。3Dゲームは16ms以内に何百万ものグラフィックをレンダリングできるのに、なぜシンプルなテキスト編集はできないのでしょうか?

現在使用しているノートパソコンはMacBook Proですが、より低スペックなユーザーも多くいるはずです。自分がより良い機材を使っているからといって、すべてのユーザーも同じように使っていると楽観視すべきではありませんし、性能の劣るデバイスを使うユーザーを責めるべきでもありません。この点に関しては疑う余地がありません。SlackやVS Codeが占有するリソースを見て、私自身も驚きました。

著者が挙げたもう一つの問題、「We’re stuck with it」には非常に同意します。ますます多くのエンジニアが、実装方法にあまり関心を持っていません。「遅い?問題ない。業務要件は満たされているから。」どう動作するか理解していない?問題ない、パッケージを使うだけでいい。こうした妥協的な態度は、プロのエンジニアにはふさわしくありません。これはエンジニアリングとは呼べず、単なる怠惰です。

最近、この点をますます実感しています。現在は十分なツールがあり、理解が不十分な状態でもそれなりの製品(ウェブサイト)を構築できますが、細部への要求や原理への理解が次第に薄れているのは良い現象とは言えません。私は常にその背後にある原理を理解することを心がけています。大半のケースでは難しくはないはずですが(ただし、オペレーティングシステムは本当に難しいです QQ)。

今年は基礎に立ち返り、プログラミング分野の三大ロマン、「オペレーティングシステム、コンパイラ、グラフィックス」に取り組むつもりです。2017年にWebGLを学んだ際にグラフィックスはすでに一度挫折しましたので、残りの二つの分野、オペレーティングシステムとコンパイラが今年の最大の課題になるでしょう。

この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨

Buy me a coffee