[Hackers and Painters] 读书笔记 | 设计模式思想 | LISP

发布于:2025-05-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

黑客与艺术的关系

“如果你有两个选择,就选择较难的那个“

金钱不等于财富。创造有价值的东西就是创造财富

项目公式

探讨关于优秀程序员的话题

摘抄

保罗·格雷厄姆其人其事

人物经历

图书介绍

个人作品编辑

译者序

为什么书呆子不受欢迎

黑客与画家

不能说的话

你是一个随大流的人吗

真话

异端邪说

时空差异

机制

为什么这样做

守口如瓶

笑脸相迎?

永远质疑

良好的坏习惯

另一条路

设计与研究

后序

补充:LISP


编程是一种艺术创作

这是一本比较特别的书。书的作者保罗.格雷厄姆是美国人,是一个编程和黑客高手。

Paul 在书中对教育和很多琐碎的事和经历发表了自己的看法。这些看法,这不仅仅是单纯的观点,更多是一种感受和思考,是在透过事物的表象,结合自己的感受和相关理论,探究表象背后的成因,深入思考一些更深层次的东西。

跟随这本书来领略硅谷创业之父Paul Graham的思想。在读完书的前三章(1.为什么书呆子不受欢迎;2.黑客与画家;3.不能说的话)后,我已经坚定的要写读书笔记了。

下面主要就是一些 书中观点的摘抄


黑客与艺术的关系

黑客与画家、音乐家、建筑师、作家是一样的,都是创作者,都想创作出优秀的作品。
本质上都不是在做研究,虽然创作过程中,他们会发现一些新技术。

  • 我们都知道艺术其中的一项就是建筑,而编程的很多理念都来自建筑。
    编程里边高手都喜欢用设计模式,有23种,其实就是来源于建筑学
  • 设计模式这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
    1977年,美国著名建筑大师亚历山大在《建筑模式语言:城镇、建筑、构造》中提出了253种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。
    1979年,亚历山大又写了一本《建筑的永恒之道》,进一步加强了设计模式的思想。
  • 设计模式其实可以理解成一种套路,以不变应万变,就是来啥复杂的需求都能用它来套一下,能保证很好的扩展性和可维护性。

与其说优秀的软件设计师是工程师,不如说是建筑师。

黑客与画家是类似的

  1. 实践求真知。
    画家学习的方法是动手去画,黑客学习编程的方式也一样。从实践中学习的,光看书是学不会编程的。
  2. 模仿优秀作品。
  3. 多人协作模块化
    当多个画家创作一幅作品时,每个人画的部分是不一样的。
    软件的正确模式。把项目分割成严格定义的模块,每个模块由一个人明确负责。

如果你有两个选择,就选择较难的那个“

格雷厄姆给出的处事原则说到:“如果你有两个选择,就选择较难的那个。如果你要选择是坐在家里看电视,还是外出跑步,那就出去跑步吧。这个方法有效的原因可能是遇到两个一难一易的选择时,往往处于懒惰的缘故,你会选择较易的那个选项。在意识深处,你其实知道不懒惰的做法会带来更好的结果,这个方法只是迫使你接受这一点。”这项原则让我受益颇深,无论是工作还是生活中,遇到处事不决或想懒惰时,遵循这条原则,立刻就有了明确的决定。每次都选择较难的那一个,自律的习惯在不知不觉中就被养成

金钱不等于财富。创造有价值的东西就是创造财富

财富存在的时间与人类历史一样长久,甚至更长久。金钱是财富的一种简便的表达方式。

  • 一个人总是想“我需要一份工作”,别人也是这么对他说的,好像变成某个组织的成员,是一件多么重要的事情。更为重要的应该是,“你需要去做一些人们需要的东西。”解决人类有需求的问题,就是创造了价值。
  • 创业公司其实就是解决了某个技术难题的小公司。

项目公式

1. 搭建原型 2. 上线运营(别管bug) 3. 收集反馈 4. 调整产品 5. 成长壮大


