Kalan's Blog

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

四零二曜日電子報上線啦!訂閱訂起來

Software Engineer / Taiwanese / Life in Fukuoka
This blog supports RSS feed (all content), you can click RSS icon or setup through third-party service. If there are special styles such as code syntax in the technical article, it is still recommended to browse to the original website for the best experience.

Current Theme light

我會把一些不成文的筆記或是最近的生活雜感放在短筆記,如果有興趣的話可以來看看唷!

Please notice that currenly most of posts are translated by AI automatically and might contain lots of confusion. I'll gradually translate the post ASAP

Software Engineering Devastation

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