三门语言

Nov 26, 2025

技术栈这件事,想了很久。

不是没走过弯路。React、Vue、Flutter、Electron,该碰的都碰过。每一个都像是正确答案——大厂背书,招聘市场认可,Stack Overflow 上永远有人回答你的问题。

可总觉得哪里不对。

企业的逻辑

后来想明白了。企业选技术,和我选技术,根本不是一回事。

他们要的是:招得到人,走了有人接,出问题能找到答案。React 不是因为最好才流行,是因为 Facebook 推,先发优势滚起来了,招聘池变大了,于是更多公司跟进,于是招聘池更大。

一个自我实现的预言。

jQuery 当年也稳。但 React 还是取代了它。说明企业也不是真的求稳,是求"安全"——大厂背书的那种安全,从众的那种安全。

独立开发者的逻辑

我不需要招人。不需要担心谁离职。不需要向任何人解释为什么用这个不用那个。

我需要的是快。

一个想法,能不能两周做出来。做出来不行,能不能再花两周换个方向。一年下来,能试几次,能错几次,能对几次。

这是独立开发者真正的风险计算。

Svelte

写 Svelte 的时候,代码少了三成。不是夸张,是真的少。

<script>
  let count = 0
</script>

<button on:click={() => count++}>
  {count}
</button>

没有 useState,没有 useEffect,没有 Virtual DOM。写完就是写完了。

有人说这是冒险。用一个"小众"框架,万一死了怎么办。

我算了一下。最坏情况,Svelte 真的没人维护了,我的代码还能跑。实在不行,重写一个项目也就几周。而省下的时间,一年能多做三个项目。

哪个风险更大?

Python 与 Flet

桌面应用这件事,绕了一大圈。

PyQt 太繁琐,一个按钮写二十行。Electron 太重,随便一个应用一百多兆。Tauri 很好,但我要调用的是 Python 生态——LLM、数据处理、科学计算。走 sidecar 的话,优势全没了。

Flet 是基于 Flutter 的 Python 框架。1.0 刚发布,API 稳定了。

import flet as ft

def main(page: ft.Page):
    page.add(ft.Text("Hello"), ft.ElevatedButton("Click"))

ft.app(main)

几行代码,Windows、macOS、Linux、Android、iOS 都能跑。

UI 定制性不如 Web 技术,只有 Material Design 那一套。但做工具类应用够了。工具卖的是功能,不是脸。

Swift 与 SwiftUI

复杂应用另说。

如果真要做精品,做那种用户愿意付高价的东西,原生体验是绕不过去的。iCloud 同步、系统级集成、丝滑的动画——这些 Flet 给不了。

SwiftUI 的学习曲线陡。但 Apple 用户付费意愿高。一个平台做精,好过三个平台做烂。

于是放弃了 Windows 和 Android 的复杂应用市场。听起来很可惜,但精力有限。

三门语言

最后定下来的技术栈,画成表格是这样的:

语言场景工具
JavaScriptWeb 优先SvelteKit + Honojs
Python跨平台工具Flet
SwiftApple 精品SwiftUI

三门语言,不多。

JS 打天下,能用 Web 解决的都用 Web。Python 做工具,调用生态最方便。Swift 做精品,只服务 Apple 用户。

各有边界,不重叠。

写得顺

以前写 React,总有种被架着走的感觉。状态要 useState,副作用要 useEffect,依赖数组忘了加就出 bug。代码能跑,但写的时候心里堵。

现在不一样。

Svelte 写起来像写 HTML,该响应的自己响应。Flet 写起来像搭积木,几行代码一个界面。SwiftUI 声明式的语法,想什么写什么,不用绕。

语法简单,心智负担小,写完一看,干干净净。

这种感觉很重要。写得顺,才写得久。

求职的事

有人会问,这套东西找工作怎么办。

确实,Svelte 不是主流,Honojs 更小众,Flet 招聘市场几乎没人要。

但 SwiftUI 是对的。JS 基础是通的。Svelte 到 React,两周能切换。真要找工作,花三个月准备,足够了。

不是说不重要。是说可以先不想。

独立开发这条路,走通了就不需要求职。走不通,三个月补课,也不是什么大事。

结尾

有时候想,技术选型这件事,和人生选择很像。

有人选大路,有人选小路。大路人多,小路快。

两种走法,两种活法。

走哪条,自己清楚就好。

https://shelchin.com/posts/feed.xml