探讨关于优秀程序员的话题

优秀的程序员应该兼具工科的严谨与艺术学科的想象力。

  • 应该是既热爱写代码又讨厌写代码的。
  • 通过写代码去探究和验证技术的原理;以实践,实验的方式传达工科的严谨。
  • 同时又需要有艺术想象力和创造力,将自己对技术本质的理解和对应用的想法用画笔画出来。
  • 程序员的画笔就是编程语言。
  • 优秀的程序员欣赏自己满意的代码,就像是在欣赏裱在IDE中的心爱画作一般。

同时,写重复的代码又是极其让人厌烦的,特别是没有优化和改进空间的简单重复,会带来乏味和审美疲劳,极度扼杀程序员的创造力和想象力,阻碍其进一步成为优秀的程序员。

摘抄

  • 应该把黑客与画家当作同一种人看待。和画家一样,黑客只是怀有一门特殊手艺、有创造天赋的普通人。这个书名还有另一层含义,即编程是一种艺术创作,黑客就是艺术家,开发软件与画家作画、雕塑家雕刻、建筑师设计房屋并没有本质不同。
  • 后来认识很多人,读书的时候都被称为书呆子。从他们身上我发现,“书呆子”与“高智商”有强烈的正相关关系。而这些人在中学里都是不受欢迎的学生,你越喜欢读书,就越不受别人的欢迎,因此“书呆子”和“受欢迎”之间,有一种更强烈的负相关关系。这样看来,“高智商”似乎导致了你不受欢迎。
  • 难怪聪明的小孩读中学时往往是不快乐的。他们有其他的兴趣,没有多余的精力用来使自己更受欢迎。
  • 你在其他地方有所得,就会在这个地方有所失。不受欢迎使得书呆子成为全校攻击的目标。令人惊奇的是,这种噩梦般的情景并非出自任何有预谋的恶意,而仅仅因为这个特殊的环境。
  • 因为我在这个世界中过得并不好,我觉得一定是自己什么地方做错了。我没有意识到,作为书呆子,我不适应周围环境,某种程度上正说明我领先了一步
  • 黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。
  • 黑客通过实践学习编程,这又是一个标志,说明黑客与科学家的区别有多大。科学家就不会通过干活来学习科学,而是通过做实验和解题来学习。科学家研究的基础都是现有的很完美的成果,在这个意义上,他们的第一步只是在复制别人已经做过的工作。最后,他们才会从某一个点开始,进行自己的原创性工作。但是,黑客就不一样,从一开始做的就是原创性工作,根本没有他人完美的成果可以依靠。所以,黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性
  • 坚持一丝不苟,就能取得优秀的成果因为那些看不见的细节累加起来,就变得可见了。
  • 如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写出代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。
  • 黑客就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣
  • 普通黑客与优秀黑客的所有区别之中,会不会“换位思考”可能是最重要的单个因素。有些黑客很聪明,但是完全以自我为中心,根本不会设身处地为用户考虑。这样的人很难设计出优秀软件,因为他们不从用户的角度看待问题[注释]。
    判断一个人是否具备“换位思考”的能力有一个好方法,那就是
    看他怎样向没有技术背景的人解释技术问题
  • 但真正令人惊恐的是,流行一时的不仅有衣服,还有道德观念。明明是专横武断、毫无依据的错误观点,但是大多数人却深信不疑,受到影响而不自知。这是非常危险的。流行的衣服,其实是很难看的衣服;流行的道德观念,其实不是善而是恶。但是,如果别人都穿流行的衣服,而你不穿,你就会遭到嘲讽;如果别人都遵守流行的道德观念,而你不遵守,结果则要严重得多,你会被解雇、流放、监禁,甚至被杀。
    要是能坐上时间机器回到过去,不管哪一个年代,有一件事都是不会改变的,那就是“祸从口出”。你一定要小心自己说的话。自以为无害的言论会给你惹来大麻烦
  • 书呆子就是那样惹上麻烦的。他们穿着不流行的衣服,讲着不合适的话。他们觉得自己说出了正确的观点,实际上却惹来了麻烦。习俗的力量不足以束缚他们
  • 如果你的兴趣主要是别的事情,变成他人眼里的”黄色分析”对你是极大的干扰。与笨蛋辩论,你也会变成笨蛋。
  • 这时你要明白自由思考比畅所欲言更重要如果你感到一定要跟那些人辩个明白,绝咽不下这口气,一定要把话说清楚,结果很可能从此你再也无法自由理性地思考了。我认为这样做不可取,更好的办法是在思想和言语之间划一条明确的界线。在心里无所不想,但是不一定要说出来。

保罗·格雷厄姆其人其事

人物经历

保罗·格雷厄姆以Lisp方面的工作而知名,也是最早的Web应用Viaweb的创办者之一,后来以近5千万美元价格被雅虎收购,成为Yahoo! Store。

  • 他的著作包括On Lisp (1993),ANSI Common Lisp (1995) 和Hackers & Painters (2004)。
  • 1998年,他以5000万美元价格将自己创建的、可帮助他人快速开网店的Viaweb公司卖给了雅虎。
  • 他将Y Combinator视为一新兴公司,并称要将现有规模扩大一倍(目前它共资助43家公司),但首要问题是找到公司的发展瓶颈并加以解决。
  • 格雷厄姆担心,他和其合伙人没有足够的时间来应对这些创业者,而且办公场地也太小。
  • 他计划引入另一合伙人并扩大公司总部。他说:“第一个夏天,我们只资助了8家新兴公司。如果那时有人说我们会资助43家公司,那简直就是天方夜谭。我相信再过几年,我们资助的初创企业数量将会是个不可能的数字。”

2005年他与人共同创建了著名的创业投资公司Y Combinator,先后投资了数十家创业公司,包括reddit、Justintv等。公司的新闻网站Hacker News是访问量最高的技术新闻信息来源之一。
2008年,他与Y Combinator的另一位创办者杰西卡·利文斯顿结婚。
他拥有哈佛大学应用科学(计算机方向)博士学位,并在罗德岛设计学院和佛罗伦萨绘画艺术学院学习过绘画。


图书介绍

这本书是一个散文集,一共15篇,每篇文章之间没有关联,大家可以跳跃着来读。"黑客与画家"是其中一篇,书名也取了这篇文章的名字

  • 当提到黑客,在一些大众的眼里面,黑客就是入侵计算机的人,和计算机犯罪联系在了一起。
  • 那么黑客一词最早的时候是定义为那些专门解决计算机中出现疑难问题的人,是一流能力的象征,自由软件基金会的创始人理查德.斯托尔曼说:"出于兴趣而解决某个难题,不管它有没有用,这就是黑客。
  • “可见,从精神层面看,黑客追求着一种愉悦或者是享受,是有精神追求的人。黑客在这本书中也倾向于代表着优秀的程序员或者软件设计师,但是对"软件工程师"这个称谓,作者是不太赞成的。作者认为优秀的软件设计师如其说是工程师,还不如说是建筑师,建筑师表现在"做什么”,而工程师表现在"怎么做",有意思的一点是,在英语中"建筑师"和"架构师"是同一个词architect,那么优秀的程序员不仅负责建造,还负责架构。

个人作品编辑

Hackers & Painters: Big Ideas from the Computer Age-中文版《黑客与画家》由阮一峰翻译。

  • 此后的两三年,格雷厄姆一直过着一种动荡的生活。他栖身于纽约一间极小的公寓,追求自己的艺术家梦想,但是收入低而且不稳定,日子过得非常窘迫,常常入不敷出,他不得不经常替别人编程,赚取一些生活费
  • “运营创业公司,每天都像在战斗;而为大公司工作,就像在窒息中挣扎。” 于是,他选择了辞职
  • “我们生活中的一切,都正在成为计算机。所以,如果你想理解我们目前的世界以及它的未来动向,那么多了解一些黑客的想法会对你有帮助。”

