深夜十一点,屏幕上还亮着那一行红色的报错。你已经看了它第三遍,逻辑似乎都对,变量也没有越界,可它就是不肯按照你想的那样跑起来。咖啡早就凉了,世界很安静,安静到能听见自己有点急躁的呼吸。
这种时候,我最想跟你说的,是一句听起来很笨的话:先停下来,去倒杯水。
程序员的很多痛苦,其实不是来自问题本身,而是来自我们太想立刻解决它。急躁会让人不停地去试——改一行,跑一下;再改一行,再跑一下。每一次尝试都带着赌徒的侥幸,可真正的答案,往往不在那些随手掷出的骰子里,而藏在你跳过的那行注释、那个没仔细看的边界条件里。
bug 不怕慢,怕的是乱
我见过最快的排查,几乎都来自最慢的开始:关掉编辑器,拿出一张纸,把数据从入口到出口一步步地走一遍。输入是什么,经过哪几个函数,每一步的值变成什么,最后在哪一步偏离了预期。这方法笨拙得像小学做应用题,但它几乎从不失效。
因为我们的大脑并不擅长在五层调用栈里同时持有五个变量的状态。你以为是直觉,其实是工作记忆在硬撑。把它落到纸上,就是把负担从脆弱的短期记忆转移出去,让大脑只做它最擅长的事——判断和联想。
“慢慢来,比较快。”快不是手速,是少走弯路。
所以,当你卡住的时候,请允许自己慢一点。读一遍报错的完整信息,而不是只看最后一行;读一遍你三个月前写的代码,而不是默认它是对的;甚至,合上电脑去走十分钟。你会发现,回来的时候,那个卡了你两小时的 bug,常常在你重新看它的第一眼,就乖乖地现了原形。
比修好它更重要的
更深一层说,调试这件事,是在教我们一种难得的态度:承认自己会错。代码不会骗人,它诚实地执行你写下的一切;出错的从来是写代码的那个我们。当你愿意把怀疑先指向自己,而不是先怀疑编译器、怀疑框架、怀疑“这环境有问题”的时候,你就已经跨过了最难的坎。
这其实也是生活的隐喻。多少困局,不过是我们太相信自己的第一判断,而不肯回到事实本身去看一眼。慢一点,不是退步,是把脚步落稳,好让后面的每一步都算数。
愿你今晚的报错早日变绿。也愿你在它变绿之前,能对自己温柔一点——慢慢来,比较快。
Written by slamkun