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

Frontend Anxiety Disorder

Warning: This article is solely for expressing personal opinions and thoughts, and does not intend to criticize anyone in the industry.

The Maturing Frontend Field

I believe that the frontend field (referring to web development) is gradually maturing. With the central idea of component-based architecture and responsive mechanisms in frontend frameworks, along with their unique syntax, development practices, and philosophies, most use cases can be handled. The majority of improvements nowadays are focused on build tools, such as improving compilation speed and development experience through tools like esbuild, vite, and snowpack. Existing frameworks also introduce various optimizations, such as Vue 3's composition API and React's recently announced React Server Components, which reduce the cognitive burden on developers from different perspectives.

Another trend is the integration of browsers with other sensors and communication protocols, such as Web Serial API, Web Bluetooth, Web NFC, and more. With the help of browsers, users no longer need to install separate software or drivers, as all operations can be done on web pages. For these types of applications, the web page is merely a shell and does not necessarily require a visually appealing interface. It just needs to successfully connect or interact with devices.

Furthermore, CSS frameworks and component libraries have also matured, making it easier to create well-designed web pages. Many times, developers can simply choose a library they like and find convenient on GitHub, make some code adjustments, and that's it. I feel that the functionality provided by frontend frameworks nowadays has gradually surpassed the needs of most web pages. Not every web page has to be like Facebook, Netflix, or Airbnb.

Translator

I feel that writing code is somewhat similar to what translators do – translating requirements into code. It's better to add tests and accessibility features, but fundamentally, it's not much different from being a translator. This type of work will eventually be replaced by AI or assisted by AI and part-time workers to write code.

During a previous live stream, I used Copilot to write Vue3. Although the functionality in the live stream was relatively simple, so the reference value might not be very high, when I saw the code generated by Copilot, I still felt that its potential was worth looking forward to. When simple implementations like this can be assisted by AI, we can spend more time on other worthwhile things.

Here are a few examples of using Copilot, all of which are automatically generated by AI:

  • If I want to print the current variable value on Serial, I just need to declare a buffer, and Copilot will guess what I want to print based on the variables in this function.

