练拳击之后,我发现“栈溢出”和“动作变形”是一回事
在杭州滨江的枫向格斗练拳击大半年了。我是程序员,最近发现一件事——代码里的栈溢出和拳击里的动作变形,原因是一样的。
栈溢出是怎么发生的?
函数调用太深,每一层都把返回地址、局部变量压到栈里,栈空间用完了,程序就崩了。
动作变形是怎么发生的?
打拳的时候太想打重,每一拳都拼命使劲。肩膀越绷越紧、呼吸越来越浅、动作越来越僵。身体“栈”满了,动作就变形了。
解法也一样。
栈溢出要优化递归、减少调用深度。动作变形要放松肩膀、调整呼吸、别让身体一直处在紧绷状态。
教练说过一句话我一直记得:“你越想要力量,越得不到力量。你得先松下来,力量才会从脚底传上来。”
这跟写代码很像。越急着上线,越容易写出bug。先停下来,理清思路,代码反而跑得更顺。
如果你也是个久坐的程序员,可以试试拳击或散打。不是为了打人,是为了让身体别“栈溢出”。
个人杂感