读《黑客与画家》

标签: 代码 Coding | 发表时间:2011-09-06 01:12 | 作者:[email protected] (郑凯) Calon
出处:http://soulogic.com/

其实《黑客与画家》是提前预订的,所以一发售就看了,但现在才动手写读后感,实在是因为回味无穷。

这本随笔集包含了很多观点,对我而言最重要那部分,就是押题的那段:真正的程序员跟画家是如此相似。其实我以前也有类似的模糊印象,但一直没法说清楚:

额外的一个话题,我发现很多人都在 Google Profile 上都写着职业 Engineer。我总觉得,写 Engineer 和写 Programmer 的,代表着两种完全不同的态度。

作者 Paul Graham 一直强调快速创造原型,顺便狂热鼓吹 Lisp,先说我理解的第一层意思,语言对于开发效率的影响。

虽然大家所用的语言都是图灵完备的,且不说能不能把函数作为返回值这类高级货,单看拿 Java 的 syntax 作为靶子,确实惨不忍睹,明明都表达同一个意思,却要多写那么多的冗余关键字,这里要强调一个概念,香农的信息熵,以前我能明白这么个概念但一直不知道是什么词(最早想到这个问题是用来解释为什么 mp3 和 zip 是不同的压缩方式,但 mp3 已经无法被 zip 进一步压缩了),后来在谷歌黑板报的几篇数学之美系列的文章里得以窥豹,例如 输入一个汉字需要敲多少个键,比方说如果所有 method 都必须有范围,那最常见的 public 完全可以省略掉,虽然程序语言可以类比为自然语言,但也可以类比成都要输入汉字时,不同语言相当与不同输入法。很多动态语言的书写效率是五笔的话,基本上 Java 就是全拼了……但是 Paul Graham 宣扬的代码长度跟开发效率等比显然是歪理邪说了,虽然有特例,例如39年德国在欧洲的征服速度约等于行军速度,但放到42年的斯大林格勒就不是这样了。大家应该都碰到过这种情况:区区两三百行代码被反反复复写了好几天,还是两三百行,只不过不是之前的两三百行了。

跟 Java 的 syntax 一样傻的,还有 DOS 换行符,虽然这可能是历史原因,干出这事的人可能有理由不被责备,但 \r\n 换行符确实很傻,就像没人会在写字的时候,把“句号”写成“逗号句号”。所有现代语言(就是除了 Java 之外我们常见到的)都在降低代码的信息熵,说白点就是如何在保证不产生歧义的情况下尽量减少各种符号。其实 ;\n\r\n 差不多傻,所以所有现代语言(就是除了 Java 和 PHP 之外我们常见到的)都把分号去掉了

第二层意思,语言的适用性

其实 Paul Graham 已经在一个不起眼的注释里,借其搭档之口间接的表达了这个意思:智力是分阶级的,而不同语言归属于不同阶级(这个理念属于书中《不能说的话》里说指的那类东西)

(中文版 P173 注释)
莫里斯觉得不用这么保密,因为即使竞争对手知道我们使用 Lisp 语言,对他们也不会有帮助:“如果他们真的聪明,早就已经在用 Lisp 编程了”

对于 Viaweb 为什么是用 Lisp 写的,我只能这么解释这个问题:掌握 Lisp 属于智力上的挑战,倚靠 Lisp 的特性来快速开发产品是极少数高智商的人能做到的事情,Lisp 的始创者将其作为数学表达方式,而从来没想过用 Lisp 做这么具体的产品。所以书中引用别人的话,建议黑客了解 Lisp,哪怕未必在实际工作中用到它,其实和王建硕对微积分的看法是一样的(人的脑子思考问题,除非经过特别的训练(微积分是训练的一种),都是线性的)。我的看法是,Lisp 绝不适合做开发,就像高斯的尺规作图十七边形不是你能做的一样。我想象的 Lisp 里大量使用所谓的 macro,可维护性相当于十七边形。


PHP 能足够流行,主要原因之一是这语言下贱,我想如果所有语言都能测一下开发者的平均智商的话,应该 PHP 的开发者的平均智商是最低的。但这话绝不是冒犯任何人,想承认他流行就必须承认这是因为连智商 90 的人都敢尝试给 PHP 写 Framework 才能导致这么流行,这是一个事实,跟任何一个具体的使用者是谁、怎么用无关。我在开始了解其他语言后,才知道这么个事实:其他几乎所有语言的基础库,都是用同样的语言写就的,唯独 PHP 的基础库都是靠 C 的。去年看到一片文章说 PHP 不是语言,深表同意,我认为 PHP 的位置实际处于伪代码和程序语言之间,以快和下贱为特色,你可以快速搭建原型,需要人手时可以找一群民工来写,这语言当然就很厉害了。《黑客与画家》给我最大的一个启示就是,尽管我明白优化乃万恶之源,但实际写代码的时候还是容易拘泥于细节,现在看来最痛恨的事情就是在给一个应用做第一版的时候,代码还不够伪代码化。你是程序员,你是画家,你要最快的速度让一个程序能跑起来。画一幅受欢迎的画是程序员要做的,把画印刷成无数分卖往全世界是工程师要做的。真等 facebook 的网站运转起来了,还愁这世界找不到人改进下 memcache 的 pecl 就节省出上万台机器么。

