0

【译文】程序员不善于管理状态

 1 month ago
source link: https://www.techug.com/post/programmers-are-bad-at-managing-state/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【译文】程序员不善于管理状态

“你有没有试过把它关掉,然后再打开?”这是与技术支持相关的最熟悉的陈词滥调之一。但作为一个经常被家人请求帮助解决设备故障的人,我发现这是我最有效的工具之一。

这个解决方案很原始,但背后的逻辑却出人意料地深刻:程序员不善于管理状态。

作为一名程序员,我直观地了解这一事实。当我编写的程序第一次启动时,它处于最原始、最完美的状态。我精心设计的每个变量和数组都是我想要的样子。如果我有自动测试,那么这就是测试最多的状态。

只有在这个初始启动阶段之后,一切才开始变得糟糕起来。用户点击了什么?用户输入了一个字段!他们怎么能这样?他们怎么能用肮脏的小手玷污我美丽、完美的程序?

不知不觉中,用户不仅点击和键入了内容,还按下了浏览器的后退和前进按钮,以及刷新按钮,而且在几周未使用后又启动了程序,导致一些数据变得陈旧,或者他们安装了更新,现在他们在本地缓存了一些为旧版本程序设计的文件……就在这时,用户遇到了无数的错误、崩溃和冻结,而这些与软件本身的状态有关,最初的程序员并没有打算这样做。

这就是为什么 “关机再开机 “如此有效。你把软件放回到程序员预想的状态,然后 “噗 “的一声,一切都能恢复正常。不过,有时你还得更进一步运用这一逻辑。

最近,我妻子在启动 Steam 时遇到了问题。她已经有几年没有运行过这个软件了,于是她重新安装了它并点击了图标,但它拒绝加载。我上网查了一下,没有找到解决办法,于是凭直觉删除了 ~/Library/Application Support/Steam 文件夹(Steam 显然在该文件夹中存储数据),然后重新启动了它。噗!成功了

还有一次,她遇到了一个网络应用程序的问题,无论她刷新多少次,都会卡在加载条上。于是我打开了方便的 Chrome DevTools “应用程序 “选项卡,点击 “清除存储”,结果你知道吗?刷新并重新登录后,一切正常。

还有一次,她的 MacBook 在更新了 macOS 之后,拒绝在我们的惠普打印机上打印任何东西。在搜索了大约一个小时的各种网络论坛后,我发现我需要运行一个名为 HP Uninstaller 的程序来删除旧的惠普软件。噗!一切正常。

用一个专门的程序来清理自己程序的文件似乎有点可笑,就像承认失败一样,但实际上我认为这有点聪明。作为一名程序员,你不可能预知程序可能会出现的所有状态。你可以使用 XState 这样的工具来帮助可视化,但当你开始将可能的状态与缓存的配置文件相乘,再与软件的不同版本相乘,再与构建每个版本的不同团队相乘……要为每种结果制定计划就变得不可行了。(更不用说为每一种可能的状态编写测试了!)因此,与其让软件无法运行,不如承认自己人性的弱点,为用户提供一种从头开始的方法。

Mozilla 的“Refresh Firefox”功能是这一原则的另一个杰出应用。如果你有一段时间没有使用火狐浏览器了,那么它会弹出一个小提醒,让你把所有东西都清空,然后从头开始。这也许是避免用户流失到其他浏览器的好方法:我相信很多人从 A 浏览器转到 B 浏览器的原因是,第一天使用 B 浏览器就感觉快多了,这并不是因为 B 浏览器比 A 浏览器更优越,而是因为 B 浏览器不会被一大堆扩展、设置、历史记录、遗留更新文件等拖累。

如果你曾经从头开始重新安装 Windows 或安卓系统,并观察到一切都突然变得异常快速和轻便,那么你可能也见过这种现象。

我没有解决这个问题的办法。软件是复杂的,除非你有能力编写可以通过正式证明进行测试的代码,否则你不可能预测代码可能出现的每一种状态。因此,也许最好的办法就是提供某种逃生舱口,这样至少可以很容易地 “关闭并重新打开”。

本文文字及图片出自 Programmers are bad at managing state

O1CN011yG7Ug1OQdoEt5JL7_!!2768491700.jpg_640x640q80_.webp

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK