一本好书的魅力在于“常读常新”。它不仅凝结了作者几十年的智慧与经验,更是需要反复品味才能真正理解与掌握。即使是同样的文字,在不同的时光与心境下阅读,常常能激发出全新的思考与感悟。《黑客与画家》正是这样一本值得反复阅读的经典之作。
老彼得·勃鲁盖尔的《巴别塔》
Paul Graham 的《黑客与画家》是一本充满个人洞见的作品。如果你对 Paul Graham 这个名字不熟悉,可以参考维基百科对他的描述:
“他以其在 Lisp 编程语言上的工作、早期创立的初创公司 Viaweb(后更名为 Yahoo! Store)、创立知名创业加速器及种子基金 Y Combinator、他的博客以及 Hacker News 而闻名。”
这本书出版于 2004 年,距今已二十年之久。然而,其中关于计算机编程和创新思维的见解依然发人深省。在这里,我想谈谈书中对编程的一些核心思考,这些观点不仅深刻,还影响了许多技术实践。(当然,如果你不是程序员,你对编程没有任何兴趣,可以直接跳到后半部分阅读。)
编程与绘画之间的类比是书中的核心思想之一,正如他在
书中同名章节「黑客与画家」中
详细探讨的那样。两者的相似之处在于它们的创造性本质,而非科学性:
“黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。 ”
Paul 在这里将编程描述为一种艺术创作,而不是传统意义上的工程实践。这一观点启发我们重新思考编程教育和技术开发的方式。科学或数学的正式训练固然重要,但并非成为优秀程序员的唯一途径。借鉴艺术创作的经验,比如注重直觉和试验性思维,可以大幅改善编程工具和方法。
此外,Paul 提出了一个具有挑战性的观点:技术的真正价值不在于精确性,而在于其创造性如何改变世界。这种对技术的审视也为后来众多创新者提供了灵感。
很多人误以为优秀的程序员应该一开始就知道如何解决问题,并像数学家心算那样直接完成代码。你是否也曾因为需要多次尝试才能解决一个问题而感到挫败?
Paul 反对这种误解。他指出,编程的过程本质上是探索性的,这与他在书中讨论动态语言的章节内容紧密相关:
“你应该在编写程序的过程中逐步解决问题,就像作家、画家和建筑师在创作过程中一样。”
这一点揭示了编程的真正工作方式。程序员并非一开始就拥有所有答案,而是通过反复试验找到解决问题的最佳方法。这种观点对编程工具的设计提出了新的要求:
“编程语言应该是灵活的,是帮助我们思考的工具,而不是仅仅用于表达已经完成的想法。它应该像铅笔,而不是钢笔。”
Paul 特别强调,动态类型的语言特性能够帮助程序员更自由地构思和实验。这一观点在书中「设计与研究」章节得到进一步阐释,他认为灵活性是推动创新的关键。在他看来,编程工具的灵活性和适应性比绝对的规范性更加重要。
尽管动态类型语言近些年来面临静态类型语言的竞争,其核心价值仍然体现在许多领域。例如,Python 的广泛使用表明,在探索性任务中,灵活性依然是开发者的重要需求。
“一种好的编程语言应该像油画一样,能够让你轻松地改变主意。”
Paul 指出,油画的独特魅力在于它允许艺术家在原型的基础上不断修改和完善,直到完成最终作品。
“油画之所以令人兴奋,是因为你可以用它在原型的基础上完成最终作品。”
他认为,这种特性同样适用于理想的编程语言设计。然而,编程语言需要兼顾快速原型开发和生产级别的可靠性,这使得实现这种特性变得困难。
Paul 强调,评估编程语言不能只看最终代码的简洁性,更重要的是从原型到成品的整个开发过程是否顺畅。他在书中进一步探讨了这一点,提出好的语言设计必须兼顾探索与生产:
“一种语言的评判标准,不仅在于它写出的最终程序是否简洁,还在于通往最终程序的路径是否流畅。”
这一观点具有深远的意义:程序开发是一段旅程,而不是一个静态的终点。语言的设计需要为程序员提供改进和演化的空间,从而推动创新。
《黑客与画家》不仅仅是一本关于编程的书,更是一份对创造力本质的思考。Paul 通过绘画的隐喻,将编程从传统的工程学框架中解放出来,赋予它更多的人文意义和艺术价值。
-
编程是一种创造性的艺术
:它不应该局限于科学和工程的视角,而应该更多地向艺术和设计借鉴方法。
-
探索是编程的核心
:程序员应该接受试错的过程,并利用灵活的工具支持这种探索。
-
语言设计需要关注过程
:好的编程语言不仅要关注结果,还需要优化开发的路径。
从这些思想中,我感受到 Paul 对技术的思考始终以人性为核心。他所描绘的编程不仅是一种技能,更是一种让世界变得更好的方式。
硅谷创业教父Paul Graham畅销20年的思想经典