返回介绍

7.3 正确对待实践中的失败

发布于 2024-08-18 12:13:32 字数 2801 浏览 0 评论 0 收藏 0

错误是发现的大门。

——詹姆斯·乔伊斯(James Joyce),1882—1941,

爱尔兰作家和诗人


调试是生命的一部分——不仅仅与软件有关。律师必须调试法律,机械师调试汽车,精神科医生调试我们。

但是我们不必含糊其辞,我们不是在除掉那些在我们走神时悄悄进入系统的臭虫。调试意味着解决问题,这些问题一般是我们自己制造的。我们找出过失、错误、疏忽,然后改正。价值在于从错误中学习,派珀特总结得好:“错误有益于我们,因为它们让我们思索到底发生了什么,知道什么地方错了,然后通过理解,纠正它。”

失败是成功的关键——但不是任意的失败,你需要管理好失败。你需要有良好的学习环境来帮助你,这样你可以更容易地从失败和成功中积累并应用经验。

“我不知道”是一个良好开端。

“I don't know”is a good start.

不是所有的错误都来源于你做的事情,有一些来自于你没有做但本应该做的事情。例如,你阅读时碰到了单词“rebarbative”或者“horked”,你想知道这到底是什么意思。又或者你看到一种提及的新技术,而你从没听说过,又或者提到一位你所在领域的著名作者,而你从未读过他的书。查资料,网上搜,填空。“我不知道”是一个好答案,但不要就此止步。

我们往往想到的是失败或者无知消极的一面,认为要不惜一切代价避免。但是,开头把事情做好并不重要,重要的是最后把事情做好。在任何不平凡的工作中,你都会犯错误。

探索就是在陌生的环境中“玩”。你需要自由地探索才能学习。但是,这种探索应该相对没有风险,因为你肯定不想因担心害怕而止住探索的脚步。你需要探索,即使你不知道走向何处。同样,你需要自由地创造——不介意自己的创造没有成果。最后,你需要在日常实践中应用你学到的东西。一种高效有益的学习环境应该允许你安全地做三件事情:探索、创造和应用〔4〕

诀窍35

在你的环境中安全地探索、创造和应用。


建立探索环境

但是,你必须为你自己、你的团队、你的公司建立一个安全的实践环境才可以去探索、创造和应用想法。你不会希望你的心脏手术医生动手之前说:“我今天准备尝试用左手开刀,看看效果如何。”

这不安全,一名活生生的不知情的病人不适合做实验。

你可以在公司范围之外尝试,比如在家里做开源项目。这起码会减少产生负面结果的风险。但是仅仅这样不足以为你建立一个积极的学习环境。不论是在公司团队还是在黑夜里偷偷进行的独自实验,你都需要做到以下几点。

自由实验

很少有问题只存在唯一的最佳答案。你既可以用这种又可以用那种方式实现下一个功能,你会如何选择?都要!如果时间太紧张(什么时候不紧张?),至少每种方法要尝试做一个原型。这就是实验,你需要努力去做。在评估时间时,把它看作是“设计阶段”的一部分。你也需要确保这个实验不会对团队中的其他人造成不良影响。

能够原路返回稳定状态

安全性意味着,当实验出现问题时,你可以重新回到做出这些可怕改变以前的太平状态。你需要恢复到源代码之前的已知状态,然后再重新尝试。请记住,你必须回到上次正确的状态。

重现任意时刻的工作产品

回溯到源代码的前一个版本是远远不够的,你可能需要真正做到运行任意版本的程序(或相关工作产品)。你能运行这个程序去年或者上一个月的版本吗?

能够证实进展

最终,如果没有反馈,你一无所获。这项实验或者那项发明果真比其他的更有效吗?你如何知道的?项目在进步吗?这周实现的功能比上周多吗?你需要证实细粒度的进展——对你自己也对别人。

在软件开发领域,很容易搭建一个满足这些需求的基础设施。这就是我们所说的启动工具包(Starter Kit):版本控制、单元测试和项目自动化〔5〕

- 版本控制工具存储了你工作的所有文件的所有版本。不论你在写代码、文章、歌曲还是诗词,版本控制工具就像一个巨大的回退(Undo)按钮〔6〕。新发布的版本控制系统Git或者Mercurial都非常适合个人实验。

- 单元测试提供了一套细粒度的回归测试。你可以使用单元测试结果来比较不同的方案,把它们看做进展的重要指标〔7〕。不论做什么,我们都需要客观的反馈来衡量进展。这是我们的工作。

- 自动化把一切联系在一起,确保那些琐碎的机能都以一种可靠、可重复的方式运行〔8〕

Starter Kit帮助你自由实验,风险相对较小。

当然,你的团队实践和文化必须允许这种探索和创造的方法。对任何人而言,支持的环境既可能创造也可能毁灭学习。一行禅师提醒我们关注基本归因错误(参见第5章,调试你的大脑),环境往往比个人因素更重要。


当你种菜时,如果长得不好,你不会责怪菜。你会寻找其他理由。菜可能需要更多的肥料或者水,或者少晒太阳。你绝不会怪罪菜。

——一行禅师

实践单元

- 如果你的软件项目还没有安全搭建(版本控制、单元测试和自动化),那么你需要马上做好。放下书。我会等你回来。

- 你的个人学习项目需要同样的安全环境——不论是写代码、学习画画还是探索溶洞。准备好必备设施,培养出好习惯,让你的项目安全地探索。

- 你知道halcyon的意思吗?Anthropomorphism呢?听说过一行禅师吗?你查找过他们吗?如果没有,你不想简单地尝试一下吗?(在Mac机上,你可以经常Control-click或者right-click一个单词,然后查找字典或者使用Google,非常方便。)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文