脚本或命令行工具
解决你自己的问题;你是唯一的用户
$0 · 极低
△ 别人也想用,但他们不会打开终端
图集 · L0–L3
桌面软件拿得到网页永远拿不到的东西:文件系统、系统音频、显卡、常驻后台运行。代价是你要把一个程序装进你从没见过的电脑,还要越过一道道不是你写的安全警告。这套图纸画出桌面程序可能的形态,以及每升一级要加上什么。
设计哲学
桌面软件是一个要在别人电脑上住好几年的程序。它被托付了别人的文件和系统,必须先赢得信任,再一直守住它。
最好的桌面工具,最初都是作者为了治自己每天的烦心事写的。真实的问题每天都会给你一个真实的测试用例。
空闲就是空闲:不偷偷吃 CPU,不在后台下载,不往你说过之外的地方写文件。风扇一转,用户就会察觉。
装不上的安装包、吓人的警告、永远收不到的更新,这些都是产品的 bug,不是产品之外的杂活。
在解决自己的问题?先写脚本,再给它套一个小窗口。只有当陌生人也要运行它时,才投入安装包、代码签名和自动更新。
你有一件每天都会撞上的烦心事,想知道一个程序能不能把它消灭。唯一的用户是你,所以终端就是很好的界面。
一个脚本,手动运行或者开机时运行。它在一个固定的文件夹里读写文件,并打印自己做了什么。没有窗口,没有安装包。
Δ 本级新增
对应地图上的形态: 脚本或命令行工具
选难点部分(音频、文件、图像)库最好的那门语言,而不是界面框架最漂亮的那门。界面可以以后再加,核心能力装不出来。
别人也想用你的工具,但他们不会、或不愿意打开终端。他们的电脑设置不同、语言不同,也没有你装过的任何库。
脚本加上窗口,和它的运行时一起打包成双击就能安装的东西。设置文件搬到操作系统标准的用户目录里;程序只在某个功能真的需要时,才申请系统权限。
Δ 本级新增
对应地图上的形态: 原生界面工具包(Qt、WPF、SwiftUI) · 桌面外壳里的网页界面(Tauri、Electron)
按核心需求选界面方案:要音频、低延迟、低内存就用原生工具包;界面本身就是产品时用网页外壳。测打包后的版本,不要只测开发环境里跑的那个,两者出错的方式不一样。
软件开始卖钱,或者要处理录音、文档、账号。没签名的版本会在安全警告那一步丢掉销量;一次弄丢用户文件的崩溃,会丢掉他的信任。
在 CI 里给构建签名,证书存在仓库之外。一个小的在线服务负责校验授权、提供更新源;断网时程序在宽限期内照常可用。崩溃报告只有在用户同意后才发出去,而且不带文件内容。
Δ 本级新增
对应地图上的形态: 桌面应用 + 在线服务
这一级你手上最值钱的文件是签名证书:不进仓库,不进任何日志。服务器宕机时,授权校验绝不能把付了钱的用户锁在门外。
其他值得了解的工具 · 本站未验证
几千份安装在 Windows、macOS、也许还有 Linux 上跑着不同版本,芯片既有 Intel 也有 ARM。一次坏更新会同时弄坏很多台电脑,其中一些是公司的。
每次发布都由 CI 为每种操作系统和芯片架构分别构建并签名。更新分通道推送:先测试版,再按比例推到稳定版;坏版本可以从更新源撤下,让机器不再收到它。
Δ 本级新增
对应地图上的形态: 桌面应用 + 在线服务 · 桌面外壳里的网页界面(Tauri、Electron)
构建与签名全部自动化;到了这一级,任何手工发布步骤,总有一天会被漏掉。
这件事所有可能的搭法。它们大半的意义,是让你知道哪些现在还不该碰。
解决你自己的问题;你是唯一的用户
$0 · 极低
△ 别人也想用,但他们不会打开终端
需要深度系统访问、低延迟、低内存(Subtitle-Windows 就是这种形态)
$0(注意工具包授权) · 中
△ 需要一个团队在好几个操作系统上出同一个应用
一套网页代码跨平台;界面为主的应用
$0 · 低–中
△ 内存占用或启动速度开始被抱怨,或者需要外壳没开放的系统接口
授权、同步、账号或云端处理
$5–100/月 + 签名证书 · 中–高
△ 几千份安装分布在不同版本上,需要分阶段的更新通道
每个概念一句人话 + 一个比喻。点击任何工具模块,也有同款科普。