转自:https://www.oschina.net/translate/mastering-programming,有删改
文章目录
- 时间
- 学习
- 超越逻辑
- 风险
通过对优秀程序员的多年观察,我观察到了他们工作流程中的某些常见模式。通过对所职教的熟练程序员的几年,我观察到他们缺失这些模式。我已经看到了引入这些模式的不同之处。
(注:从内容看,是对工作模式和原则的思考,也不仅仅针对编程)
时间
- 分片。完成一个大项目时,将其分割为小的切片,并重新排列这些切片以适合你的场景。我总是可以更好地分割项目,我总能找到满足不同需求的切片的新排列。
- 一次做一件事。我们如此专注于效率,以致于我们在一次降低开销的尝试中减少了反馈周期的数目。这导致难以调试的情况,其预期成本大于我们所规避的周期开销。
- 使它运行,确保其正确,使其快速。(一次做一件事、分片和简单改动的例子)
- 简单的改动。当面对困难的改动时,首先要简化之(警告,这可能会很难),然后完成简单的改动。(例如分片、一次做一件事,集中,隔离)。分片的例子。
- 集中。 如果你需要改动多个元素,请首先重新排列代码,以便只需要在一个元素中进行改动。
- 隔离。如果你只需要改动元素的一部分,则提取该部分以使整个子元素发生改动。
- 基线测量。通过衡量当前世界状况来启动项目。这违背了我们开始修正错误的工程本能,但是当你测量基线时,你实际上会知道你是否在修正什么。
学习
- 表明想法。在运行代码之前,准确预测会发生什么。
- 实际猜测。当程序行为不正常时,在做出改变之前,准确地阐明你认为错误的部分。如果你有两个或更多猜想,请予以鉴别区分。
- 删除无关细节。在上报错误时,请找到最短的复现步骤。在隔离错误时,找到最短的测试用例。在使用新的API时,请从最基本的示例开始。“所有这些东西都可能不重要”,在它是错误的时候,这是一个代价很高的假设。
- 例如,查看手机上的一个bug,可使用curl复现
- 多维度。在不同维度间自由穿梭。也许这是一个设计问题,而不是测试中的问题。也许这是一个人的问题,而不是技术问题[骗人,这总是对的]。
超越逻辑
- 对称性。几乎相同的事物可以分为相同的部分和明显不同的部分。
- 美学。美丽是一种强大的攀登阶梯。它也是一种对蔑视的解放之阶梯(例如将一堆函数内联成一个巨大的集合)。
- 韵律。等到合适的时刻可以节省能量并避免混乱。在行动之时快速行动。
- 权衡。所有决策都需要权衡。知道决策取决于什么比知道今天选择哪个答案(或者昨天你所选择的答案)更重要。
风险
- 兴趣列表。当次要的想法出现时,请记录之并快速恢复继续工作。当你到达停靠点时重新阅读此列表。
- 喂养想法。想法就像受惊的小鸟。如果你吓跑了他们,他们就会停止造访。当你有一个想法,喂它一点吃的。尽可能快地证明其错误性,但需要基于数据而不是出于缺乏自尊。
- 80/15/5。将80%的时间花在低风险/合理报酬的工作上。将15%的时间花在相对高风险/高回报的工作上。无论收益如何,将5%的时间花在让你愉悦的事情上。教导下一代完成你80%的工作。当有人准备接任时,你的15%实验中的一个(或者,不那么频繁,你5%实验中的一个)将获得回报,并将成为你的新80%。重复这一过程。