任务分解
对于一个程序媛来说,如何提高自己的开发效率,这一直都是我追寻的方法。直到最近才get到一个可以有所帮助的技能。
任务分解,列Task
当我们拿到一个任务卡片时,经常干的一件事,就是明确卡片中的要求和明细,然后就直接开始码代码了。因为写的代码是可见的,运行成功会有极大成就感,然而其实这并不是一个好的方式。
在我们写代码之前应该根据卡片内容,从开发的角度把一个大卡分解成各个小任务,然后针对每个小任务进行开发才是可取的。其实这种方法得到的成就感并不亚于前者。
TASK 是什么,如何列
很多人会和我一样困惑,要列Task,但是什么是Task呢?一般来说,一个function(函数),一个Process或者一个Code Block(代码块)都可以是一个Task。
每一个Task都有相应的输入和输出。输入的可以是函数的参数,全局变量,局部变量(对于代码块来说)。输出可以是返回值,变量等。
每个Task的输入都是可穷尽的,在列Task的时候要列出所有用到的Task。
列Task的时候的命名要精确,每一个名字在不同的地方有不同的意思。
列Task,一般会画一个包含Data和Process的图。类似一个有架构的数据流向图。Data(数据)一般有数组、队列、栈、树、对象、类、有循环的对象等,Process(过程)一般有顺序的、选择的(if/switch)、循环(for/while)等。
参考
编程的精进之法
PDCA 戴明环
PDCA指的是Plan-Do-Check-Action,而列Task属于Plan的内容。
如何定义Done?
1.code Done
2.test pass
3.Integration env
4.showcase
5.production env
6.ux(用户使用)
单个任务的开发流程:0)Spike即调研;1)写测试;2)写实现;3)测试通过
打印学生成绩单
背景:
https://www.zybuluo.com/jtong/note/471501 中的课后作业
打印所有人的成绩单,包括平均分和总分。
打印全班级的总分平均分和中位数。
列TASK
1) 转换ViewModel
输入:
studentScoresArray:[[String]]
输出:
studentScoresSheet:[{
name:String,
chinese:double,
english:double,
math:double,
programming:double
},
{
...
}]
2) 得到学生成绩
输入:
studentScoresSheet
输出:
studentScoresSheetWithSummary:[{
name:String,
chinese:double,
english:double,
math:double,
programming:double,
average:double,
total:double
},
{
...
}]
3) 计算总计
输入:
studentScoresSheetWithSummary
输出:
summary:{
totalAverage:double,
totalMidden:double
}
4) 打印成绩单
输入:
studentScoresSheetWithSummary
summary
输出:
Result:String
猜数字游戏
应用启动
界面1(按1启动游戏)
main是解决输入输出的。
Router通过输入输出解析找到具体的Command。
Command处理各种具体的用户输入,对Core层返回的结果翻译成友好的输出。
Core层函数生成计算结果。
退出(按2退出游戏)