[笔记]《黑客与画家》

最近在看的书, 摘录一些有趣的言论

文章似乎写得比较早了, 有些人似乎拿现在的观念去批驳书中的某些观点

但是正如书中经常提到的, 随大流的问题~~所以有自己的观点应该没有错

不过我比较不喜欢在不是很了解一个东西的时候就发表评论

正如Emacs, 刚开始用时觉得超级难用, 用一段时间觉得为什么平时用的一些编辑器没有这么多方便的快捷键呢

所以不管怎样, 要永于尝试, 不应太过顽固

就像我并没有认真学过C++, 只大概看了看, 但感觉它很难用(只是主观感觉), 当然我没有到处评论说它难用, 事实上很多公司都招C++程序员, 我有时也会想学一学

不管怎样, 有人说它好用, 应该就有它好用的地方, 又或许是因为那些人没学过更好用的语言

我还想学Lisp, 目的比较单纯, 因为Emacs的插件是用它写的, 我也想自己创造工具, 或者至少能看懂别人写的, 改造成适合自己的

想学的很多呢~~最新的TODO~~就是看完之本书. 看书慢的娃 伤不起.

硅谷创业之父Paul Graham文集

Hackers and Painters Big Ideas from the Computer Age

"运营创业公司, 每天都像在战斗;而为大公司工作, 就像在窒息中挣扎. "

"我们生活中的一切, 都正在成为计算机. 所以, 如果你想理解我们目前的世界以及它的未来动向, 那么多了解一些黑客的想法会对你有帮助. "

Paul Graham有一套完整的创业哲学, 他的创业公式是:

1.搭建原型 2.上线运营(别管bug) 3.收集反馈 4.调整产品 5.成长壮大

13 书呆子的复仇

P180 软件业有一场永不停息的战斗, 书生气的开发者与官僚主义的经理之间总是发生冲突.

P180 那些经理奇迹般地同时具备了两种很常见但很难结合在一起的特点:(a)对技术一无所知;(b)对技术有强烈的个人观点.

P180 你的经理相信所有编程语言的功能都差不多, 可以互相替代. (这是错误的假设)

P181 如果语言各有不同, 你的经理就会突然发现, 有两个互相关联的方程, 他必须找到一个能够同时满足两个方程的最佳解, 而最要命的却是他对此根本一无所知. 第一个方程是找到(相对于要解决的问题)能够适用20年左右的最佳语言, 第二个方程是(为这种语言)找到合适的程序员、函数库的机会有多大.

P182 编程语言现在的发展不过刚刚赶上1958年Lisp语言的水平.

朝着数学的方法发展

P185 这种语言本质上不是一种技术, 而是数学. 数学是不会过时的. (与快排进行类比, 而不是硬件)

为什么Lisp语言很特别

9种思想:

1.条件结构(即if-then-else结构)

2.函数也是一种数据类型

3.递归:Lisp是第一种支持递归函数的高级语言

4.变量的动态类型:所有变量实际上都是指针

5.垃圾回收机制

6.程序由表达式组成

7.符号类型:实际上是一种指针, 指向存储在散列表中的字符串

8.代码使用符号和常量组成的树形表示法

9.无论什么时候, 整个语言都是可用的.

  • Lisp并不真正区分读取期、编译期和运行期.

  • 你可以在读取期编译或运行代码, 也可以在编译期读取或运行代码, 还可以在运行期读取或者编译代码.

  • 在读取期运行代码, 使得用户可以重新调整(reprogram)Lisp的语法;

  • 在编译期运行代码, 则是Lisp宏的工作基础;

  • 在运行期编译代码, 使得Lisp可以在Emacs这样的程序中充当扩展语言(extension language);

  • 在运行期读取代码, 使得程序之间可以用S表达式(S-expression)通信, 近来XML格式的出现使得之个概念被重新“发明”出来了.

这节后面关于Lisp的部分因为没学过Lisp, 还不大理解, 再看吧

看评论:http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html

对Lisp真是褒贬不一~~学学就知道了. 看来我落伍很多了啊~~

一个诀窍

P193 如果你想在软件业获得成功, 就使用你知道的最强大的语言, 用它解决你知道的最难的问题, 并且等待竞争对手的经理做出自甘平庸的选择.

附录:编程能力

这篇的例子没怎么能理解, 题目就很不理解. 额. . 再看.

"格林斯潘第十定律"(Greenspun's Tenth Rule): 任何C或Fortran程序复杂到一定程序之后, 都会包含一个临时开发的、只有一半功能的、不完全符合规格的、到处都是bug的、运行速度很慢的Common Lisp实现.

14 梦寐以求的编程语言

P200 外部因素:一种语言必须是某一个流行的计算机系统的脚本语言(scripting language),才会变得流行.

P210 为了写出优秀软件, 你必须同时具备两种互相冲突的信念. 一方面, 你要像初生牛犊一样, 对自己的能力信心万丈;另一方面, 你又要像历经沧桑的老人一样, 对自己的能力抱着怀疑态度.

这里的难点在于你要意识到, 实际上之两种信念并不矛盾. 你的乐观主义和怀疑倾向分别针对两个不同的对象. 你必须对解决难题的可能性保持乐观, 同时对当前解法的合理性保持怀疑.