17611538698
webmaster@21cto.com

正念程序员:修习与完善自己的工作流程

资讯 0 4865 2018-03-24 12:02:42

21CTO社区导读:作为程序员,我们相信新的语言和框架可以提高我们的工作效率。但我们如何做也很重要,本文为实践篇。


 
1.jpeg

 
作为程序员,我们学习和使用新的开发框架和语言可以提高生产力。我们通过读书,看在线视频课程,参加黑客马拉松等方式学习。这些都能提高我们的效率。但是我相信,你的工作方式和流程才是对自己的工作效率产生巨大影响的原因,而不是某个框架和语言。
 
下面我们就来讨论改进开发过程的两种技术:标签和每日回顾。
 
请注意,我并非试图说服大家关注我的工作流程,你可能已经有了一个最适合自己的方式。
 
我给大家介绍的工作流程是我多年一直在做的经验总,如果我没有完全理解工作。贴标签和每日回顾可以帮我从潜意识提升到意识,并使其更强大。
 
工作流程
 
每当我负责开发一个功能时,我会组织成以下5个流程:

1、预演
2、设计
3、架构设计
4、实现功能
5、清理
 
预演:自上而下建立第一个情景
 
首先,我自己尝试自己设计一个准确描述该功能的场景。如果用户能够提供当然是最好了。如果不是,我自己必须拿出来这些。
 
我选择对功能说明的最好的场景。它不是最简单的那个,也不是最复杂的那个,是那个能足够给我描述清楚实现该功能的内容。
 
我还会写测试用例。通过自上而下的方式,通过系统最低限制并可以工作,并验收测试通过。这里,我不做重构,不做TDD,我也不关心什么名字好坏。我会走一些捷径,通过复制、粘贴代码实现出来。目标非常简单,我要让测试验收通过。
 
在做这件事的时候,我会留意系统在此时需要有什么更改。此外,我还会写下我觉得重要和有趣的东西,是笔记不是代码,也就是此项目工作的结果。
 
我会在扔掉这部分产生的代码。
 
设计
 
接下来,我根据记下来的注释为功能绘制一些解决方案和设计图。然后评估设计,选一下自己觉得合理的设计。这些大概需要花半小时。
 
我原来在预演之前尝试先做这一步,但是会反馈不正确的内容,反成无用功。
 
我也发现一些敏捷的同学也跳过了这个阶段,他们从预演直接到开发正确的生产代码。我认为这个会产生一些问题,退回一步,用笔和纸花30分种描述一份设计蓝图非常重要,非常有价值。
 
此阶段的成果物是几张图,其中包括一些笔记,还有一个如何实现该功能的好计划。
 
打基础:从底层构建同样的场景
 
我再次实施相同的解决方案,但这次是自下而上的。我会非常小心的使用测试驱动开发,这一阶段与预演期非常不一样。
 
在做功能开发时,我使用了研发代码的工作方式,启动调试工作跟踪调试正在运行的程序,单步调试。这个阶段与上面两步是不同的,需要极其认真,保证代码的健壮和安全。
 
如果我发现对系统还是有些不清楚,并且需要调试,我会回滚到上次并进行更细致的步骤。
 
建立第二种情景:自上而下
 
在第一个场景完成并完成开发后,我会再采用一个方法,从一个验收测试用例开始,自上而下的构建代码。
 
为何不自下而上?
因为,我发现自上而下的方法会更能带来好设计。但如果没有足够好的架构来接上新的方法,这也会给我带来很大的挑战。这种原因促使我用第一种情况的自下而上,这样做会创建足够完整的架构来附加功能的长尾部分。
 
所以第一个场景包括了预演是自上而下,而“打基础”是自下而上。
 
清理
 
遵循Kent Beck的简单设计规则:
 
1 通过测试
2 修正名称
3 删除重复
4 删除不需要的抽象
 
以上四步完成后,我会再重复进行2-4的步骤来加强代码的健壮。
 
以上是我在实现功能使用的方法
 
1 预演
2 设计
3 打基础
4 实现功能
5 清理
 
这个过程针对解决小问题会很好用,但是一旦涉及新系统和实际设计时会复杂得多。
 
这就需要我们更接地气的解决。这里有两种技术解决方案:
 
技术1:标签
 
标签是我发现一个特别有用的技术,可以让人在一整天中保持警觉。
 
在开始开发新功能以上,我在标签上写下预演和要搞定的目标。在做实际架构时,我会简明扼要地记下每一步。当从测试通过,再优化变量函数名称时,我写上,“修复名称”。在任何时间,我都可以看我的笔记,看我现在正在忙的工作。
 
当看到当前阶段和步骤,它让我保持专注。我知道什么时候将“生产代码”互相切换到“试验”模式,这样能够让我更对解决问题充满兴趣。
 
这一阶段的关键就是想出一个简单说明描述自己的标签。每一步都要写得清晰简洁,避免后面自己都看不明白。
 
你可以使用红/黄/绿的方式来描述文字。
 
标签除了能够提高我的危机意识 ,还能生成一天中发生的所有事件日志,这对日常回顾中非常有用。
 
技术2:每日回顾
 
每天晚上,我都会花十分钟来反思一天的活动。我问自己这样的问题,比如:“为什么我效率不高?”,“这一天我学到了什么?”我还通读今天的笔记,看看是不是能有一些补充想法。接下来,我写下我的思考和总结。
 
一段时间后,我阅读我的日志,发现很多有价值有趣的事。例如:我注意到每次在工作中使用标签,我都会觉得我自己已经实现完并学到了很多东西。还有一次,我坚持优化开发过程,完成了一个困难任务。
 
工作方式会影响我们的工作效率,因为没有固定的框架和语言。
我用来改进工作流程的两种技术就是标签和每日回顾。
 
标签可以帮我将注意力集中在手头的任务。作为副产品,它记录着我一天中所有发生的有趣的事。
 
在日常回顾中复盘这些日志,我会对工作过程进一步的调整。
 
各位在工作中看看自己的工作过程,可以把做的不同工作或活动,给他们分配标签,让这些标签时时提醒我们的工作。
 
修习更合理的工作流程,能够转换更好的产品,让每一位开发者都能充实地过好每一天。
 

作者:Victor Savkin
编译:亢小龙


评论