第10章到第15章,解释黑客的工具(编程语言)和工作方法,这是黑客文化的基础核心。
> 编程语言解析
$ 一个操作所需的代码越多,就越难避免bug,也越难发现它们
$ 高级语言:使用更强大的命令开发程序,使程序更具可移植性
> 一百年后的编程语言
$ 基本运算符是一种语言能否长期存在的最重要因素。
(买房:地段,地段,地段!)
$ 公理越少越好。
~ 冗余的代码导致更多冗余的代码。
~ 内核最小、最干净的编程语言才会存在于进化的主干上。
(提高生活质量最有效的方法:定期扔东西)
$ 每一代人都在做上一代人觉得很浪费的事
$ 提高编程语言效率的正确做法:将语言的语义与实现分离
$ 一百年后的编程语言在理论上今天就能设计出来。
~ 如果今天真能设计出这样一种语言,很可能现在就适合编程,并且能够产生更好的结果
> 拒绝平庸
(“接地气”是贬义词)
$ Lisp没有得到广泛使用的原因是因为编程语言是一种习惯性思维,非常难改变
(人类天性变化的速度大大慢于计算机硬件变化的速度,所以编程语言的发展通常比CPU的发展落后)
$ 选择编程语言
一般应用程序 | 选择总体最强大、效率也在可接受范围内的编程 |
开发的程序必须与另一个程序紧密配合 | 选择后者的开发语言 |
只做一些很简单的事 | 选择比较靠近机器的底层语言 |
程序很短,只为特定场合一次性使用 | 根据目标问题,选择最强大函数库的语言 |
$ 唯一洞悉所有语言优劣的人必然是懂得最强大的那种语言的人
$ 在职位描述中大量使用IT词汇的公司不会构成威胁
~ 能构成威胁的对手(威胁程度从低到高)
· 要求应聘者具有Oracle数据库经验的公司
· 招聘C++或Java程序员的公司
· 招聘Perl或Python程序员的公司
· 招聘Lisp黑客的公司
> 书呆子的复仇
(在高科技行业,只有失败者采用“业界最佳实践”)
$ 糟糕经理的特点:对技术一无所知且对技术有强烈的个人观点
(时刻提醒自己,千万不要越俎代庖)
$ 选择不常用语言的缺点
~ 程序无法和其它语言写的程序协同工作
如果能控制整个系统,且有各组成部分的源码,就能自己解决兼容性问题
~ 找不到很多函数库
如果打算把开发的程序拿到市场上“卖”,说明规模够大,那么语言本身的编程能力比方便的函数库重要
~ 不容易雇到程序员
雇佣黑客,使用高级语言,可以减少对程序员的需求
$ Lisp本质是数学。数学是不会过时的。
$ 语言的编程能力越大,写出来的程序越短(独立的语法单位少)
$ 如果想在软件业获得成功,就使用最强大的语言,用它解决最难的问题,等待竞争对手的经理做出自甘平庸的选择
$ 程序的形式应该仅反映它所要解决的问题(功能应当决定形式)。
$ 代码中其它任何外加的形式都表明对问题的抽象还不够。
> 梦寐以求的编程语言
(一种好的编程语言,是让黑客可以随心所欲使用的语言)
$ 编程语言的最高境界:核心功能很少变化,函数库和开发环境等一直在发展。
$ 推广一种编程语言的方法:发展该语言早期的黑客用户。
~ 用该编程语言开发一个杀手级应用,让黑客使用。
~ 该语言有一个免费的好的实现。
~ 为该语言找到一个依附的流行系统
· 可以导致“无法以一种语言本身的优缺点评判该语言”
· 只有当一种语言是某个系统的脚步语言时,它才能真正成为编程语言
~ 一本介绍该语言的书
· 不能厚、文笔流畅、大量优秀范例、由O’Reilly出版发行
~ (有在线文档)
~ 语法简洁
~ 可编程性高
~ 适合写一次性程序(容易装备、想用就用)
~ 强大的函数库
· 优秀函数库的重要性将超过语言本身
~ 方便性能调优(配套的性能分析器等)
~ 长时间不断地推广
~ 持续不断的再设计
~ 对解决难题的可能性保持乐观,对当前解法的合理性保持怀疑
~ 精选用户
~ 单人完成设计(《人月神话》)。
(软件内部接口设计成垂直接口,层与层之间的接口完全由其中的一层控制。(感触不是非常深,求带))
> 设计与研究
$ 设计追求好,研究追求新
~ 交集:只有应用新的创意和理论,才会诞生超越前人的最佳设计;只有解决值得解决的难题(好的难题),才会诞生最佳研究。
$ 任何一个领域的最佳作品都不可能由对用户言听计从的人做出来
~ “用户需要的设计”不等于“用户要求的设计”
~ 用户不了解所有可能的选择,经常弄错自己真正想要的东西
~ 如果目标用户群体涵盖设计师本人,最有可能诞生优秀设计
$ 先设定目标用户,才能评判设计。
$ 评价一种语言的优劣,要看程序从无到有的那条完成路径是否漂亮
$ 任何时候,代码都必须能够运行
$ 画作永远没有完工的一天,只是不再画下去而已
$ 很难为低端用户设计出优秀产品(设计师没兴趣)
(读了《黑客与画家》(1))
(读了《黑客与画家》(2))