他的创业公式是:
(1)搭建原型
(2)上线运营(别管bug)
(3)收集反馈
(4)调整产品
(5)成长壮大

所有学员刚刚来到YC的时候,每人都会拿到一件白色T恤衫,上面写着“Make something people want”(制造用户需要的东西),等到他们的项目得到风险投资以后,又会收到一件黑色T恤衫,上面写着“I made something people want”(我制造了用户需要的东西)。

2005年3月,哈佛大学的学生团体“计算机协会”邀请格雷厄姆做演讲。

他选择的题目是《如何成立创业公司》。“我对他们说,选择天使投资人的时候,最好选择那些自己有过创业经验的人。”说完这句话,他发现学生都以期待的眼神看着他,他赶紧补充说:“我不是天使投资人。”

“以前创业很昂贵,你不得不找到投资人才能创业。而现在,唯一的门槛就是勇气。”

译者序

想要把握这个时代,就必须理解计算机。理解计算机的关键,则是要理解计算机背后的人。

表面上这是一个机器的时代,但是实际上机器的设计者决定了我们的时代。

程序员的审美决定了你看到的软件界面,程序员的爱好决定了你有什么样的软件可以使用。

黑客行为必须包含三个特点:好玩、高智商、探索精神

编程是一种艺术创作


为什么书呆子不受欢迎

所以,如果智力本身与“受欢迎”无关,为什么聪明的小孩一直不受同龄人的欢迎呢?我认为,答案就是他们真的不想让自己受欢迎。

  • 如果当时有人告诉我这个答案,我一定会嘲笑他。在学校里不受欢迎,你的日子就很难过,有人甚至因此自杀。
  • 所以,要是你跟我说,是我本人不想受欢迎,那就好比你在说,我在沙漠里快渴死了,却又不想喝水。别搞错了,让自己更受欢迎,这才是我要的。
    但是事实上,我并不是那么强烈地渴望这个。我更想追求的是另一件事情——聪明。

文艺复兴时期的代表人物阿尔伯蒂[插图]有一句名言:“任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入。”

我13岁的那一年,对世界的全部认识,就是身边看到的一切。

黑客与画家

  • 同样地,优秀的软件也要求对美的狂热追求。
  • 如果你查看优秀软件的内部,就会发现那些预料中没有人会看见的部分也是优美的。

不能说的话

有时候,别人会对你说:“要根据社会需要,改造自己的思想(well-adjusted)。”

  • 这种说法隐含的意思似乎是,如果你不认同社会,那么肯定是你自己的问题。你同意这种说法吗?事实上,它不仅不对,而且会让历史倒退。
  • 因为最先从你头脑中跳出来的想法,往往就是最困扰你、很可能为真的想法。你已经注意到它们,但还没有认真思考过。

做一个异端是有回报的,不仅是在科学领域,在任何有竞争的地方,只要你能看到别人看不到或不敢看的东西,你就有很大的优势

  • “守口如瓶”的真正缺点在于,你从此无法享受讨论带来的好处了。讨论一个观点会产生更多的观点,不讨论就什么观点也没有
  • 如果想要清晰地思考,就必须远离人群。
  • 但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。
  • 小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。

你是一个随大流的人吗

黑客是不服从管教的,这就是他们的本性。这也是美国人的本性。

人们惊慌失措时采取的措施到头来产生了适得其反的效果。

真话

上面写着“太麻烦,不如死”(death before inconvenience)

  • 对于互联网软件,没人规定只能使用某些语言开发,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么语言。
  • 不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工具。尤其是在竞争者存在的情况下,“可以这样做”就变成了“必须这样做”(详见后文),因为如果你不利用语言的优势,那就会听任对手超过你。
  • 如果你出错了,没有人会提醒你,唯一的代码保护机制就是你的羞耻心,你不想被同事当成傻瓜,这就足矣。

