成为黑客应该是很多程序员的梦想吧,黑客代表着创新,自由,突破限制和拥有极高的技术能力,是编程领域的黑带荣誉。同时很多热爱编程,不仅仅把编程只当作养家糊口手段的程序员来说,编程也是一种手艺,写出优美的代码和打造一个艺术品有着相同的地方。
这本书就是为这样的程序员而写的。很多人因为这本书知道了Lisp,进而去读了SICP(Structure and Interpretation of Computer)。
第一章 书呆子
介绍了美国中学的教育问题:无聊与恶意攀比
人性中黑暗的地方;在学校,监狱这样封闭的环境里更容易出现。
成人后会好一些的原因可能是进入开放的世界,小众的书呆子能够产生效应。
第二章 黑客与画家
黑客(程序员) 与计算机科学家属于处在产业的两端
科学家要在未知的领域探索.
而黑客类似画家要利用手中已有的技术成果(画笔/颜料), 而不是从头来做.
在挣钱的软件和优美的软件之间,黑客可以白天挣钱,晚上创作.
计算机语言是帮助思考的, 而不是来表达思考.
这里我理解就是:软件开发是个有机迭代的过长. 并不是先要设计完美, 最后再用代码实现这样刻板僵硬的瀑布开发模式.
应该类似敏捷开发,边编写边改进是软件更好的工作方式. 这个过程不断迭代优化代码, 实现有机进化.
软件开发的模式不成建设一成不变的金字塔这样的无机物, 而应该是像有机生命一样能不断演进的.
更好地编程实践方式:
1, 实践
2, 临摹
3, 迭代细化, 一丝不苟
4, 掌握心理周期
第三章 不能说的话
洋洋洒洒一大章, 我理解的中心意思主要就是独立思考.
第四章 良好的坏习惯
黑客与公民自由, 很短的一章
第五章 另一条路
主要描述了互联网带给软件开发的种种好处
网络时代带来的好处就是软件的发布变得容易无比, 不再被主机,操作系统束缚.
第六章 创造财富
金钱不是幸福, 而是交换幸福的中间介质.
致富的两件东西: 可测量性和可放大性
可测量性是指工作可以量化,这样才好统计出收入. 但是除了销售类, 一般在大公司个人的工作很难被量化,也就是说多干,干好未必有相应的收入.
可放大性== 高科技
技术创业的要素: 难度, 灵活(与大公司竞争), 用户数, 尽快脱手.
创业公司就像只蚊子, 要不成功, 要不死无葬身之地.
最后提到欧洲的复兴是因为创建财富的人可以拥有财富,即藏富于民.
在大公司工作的局限: 工作无法更好的量化
第七章 关注贫富分化
以往掠夺是一种财富手段. 而高科技, 例如苹果是创造财富.
第八章 防止垃圾邮件的方法
技术贴
第九章 设计者的品位
技术贴
是“用户需要的设计”,而不是“用户要求的设计”。
一个原因就是她把自己的作品大声读给家人听,所以她就不会陷入孤芳自赏难以自拔的境地,不会长篇累牍地赞叹自然风光,也不会滔滔不绝地宣扬自己的人生哲学。
第十章 编程语言解析
很难说那种语言更好.
第十一章 一百年后的编程语言
语言只是只用符号书写法,和数学符号一样,进化很慢的.
语言的核心是基本运算符的集合 和 其它部分. 其中基本运算符是一种语言是否长期存在的因素. 而内核越小,越干净, 生命力越顽强.
编程语言应该把语义和语言实现分开. 例如语义只有列表, 而实现可以用来表示字符串.
例如COBOL就是已经停止进化的语言.
原因?? 内核太大,语法过于死板? 抽象能力有限?
第十二章 拒绝平庸
即使工作中不用LISP也应该学习它, 就如学习拉丁文对更好的用英文写作道理类似.
作者对LISP十分推崇, 认为它具备超越其他语言的优势, 其中提到了宏.
对于那些招聘JD中提到越多IT名词, 例如Oracle, 则不具备威胁.
第十三章 书呆子的复仇
介绍Lisp的具体优点.
提到计算机语言设计的两种思路: 从图灵机理论设计 和 从机器结构
前者就是Lisp,后者是汇编,Fortran.
Lisp包含现代语言的所有特征都,有些甚至其他语言还没做到.
Lisp包含的9中思想:
1, 条件结构 (if-then-else)
2, 函数也是数据类型, 可存粗在变量中, 也可以作为参数传递 [TODO: 可以遍历内部结构吗?]
3, 递归
4, 变量的动态类型 所有的变量其实都是指针,所指向的值有类型之分, 而变量本身没有. 复制变量就是复制指针而不是所指向的数据.
5, 垃圾回收机制
6, 程序由表达式组成, 每个表达式返回一个值. 其他主流语言是由表达式和语句组成. [TODO: 参考<程序语言>一书
7, 符号类型
8, 代码由符号和常量组成树形表达式
9, 不区分编译期,运行期. 运行时, 程序之间可以用S-expression通信
8和9是Lisp的特点, 组合起来就是宏的基础
第十四章 梦寐以求的编程语言
简洁, 可以适合一次性程序, 函数库, 好的性能工具, 自然演进而非委员会定制
其中我认为其实简洁就可以作为一次性程序.
自然演进代表迭代式的进化, 像有机的生命似的. 而不是像金字塔这样的无机物被发明构建出来.
第十五章 设计与研究
开发应该是一种以用户感受为中心的设计. 好的语言例如C, LISP, Smalltalk是设计者为自己设计的, 而COBOL,Ada和Java是为了给别人使用而设计的.
总体作者推荐从原型,逐步细化加工,直至做出成品. 谈到画画时, 总是先用草图勾勒出整体, 而不是一部分一部分来画. 所以软件也可以由原型开始.
总结
读书目的? 写程序和艺术有什么关系
讲了什么? 作者认为的黑客素质
最深感悟? Lisp
特色不同?
实践指导? 思考编程的本质
推荐指数: ⭐️⭐️⭐⭐️⭐️ ️