掌握编程 from Kent Beck

本文同步发表在 http://lawlietxxl.github.io/2016/06/09/mastering-programming-from-kent-beck/

翻译自Kent Beck的博客,原文地址. 个人翻译水平有限, 如果有更好的建议请留言, 谢谢.

从我多年观察高级程序员的工作流程中, 我发现了一些普适性的固定的模式. 而从我对一些业务娴熟的低层次程序员的训练中, 我发现他们并没有这样的工作模式. 当我把这些工作模式告知他们之后, 我已经可以看到他们的巨大变化.

下面是那些最有效率的程序员使用他们在地球上的3e9秒的方法.

本篇文章的主题是扩展大家的思路. 低层次程序员总是学着通过一次解决更多的问题来解决更大的问题.而高级程序员总是学着通过一次解决更少的问题来解决比前面大的多的多的问题.智慧的其中一部分是细分: 通过细分大问题得到的小的问题, 各个击破再组合它们的解决方案比直接解决大问题要轻松很多.

节省时间的方法

  • 切片. 当拿到一个大的项目的时候, 把它分割成小的切片, 然后重新安排这些切片来满足你的需求.我一直能够更好的对项目进行切片, 并且找到它们的不同的组合方式满足不同的需求.

  • 一次做完一件事. 我们都对效率看得很重, 所以很多人都为了试图省事而减少反馈周期的个数.这就造成了综合调试起来很困难的情况, 而且这种情况会导致比我们省下的力气更大的消耗.

  • 可运行/正确性/快捷性(这是一次做完一件事, 切片, 使需求简单的例子)

  • 使需求简单. 当面对一个很困难的需求的时候, 首先, 把它变得简单(警告, 这步可能会很难),然后实现这个简单的需求(切片, 一次做完一件事, 聚集, 隔离).切片的例子.

  • 聚集. 如果你需要一次改变数个元素, 首先重新安排代码, 使这些改变集中在一个元素中.

  • 隔离. 如果你只需要改变某个元素的一部分, 把这部分从元素中解绑成为子元素(使得该元素的全部都会改变).

  • 基线测评. 在开始项目之前, 先测评一下现实世界的现状. 这其实是与我们工程师的直接下手解决问题的本能相对的,但是当你做好测评之后, 你就会明白你到底是不是在解决问题.

学习

  • 控制运行结果. 在你运行你的代码之前, 必须要真真切切的预测运行结果是什么.

  • 具体化假设. 当你的程序运行有误时, 如果你要修改你的代码, 那你必须要明确说出哪里有问题.如果你有多个假设, 寻找一个可以区别这些假设的诊断方法.

  • 移除无用的细节. 当上报一个bug的时候, 寻找最直接的复现步骤.当分离一个bug的时候, 寻找最短的测试用例. 当使用一个新的api, 从最基本的例子开始.当出现错误的时候,"那些东西有问题"是一个很有价值的论断.

比如, 发现移动端有一个bug的时候, 用curl复现它.

  • 多角度. 要能够从任意角度进行转换. 可能这是一个设计问题, 不是一个测试问题.可能这是一个关于人的问题, 不是一个技术问题.[骗你啦, 其实都是技术问题]

超越逻辑

  • 对称. 几乎一样的事情可以分成一模一样的部分和完全不同的部分.

  • 审美. 优雅是难以攀爬的一座山, 也是可以蔑视的一座. (比如在一大块代码里面包装了很多函数)

  • 节奏. 一直等, 节省力量避免杂乱, 直到那个正确的时刻, 然后用最大的力量行动.

  • 权衡. 所有的决定都需要做权衡. 知道你的选择以放弃什么为前提远远比你今天做什么选择更重要.

冒险

  • 娱乐清单. 当离题的点子来了, 记录下它们然后赶紧回去干活.等你到了你的休息时间了, 再去看看这份清单.

  • 喂食idea. idea就像是受惊的小鸟. 如果你不小心吓跑它们, 它们也许会回来在你身旁停驻.当你有一个idea的时候, 稍稍喂食(培养)一下它. 但是当你的数据不支持它的时候, 以最快速度作废它(而不能是因为你不自信).

  • 80/15/5. 把你的80%的时间花费在低风险/回报率稳定的工作上.把你15%的时间花费在高风险/高回报率的工作上. 把你的5%的时间花在你的兴趣上(不计回报).教会你的下一任做你那份80%的工作. 在有人能接替你的工作的之前, 你那15%时间中的某个实验(或者5%的)将会回报你并且成为你的新的80%. 重复这个步骤.

结论

本文脉络是从通过规划时间和不断学习来减少风险, 到通过运用全部头脑和快速分析idea合理接受风险.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,434评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • C++的编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果...
    无云清晨阅读 149评论 0 0
  • 人真奇怪,总是在某刻突然就做了某个决定。 若以上帝视角来观察个个独立的小事件,似是息息相关,却又对每个节点诞生的根...
    thopen阅读 153评论 0 0
  • 1 今天阅读到微信文章《梁启超教子书》 当林徽因父亲林长民逝世于战乱之中时,此时的梁启超先生在给梁思成的信中写到:...
    LiHongxi阅读 270评论 0 0