读代码之外的书
对编程感兴趣以后,人很容易感受到一种奇怪的压力。好像每一小时空闲都该拿来学另一门语言、完成一门课程,或者阅读本周大家都在讨论的工具文档。
就连休息也会慢慢变得像一件没做好的任务。翻开一本小说,脑子里会冒出一个让人不舒服的声音:这时间本来可以用来学算法。写下一些没有一行代码的东西,又会忍不住问:这对我到底有什么用?
我已经不想再这样衡量每一次阅读。一本书不必提高我敲键盘的速度,才配得上我花在它上面的时间。我更想问的是:离开编程以后,我能在阅读和写作里找到什么?
不是所有学习都要像上课
技术书当然有必要。需要理解一个 API、修正一条查询,或弄清某个工具的用法时,我要的是准确的文档、可以运行的例子,以及不回避棘手情况的解释。小说替代不了这些东西,随笔也不能代替测试、练习和真正动手构建软件。
但如果把程序员需要思考的一切,都压缩到一本手册容得下的范围里,那也太贫乏了。
技术书通常教我一种工具或一个模型。叙事作品则让我在一段时间里与不完整的信息相处。故事中的人物不会附带官方文档。他的动机可能前后矛盾,第三章里看似荒唐的决定,也许很久以后才显出另一层意思。我必须观察、记住细节,也得接受自己暂时还不知道全部答案。
这和照着教程一步步操作差得很远,但并非毫无用处。做软件时,我们同样会在需求不完整的情况下作决定,会遇到对同一个词理解不同的人,也会接手那些藏着一段无人记录的历史的系统。我不是说读小说能解决复杂的架构问题。我的意思是,面对尚未闭合的问题时,练习一点耐心是有价值的。
随笔给我的又是另一种东西。我能看到一个人如何整理想法、摆出证据、承认反对意见,并决定自己的论证到哪里为止。即使不同意结论,我仍然可以从他组织讨论的方式里学到东西。对我来说,这个区别很重要。阅读不是收集别人的结论,也是观察他们如何走到那个结论。
改变看法的不自在
我推荐过的一本书是 Adam Grant 的《Think Again》。它吸引我的地方,是把重点放在重新思考、质疑自己的看法、放下已经学会的东西,以及保留谦逊和好奇心上。书里没有把聪明当作一种自动防错机制。恰恰相反,一个聪明人也可能非常擅长替错误的观点辩护。
这一点在编程圈里太常见了。只要加入一场关于编程语言、编辑器、操作系统或框架的讨论就能看到。有时我们不再讨论一个决定,而是在捍卫自己的身份。我们不再问项目需要什么,只想证明自己最喜欢的工具从一开始就是正确答案。
假设你几个月来一直说某门语言很差,只因为看过一个嘲讽它的视频。后来你碰到一个项目,发现选择这门语言很合理。你会改变看法,还是找出二十个理由拒绝承认?再假设你照搬了一位资深开发者的架构,现在各个部分怎么都对不上。你会重新检查它,还是继续加层,保护最初的决定?
我不是拿这些情况来取笑谁。改变看法很难,我自己也一样。因此,我更看重那些不会再塞给我一个可以炫耀的确定答案,而是给我更好的问题、让我检查自己究竟知道什么的书。
读小说不会自动获得社交超能力
有些好听的说法流传得太快。其中一个是,读小说会让人更有同理心。这话听起来不错,也很容易分享,还把阅读包装成了一种道德维生素。问题在于,现有证据不足以让人如此肯定。
Diana Tamir 和 David Dodell-Feder 在 2018 年发表的一项元分析发现,阅读小说对部分社会认知指标有统计学意义上的影响,但影响很小,效应量大约为 g = 0.15 到 0.16。这并不等于证明一部小说能改变读者的品格。
后续综述还显示,研究结果并不一致,因果关系也很难确定,一些发现的重复验证同样存在问题。某些类型的阅读或许会轻微影响某些测量指标。也可能是本来就具备某些能力或兴趣的人更愿意读小说。要把这两种可能分开并不容易。
我宁愿保留那个更克制的版本:一些研究在部分社会认知指标上发现了小幅影响。仅此而已。我不需要夸大证据来替小说辩护。一个故事可以吸引我、让我不安,也可以让我看到自己没有考虑过的视角,哪怕事后无法把这段体验换算成个人提升的百分比。
让记忆里多一些可以连接的材料
尝试创作时,我们并不是从一片空白开始。我们会把记忆里已经存下的概念、画面、问题和经历联系起来。因此,阅读不同主题和体裁,可能会为新的联想提供材料。
这里最重要的词是“可能”。读二十本小说,不会保证得到二十个好点子。摆满心理学书的书架,也不会让一个人自动看懂所有人。创造力不是积分卡,不会每读一本书就稳稳换来一份奖励。
不过我确实认为,信息来源过于单一,最后会限制我们能够做出的比较。如果我只看编程教程,我的大部分参照物很可能仍是其他编程教程。阅读历史、小说、科学、随笔或心理学时,我会遇到其他描述冲突、安排时间、观察系统,以及追问一个人为何如此行动的方式。
其中某个联系也许会变成更清楚的界面,也许会帮我向非技术人员解释一个决定。也可能什么看得见的成果都没有,只陪我度过一个下午。这三种结果我都接受。
写下来,才看得见想法在哪里中断
阅读让我跟着另一个人的思路走。写作则逼我确认,自己到底有没有一条完整的思路。
一个想法留在脑子里时,看起来可能很完整。等我试着把它写到纸上,缺口就出现了。我用了一个自己无法定义的词;反复写同一个结论,因为还没有论据;从问题直接跳到答案,却没解释中间发生了什么。写作会让这些问题露出来。
有一些有限的证据指向一个值得留意的方向。2007 年,一项以大学生物学学生为对象的研究发现,某些写作活动改善了他们在特定情境中的分析和推理能力。这是一个具体结果,不是普遍定律。它不能证明写日记能让任何人在任何领域都变得更好。但它至少提醒我,写作可以是思考过程的一部分,而不只是把已经完成的想法展示出来。
几个月前,我写了 El tiempo que compartimos,送给一个对我很重要的人。大约一个半月前,我又为同一个人写了另一本书:De mí para ella。我提到这些文字,不是把它们当成资历,也不准备把它们包装成一段关于成果的故事。我只是想说,为自己写作也可以存在于职业、成绩和出版之外。
你可以写一个场景,一封最后决定不寄出的信,一段对刚学会的东西的解释,也可以写下一个暂时答不上来的问题。重点不是模仿某位著名作家,而是在自己的想法面前多停留一会儿,直到看清哪些东西真能解释,哪些只是自己想当然。
这也会碰到代码。如果我无法解释为什么选择某个方案,只能躲在复杂术语后面,也许我还没有真正理解这个决定。写作不能保证我的推理正确,但会让我更难假装它已经完整。
当阅读变成另一块数据看板
我不反对记录读过的书、给页面做标记,或参加阅读挑战。问题从记录开始吞掉体验时出现。
连续打卡可能会在忙乱的一周里推动你打开一本书,也可能让你只挑短文,免得丢掉那个数字。书单可以帮你记住感兴趣的作品,也可能变成一排盯着你、让你内疚的待办事项。摘要可以帮助梳理想法,也可能逼着你从翻开第一页起,就只想着读完以后要产出什么内容。
自我决定理论研究自主、胜任和关系如何参与动机形成。在这个框架里,控制和某些奖励可能削弱内在动机。这不代表所有目标都不好。它只是提醒我们留意,一件原本因为喜欢而做的事,是从什么时候开始让人觉得自己正在被监督。
如果连续打卡对你有帮助,那就用。如果它让你焦虑地读书,就放下。想在第四十页弃掉一本书,也不必向想象中的法庭辩护。如果你想重读一本熟悉的书,而不是赶往下一个书名,那同样算阅读,即使应用不会为此庆祝。
我已经厌倦了那些抓住一项人类活动,非要它证明产出的指标。一年读了多少本?每天读多少页?提取了多少条可以应用的想法?测量可以提供信息,但不该替我们决定什么值得花时间。
我喜欢的地方
- 叙事让我与疑问、矛盾和不完整的信息相处,不必急着得出答案。
- 随笔让我观察另一个人如何整理和讨论一个想法,即使我不同意他的结论。
- 阅读不同主题会增加我可以互相联系的参照物,但不保证这些联系一定有用。
- 写作会迫使我面对那些自己还解释不清楚的部分。
- 因为喜欢而阅读,保留了一块不属于工作、学校或指标的空间。
我担心的地方
- 把阅读建议变成又一项义务,压在那些学编程时已经觉得自己落后的人身上。
- 拿规模小或结果不一致的研究,承诺阅读会自动带来同理心、创造力或批判性思维。
- 把非技术书籍当成提高产出的秘密工具,因为这只是给原来的问题换了一层包装。
- 轻视文档和练习。读代码之外的书能补充这些工作,但不能替代它们。
- 把读完很多书误当成理解了很多书,或真正享受了阅读。
我目前的看法
如果你还是青少年,正在学习编程,不需要把每个下午都塞满课程,来证明自己真的在乎这件事。你会有读文档、做练习、拆坏东西、写测试和构建项目的时候。这些仍然必要。
你也可以因为想知道后来发生了什么而读一本小说;可以因为一个问题一直让你不舒服而翻开一本随笔;可以谨慎地接触心理学,而不是拿它诊断朋友;也可以写下一些永远不会给别人看的东西。
这些事都不会自动让你成为更好的程序员,也不必如此。有时,扩大视野确实能帮助我们重新审视一个想法、联系不同概念,或更清楚地解释自己的思路。有时一本书只是给了我们一个不错的下午。
这已经够了。不是每一本书都必须靠改善某项指标,来证明自己值得存在。