如何打造一个健壮的软件?

答案可以很复杂,也可以很简单。

总结两点经验:

1)保证线程安全;

2)网络发生错误时自动重试;

这是从我的前老板那里学到的经验,为了避开搜索引擎的检索,下面称他为“八戒”。

1

八戒是一个“明星程序员”,传说中的“十倍速程序员”。

二十多岁时开发的软件卖给大厂,“拥有与年龄不相匹配的财富”,出国,买大 House;他在国外某头部大厂工作的时候,据说用一个月时间改掉了厂里“一年都没解决的bug”。

工作中,他经常多线程同时应对不同岗位随时抛过来的各种问题,对所有问题都能快速反应,能迅速提供逻辑严密的解决方案,对结果的好坏有预估。

不过怎么描述这个人都显得很空白,只有亲临智商被碾压的现场,才会真正明白聪明人和普通人的区别在哪里。

2

关于线程竞争问题,在2018年以前,市面上的 app 崩溃还很常见。当时,我们对读写同一个内存值这种偶发情况,并没有足够清醒的认识。

后来对此问题的措施是:

a)任务的发起和回调都在主线程发生;

b)给可能同时读写的值加递归锁。

这样就加强了程序的可靠性,把数据竞争控制在笼子里。经过处理之后,在很大程度上改善了一个软件的可用性。

3

关于错误重试的问题,在应用初起时,或者网络发生变化,外部环境各种不稳定时,常常有失败的网络请求发生。起初我们觉得,失败就失败呗,下一次请求就能拉到数据了。八戒说,不对,不要让用户去做这件事,要主动地自动去做。

八戒教导我们说:看似简单的结果,但背后是隐藏了复杂的逻辑得到的,不是因为表现简单,我们的程序也简单处理。Wechat为什么这么稳?肯定在业务底层做了很多看不见基础工作,最后才得到稳定的输出。

在前一次请求失败的情况下,依次延时1秒和3秒依次做了两次重试。经过自动重试处理之后,初次打开app拉不到数据的情况没有了。

4

总的来说,看起来没有使用什么特殊技术,无非是把内存管理好,自动重复发请求。

有用的思想往往这样,靠表面观察并不容易发现,要么是聪明人的灵光一闪,要么是从无数次挫败和捶打之后的反省中滋生。

八戒同学的人生第一桶金是靠写一个下载软件赚到的,九零年代有个电脑的人应该都用过,所以为什么让我们“为用户自动重试”,这应该他早期的开发经验,这可以说是来自祖国软件业“先驱”的宝贵经验了。

“高端的食材往往只需要最简单的烹饪方式”,简单朴素,但却能交付稳定健壮的结果。