如何精通编程?Kent Beck 给你支招

英文:Kent Beck

译者:伯乐在线 - Kenneth

链接:http://blog.jobbole.com/102515/

这几年来我观察了很多大师级的程序员, 发现他们的工作流程中有一些共通的模式。几年来在辅导很多有经验的资深码工(程序员)时, 却没有观察到这些模式。在这个过程中,我见到这些模式的引入能带来很大的差别。

 

接下来谈谈高效的程序员应该如何好好运用他们生活在地球上 30 亿秒的时间。(译注:约等于 95 年)

 

这裡的主旨是规模化你的大脑。工匠通过一次性解决越多问题来解决更庞大的问题;大师则每次尽量解决少量的问题,来解决更庞大的问题。 这其中的智慧是,如何将大问题细分成数个小问题,使得整合之后将会比一次解决全部的问题还要来得轻鬆。

 

时间


细分

 

将一个大项目细分成数个小切片,并且重新排列以符合你的现况。我随时可以将这些项目再切得更细小,而且还能重新组合来面对不同的需求。

 

一次只做一件事

 

由于我们相当注重效率,因此我们总是试图减少回馈周期的次数,以避免重新检视的无谓开销。但这往往反而导致了侦错难度的提升,其付出的成本常大于原本想避免回馈周期所产生的开销。

 

让它动起来,正确且快速动起来

 

(「细分」、「一次只做一件事」、「简化更动」的例子)

简化变动

 

当我们面对困难的变动,首先要进行简化 (警告, 这可能很难),然后再实施简化后的变动。 (例如:「切割」、「一次只做一件事」、「集中」、「离析」等原则) 这是「切割」原则的一个例子。

 

集中/专注

 

如果你需要一次修改很多元件,先重新整理代码(译注:或重构),使得只需要修改一个元件。

 

剥离


如果你只需要改变一个元件的一部份, 把这部分抽离出来使得只要修改这个子元件。

 

基准测量

 

在项目开始时先考量真实环境的状态。这违背工程师马上动手修东西的本能,但是有了基准线之后,你才知道你真的有把东西修好。

学习

 

表明意图

 

在执行程序前, 先大胆的预测将会发生什麽事。

具体假设

 

当程序执行不合预期时,在做修改前, 先明确指出你觉得什麽事做错了。如果你有两种以上的假设,分析这些假设有哪些差异。

 

移除外部细节

 

当报 Bug 时,找出最简短的重现步骤。 当把错误离析出来后,找到最短的测试案例。当使用新的API时,从最基本的范例开始。「这些部分应该无关紧要吧」,错误假设的代价只有出事的时候才能察觉。 举例:在手机上发现错误,用 curl 来重现。

 

多重规模

 

时时在不同规模中游走。「这也许是设计问题, 而不是测试问题」。「也许这是人的问题,而不是技术问题」。 [这有点作弊,因为永远都是人的问题]

逻辑之外

 

对称性

 

几乎等同的事物,可以被切割成重複到的部分跟完全不一样的部分。

美感

 

「美感」是一个难以攀爬、有影响力的梯度,同时也是一个常被嘲笑忽视的、奔放的梯度。(例如: 行内定义一堆函数然后变得一团乱)

节奏

 

等待时机,储备精力,避免混乱, 直到时机成熟时。 时机成熟时, 将爆发力化为行动。

 

折衷

 

所有决策都有可能要面对折衷。更重要的是,去了解这些决策取决于什麽,而不是今天(或昨天)选择了哪个选项。

风险

 

趣事清单

 

当离题的灵感一来,记下来然后快速地回到工作上。当你空闲下来时,再回来查看这些清单。

 

培养灵感

 

灵感就像受惊吓的小鸟,如果你吓跑牠们,牠们就不会再来了。当你有灵感时,培养它,一点一点培养。即时抛弃不可行的点子,但是用数据说话,而不是因为单纯没自信而这麽做。

 

80/15/5 法则

 

把 80% 的时间拿来从事低风险/合理报酬的工作。把 15% 的时间拿来从事高风险/高报酬的有关的工作。剩下 5% 的时间拿来从事会让你开心且不在意是否有报酬的事。训练下一代来做你 80% 的工作,等到有人准备好代替你,你那15%的工作(或者,你那5%的事,虽然很少见)就能收成而成为你新的 80%。 不断重复这个过程。

 

结论

 

这份纲要中的流程说明了:从通过管理时间、加强学习来降低风险,到用你的大脑来谨慎地承担风险,还有快速分类你的灵感。

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