书分两种,你信吗?一种你当字典查,另一种?就供在书架顶层,专门吃灰。《Java经典问答》摆明了是前者。可真把它从高处扒拉下来,摁在键盘边上,一页页往下翻,反倒生出点说不清的陪伴感。不是那种“秒懂”的爽感。是陪着熬的劲儿。
刚拆封,心里发虚。本子不薄,字挤得密。没图,没段子,就靠“问”和“答”硬撑。那阵子我正卡在OOME的坑里爬不出来。JVM参数调了一宿,日志越看越懵。随手翻它,就盼着捡个现成偏方。结果呢?连句“重启试试”都不给。非逼着你先捋环境,再把几百行异常堆栈,一行行抠。它不打算替你擦屁股。只教你怎么看清这摊子烂账,是怎么弄出来的。
挑异常处理那章说。字字句句就一个意思:别吞异常。别拿个空荡荡的catch把问题盖过去。我盯着那段,愣了半天。搁以前,我写代码就图个“能跑就行”。报错立马套个try-catch,日志不记,前端不白屏,就当岁月静好。作者直接把话撂那儿了:错就是错,得见光。后来咂摸过来,这不就是咱们躲麻烦的德行?遇上棘手事儿,绕道走,或者闭眼装瞎。不过说实在的,有些内部异常,确实没必要抛出来吓唬用户。这书要是能把“该吞的吞、该抛的抛”的边界再掰扯清楚点,可能更对实战派的胃口。可代码最实在。不跟你扯淡。你每次偷懒躲闪,最后都得连本带利还。
说实话,有几块硬骨头,我确实没嚼透。聊对象生命周期和垃圾回收那段。推演得跟解高数题似的。盯着显示器,CPU没涨,血压先上去了。干脆合上书。去楼下灌杯冰美式。晃悠回来再瞅,才咂摸出点门道。技术书有时候干净得过分。前因后果全抽了,光秃秃摆逻辑。我偶尔也馋那种带点碎嘴子的讲法。不过转念一想,可能正是这种不留余地,才逼着我们自己把坑填上。翻这书,本来就不是为了把标准答案刻脑子里。而是学着,怎么把问题问准。过日子遇到死胡同,跟这书里的排版一个理儿。解法其实就摊在桌上。只是咱们提问的切入点,没找对。
往后再翻,心里那股急躁劲儿,反倒沉下去了。这书不跟你扯虚的。不往你碗里倒鸡汤。它就一个个把坑标出来。指给你看怎么跨过去,或者怎么摔下去,再自己爬上来。想起刚带新人写项目那会儿,我总手痒,想抢过键盘帮他们改。现在才懂。新人非得自己踩空指针。非得被编译报错熬得眼圈发黑,那点经验才能长进骨头里。这书就像个闷头干活的老程序员。蹲在工位边上不吭声。你喊一声,他才递过把扳手。他不替你敲代码。只告诉你,那颗螺丝,到底该顺时针还是逆时针拧。
如今这世道,谁还耐烦啃硬书啊。大家早习惯了刷两分钟短视频学个API。收藏夹里躺着一堆“三天精通”的教程链接。就是不肯老老实实坐下,翻两页纸。这书偏偏拧着来。不哄着你。不给你省事儿。就把问题掰碎了,细节铺平了。让你自己对着干。翻着翻着,我肩膀反而松下来了。可能咱们平时把自己逼得太紧了。没必要天天喊着要“快速迭代”。允许自己有一阵子“看不懂”的懵圈期。没准儿,才是正经路数。
合上书抬头。天都麻亮了。屏幕上的光标还在那儿一闪一闪。那个bug估计还没彻底搞定。但奇怪。心口那块石头,居然落了一半。敲代码这事儿。说到底就是问一句,答一句。来回磨。没什么一步到位的妙方。全是踩坑。回退。再往前拱。明天还得开机接着干。好歹现在,心里有谱了。知道下一步该往哪儿问。这事儿。大概就这么个意思吧。