一厢情愿的编码
至少据我所知,封面图片归功于René de Ruijter 。
今年降临节我一直在参加2017 年代码降临节挑战赛,我注意到,在做一些比较难的挑战(比如数字螺旋,对吧?)的过程中,我开始尝试一些似乎能真正帮助我专注于问题的方法。这当然不是什么开创性的东西,但我想分享一下,希望它能帮助到其他人。
问题:注意力持续时间短和——
如果这种情况看起来像是人身攻击,请阻止我:
你刚刚接到一个问题/任务。你知道该从哪里开始,但当你开始敲入代码的雏形时,接下来要做的事情之一突然出现在你的脑海里。你迅速跳了过去,为它创建了一个新文件,并试着把它简略地记下来,以免以后忘记。这时,你意识到你正在添加的新内容需要一个测试用例,于是你“快速”地记下了你正在处理的测试用例。你运行测试,确保所有测试都按预期失败,但你忘记配置测试了,输出结果很糟糕,谁还能在那种环境下继续工作呢?你毕竟不是个野蛮人!然后两个小时过去了……等等,我原本在做什么呢?
一些解决办法就是自律——强迫自己先完成手头的工作,然后再开始下一件事。然而,我发现这种精神上的自我干扰尤其成问题,那就是当我试图解决一个大问题,却不得不不断地担心解决方案的细枝末节时。这时,我的建议就派上用场了。
一个解决方案:使用你希望拥有的方法
用一个例子来描述这一点可能最好。
假设您正在编写一个脚本来控制狗的自动零食分配器。
这是威利。他是个非常好的男孩。
第一次浏览代码时,您可能会写类似这样的内容。
def train(dogs)
dogs.each do |dog|
if dog. # Pause here
现在你可能会想,“糟糕!现在我需要弄清楚这些狗什么时候应该得到零食!”就这样,你对其余高级功能的思路就消失了。
这是我的解决方案。
我建议你充满信心地继续下去,就像一切都没有发生过一样,并使用你希望未来的你会写的方法。
def train(dogs)
dogs.each do |dog|
if dog.good_boy?
dog.pat!
give_treat(dog)
@treats -= 1
end
end
end
“但是 Ryan!我们还没写出像good_boy?
、pat!
、 或give_treat
这样的函数呢。”没错。这对 Future-Us 来说是个问题。现在最重要的是让你保持心流状态,确保在忘记自己该做什么之前,把整个想法都写在屏幕上。我们稍后再回来补上这些漏洞。
(对于那些真正关心的人,下面是good_boy?
实现方法):
class Dog
# ...
def good_boy?
true
end
end
😬
包起来
这就是技巧!写代码的时候,如果遇到某个部分,哪怕只是稍微卡住,就假装已经有了对应的方法。这样做的另一个好处是,它能帮你找到合适的地方,把代码合并到不同的方法中。等到一切运行得稍微好一些后,你随时可以回来清理。
你还有其他屏蔽干扰的专业技巧吗?告诉我吧——我很想听听!
最初发布于assert_not magic?