从李艳的工作室回来的那个周日,刘星没有安排任何工作。他给自己泡了杯茶,在书架前站了很久。
目光扫过那些熟悉的书脊:《C++ Primer》《设计模式》《重构》《人月神话》……这些是他职业生涯的基石,像建筑师的图纸和工具。然后是近来新增的:《存在与时间》《禅与摩托车维修艺术》《艺术的慰藉》……这些是精神世界的探索,像建筑师的哲学和美学。
他的手指停在一本旧书上——《黑客与画家》。保罗·格雷厄姆(Paul Graham)的文集,大约十年前买的,当时他还在大厂做中层管理,读这本书是为了理解硅谷的创业文化。
现在他想重读它。
不是因为创业需要——他已经创业了。而是因为这本书的名字突然有了新的含义:黑客,画家。技术,艺术。他在李艳工作室看到的,正是这种融合的可能性。
刘星抽出书,封面已经有些磨损。他坐到书桌前,翻开扉页,看到自己十年前用铅笔写的标注:“有趣的观点:编程是创造,不是工程。”
当时他画了问号。创造?编程明明是严谨的、逻辑的、需要测试和调试的,怎么能和画家那种自由的、直觉的创造相提并论?
现在,他想用新的眼光重新理解这句话。
窗外是周日的宁静。偶尔有邻居家孩子练钢琴的声音,断断续续,像在寻找旋律。
刘星从第一章开始读。
格雷厄姆开篇就在讨论“黑客”这个词的误解——不是媒体上的计算机罪犯,而是“痴迷于编程并乐在其中的人”。黑客喜欢创造新事物,喜欢解决难题,喜欢让复杂的东西变得简洁优美。
“好的软件是简单的,但不是简陋。”刘星轻声读出来。这句话他以前读过,但现在读,有了新的共鸣。
简单。禅修时追求的简单,罗斯科画作中那种纯粹的简单,李艳陶艺中形态的简单。原来代码也需要简单。
但什么是代码的“简单”?
不是功能少,而是概念清晰,结构优雅,没有不必要的复杂性。就像一首好诗,用最少的词表达最多的意义。就像一个好的陶器,形态纯粹,功能直接。
刘星继续读。
格雷厄姆谈到“品味”(taste)——好的程序员需要有品味,知道什么是优美的代码,什么是丑陋的代码。这种品味不是规则,而是直觉,是长期沉浸在高品质代码中培养出来的感知力。
品味。刘星想起站在罗斯科画前的那种震撼。那不是理性的分析——“哦,这个色块用得好”——而是全身心的感受,一种被美击中的体验。
代码也有美吗?
他打开电脑,调出自己最近写的一个模块。这是一个数据处理流程,要把来自多个渠道的用户行为数据清洗、整合、分析。他写了三个版本。
第一个版本是刚加入公司时写的,当时急着出成果,代码冗长,有很多重复的逻辑,注释写得很详细但结构混乱。
第二个版本是半年前重构的,他学习了一些函数式编程的思想,代码简洁了不少,但有些地方过于追求“优雅”,牺牲了可读性。
第三个版本是上周写的,禅修回来后。他重写了整个模块,现在看着代码,刘星突然明白了什么是“品味”。
第三版的代码,每个函数都很短,只做一件事。命名清晰——不是`processData()`这种模糊的名字,而是`filterInvalidSessions()`、`mergeUserProfiles()`、`calculateEngagementScore()`。结构像一棵树,主干清晰,枝叶有序。注释很少,但关键处有解释“为什么”这么做,而不是“做什么”。
看着这些代码,他感到一种……愉悦。就像看到李艳架上那些形态优美的陶器,或者读到她诗中那个精准的比喻。
代码不只是实现功能的工具。代码是一种表达,是对问题空间的理解和重构。
刘星继续读《黑客与画家》。
格雷厄姆有一章的标题是“如何创造财富”。但内容不是在讲商业模式或市场营销,而是在讲创造人们需要的东西。他说,最好的创造往往来自创造者自己需要的东西,或者来自创造者对某个领域的深刻理解和热情。
这让他想起为视障儿童开发编程工具的那个项目。那不是市场驱动的——市场很小,利润很低。那是价值驱动的,因为他们看到了一群孩子的需要,并且相信技术可以帮助他们。
创造价值,而不只是创造利润。
这与李艳提出的“小而美”产品线不谋而合。也许商业的成功不只是规模,还有深度和意义。
书读了一半,刘星停下来,走到窗前。
外面的梧桐树叶子黄了一半,在秋风中摇曳。他想起了海德格尔说的“上手状态”(ready-to-hand)——当工具好用时,我们甚至意识不到它的存在,就像眼镜戴久了就忘记自己戴着眼镜。只有当工具坏了,我们才意识到它的存在。
代码也是这样。好的代码应该是“透明”的,用户甚至意识不到它的存在,只是流畅地使用产品。糟糕的代码就像一副总是往下滑的眼镜,需要不断调整,分散注意力。
那么人生呢?刘星想。什么样的生活是“上手状态”的?大概就是那种不觉得在“努力生活”,只是自然地活着,呼吸,工作,爱,创造的状态。
他回到书桌前,继续读。
格雷厄姆谈到画家的工作方式——画家不是先画详细的蓝图,然后按部就班填充。画家是从草图开始,不断修改,不断调整,直到作品完成。编程也应该这样:先做出原型,然后迭代,在做的过程中理解问题,发现更好的解决方案。
这完全颠覆了刘星在大型软件公司接受的训练。在那里,流程是:需求文档→设计文档→编码→测试→发布。每一步都要评审,任何偏离设计的修改都要走变更流程。
但格雷厄姆是对的。真正创造性的工作,无论是绘画、写作还是编程,都需要探索的自由。你不能预先知道所有答案,你必须在做的过程中发现答案。
就像他的人生。他曾经试图按照社会脚本生活:好学生→好工作→好婚姻→好父亲。他以为只要按流程走,就能得到一个“好人生”。但生活不是工程项目,它是艺术创作,充满意外、调整、甚至推倒重来。
破碎,然后重组。这不是失败,而是创作过程的一部分。
刘星翻到书中一个折角页,那是他十年前折的。上面有一段话:
“编程语言不只是工具,它们是思考的媒介。不同的语言让你以不同的方式思考问题。Lisp让你思考抽象和元编程,C让你思考内存和性能,Python让你思考可读性和表达力。”
当时他觉得这段话很“玄”。但现在他懂了。
语言塑造思维。他用中文思考时,和用英文思考时,会有不同的联想和逻辑。同样,他用不同的编程范式思考时,会对同一个问题有不同的解法。
那么,如果他学习用“艺术的语言”思考呢?用诗歌的隐喻,用绘画的视觉,用陶艺的触觉?这些会不会改变他解决商业问题、甚至人生问题的方式?
刘星想起禅修时观察念头的体验。那时他学习用“觉知的语言”替代“分析的语言”。当他不再把情绪当作需要解决的问题,而是当作需要观察的现象时,他与情绪的关系就改变了。
也许这就是整合——学习多种语言,在适当的语境中使用适当的语言。
技术语言解决技术问题。哲学语言探索存在意义。艺术语言表达内在体验。不需要用一种语言做所有事。
他继续往下读。
格雷厄姆谈到“反对者”——那些说“这不可能”的人。他说,大多数重要的事情在一开始看起来都是不可能的,或者愚蠢的。如果一件事情明显是好的、可行的,早就有人做了。
刘星想起自己决定创业时,周围也有反对的声音:“现在经济不好”“竞争太激烈”“你年龄不小了,还折腾什么”。但他还是做了。
不是因为确信会成功,而是因为那是他当时必须做的事——就像画家必须画画,诗人必须写诗。那是内在的驱动力,不是外在的计算。
现在公司虽然还没有爆发式增长,但正在稳步发展,更重要的是,他们在做一些有意义的事。为视障儿童做工具,为小企业开发易用的SaaS,甚至李艳最近在探索的、帮助传统手工艺人数字化的项目……
这些在投资人眼里可能不够“性感”,但刘星觉得,这才是真正有价值的创造。
创造,而不是仅仅复制。
创造解决真实问题的方案,创造美的体验,创造有意义的工作。
书读到最后一章,格雷厄姆总结道:“黑客和画家的共同点是,他们都是创造者。他们从无到有创造出东西来。这是人类最深刻、最满足的活动之一。”
刘星合上书。
阳光已经移到了书桌的另一边,茶杯里的茶早就凉了。
他打开代码编辑器,不是要写什么具体的功能,只是想写点什么。
他新建了一个文件,命名为`life_lessons.js`。不是真的JavaScript代码,只是借用这种格式来表达。
//javascript
//人生课程 1.0
//作者:刘星
//最后更新:2023年秋
class Life {
constructor(birthConditions){
this.past = birthConditions;//无法选择
this.present = new Moment();//唯一的真实
this.future = new Possibility();//尚未存在
this.cracks =[];//破碎之处
this.goldenSeams =[];//金缮修复
}
//添加一些体验
myLife.experience(new Event('大学毕业', 2003));
myLife.experience(new Event('第一份工作', 2004));
myLife.experience(new Event('婚姻', 2010));
myLife.experience(new Event('儿子出生', 2012));
myLife.experience(new Event('职业危机', 2021));//这是一个破碎事件
myLife.experience(new Event('婚姻结束', 2021));//另一个破碎事件
myLife.experience(new Event('创业开始', 2022));
myLife.experience(new Event('禅修体验', 2023));
//创造一些东西
myLife.create(new Project('有意义的工作'));
myLife.create(new Project('健康的关系'));
myLife.create(new Project('内心的平静'));
//活在当下
myLife.bePresent();
写完这段伪代码,刘星笑了。这很幼稚,很程序员式的比喻,但对他有意义。
代码成了他理解世界的语言。当他把人生想象成一个类,把破碎和修复想象成方法,把当下想象成属性时,一切都变得清晰了——不是真的清晰,而是比喻性的清晰。
这让他想起李艳用诗歌表达的体验,罗斯科用绘画表达的情感,禅修老师用指导语表达的觉知。
每个人都需要自己的表达语言。对于刘星来说,代码是一种自然的语言。
他关掉编辑器,重新拿起《黑客与画家》。
这次他不只是读,而是感受。感受格雷厄姆对创造的热爱,对优美的追求,对解决问题的执着。这些品质,不正是他在自己身上也想培养的吗?
优美的代码,就像优美的生活——结构清晰,目的明确,冗余少,灵活性高。能够适应变化,能够在压力下保持稳定,能够在复杂中保持简单。
重构代码,就像重构自我——识别坏味道(bad smell),提取重复部分,简化复杂逻辑,让整体更可读、可维护、可扩展。
而他这两年的生活,不正是一场巨大的重构吗?
识别婚姻中的“坏味道”,提取出真正重要的部分(儿子),简化生活方式,重构自我认同,让整个系统(他的生活)变得更健壮。
窗外天色渐暗。刘星打开台灯。
他在笔记本上写道:
“重读《黑客与画家》。领悟到:
1.编程是创造,不只是工程。优美的代码有内在的美。
2.创造需要探索和迭代,不能完全预先规划。生活也是。
3.好的创造来自深刻的理解和真正的需要,不只是市场机会。
4.黑客和画家的共同点是创造——从无到有,让世界多了一点什么。
5.代码是我理解世界的语言之一。不是唯一的语言,但是重要的语言。
6.重构自我就像重构代码——识别问题,设计解决方案,小心实施,测试结果。
作为程序员,我曾经羞于承认这个职业的创造性。觉得不如艺术家‘高级’。但现在明白,任何深入的创造都是相通的。
我的任务不是成为艺术家,而是成为更完整的创造者——在代码中创造价值,在生活中创造意义,在关系中创造连接。
而这一切,都始于一行代码,一个当下,一次呼吸。”
写完,他合上笔记本。
手机响了,是儿子的睡前电话。
“爸爸,你在干嘛?”
“在读书。”刘星说,“一本关于黑客和画家的书。”
“黑客?是坏人吗?”
“不是那种黑客。是喜欢创造东西的人。”
“哦,就像我喜欢用积木搭房子?”
“对,就像你用积木搭房子。”
“那画家呢?”
“画家是用颜色创造美的人。”
“黑客和画家为什么放在一起?”
刘星想了想:“因为他们都是创造者。虽然用的工具不同——黑客用电脑,画家用画笔——但他们都在创造新东西,让世界变得更丰富。”
“我也想创造。”儿子说,“我明天要创造一个新的乐高城堡!”
“好,明天视频给爸爸看。”
“嗯!爸爸晚安。”
“晚安。”
挂断电话,刘星看着窗外的城市灯火。
每一盏灯下,可能都有一个创造者——在写代码,在画图,在写方案,在做饭,在给孩子讲故事。创造不一定是伟大的艺术,可以是日常的、微小的、但真实的东西。
而他,刘星,四十二岁的程序员、创业者、父亲、禅修者、哲学读者、艺术体验者——所有这些身份,都在参与创造。
创造事业,创造家庭,创造自我。
代码是这种创造的媒介之一,就像诗歌是李艳的媒介,陶艺是她的另一重媒介。
媒介不重要,重要的是创造本身。
刘星关上电脑,准备睡觉。
睡前他对自己说:“明天,继续创造。”
简单,但足够。