人数越来越少,软件开发的效率将指数式增长。我不记得我们在Viaweb开过讨论如何编程的会议。步行去吃午饭的路上,我们就能把该说的话说完,从来没有例外。

管理企业其实很简单,只要记住两点就可以了:

  • 做出用户喜欢的产品
  • 保证开支小于收入

只要做到这两点,你就会超过大多数创业公司。随着事业的发展,你自己就能琢磨出来其他的诀窍。

异端邪说

创造有价值的东西就是创造财富。

  • 要致富,你需要两样东西:可测量性和可放大性。
  • 你的职位产生的业绩,应该是可测量的,否则你做得再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。
  • 尽快拿出1.0版,然后根据用户的反映而不是自己的猜测进行软件优化。

时空差异

一个人的工作具有多少价值不是由政府决定的,而是由市场决定的。

  • 技术无法使其变得更便宜的唯一东西,就是品牌。
  • 这正是为什么我们现在越来越多地听到品牌的原因。
  • 富人与穷人之间生活差异的鸿沟正在缩小,品牌是这种差距的遗留物。

机制

  • 好设计是简单的设计。
  • 好设计是永不过时的设计。

为什么这样做

  • “所有编程语言我都用过。”某个看上去饱经风霜又酷的黑客往酒吧里一坐,“你用什么语言并不重要,重要的是你对问题是否有正确的理解。
  • 代码以外的东西才是关键。这当然是一派胡言。各种语言简直是天差地别,比如Fortran I和最新版的Perl就是两种完全不同的语言

守口如瓶

一百年后,人们使用什么语言开发软件?

我的判断是,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。

我已经预测了,一旦未来硬件的性能大幅提高将会发生什么事。新增加的运算能力都会被糟蹋掉。

  • essay(论文)这个词来自法语的动词essayer,意思是“试试看”。
  • 从这个原始意义来说,论文就是你写一篇文章,试着搞清楚某件事。软件也是如此。我觉得一些最好的软件就像论文一样,也就是说,当作者真正开始动手写这些软件的时候,他们其实不知道最后会写出什么结果。
  • 比尔·伍兹曾经对我说,根据经验判断,每增加一个解释层,软件的运行速度就会慢一个数量级。但是,多余的软件层可以让编程灵活起来。

因为这段差距正在变得越来越大,所以性能分析器(profiler)将变得越来越重要。


笑脸相迎?

大公司每年平均成长大约10%。所以,如果你掌管一家大公司,只要每件事都做到大公司的平均水准,你就能得到大公司的平均结果,也就是每年成长大约10%。

在竞争中,对手无法理解你的技术优势,这可是再宝贵不过了。商场如战场,对手摸不透你,你的胜算就增加了。

到了一定年龄之后,程序员极少主动更换自己的编程语言。不管习惯使用的是哪一种语言,他们往往认为这种语言已经足够好了。程序员非常忠于他们心爱的语言

有些公司的职位描述使用了大量的IT词汇,这样的内容越多,这家公司就越不构成威胁。

  • 最不用担心的竞争对手就是那些要求应聘者具有Oracle数据库经验的公司,你永远不必担心他们。
  • 如果是招聘C++或Java程序员的公司,对你也不会构成威胁。如果他们招聘Perl或Python程序员,就稍微有点威胁了。至少这听起来像一家技术公司,并且由黑客控制。
  • 如果我有幸见到一家招聘Lisp黑客的公司,就会真的感到如临大敌。

永远质疑

无论什么时候,整个语言都是可用的。

  • Lisp并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码,也可以在编译期读取或运行代码,还可以在运行期读取或者编译代码。
  • 使用一种不常见的语言会出现的问题我想到了三个:你的程序可能无法很好地与使用其他语言写的程序协同工作;你可能找不到很多函数库;你可能不容易雇到程序员。

