Archive Vol · VOL-6948 · 人类不可替代
软件是人类少数永远可以不完成的产品
发现一个有趣的问题。 这两周我几乎倾尽全部的业余时间,尝试开发软件。 从最开始的每天迭代10版到现在争取每天迭代1版,目前已经迭代到了59版。 我发现,软件是人类少数永远可以不完成的产品。 举个例子,比如一本书出版了,基本就定型了。一栋楼盖
发现一个有趣的问题。
这两周我几乎倾尽全部的业余时间,尝试开发软件。
从最开始的每天迭代10版到现在争取每天迭代1版,目前已经迭代到了59版。
我发现,软件是人类少数永远可以不完成的产品。
举个例子,比如一本书出版了,基本就定型了。一栋楼盖完了,也不会每周更新一次。
一把椅子、一台冰箱、一辆汽车,交付的那一刻,通常意味着它已经完成。
但是,软件不是这样。
它可以永远停留在路上,永远在迭代。
今天修一个 Bug,明天增加一个功能,下个月重构一次底层架构,几年之后,它甚至可能已经完全变成另一种东西。
所以软件才需要版本号。其实我一直对软件的版本号也心存疑惑,只是没有追问。
为什么有的版本号里有“beta”,而有的没有?
再比如,1.4.2 这种看起来普通的数字,到底意味什么呢?有时候会按顺序,有时候又不按顺序。
以及为什么 2.0 不一定比 1.9 更强,等等问题。
其实,版本号不是分数。它记录的是变化。
软件开发里,最常见、最规范的一套版本命名方式,就是 Semantic Versioning,语义化版本,简称 SemVer。
标准格式:MAJOR.MINOR.PATCH
例如:1.4.2
MAJOR:是主版本号,发生不兼容的大改动时升级
MINOR:次版本号,新增功能但保持兼容时升级
PATCH:修订号,修 Bug、小优化、不新增重大能力时升级
Beta 一般表示:核心功能基本成立,可以给真实用户使用,但仍然可能有明显 Bug 或调整。
其实更有意思的是 1.0。
很多人会觉得,1.0 意味着终于做完了。
恰恰相反。对软件来说,1.0 通常只是第一次正式宣告。
这个东西已经完整到,可以让别人开始依赖它了。
所以 0.9 和 1.0 之间,并不是只差 0.1。
中间隔着的是一条承诺线。从这一刻开始,你不再只是做一个实验。
你开始维护兼容性,修复问题,照顾旧用户,为过去做出的设计负责。
软件最特别的地方就在这里。
它几乎没有真正意义上的完成。只有一次又一次发布。
版本号不仅仅在记录软件。
它记录的是一个产品如何一边被使用,一边继续长大,想一个不断生长的生命体。
也同样记录着开发者的每一个灵感、脑洞、彷徨、质疑以及莫名其妙的信念。
上一次我觉得自己真正活着的刹那是在今年元旦,我立志要卡半夜0点前发稿,无论写不写的出来,一定要发。
而最近这段时间,我每天都在职场人、开发者的角色里无缝切换,每天都有无数新的问题。但我活的很开心。