Copilot guesses what I want to print based on the variables in this function

  • AVR Timer configuration: I need to check the datasheet to know which register to use, and Copilot tells me directly (although it's not what I wanted).

AVR Timer register

  • Based on the code snippet and function, Copilot guesses that I might want a stop function, and the implementation is very close to what I wanted.

pomodoro

I know some people may argue that we should always go back to basics. Yes, for software engineers with a solid foundation, these are just tools, and as long as we have the right mindset, we don't need to be afraid of change. But here comes the part that makes me uncomfortable.

Websites are Just Mediums

Many web applications are considered "mediums" or "carriers" in web development. For example, if I want to sell products in an online store, the website is a tool to help achieve that, but without actual products, the website won't generate any revenue. Perhaps developers can create a website with similar features to Netflix, but without filming, studios, post-production, and distribution channels, even if you create a Netflix-like website, there won't be any users willing to pay. PChome's website may not look appealing, but they have taken care of logistics tracking, warehouse management, payment processing, and more. These are things that cannot be achieved solely through a website. Even if a blog implements various fancy features, it won't attract readers without content.

I mention these examples to convey one thing – websites are often just mediums. For me, it is very challenging to create value solely through a website because its value comes from the services and products behind it.

There is no right or wrong in this matter. Since the birth of the Internet, websites have always played the role of a medium, and that has never changed. However, I personally feel concerned about being a medium. The reason is simple – I cannot create value directly. Once I had this thought, I found myself relying on an unstable foundation, feeling somewhat reluctant to settle. I agree that even in the position of a medium, there is always room for improvement. It doesn't mean that being a medium has no value. It's just that, as I mentioned before, I have difficulty overcoming this mental barrier.

Websites Rely on Extensive Abstraction

The essence of web development involves four main elements: HTML, CSS, JavaScript, and browsers. The development of HTML, CSS, and JavaScript depends on the implementation by various browser vendors.

For developers, as long as they understand the syntax and rules of HTML and CSS, and combine them with JavaScript, they can start writing web pages. The rest is left to the browser. How does HTML render on the screen? How is JavaScript compiled? What is the implementation behind JIT? How to make an HTTP request? How to encode and decode videos? It's okay not to know these things because the browser takes care of them. I want to emphasize once again that there is no right or wrong in understanding these things. It's just my personal struggle to overcome this barrier. However, I feel anxious about this level of abstraction in web development. I feel like I'm just enjoying the fruits of various technological advancements. I know that most technologies have some level of abstraction; otherwise, every developer would be writing machine language. But upon careful consideration, I realized that the level of abstraction in web development is truly astonishing.

Websites Sit at the Top of the Pyramid

Since websites rely on browsers, and HTML, CSS, and JavaScript standards are completely open, any evolution requires proposals, drafts, standardization, and finally browser implementation. Although Chrome often leads other browsers and even provides various experimental APIs, if it's platform-specific, it significantly limits the usage scenarios. For example, Bluetooth and NFC mentioned earlier have been around for years and are naturally available on other platforms. However, when developing for the web, developers have to wait for browser implementations to use them, which restricts technological advancements.

This feels like a situation where a new technology has been around for a while, and when the browser finally implements it, it is super exciting. But in reality, others have known about this technology for a long time and have already incorporated it into their services.

Summary

To summarize, the sources of my anxiety are:

  • Websites are mostly "mediums" and "carriers," making it challenging to provide value "directly."
  • The frontend field is maturing.
  • Most code is just translation and can be replaced by AI.
  • Websites rely on extensive abstraction.

Creating Value

I also mentioned a similar concept in my article Thinking About Value. A kitchen timer, for example, can still attract consumers if it has an appealing design, even if its functionality is simple (whether a low-profit, high-sales business model has value is not within the scope of discussion). Another example is the SwitchBot that I've been using recently. If you take a closer look at its operation, it's quite simple. It connects through Bluetooth with a smartphone app and integrates with various services, making it an excellent IoT application.

Step One

I hope to get closer to the position of value creator, and I have been moving in that direction for the past year. My first step is to study hardware or IoT applications. Nowadays, you can buy Arduino (Chinese-made), AVR chips, Raspberry Pi Pico, STM32, and other low-power microcontrollers at very affordable prices. With a breadboard, soldering iron, and electronic components, you can start experimenting.

To be honest, over the past year, I have become more and more confused. On the one hand, the intensity of development based on interests is still far from that of engineers who have been in the industry for a long time. On the other hand, when I looked at the salaries in related fields (embedded systems?), they were so low that I didn't want to switch careers. However, I think confusion can also be a good thing. At least, I still have the time and resources to study these things, and I can buy them at such low prices. I'm grateful for that.

When I think about it carefully, my only advantage is that I can apply almost everything I learned in vocational school. Registers, multiplexing, adders – these circuits have been tortured many times during vocational school. Transistors, amplifiers, oscillators, rectifiers, resonators – these were things I used for exams, and now I realize how valuable they are.

Step Two

My second step is to try to make the experimental circuits more like finished products. I learned basic 3D printing and created 3D models with Fusion360. I also tried to understand PCB fabrication. For example, to understand the principle of a capacitive keyboard, I designed the PCB myself and printed the final product.

Screenshot 2021-10-16 2.18.46 AM

IMG_1270

Later, I discovered an error in the circuit, so I had to pause the progress. But after understanding the entire process, I realized that it wasn't as difficult as I had imagined. It just required time and patience to familiarize myself with the entire workflow, like any other field. I still have other things to take care of at the moment, but once I have some free time, I can continue the project. Hopefully, one day, I'll see the final product.

Step Three: Software and Hardware Integration

As mentioned earlier, the development of web technologies is limited by browser implementations. Therefore, I have been exploring platforms with higher possibilities. Currently, I use a MacBook and an iPhone for daily development and personal use, so I started with iOS. In the video, I connected a Bluetooth module to my MacBook and synchronized the status of a Pomodoro timer with the computer. I can control the timer directly on the computer without needing a browser layer, just by using CoreBluetooth for connection.

Although the example in the video is very simple, and the circuit looks messy, the concept I want to convey is that software and hardware integration (or IoT integration) can further enhance value. Notifications from a Pomodoro timer, which are easily overlooked, can be solved through physical buzzers and LED displays. The same applies to other applications.

Step Four

The fourth step is to try to understand the Linux kernel. Although small-scale applications can be handled with microcontrollers like AVR, most embedded applications are based on the Linux kernel or require writing drivers to operate.

This step is still quite far for me.

Next Step

Honestly, I don't know what the next step should be. If you have any ideas, feel free to let me know on Twitter.

Looking at it this way, it seems that my definition of value is something "tangible"? At this stage, that's true. Compared to software, I believe these things are easier to create value with. However, applications like machine learning, AI, game development, data science, and video editing software, although they are software, can still generate value directly for me. Although I still enjoy writing UI interactions, it's time to explore other fields.

Prev

Asahi Linux - Running Linux on Apple M1

Next

Linear Output and Exponential Output

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

Buy me a coffee