到目前为止,大家公认少于10个人的团队最适合开发软件。(人月神话的梦幻联动)

  • 总之,根据上面的这个数字,如果你与ITA竞争,而且你使用C语言开发软件,那么ITA的开发速度将比你快20倍。如果你需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果ITA开发某个新功能用了三个月,那么你需要五年才能做出来。

事实上,按照大多数公司的实际情况,计划中五年完成的项目很可能永远都不会完成。

在大型组织内部,有一个专门的术语描述这种跟随大多数人的选择的做法,叫做“业界最佳实践”。

闭包(即一个函数,通过它可以引用由包含这个函数的代码所定义的变量)


良好的坏习惯

编程语言还需要有一本介绍它的书。这本书应该不厚,文笔流畅,而且包含大量优秀的范例。

  • 布赖恩·柯尼汉和丹尼斯·里奇合写的《C程序设计语言》(C Programming Language)就是这方面的典范。
  • 眼下,我大概还能再加一句,这一类书籍之中必须有一本由O’Reilly公司出版发行。这正在变成是否能吸引黑客的前提条件了。

举例来说,hello-world 本应该是一个很简单的程序,但是在Java语言中却要写上一大堆东西,这本身就差不多可以说明Java语言设计得有问题了。

一下子从无到有做出一个大项目是很恐怖的一件事。当人们接手一个巨型项目时,很容易被它搞得一蹶不振。

  • 最后,要么是项目陷入僵局,要么是做出来一个规模小、性能差的东西。你想造一片闹市,却只做出一家商场;你想建一个罗马,却只造出一个巴西利亚;你想发明C语言,却只开发出Ada。
  • 某种语言到底是静态类型还是动态类型、是面向对象还是函数式编程,这些都不如函数库重要。
  • 大多数人接触新事物时都学会了使用类似的过滤机制。甚至有时要听到别人提起十遍以上他们才会留意。这样做完全是合理的,因为大多数的热门新商品事后被证明都是浪费时间的噱头,没多久就消失得无影无踪

著名散文家E.B.怀特说过,“最好的文字来自不停的修改”。所有优秀作家都知道这一点,它对软件开发也适用。


另一条路

  • 让用户满意并不等于迎合用户的一切要求。用户不了解所有可能的选择,也经常弄错自己真正想要的东西。
  • 做一个好的设计师就像做一个好医生一样。你不能头痛医头,脚痛医脚。病人告诉你症状,你必须找出他生病的真正原因,然后针对病因进行治疗。
  • 画家之间甚至流传着一句谚语:“画作永远没有完工的一天,你只是不再画下去而已。”这种情况对于第一线的程序员真是再熟悉不过了。

设计与研究

大多数优秀设计都是这样产生的,它们已关注用户,并且以用户为中心。

  • 我说设计必须考虑用户的需求,这里的“用户”并不是指所有普罗大众。事实上,你可以选择任何想要的目标用户。比如,假定你正在设计一种工具,你可以把目标用户定为初学者,也可以定为专家级用户。一种人眼里的优秀设计可能在另一种人眼里却是糟糕无比。这里的重点是你必须选出某些人作为你的目标用户。我觉得,除非设定目标用户,否则一种设计的好坏根本无从谈起。
  • 如果目标用户群体涵盖了设计师本人,那么最有可能诞生优秀设计。如果目标用户与你本人差别很大,你往往会假定目标用户的需求比你本人的需求更简单,而不是更复杂。低估用户(即使出于善意)一般来说总是会让设计师出错。我怀疑那些设计“公共住宅项目[插图]”(housing project)的建筑师根本没想过自己住在里面会是什么感觉。编程语言也有这种现象。C、Lisp和Smalltalk都是设计者为了自己使用而设计的,而Cobol、Ada和Java则是为了给别人使用而设计的。

