カランのブログ

ソフトウェアエンジニア / 台湾人 / 福岡生活

今のモード ライト

原文:Software disenchantment

インターネットでこの記事を見つけました。ソフトウェアエンジニアなら一読することをおすすめします。一部の視点が過激かもしれませんが、大体同意できます。

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

冒頭で、車や飛行機、建築などの分野が現在まで発展し、一定のパターンが存在していることを指摘しています。飛行機の翼や形状の設計、機能などはほとんど同じであり、その成果も明らかです。

最近私も考えているのは、なぜこれらの分野ではうまくいくのに、ソフトウェア開発では逆に悪化しているように思えるのかということです。MacBook ProやiMacでnpm installを実行するたびに、ファンがフルスピードで回転する音が聞こえます。ウェブ開発は不安定な基盤上に構築されているように思え、フロントエンドのフレームワークや状態管理ツールの数も数え切れないほどあります。

しかし、ソフトウェア開発と飛行機などの例を比較するのは公平ではないかもしれません。飛行機(特に旅客機)の設計目的は、乗客をA地点からB地点に迅速かつ安全に輸送することです。家は人々に安定した耐久性のある避難所を提供するために作られており、これらの目的は明確であり、時代の進化によって異なる目的が生まれることはありません。

しかし、ソフトウェアはどうでしょうか?迅速なイテレーションのため、より多くの可能性が生まれます。ウェブページの最初の目的は情報の閲覧かもしれませんが、今ではビデオの視聴、音楽の再生、動的な投稿、画像のアップロード、ゲームのプレイなど、ほとんど何でもできるようになりました。ハードウェアのアップグレードと技術の進歩により、単一のブラウザでさまざまなことができるようになりました。

また、これはJavaScriptの罪でもあります。非常に短期間で作られたプログラミング言語が、今では世界で最も人気のある言語になったことは、おそらく作者自身も予想していなかったでしょう。

JavaをJavaScriptで揶揄するのは公平ではないと思います。Javaには独自のVM、ランタイム、JDKなどがあります。ウェブ開発では、私たちはさまざまなブラウザに依存せざるを得ず、それがBabelやWebpackなどのツールの登場をもたらしました。

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

コンピュータのユーザーとして、私たちはシンプルなソフトウェアが必要なのかもしれません。ユーザーが必要な時に、簡素化されたブラウザ(履歴やダウンロード、デベロッパーツールのない)をいつでも使えるようにする必要があります。

作者は現代のウェブが非常に重くなっていることにも不満を述べており、Gmailですらスムーズにスクロールできない状態になっていると指摘しています。Slackのアプリはリソースの怪物です。この点について、私自身も疑問に思っています。なぜこれほど多くのリソースが消費されるのでしょうか?Electronを使用していることはわかっていますが、なぜElectronを使用するとリソース消費が高くなるのでしょうか?

私はElectronがGUIにもたらす可能性に肯定的な態度を持っています。リソースを多く消費するという批判もありますが、これは改善すべき問題だと思います。しかし、SlackやVS Codeを見てみると、Electronの下で非常に成功しているケースもあります。

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

私自身もMacBook Proを使っていますが、低スペックのユーザーも多いはずです。自分がより良い設備を使っているからといって、すべてのユーザーが同じ設備を使っていると楽観的に仮定するべきではありませんし、ユーザーがパフォーマンスの低いデバイスを使っていることを非難するべきではありません。SlackやVS Codeが消費するリソースを見ると、私自身も驚いています。

作者が指摘した「それに取り残されてしまう」という問題には非常に共感します。ますます多くのエンジニアが、すべてがどのように実装されているかをあまり気にしなくなっています。遅い?問題ありません、ビジネス要件はすでに満たされています。動作の仕組みがわからない?問題ありません、パッケージを使えば済みます。これらの妥協的な態度は、プロのエンジニアが持つべき心構えではありません。これはエンジニアリングではなく、怠惰です。

最近、私もこれについてますます理解しています。現在は十分な数のツールがあり、あまり理解せずにまずまずの製品(ウェブサイト)を構築するのに役立ちますが、詳細や原理に対する要求はますます少なくなっています。これは私にとって良い傾向ではありませんので、自分自身に原理を理解するように常に警戒する必要があります(ただし、オペレーティングシステムは本当に難しいですが)。

今年は基礎に戻ることを決めました。コンピュータの領域の「オペレーティングシステム、コンパイラ、グラフィックス」の三大ロマンスに戻ります。グラフィックスは2017年にWebGLを学んだことですでに一度復習しましたので、残りの2つ、オペレーティングシステムとコンパイラが今年の最大の課題になるでしょう。

次の記事

2019 レビュー

前の記事

ライティングテスト(フロントエンド)に関するいくつかのアイデア

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee

作者

Kalan 頭像照片,在淡水拍攝,淺藍背景

愷開 | Kalan

Kalan です。台湾出身で、2019年に日本へ転職し、福岡に住んでいます。フロントエンド開発に精通しているだけでなく、IoT、アプリ開発、バックエンド、電子工作などの分野にも挑戦しています。 最近、エレキギターを始めました。ブログを通じて、より多くの人と交流できればと思っています。気軽に絡んでください