我之前相信语言争论的和事佬说法:语言各有各的精髓,但总的来说是相等的。Paul Graham 用一个简单的例子来驳斥:如果承认 Perl 5 比 Perl 4 强,那就应该承认不同语言之间也存优劣之分(这种手法我以前也用过,当时用自己一年间的差距来证明合作的困难)。其实以前看《软件随想录》里的一篇《你的编程语言能这样做吗?》时就在琢磨这个问题了,看到《黑客与画家》的时候又把这个问题强化重视了。你可以继续用 PHP 去谋生,但不可以不知道在一些语言特性上,PHP 相比 Python 或 Ruby 差的有多么远。

相关 [黑客 画家] 推荐:

黑客与画家

- Terry - DBA Notes
四月份读的最好的一本书是 Paul Graham 的大作 《黑客与画家》(中文版),这是一本能引发技术人思考的佳作,真正意义上的黑客精神、创业(Start-up)、编程语言,是这本技术散文集的三个主题. 阮一峰的翻译很到位,很喜欢他的译文. 国内做技术图书的翻译属于"高投入低回报"的工作,能埋头做事情的人越来越少了.

读《黑客与画家》

- Calon - Soulogic 灵魂逻辑
其实《黑客与画家》是提前预订的,所以一发售就看了,但现在才动手写读后感,实在是因为回味无穷. 这本随笔集包含了很多观点,对我而言最重要那部分,就是押题的那段:真正的程序员跟画家是如此相似. 其实我以前也有类似的模糊印象,但一直没法说清楚:. 额外的一个话题,我发现很多人都在 Google Profile 上都写着职业 Engineer.

黑客GeoHot入职Facebook

- 开忆 - cnBeta.COM
黑客Geohot的Facebook资料中刚刚出现了他的踪迹,这名之前曾经被索尼法务围追堵截后来和解的黑客刚刚入职了Facebook,并且从言语上看他对这个工作环境非常满意. GeoHot大约在今年5月份就已经入职,到6月17日才把这个消息公布给他的朋友们.

世界黑客排名

- 2楼水饺 - 煎蛋
黑客世界也有这自己的排名,如果你打算雇佣牛逼黑客做点xxxx事情,不妨看看这个网站 RankMyHack.com ,它号称是世界上第一个黑客排名系统. 除了能够收集到一些黑客战绩和信息之外,RankMyHack.com 还开放给任何一个想加入该排名的盆友. 提交你的战绩,然后将RankMyHack 给出的一段代码插入到你所黑掉的网站予以证明.

GNU黑客大会2011

- Tairan Wang - Solidot
Shawn the R0ck 写道 "2011年8月25日至28日,GNU各大社区的黑客在巴黎召开了GNU的年度会议GHM(GNU Hackers Meeting) 2011,来自emacs、gcc、gdb、GNU/Hurd、debian、GNU R等重要GNU自由软件项目的开发者都参与了此次会议.

黑客伦理的归来

- GaRY - Solidot
这一领域的研究也需要黑客精神,而且将对人类产生同样深远的影响.

黑客技术入门

- - CSDN博客系统运维推荐文章
一.TCP/IP网络协议栈的安全缺陷与攻击技术. ICMP路由重定向缺乏身份认证. 广播地址对Ping的放大器效应. SMB协议的NTLM认证机制存在安全缺陷. URL明文,缺乏完整性保护,编码滥用. Netwox 可以使用41号工具,构造ICMP数据包. nmap可以使用-D选项. Netwox可以使用33号工具构造任意的以太网ARP数据报,80号工具可以周期性地发送ARP应答报..

Elasticsearch Pipeline 详解 - 黑客派

- -
并非完全翻译, 会穿插相关的 Java API 来来辅助进行说明 (但基本会覆盖官方所有翻译). 本文是建立在有一些 Elasticsearch 基础和了解相关 Pipeline 概念的人. 简介 Ingest Node. Ingest Node(预处理节点) 是 ES 用于功能上命名的一种节点类型, 可以通过在 elasticsearch.xml 进行如下配置来标识出集群中的某个节点是否是 Ingest Node..

[警告] LastPass 可能被黑客入侵

- hongwen he - Chrome迷
提供基于 Web 的密码管理服务 LastPass 可能已经于近日遭受到黑客攻击,并要求用户修改主密码. LastPass 团队在博客中说道:. 周二早上我们发现我们的一个非主要服务器上有数分钟的网络流量异常,这种偶尔发生的情况最后通常确定是我们员工的操作或者是由一个自动执行的脚本引起. 但这一次我们没有找到根本原因,在对这个异常情况进行深入分析之后,我们在一个数据库上发现一个类似但更小的匹配流量异常(该数据库发送的流量比我们其他数据库接收的流量更多).

黑客轻易入侵花旗银行

- Wuvist - Solidot
Visame 写道 "盗取超过200,000名花旗银行客户资料的黑客使用了一种极其简单的方法入侵. 此举被称作是近年来最大胆的一次银行入侵. 黑客们仅仅是简单地登录花旗公司的信用卡客户专区,然后把浏览器地址栏中自己的帐号替换成他人的帐号,便可顺利进入他人的帐号. 随后黑客们使用计算机程序重复这一过程.