1弗朗西斯科·西里洛
弗朗西斯科·西里洛在1992年创立了番茄工作法,但若是从头说起,则要追溯到20世纪80年代末,他大学生活得头几年,他一直苦于效率低下,学习学不进去。
就在他山穷水尽之时,他和自己打了个赌:“我能学习一会儿吗?——真正学上10分钟?我得找个即时教练,谁来替我掐表呢?后来我找到了,是一个厨房计时器,形状好像‘番茄’。就这样我邂逅了我的番茄钟。”
好吧,我至少找到了我们的共同点,我他妈编程也编不下去。
什么是番茄工作法?简单说,就是列出你当天要做的事情,设置25分钟闹钟,然后从第一件事开始。在这25分钟里,你不可以想其他任何事,就算老板说要炒了你,你也要泰然自若的专注于眼前的工作——25分钟之后你再把数据库删了跑路也不迟。
这其实是一个分层设计,是算法设计里的分治思想,是把「规划」与「做事」分开的思想,如果我们在「做事」中进行「规划」,我们往往就会畏手畏脚,做不出最好的东西来。而真正的那些艺术家们创造杰出的艺术作品的时候,一定是十分专注于他手头的工作的,而不顾截止日期的。
“沃尔夫冈·阿玛多伊斯·莫扎特,你的交响曲已经拖稿五周了!我警告你今天晚上六点之前一定要交稿!不然整个团队都要受牵连!”
莫扎特:“FUCK!!”
2 如何开始做一件事
如果说我们有很多人关注着「如何做好一件事」的话,那么我想说「如何开始做一件事」得到的关注恐怕是太少了。就像诺特伯格在《番茄工作法》里说的,我们很多人都是:
面对复杂,望而却步。
有时我们不是不能做这件事,我们是无法开始做这件事,而对于我来说,一个程序员,我面对的最大的问题是「如何开始编程」。而这个问题在番茄工作法里其实已经描述的很好了,即引入「行为驱动」。
“番茄工作法是以动作为导向的,扭动开启番茄钟是动作,遵守铃声是动作,填写“今日待办”表格是动作。习惯成自然,充分利用条件反射的力量。”
于是我就想模仿番茄工作法,给我自己的编程也设计一套动作导向的流程,让反射的力量帮助我去解决「如何开始编程」的问题。
于是我审视了我整个编程的过程,总结了以下的通用行为流程。
3 行为驱动下的编程
从行为驱动上将,编程分为四个阶段:
1. 学习
2. 设计
3. 编程
4. 测试
我认为这四步缺一不可,并且会大量重复3,4两个步骤,下面我来一个一个说明
1. 学习
拿到一个需求后,我们首先要做的是根据需求,确定我们需要学习什么。
比如需求是:“用kotlin实现一个游戏引擎”
我们就可以确定学习目标:
(1)学习Kotlin语言
(2)学习游戏引擎原理
2. 设计
经过了艰苦卓绝的学习过程后,我们已经掌握了Kotlin语言与游戏引擎的原理了,这时候时候进行一些设计了,这也是整个编程最具原创性的过程。
首先,我们将游戏引擎的需求分为:
(1)游戏主循环
(2)输入系统
(3)动画系统
我们要分别去实现这三个部分,然后再将它们结合起来。比如,我们首先要实现游戏主循环,接着我们需要设计一个输入系统,该系统会对用户输入有所反应,并给出对应输出,我们需要把输出结果给到主循环,并通过主循环输出给动画系统,让人们看到画面。
3. 编程
这里的编程不是整体的编程,而是根据设计,把一大块程序分成一个个行为相对简单的小程序进行逐个击破。这也是算法中分治思想的关键————把大问题转化成小问题。
4. 测试
我们现在已经有了「游戏主循环」、「输入系统」、「动画系统」,我们是不是就要直接将他们结合到一起呢?不,我们需要先对「没把握的行为」进行测试,测试的方法我选择PrintF大法!将输入和输出都打印出来,看看结果是不是正确!
在这里我认为没把握的是动画系统和输入系统,所以对其进行测试。
输入系统测试
输入:键盘按←
输出:001
输入:键盘按→
输出:002
结果正确,输入系统是OJBK的。
动画系统测试
输入:一个坐标,一个图片
输出:在屏幕固定位置上显示一张图片
结果正确,动画系统是OJBK的。
好了,现在我们的两大值得测试的组件都可以用了,那么我们可以根据我们的设计,将「游戏主循环」、「输入系统」、「动画系统」三者结合,做出了我们的游戏引擎了。
领取专属 10元无门槛券
私享最新 技术干货