如果你觉得自己在为傻瓜设计产品,那么很可能不仅无法设计出优秀产品,而且就连傻瓜也不喜欢你的设计。
不过,就算你的设计针对的是最高端的用户,你也一样是设计给人类使用。研究就不一样了。做数学研究时,你不会只为了方便读者理解而故意选择一种更麻烦的证明方式,你只会选择最直接、最简洁的证明。我想,一般来说科学研究都是这样。科学观点不需要服从人类工程学(ergonomic)。

所谓痛点,正是如此

  • 让用户满意并不等于迎合用户的一切要求。用户不了解所有可能的选择,也经常弄错自己真正想要的东西。做一个好的设计师就像做一个好医生一样。你不能头痛医头,脚痛医脚。病人告诉你症状,你必须找出他生病的真正原因,然后针对病因进行治疗。

先做出原型,再逐步加工做出成品,这种方式有利于鼓舞士气,因为它使得你随时都可以看到工作的成效。开发软件的时候,我有一条规则:任何时候,代码都必须能够运行。如果你正在写的代码一个小时之后就可以看到运行结果,这好比让你看到不远处就是唾手可得的奖励,你因此会受到激励和鼓舞。

后序

  • 作者的散文也是形神聚散,但娓娓道来的东拉西扯确实字字珠玑,工作之余有空写写一路走来的心路历程,顺便财富自由
  • 本书把软件开发中显而易见的道理高屋建瓴的给出简洁的指导意见,虽然是一家之言,但不得不佩服很多年前这么先进open的理念。然而对于中国的软件开发者来说,事实似乎没那么简单。

补充:LISP

作者简直是lisp 语言的坚实簇拥,后来发现其实思维是这样的:程序员总是手里有个榔头看啥都是钉子。可能他只会LISP就顺道diss 了其他语言,尤其是java,还好稍微给python 留了点余地。十几年前已经有了对语言发展趋势的预见,可见功力之深厚。

(读完书后 简单了解了一下)

LISP (List Processing) 是一种具有悠久历史的编程语言,以处理列表数据作为其基础数据结构而闻名。LISP 是一种函数式编程语言,它的设计思想影响了许多后续的编程语言,包括 Python、JavaScript、Scheme、Clojure 等。

以下是关于 LISP 的一些关键特点和概念:

  1. 函数式编程:LISP 是一种函数式编程语言,它的主要构造是函数和列表。在 LISP 中,程序和数据都被表示为列表,这使得 LISP 成为一种同构系统(homiconic system)。
  2. 递归:由于 LISP 的函数式特性,递归是编写 LISP 程序的一种常见方法。
  3. S-表达式(S-expressions):LISP 程序由 S-表达式组成,这些表达式可以是原子(如数字或符号)或列表(由圆括号包围的一系列 S-表达式)。
  4. 列表处理:LISP 的主要数据结构是列表,这使得它非常适合处理序列数据。LISP 提供了许多内置函数来操作列表,如 car(获取列表的第一个元素)、cdr(获取列表的其余部分)、cons(创建一个新的列表)等。
  5. :LISP 提供了宏系统,允许程序员定义新的控制结构或语法结构。宏在 LISP 中非常强大,因为它们可以在编译时扩展为代码。
  6. 动态类型系统:LISP 是一种动态类型语言,这意味着变量的类型在运行时确定,而不是在编译时。
  7. 闭包和词法作用域:LISP 支持闭包和词法作用域,这使得它可以编写复杂的、模块化的程序。
  8. 实现:有多种 LISP 的实现,包括 Common Lisp、Scheme、Clojure 等。这些实现提供了不同的语言特性和库,但都遵循 LISP 的基本语法和语义。

如果对 LISP 感兴趣,可以尝试学习一种具体的 LISP 实现,如 Common Lisp 或 Scheme。这些实现都有丰富的文档和教程可供参考。同时,你也可以参加一些在线编程社区或论坛,与其他 LISP 爱好者交流经验和技巧。


网站公告

今日签到

点亮在社区的每一天
去签到