《黑客与画家》读书笔记(10-15章)

10 编程语言解析
2017-02-22
Fortran、Lisp、Cobol、Basic、C、Pascal、Smalltalk、C++、Java、Perl和Python,全都是高级语言。

11 一百年后的编程语言
2017-02-22
任何一种编程语言都可以分成两大组成部分:基本运算符的集合(扮演公理的角色)以及除运算符以外的其他部分(原则上,这个部分可以用基本运算符表达出来)。
2017-02-22
我认为,基本运算符是一种语言能否长期存在的最重要因素。其他因素都不是决定性的。
2017-02-22
你仔细审视一种语言的内核,考虑哪些部分可以被摒弃,这至少也是一种很有用的训练。在长期的职业生涯中,我发现冗余的代码会导致更多冗余的代码,不仅软件如此,而且像我这样性格懒散的人,我发现在床底下和房间的角落里这个命题也成立,一件垃圾会产生更多的垃圾。
我的判断是,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。
2017-02-22
随着技术的发展,每一代人都在做上一代人觉得很浪费的事情。
2017-02-22
效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。浪费程序员的时间而不是浪费机器的时间才是真正的无效率。随着计算机速度越来越快,这会变得越来越明显。
2017-02-22
并行计算(parallel computation)
2017-02-22
性能分析器(profiler)
2017-02-22
(1)一百年后的编程语言在理论上今天就能设计出来;
(2)如果今天真能设计出这样一种语言,很可能现在就适合编程,并且能够产生更好的结果。

12 拒绝平庸
2017-02-22
埃里克·雷蒙德写过一篇文章《如何成为一名黑客》(How to Become a Hacker)。文中有一部分专门谈到,在他看来,如果你想当一个黑客,应该学习哪些语言。他建议从Python和Java入手,因为它们比较容易学。想当高级一点的黑客,还应该学习C和Perl。前者用来对付Unix系统,后者用来系统管理和开发CGI脚本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习Lisp:
Lisp很值得学习。你掌握它以后,会感到它给你带来的极大启发。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到Lisp。
2017-02-22
软件业是竞争非常激烈的行业,而且容易出现垄断。在不考虑其他情况的条件下,某家公司的软件更快更好用,就会把竞争者赶出这个市场。一旦你开始创业,你就会更深切地感受到这一点。一般情况是,创业公司要么赢得一切,要么彻底失败。你要么成为富翁,要么一无所获。创业的时候,如果你选择了错误的技术,竞争对手就会一举打败你。
2017-02-22
选择使用哪一种技术的时候,你不能考虑别人的做法,只能考虑什么样的技术能最好地完成工作。
2017-02-22
大公司可以互相模仿,但是创业公司就不行。
2017-02-22
如果开发只在自己服务器上运行的软件,这意味着你想用什么语言就能用什么语言。
2017-02-22
在Viaweb创业期间我从来没有公开谈论过Lisp语言。我们对新闻媒体闭口不谈Lisp,如果你在我们的网站上搜索Lisp,只会发现我在个人介绍中提到过两次,那是我写的两本关于Lisp的书。这是故意的,创业公司对竞争对手应该越保密越好。
2017-02-22
闭包
2017-02-22
Lisp代码由Lisp数据对象构成。其他语言的源代码一般由字符组成,字符串是主要数据类型之一,但是Lisp语言不完全是这样。经过解析器处理之后,Lisp代码就变成了你可以遍历的数据结构。
如果你理解编译器的工作原理,那么事实是,与其说Lisp有一种很奇特的语法,还不如说它根本没有语法。一般的源代码程序经过编译器解析会生成解析树。Lisp的奇特之处就在于,你可以完全写出程序,控制这种解析树,进行任意的存取操作。Lisp的这种程序就叫做宏,它们可以用来生成其他程序。
2017-02-22
Ansi Common Lisp
注: 作者的另一本书
2017-02-22
编程语言不一样,与其说它是技术,还不如说是程序员的思考模式。
2017-02-22
如果你为创业公司工作,那么这里有一个评估竞争对手的妙招——关注他们的招聘职位。他们网站上的其他内容无非是一些陈腐的照片和夸夸其谈的文字,但是招聘职位却不得不写得很明确,反映出他们到底想干什么,否则就会引来一大批不合适的求职者。
2017-02-22
最不用担心的竞争对手就是那些要求应聘者具有Oracle数据库经验的公司,你永远不必担心他们。如果是招聘C++或Java程序员的公司,对你也不会构成威胁。如果他们招聘Perl或Python程序员,就稍微有点威胁了。至少这听起来像一家技术公司,并且由黑客控制。如果我有幸见到一家招聘Lisp黑客的公司,就会真的感到如临大敌。

