Kalan's Blog

Software Engineer / Taiwanese / Life in Fukuoka

Current Theme light

Original: Software disenchantment

I came across this article online and I recommend every software engineer to take a look at it. Although some of the viewpoints are quite radical, I generally agree with them.

Why is software so "slow"?

In the beginning, the author mentions that fields like automotive, aviation, and architecture have already established certain patterns. The design of airplane wings, shapes, and functionalities are almost standardized, and the results are evident.

Lately, I've been pondering why these fields can achieve such results, but in software development, things seem to be getting worse. Every time I run npm install on my MacBook Pro or iMac, I can hear the fan spinning at full speed. Web development feels like building on an unstable foundation, with countless frameworks and state management tools for frontend development.

However, comparing software development to airplanes and similar examples may not be entirely fair. The purpose of designing airplanes (particularly commercial planes) is to transport passengers quickly and safely from point A to point B. Houses are built to provide people with stable and durable shelters. Both have clear and distinct purposes that are not subject to the same evolution as software.

But what about software? Due to rapid iteration, it leads to more possibilities. The initial purpose of a webpage might have been to browse information, but now it encompasses watching videos, listening to music, posting updates, uploading images, and even playing games. With hardware advancements and technological progress, we can accomplish various tasks using just a single browser.

Speaking of which, we can attribute some blame to JavaScript, the original sin. It is a programming language that was created in a relatively short period and has now become the most popular language worldwide, even surprising its own creators.

Mocking JavaScript with Java seems unfair to me. Java has its own VM, runtime, JDK, and so on. In web development, we rely on a plethora of browsers, which gave rise to tools like Babel and Webpack.

From this perspective, it seems unjust to say, "Hardware is getting faster, but software is getting slower." Could we have achieved the same level of functionality 20 years ago with just a browser? Was software 20 years ago as complex and feature-rich as it is now?

As computer users, it seems we still need a minimalist software that allows users to use a simplified browser (without history, file downloads, dev tools) whenever they want.

The author also complains about the bloated nature of modern webpages. Even a simple Gmail interface struggles to scroll smoothly, and the Slack app is a resource monster. From this standpoint, I'm also curious why these applications consume so many resources. I know they are built with Electron, but why does using Electron lead to such high resource consumption?

I personally have a positive attitude towards Electron and the possibilities it brings to GUI. Although many complain about Electron's resource consumption, I believe it is an area for improvement in the future. Just look at Slack and VS Code; they are successful examples built on Electron.

The author continues to complain, this time about text editors. They mention that Emacs, developed 42 years ago, has lower input latency than modern text editors. 3D games can render millions of graphics within 16ms, so why can't simple text editing achieve the same performance?

Although I currently use a MacBook Pro, I know there are many users with lower-end devices. We shouldn't assume that all users have high-performance equipment, nor should we blame users for using devices with poorer performance. It's undeniable that when I see the resource consumption of Slack and VS Code, I'm also taken aback.

Another problem the author mentions is that "We're stuck with it." I completely agree with this statement. More and more engineers don't care about how things are implemented. Is it slow? No problem, as long as it meets the business requirements. Don't understand how it works? No problem, just add another package. This lackadaisical attitude is not what a professional engineer should possess. It's not engineering; it's laziness.

Lately, I've come to realize this more and more. Although there are plenty of tools available now that can help you build a decent product (website) even with limited understanding, it's not a good trend for me. So, I constantly remind myself to understand the underlying principles and pay attention to details. Most of the time, it's not difficult (although operating systems can be challenging, QQ).

This year, I plan to return to the basics, the three romantic fields of computer science: "Operating Systems, Compilers, and Graphics." I already had a taste of graphics with WebGL in 2017, so the remaining two areas, operating systems, and compilers, will be my main focus this year.

Prev

2019 Review

Next

Some ideas on writing tests (front-end)

If you found this article helpful, please consider buy me a drink ☕️ It'll make my ordinary day shine✨

Buy me a coffee

作者

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

愷開 | Kalan

Hi, I'm Kai. I'm Taiwanese and moved to Japan in 2019 for work. Currently settled in Fukuoka. In addition to being familiar with frontend development, I also have experience in IoT, app development, backend, and electronics. Recently, I started playing electric guitar! Feel free to contact me via email for consultations or collaborations or music! I hope to connect with more people through this blog.