七夕节:我爱代码,代码也爱我

七夕节,别人在约会,我在跟代码谈恋爱。今天把新版本的桌面客户端打包发给了第三个内测客户,盯着安装包进度条的时候突然意识到,我他妈在重复造轮子,而且是用最笨的方式。

团队里那帮小孩根本理解不了为什么要做桌面软件。他们说现在都是 SaaS,都是网页端,谁还下载 exe 啊。我懒得解释,直接把上个月的服务器账单摔桌上:你看看,就咱们这点用户量,AWS 的弹性伸缩费用已经快赶上两个程序员工资了。客户数据同步那个模块,网页端用 WebSocket 扛不住并发,稍微多点请求就卡成狗,用户投诉说数据丢了。桌面端呢?本地 SQLite 存一份,增量同步,断网了都能干活,网络恢复了自动追补。这是 SaaS 解决不了的问题,或者说,用 SaaS 解决的成本高到离谱。

软件定义硬件,听起来高大上,其实底层逻辑就一句话:让通用硬件通过软件变成专用设备。我们这破工具也是同理。客户要的不是一个能在浏览器里打开的页面,他们要的是一个“开箱即用、稳定如狗、数据在自己硬盘上”的生产力工具。网页端承载不了这个重量。浏览器沙箱限制、HTTP 无状态特性、前端内存泄漏……每一个都是坑。而桌面端,Win32 API 直接调,多线程随便开,本地文件读写零延迟。这才是“定义”的本质——用软件最大限度地榨取硬件的确定性性能。

但做桌面端真是掉层皮。光是兼容性测试就搞死人了。Win7、Win10 不同版本,还有他妈的各种 Ghost 系统、阉割版系统。.NET Framework 版本依赖能把人逼疯,用户电脑上没有对应版本,安装过程就报错,客服电话被打爆。后来换 Electron,好家伙,一个 Hello World 打包出来就 100 多 MB,用户骂我们软件是病毒吗这么大。还得自己搞差分更新,每次发版都要生成增量包,脚本写得想吐。

数据驱动迭代?说起来好听。我们第一个版本,埋点统计了用户所有按钮点击频率。结果发现,我们花一个月开发的“智能推荐”功能,点击率不到 0.3%。而用户最常用的,是右键菜单里一个“导出为 Excel”的功能,这功能当初是实习生随手加的,代码写得像屎一样,经常崩溃。现实就是啪啪打脸。后来我们就把迭代逻辑改了:每周拉一次用户操作热力图,哪个功能使用频次高,下个版本就优先重构哪个功能的稳定性和速度。至于那些看起来酷炫的“创新功能”,除非有明确的数据增长预期,否则一律往后排。

团队管理更是一地鸡毛。招来的前端死活不愿意学一点客户端知识,觉得那是“落后技术”。我跟他们吵:你知不知道很多行业软件、生产力工具,核心壁垒就是客户端的稳定性和性能?他们摇头,觉得我在画饼。最后没办法,客户端模块我自己顶上,用 C# 重写核心通信层,连续熬了三个通宵,血压飙升到不敢量。

有时候觉得真讽刺。互联网天天喊“云原生”、“一切皆服务”,但落到具体业务场景里,很多问题恰恰是“云”解决不了的。需要低延迟、高稳定、重数据安全的场景,桌面客户端这种“古老”的形态,反而成了最优解。这不是技术倒退,这是技术选型回归现实。软件定义硬件,定义的不是酷炫,是实实在在的、可控的生产力。

打包脚本又跑完了,这次没报错。发给客户,十分钟后收到回复:“这次版本挺顺滑。” 行了,值了。代码不会背叛你,你喂给它逻辑,它给你确定性回报。这比谈恋爱简单多了。

© 版权声明
THE END
喜欢就支持一下吧
点赞68 分享