13 书呆子的复仇
2017-02-23
快速排序(Quicksort)算法
2017-02-23
这种算法是1960年提出的,至今仍然是最快的通用排序方法。
2017-02-23
如果你创业的话,千万不要为了取悦风险投资商或潜在并购方而设计你的产品。让用户感到满意才是你的设计方向。只要赢得用户,其他事情就会接踵而来。如果没有用户,谁会关心你选择的“正统”技术是多么令人放心。
2017-02-23
总的来说,你的经理其实不关心公司是否真的能获得成功,他真正关心的是不承担决策失败的责任。所以对他个人来说,最安全的做法就是跟随大多数人的选择。
2017-02-23
第一,不同语言的编程能力不一样。

第二,大多数经理故意忽视第一点。

14 梦寐以求的编程语言
2017-02-23
脚本语言(scripting language)
2017-02-23
布赖恩·柯尼汉和丹尼斯·里奇合写的《C程序设计语言》(C Programming Language)
2017-02-23
开发大型程序的另一个方法就是从一次性程序开始,然后不断地改进。
2017-02-23
函数库的使用应该符合程序员的直觉,让他可以猜得出哪个函数能满足自己的需要。
2017-02-23
大多数人接触新事物时都学会了使用类似的过滤机制。甚至有时要听到别人提起十遍以上他们才会留意。这样做完全是合理的,因为大多数的热门新商品事后被证明都是浪费时间的噱头,没多久就消失得无影无踪。
2017-02-23
所以,发明新事物的人必须有耐心,要常年累月不断地做市场推广,直到人们开始接受这种发明。
2017-02-23
简单重复同一个信息就能解决这个问题。你只需要不停地重复同一句话,最终人们将会开始倾听。人们真正注意到你的时候,不是第一眼看到你站在那里,而是发现过了这么久你居然还在那里。
2017-02-23
“最好的文字来自不停的修改”。所有优秀作家都知道这一点,它对软件开发也适用。设计一样东西,最重要的一点就是要经常“再设计”

15 设计与研究
2017-02-23
假定你正在设计一种工具,你可以把目标用户定为初学者,也可以定为专家级用户。一种人眼里的优秀设计可能在另一种人眼里却是糟糕无比。这里的重点是你必须选出某些人作为你的目标用户。
2017-02-23
我觉得,除非设定目标用户,否则一种设计的好坏根本无从谈起。
2017-02-23
如果目标用户群体涵盖了设计师本人,那么最有可能诞生优秀设计。
2017-02-23
如果目标用户与你本人差别很大,你往往会假定目标用户的需求比你本人的需求更简单,而不是更复杂。低估用户(即使出于善意)一般来说总是会让设计师出错。
2017-02-23
如果你觉得自己在为傻瓜设计产品,那么很可能不仅无法设计出优秀产品,而且就连傻瓜也不喜欢你的设计。
2017-02-23
在软件领域,贴近用户的设计思想被归纳为“弱即是强”(Worse is Better)模式
2017-02-23
那就是如果你正在设计某种新东西,就应该尽快拿出原型,听取用户的意见。
2017-02-23
开发软件的时候,我有一条规则:任何时候,代码都必须能够运行。如果你正在写的代码一个小时之后就可以看到运行结果,这好比让你看到不远处就是唾手可得的奖励,你因此会受到激励和鼓舞。

你可能感兴趣的:(读书笔记)