黑客与画家
这是一本散文集。
为什么书呆子不受欢迎
在不考虑欺负他人的较为受欢迎的孩子所需要的社会认同感的前提下,就自身而言,书呆子把精力放在了其他地方,比如对智力的追求上。人的精力是有限的,显然,多一份精力去保持受欢迎,就会少一份精力去发展智力。书呆子选择了后者。不过,有少数的人能够兼顾两者。
在某些时候,书呆子在用成人的思维活在了青少年这个层次上,导致从某些角度上看,书呆子格格不入,但是一工作,进入成人的世界,貌似他们还挺受欢迎的。
作者还扯了一些事情来描述他所认为的扭曲的世界,主要观点就是这个扭曲的世界造就了叛逆的青少年。
黑客与画家
书的第二章,从书名感觉,这是最中心的一章?不确定。
黑客,与画家一样,是创作东西的人。创造性的工作导致了考核的困难,难道用代码行数去考核一个黑客的工作量吗?
相比他人误解自己的工作,更可怕的事情是自己误解自己的工作。其实作为所谓的软件工程师,日常工作和“计算理论”相去甚远,工作中我们要解决的是实际问题,而不是研究。和之前看到的一句话类似,加了 science 的都不是真正的 science,计算机科学与技术,进入到软件工程师这个领域,就和科学没太大关系了。不过,这并不妨碍我在业余时间搞些“理论”或者和自然科学接近的东西。
大公司的工程师其实和技术工人没啥区别,说白了就是匠人。不过感觉作者在这里说的有点极端了。
黑客,作为创作者,和软件工程师是不一样的,但是创作东西很难,养活自己也难,怎么办呢?找一个 day job。这个短暂的寒假,在家里做了点事,也思考了很多,发现自己更喜欢智力上的思考,比如考虑下 Project Euler 上的题目,学学数学物理啥的,如是而已。我是不是也应该找一个按时上下班的 day job 呢?
画家想要提高技术,实践,多画;再就是模仿,临摹;先框架,再细节,但是填充细节的时候不是简单的填充,可能涉及修改一开始的构想。黑客,想要提到技术,无它,也就这三条,多写代码;学习开源的东西,试着造自己的轮子;重构,对代码要有追求。
黑客,要想作出一个好的艺术品,要学会换位思考。产品级,设身处地的从用户角度着想,他们可能什么也不懂;代码级,除了写,还要读,要精益求精。
黑客能够流芳百世呢?和画家一样,交给时间去评判吧。
不能说的话
别人告诉你,如果你不认同社会,那么肯定是你自己的问题。你同意这种说法吗?事实上,它不仅不对,而且会让历史倒退。这让我想到在百度看到一条标语,Robin 说过,如果别人说你错了,那肯定是你错了,你要想办法改正自己的错误,解决问题。呵呵哒。
什么话不能说呢?看似胡扯、大逆不道的话,但会让人思考的话,这句话是不是真的呢?在很多场合,真话,不能说。
作者还提到了一种方法去看什么话不能说,就是机制,看看禁忌是如何产生的,为什么会有这些禁忌。
自由地思考,比畅所欲言更重要。守口如瓶,看似愚钝,其实也有很多好处,至少不会让你和一个 SB 争论而使得自己无法理智的思考;缺点是无法和别人交流。破解之道,和能说话的人说即可。还有些方法,比如幽默,隐喻,这些相比第一个,少难些。
如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?
良好的坏习惯
黑客的天性就是不服从管教,自由,还有些自负。
另一条路
作者起到了一种用户使用软件的新方式,其实就跟现在的云计算有点类似,大概相当于 SaaS,有些相当于 PaaS。还有一个事情,他提到了新的敏捷型的互联网的开发模式。作者完成这本书已经有很长的时间了。书中提到的很多很多开发模式上线模式维护模式现在在互联网公司都被使用着。书里面还提到了收费模式就是现在比较流行的订阅模式而不是传统软件买一个版本。一般来说,用户每次只需要支付一点点钱就能使用一段时间,然后再付费就继续使用,期间可能有版本的升级,但是这是用户买的服务,使用它就好了。书中还描绘了一种和客户、用户很近的工作模式,这也是现在开发的所提倡的,但是不管是在微软工作还是在百度工作,这种我理想中的工作模式都很远,也不能说很远吧,比较远。
书中写了未来是互联网的,不过作者写这本书有一段距离时间了,互联网火了之后又出现了移动互联网,但是现在的移动互联网和当年的桌面应用没有区别,安装 app 软件这种形式。所以。我觉得,手机端的发展或者说以后的某种可移动的电子设备又或者是现在流行的虚拟现实交织的输出输入设备,应该和现在互联网这种模式类似,web 就足够了,而不是 app。
- 上面这段话写于 2016 年,现在 2023 年了,各大互联网公司为了拿去客户隐私,强制使用 app,但是这个 app 绝大多数功能都是 web 套壳。一言难尽。
如何创造财富
多干活,多挣钱,这是基本定律。创业,压缩一切可工作的时间,提高效率,可以挣更多的钱。
创业这事,除了聪明、勤奋,还需要运气。大公司的问题是无法测量每一个人的贡献值,多数都是平均主义。由此反推导致大公司的员工中有很多人也不会 100% 的努力工作。举个例子,100 个人划一艘大船,努力被平均,反馈也差些,看不到船到底增速多少,偷懒亦是如此。而创业公司就像是三五个人划船,情况就不同了。每个人的努力都基本上会被真实反馈,说白了,努力可测量性大大提成。创业,从整个社会而言,回报是等于付出的,但是,那是一个平均值,多数人,或者说是绝大多数人,都没有回报,极少数人获得了极高的回报。
关于贫富分化
作者讲了挺多经济学的基础,比如财富、分工、共赢、用财富去创造财富等等。技术的发展,某种意义上缩小了穷人和富人的差距,现在多数人都能有手机、计算机、洗衣机、电视机,而以前,穷人和富人的差别是有无的区别,而现在,只是质量不同品牌不同,甚至没有差别,富人也不过是使用 iPhone 罢了。什么被扩大了呢?钱的数量,技术往往有扛杆作用,使得资本成多项式的发展。
防止垃圾邮件的一种方法
作者使用的方法就是贝叶斯统计法加上白名单,能够高效的过滤垃圾邮件。不过,现在垃圾邮件是少多了。如果越来越少,那么商家发送垃圾邮件的成本,比成本还大以致于无利可图的时候,或许,就没有垃圾邮件了。
设计者的品味
人们对美的追求,很多时候是一致的。数学家、物理学家、艺术家、画家、作曲家、建筑师等等,对美的追求有很多相似之处。作者解释了好的设计是什么样子的设计。是简单的设计,数学公式,往往很简单,但很优美;是永不过时的设计,比如那些美的数学定理;是解决问题的设计,田字形的出风口,控制器设计成田字形的,显然简单易懂,很美;是启发性的设计,比如软件,以模块的形式提供给用户,他们可以像乐高积木一样任意组合;通常是有趣的设计,不是所有的设计都很有趣,但是毫无趣味的设计很难是好的设计;是艰苦的设计,这里的艰苦指的是向前冲刺的艰苦,而不是那种无谓的艰苦;是看似容易的设计,冠军往往看似容易的胜利,背后往往有着艰苦的训练;是对称的设计,对称,多数时候就是重复和递归;是模仿大自然的设计,嗯,法自然;是一种再设计;是能够复制的设计,先模仿,再创造,在复制去解决问题,这是一个否定之否定的过程;往往是奇特的设计,不过奇特,是无法培育的;是成批出现的,让很多有天赋的人聚在一起,共同解决某个难题,互相激励;常常是大胆的设计,颠覆过去的设计,前提是深入地理解过去的设计。
编程语言解析
作者扯了很多语言梗和很多编程语言之争的点。
一百年后的语言
对作者的一个观点很赞同,硬件在高速发展,但是新出的编程语言在肆无忌惮的浪费它们。现在,很多场景需要的是提高程序员的效率。作者想要的是内核很小的编程语言,比如字符串和普通数组,甚至和列表相比没有太多区别,整数也可以在语法层面表示成列表,至于字符串优化,整数运算优化,那是编译器的事情。编程语言的发展和现在软件的发展类似,层次越来越多,抽象程度越来越高,速度也相应越来越慢,人们更多的是在最上层解决实际中的问题。
拒绝平庸
先闲扯一句,看到作者说真正的黑客应该学习 Lisp,挺开心,我就在学习 Scheme,对我的编程思维、思考问题的方式的影响真的很大很大,就像作者说的那样,也许它不会对我找工作升职加薪有太多直接的帮助,但是训练思维,能更好的前进。
看了秘密武器一节,作者已经连续三章说明 Lisp 的好了,作者是真心喜欢这门语言。Lisp 很强大,但是大家为什么不使用呢?语言强大的偏序曲线上,任何一级的程序员都可能会鄙视底层的语言,但是不关心上层的语言,因为多数时候,多数人,他们的思维长期被一种类型的语言束缚住了,不太会换语言。从公司层面考虑,问题就更多了。
书呆子的复仇
顶级书呆子和他的学生,搞出了抽象层次极高的 Lisp 函数,作者又花了一章来说明它的好,不过,看了作者举得例子,都说明这么语言表达能力是极强的。
题目中包含复仇,让我想到《荒野猎人》里的一句话,复仇这种事情还是交给上帝吧。或许,那个顶级书呆子就是上帝的杰作。
梦寐以求的编程语言
简单的总结下作者想要的语言,我觉得这也是很多程序员的想法。首先抽象层次要高,互动性好;普遍的问题有现成的库函数可以用,语言核心很小,配套的类库很强大,而且这些类库精心设计,正交,组合起来能够很好的协同工作。语言的句法很简短,少敲字。抽象层次高,很快的写出原型,需要优化的时候,有个很好的性能分析器用,但是我觉得性能分析器不是语言的一部分,而是一个附属工具,不过,这个工具真心很重要。语言的设计更符合直觉,手册简单清晰,例外或者限制很少。语言本身也是分层次的,可以直接使用较高抽象的部分,但是如果需要,也能直接操作低层次的抽象,我觉得这一点挺难的。最后就是源码开放,设计也是开放的,黑客们都有机会去设计属于自己的语言。
设计与研究
设计追求的是好,研究追求的是新。设计是为了用户的需求,而不是他们的要求,区别之间的差异很重要的。
作者扯了下原型和产品的联系,他说他写代码,一个小时之后就能看到运行结果,更鼓舞士气,再继续前进,这和我的习惯差不多,实在无法忍受那种写了半天,不知道程序到底能跑出什么的感觉。