最近在读一些讲基础练习的书,如「The Pragmatic Programmer」、「刻意练习」、「心流」。 「The Pragmatic Programmer」是关于编程习惯和态度的书,推荐有兴趣和已经在写代码的同学读一读 —— 知道什么是好的,就可以避免不好的习惯。 知道什么是美,就会自然而然地避免不美的。

「心流」和「刻意练习」这两本书对我帮助很大。「心流」说的是一种状态,以及状态形成的原理 —— 你可以通过平衡自己的技能水平和设置适合自己的挑战,去主动让自己进入心流的状态。 「刻意练习」更强调方法论,即刻意地去做特定的练习,去形成一套自己的成长系统,逐步达到精进的目的。

其中,如何合理设置挑战比较关键,这包含了你对自己的正确评估和获取了正确的反馈。 这也让我意识到过去我对自己的能力评估错误,以至于设置了并不合适的挑战目标,于是在实际做的过程中就很 suffer。

这两本书都提供了大量的研究案例去反复强调书中的观点,「The Pragmatic Programmer」在编程练习上的观点也有相似之处。 值得参考。

总而言之,要面对真实情况、科学设置练习,从而让自己乐在其中并习得技能 —— 当你建立了自己的成长系统,就没什么不可能的了。

过去的咖啡练习

回想起来,其实我的咖啡圈的朋友们自主学习能力还是比较强的,不管是做 espresso、拉花、单品冲煮、cupping 还是烘豆子,99% 都是自学而成(还有 1% 我还没遇到)。而且多数都做的还不错,要么自己开店、参加 WBC 比赛成为明星咖啡师,或者做咖啡豆生意等等。

就说做手冲咖啡吧。手冲是典型的低门槛、难精进,人人都可以只用滤纸+滤杯做一杯咖啡,却很难轻易地做出一杯让人喜欢的咖啡。

最开始我们会用硬工具去帮助测量,去稳定冲煮环境,比如温度计、电子秤,以便我们能够集中在练习如何稳定自己的操作上,如注水控制、冲煮时间等。通过全面地把控各种外部可变因素,去适应不同的豆子,去最优化萃取咖啡液体。这是一个长期和不断反复练习的过程,以及持续和他人交流切磋、获取客户反馈。

最终你会出神入化地在没有工具的帮助下冲好任意一杯咖啡。因为基于过往大量的练习和调整,你对豆子的烘焙程度、新鲜程度、品性有了精确判断,知道如何调整磨粉粗细;你对水温也会有判断,可能不如温度计精准,但是足够精准地去在合适的时候开始冲煮咖啡粉;你还会更自如地手持水壶注入稳定、竖直的水流,你也会把控整个冲煮时间,以便使咖啡粉有足够的时间被萃取但又不会过萃。当然,你从来不会忘记提前温杯。

这是我非常喜欢的状态,肌肉记忆已经会系统化调整和操作,做咖啡的那几分钟里,脑袋基本是放空状态。 每天你可以用五到十分钟准备一杯咖啡,顺便还冥想了。 咖啡入口的时候就是一天的开始。

我很期待某一天自己在编程上也能获得这种体验。

当前的编程练习

在重新学编程的最开始的两个月里,我对自己的预期很高,觉得自己理论上是懂编程的,无非就是再学点语法就可以操作起来。 而实际情况是,我在操作上基本上与零基础的同学并无差别。更别提算法什么的我已经忘光了。 而在当时我并没有发现这个问题,我带着「我知道如何编程」的预期去读一个完整项目的代码,并尝试用 Rust 去复制。 结果当然不理想,因为我并不会使用一门自己还不理解语言工具。

我开始承认自己的无知,并开始在 LeetCode 上做小练习,也重新开始学 CS,同时保持有一个小项目在做。 有时也看看优秀程序员的代码,比如 burntsushi 的代码 —— 他的代码非常简洁、注释清晰。另外我太喜欢他的文本搜索 ripgrep,而且他也一直在持续优化他的作品。

读「The Pragmatic Programmer」更像一位导师在呈现给你看什么是优秀的程序员,你也会对自己编程方向更为清晰。 期间,我对 CS 课程的态度也有了变化,过去觉得无聊的内容,现在来看竟然觉得特别有意思。 经常听一节课下来,感觉是,啊,原来是这样的,好玩!

与 mentor 的沟通特别重要。Mentor 的雄厚的知识和经验帮助你迅速识别自己练习中出现的问题,从而提高矫正效率。 另外 mentor 也很多优秀的习惯也会潜移默化地影响到你。有时候也需要找 mentor 充值一下信仰。

坦诚面对自己的虚荣心

除了技术类的书籍外,最近我也开始读一些老书,比如富兰克林自传、林肯的信件、汉密尔顿的稿件; 另外也零碎地读一些经济、政治相关的书籍,以帮助我理解经济学人的文章观点。 读这些经典老书的好处是,能够很快速地获取百年智慧,同时,也会让你觉得离自己智慧的那一天还有很长的距离。

我们只看到这些历史名人优秀的一面,于是我们自己写作的时候也总是想表现出自己优秀的一面, 哪怕有时候谦虚地说自己不足,也是要建立在自己已有的一些成就上。 富兰克林在写自传的时候也说 —— 多数人并不喜欢看到别人虚荣的样子,而自己虚荣的时候却无所谓。 即便他有如此的认知,也坦诚说要给自己的虚荣心一点空间,且也会正向去看自己的这一面。

我在写每周总结 Coconut Report 的时候也曾要想尽办法表现出自己本周做了什么厉害的事。 以至于有时候写得有压力,并质疑自己为什么本周没有做出什么了不起的事情。 那种感觉就像在质疑丛林罗宾汉为什么今天没有去劫富济贫,佐罗为什么今天没有去扬善除恶, 船长辛巴达为什么今天没有探索一个新的国家或岛屿,没有发现稀奇古怪的事情, 钢铁侠为什么今天没有起飞……

然而现实是,我们的每一天最基本的事情就是吃、喝和睡,这些基本到不值得写到故事里的琐事。 另外才会做点其它非琐事,而这些事还不一定有意义。 或许应该说,在当下每日在做的时候是看不出来意义的。 这就回到了之前提到「心流」的理论,如果每天我们都在自己建立的增强系统中获得心流体验,那么我们就获得了日常的幸福, 有可能,在某个时间点上成为自己心目中的“英雄”。

当我把编程当作一个十年计划去思考的时候,反倒无比平静了。 自己能够沉下心来去做小练习,而不是急着要做什么大项目出来。 从这些日常的小练习中习得的新技能和知识总是能让我更开心。 感受就是特别踏实,在写字的时候写字,写代码的时候写代码,如同在冲咖啡的时候就只是冲咖啡。

在这个不确定的世界里,知道自己当下在做什么、承认自己不知道什么的感觉是相当的好。

Provo 琐事

昨天是美国的独立日,小县城里晚上十点钟开始放烟火。 小城太小了,一南一北两处的烟火都能同时看到,另外还有邻居们自己庆祝放着玩的。像极了小时候过年的样子。

Provo 大概是目前我最喜欢的城市了,住这么久还是觉得她很可爱。路上碰到的陌生人很友好,会主动打招呼; 当他们发现你可能有需求的时候,会主动提供帮助。车子一定是让行人的,哪怕没有斑马线。 如果只有一条道,在你后面行驶的车,不管是自行车还是机动车,决不鸣喇叭,只是默默地跟在你后面 - -

我是不是要担心一下,在这样舒适的环境待久了,是否还能适应「真实」世界。