最近效率比较低,读书也总是提不起兴致,恰好有同学在图书馆借了这本“老书”。对于我这种“非借不能读”的人,借来的书看着效率起码会快一些。
这本书的作者比较神,Paul Graham,算是硅谷创业的教父级别的人了,据说指导年轻人创业很有一套思路,手下的门徒成功率比较高。不过这本书只是对他部分blog的收录,并不完全是关于创业的,还包含了作者关于教育、阶级、贫富差距等等其它方面的观点。总之,这本书算是门槛比较浅的科普读物了,非计算机行业的同学也值得一读。有趣的是,由于这是一本写于十年前的“老书”,其中的观点和预言或是已经被验证,或是已经被否定,现在再去看倒是有点沧海桑田的意味了。
首先,虽然当今社会将“黑客”定义为“利用电脑搞破坏的人”,但最早在MIT,hack这个词是被一些聪明的家伙称做解决难题的办法。即便在上世纪六十年代,“hack”这个词流行开来后,它的含义也是强调高度的革新精神,独树一帜的风格以及精湛的记忆等正面意义。
1984年,《黑客:计算机革命的英雄》这本书中将黑客的价值观总结为六条“黑客伦理”:
1.Access to computers, and anything that might teach you something about the way the world works,should be unlimited and total. Always yield to the Hands-On Imperative!
2.All information should be free.
3.Mistrust Authority--Promote Decentralization.
4.Hackers should be judged by their hacking, not bogus criteria such as degrees, age, race, or position.
5.You can creat art and beauty on a computer.
6.Computers can change your life for better.
这六条虽然也是老话了,不过仍然很具有现实意义,有必要好好体会一下。
一句话,黑客也是创造者,与画家、建筑师、作家一样。
一、风云人物?“好学生”?“坏学生”?
关于美国中学的“受欢迎”文化,之前在一个专栏中也看过类似的文章。毕竟在一个封闭的校园环境中,这种阶级文化的产生也有据可循,作者的观点也类似:“没有外在的对手,孩子们就互相把对方当做对手。”
在美国中学中似乎没有我们常提到的“好学生”、“坏学生”这个概念,最多可能也就是“成绩好的学生”和“成绩不好的学生”。而那些“成绩好的学生”,也就是作者笔下的“书呆子”,常常不受欢迎,作者认为他们的心思专注在别的地方,那些高精尖的东西比起“受欢迎”更令他们着迷。
个人怀疑作者可能略有一点小傲娇在里面,没有人会讨厌受欢迎,如果略微的放弃一些研究高精尖的时间,稍微融入一下大多数人的圈子可以将受欢迎指数提升一些,我相信大多数“书呆子”还是乐意去做的。况且的确有很多人的成绩和受欢迎程度都名列前茅,所以不得不说让自己受欢迎也是一种能力,当然也跟天赋有关。
我的初中就是在一个成员背景多种多样的环境下度过的,有家境极好的,有成绩极好的,也有普通平庸的。当然这里一定会有“不受欢迎的”,不过基本上都不是“书呆子”,而是性格上有些缺陷的人。虽然“书呆子”和“风云人物”的距离貌似很远,但其实“书呆子”也没必要融入他们的圈子,只要平时跟他们闲扯两句,借他们作业抄抄不就可以了么,或许还是中国的学生比较友善吧。
二、科学还是艺术
作者提出了一个很有意思的观点:“让黑客搞懂计算理论,相当于让画家搞懂颜料的化学成分”。
这里就涉及到一个黑客的“定位”问题,可以对比以下几个关键字理解以下:前端与后端、工程与技术、码农与工程师,其中最后一对是另一个方向上的问题了。
作者对于开源的观点倒是得到了印证:“黑客需要找一份‘白天工作’来解决生计,然后其余时间开发优美的软件。”这几年很火的Node.js框架作者也是个例子(http://www.quora.com/Ryan-Dahl/Who-is-Ryan-Dahl)
对于大多数同学来说,学习计算机并不是为了砸开学术界搞科学研究,而是要到产业界做一名“技工”,所以学习计算机的方式也不该像学习传统科学方式那样,而是应该注重实用性,多加实践,多总结。“画家每幅画所用的技巧,都是建立在上一幅作品学到的东西之上。”这点跟编程十分类似。
“程序是写出来给人看的,附带能在机器上运行。”这不单单是注释的问题,一个优秀的黑客应该有换位思考和换位表达的能力,不管你陈述的对象是对同行、半个同行、领导,甚至是街边大妈,都应该表达的行云流水才是。
搞艺术的似乎比黑客要酷的多,不过在绘画蓬勃发展的黄金年代,画家也没像今天这么酷,是不是也像程序猿、攻城狮一样�潘科�?
三、真话――不能说的秘密
随大流、避险、时空局限性、道貌岸然
很有意思的一个话题,不过人文气息太强,下次有机会再写吧。
五、WEB统一世界?
作者在十年前就声称桌面软件放到服务端,随着无线网络的发展以及网络稳定性的逐渐提升。基于web的工作已经逐渐普及开来了。记得《结网》中也提到过向推荐的PM的一些工具也都是这样,和软件工程课上提到的工具相比显然存在着一个逐步转变的过程。其实类似的概念还有很多,包括近几年提出的云计算,其实很大程度上也是把过去的一些理念又包装了一下拿出来而已。
随着html5标准的提出,web统一世界的呼声有席卷全球,但提了好几年也没见有什么起色,除了一些浏览器的厂商们在比拼着跑分高低,html5依然还是黑客们手中的玩具。想要火起来的话,起码还要等到没人抱怨网速慢的时候再说吧。
六、赚取金钱和创造财富
即使没有金钱也可以拥有财富,钱只是财富的一种表达方式,在当前高度分工是社会下更容易使人混淆。
作者认为世界上的财富总额不是固定不变的,不管他是否真心,这样的说法也总是励志的,能给人正能量,符合国家宣传精神。不过我倒是认为世界上的财富是固定的,可以这样分成三部分
世界上的财富(W)=流通在人类社会中的财富(X)+尚未被开发的财富(Y)+暂时被人类社会遗弃的财富(Z)
作者探讨的的应该是x,鼓励的也是创业者应该从Y中发掘财富y,将其加入到x中,而在转变过程中很有可能会导致x中有部分流入到z中,y和z的大小确定。所以类似于零和游戏的场景在某种程度上还是存在的。比如新媒体的介入增加的财富是y,在X中的传统媒体财富会流出z,此时的情况就是y>z。当然,X中内部还是存在着“大饼理论”的。
致富的两样东西:可测量性和放大性。
在IT的创业团队中,小团体代表的就是可测量性,人越少,团队的效率就越高,大公司往往有很多人浮于事,滥竽充数的人。不过这也要针对具体情况来谈,比如有的团体增加一个人,团队的效率会得到显著的提升,就像有人评价林书豪是既可以打替补,又可以打首发,因为他不但自己可以高效率的得分,而且在第二三节的轮转阵容中也可以带动其他队员一起得分。同样的,也会有人拉低整个团队的战斗力,我就认识这样一个人,他加入到哪个团队中,哪个团队就做不成事。放大性类似于杠杆效应,对于IT创业团队指的是高科技,举一个简单的例子,我们把目光放到二十年前,当时如果有人对股票的理解非常深刻,那么他就可以利用自己敏锐的目光将自己手中的财富短期内迅速放大,因为对大多数人来说,股票还是一个陌生的事物。同样的,现在一个小的团队如果掌握了某种新科技,特别是那些敏捷性比较高的,就可以快速的将科技财富放大。而选取高难度的问题,则可以筑起足够高的进入壁垒阻挡那些具有丰厚财力的大公司,赢取足够的时间进入深海,否则他们可以利用自己各方面的优势迅速把你击垮。
关于财富的分配的公平性,作者提到了二八法则的公平性。
大多数人都在抱怨二八法则的公平性,但是人们没有考虑到,在创造贡献上也存在着二八法则,既然是20%的人创造了社会80%的财富,那单从公平性的角度来说,为什么要让人们均分财富呢。所以,也就是为了维护社会的稳定性,当政者才会尽量保证贫富差距不要太大,否则一暴乱大家都没得赚。
创业不仅仅是勤奋努力
你的竞争对手决定了你需要辛苦的程度,要横向的与其他创业者相比,而不是仅仅跟自己比。
投入产出比总体上成比例,“努力30倍,最后得到的回报在现实中并不是30倍,可能是一个0到1000的随机数。”
养儿卖猪论
记得可口可乐收购汇源的时候,朱新礼提出了饱受争议的“养儿卖猪论”,在这个场景中的争议暂且不谈,仅对创业公司而言还是有很大的适用范围。毕竟不是所有的创业公司都是谷歌,facebook,选择一个好的时机果断出手卖掉不失为一个好的选择。
七、再谈贫富差距
每个人的技能不同,导致收入不同,这是贫富分化的主要原因。有些人的技能的确值得付给他高额的工资,想象一下乔布斯的技能,如果换做是100个组成的委员会来管理苹果公司,苹果还会达到今天的水平么?
巴尔扎克的“每一笔巨大财富的背后,都隐藏着罪行。”这句话也是被断章取义了,他的本意是“如果巨大财富没有明显的来源,那很可能是来源于精心安排的犯罪活动,由于掩盖得太好,使得罪行被人遗忘了。”
技术缩小差距?
作者的观点可以总结为,技术使得原来只有少数特权者才能用到的物品走入了寻常百姓家,使得富人和普通人的生活越来越相似,唯一的遗留物只有品牌。
首先技术的发展一方面让越来越多的普通人用到当初的稀罕物件,但同时也创造了更多的稀罕物件供富人来使用,所以只有达到“物质条件”极大丰富的共产主义社会才可能真正的缩小富人与普通人生活档次上的差距。而且,人毕竟是有社会属性的,因此品牌上的差距不仅反映在物质上优劣的差距,精神上的失落羡慕嫉妒恨带来的影响往往更为巨大。
健康的扩大与不健康的扩大
“现代社会的收入差距扩大是一种健康的信号。技术使得生产率的差异加速扩大,如果这种扩大没有反映在收入上,只有三种可能的解释:(a)技术革新停顿了;(b)创造大部分财富的人停止工作了;(c)创造财富的人没有获得报酬。”
我们一直在抵制和反对的也就是第三种可能,让该值多少钱的人值多少钱,比如大家一边骂着却又一边削尖了脑门往里钻的公务员。
“一个社会需要有富人,……,如果你让他致富,他就会造出一台拖拉机,使你不再需要使用马匹耕田了。”
十、编程语言的分类
(1)防止愚蠢的程序员干蠢事。(Java)
(2)让聪明的程序员能用变成语言干一切他们想干的事。(Perl)
作者认为,语言设计者应假定他们的目标是天才,因为傻子犯二是无法被限制住的。
一种真正优秀的编程语言应该既整洁又混乱,整洁是指“内核由数量不多的运算符构成,并且容易理解,每一个都有很完整的独立用途。混乱的意思是它允许黑客以自己的方式使用”。比如C语言就是一种优秀的语言。
上述分类逐渐分化成几个较小的议题,其中就有“静态类型语言和动态类型语言”,不过我觉得最需要考虑的还是安全问题,特别是当今安全问题及其严重的背景。
十一、未来的代码
作者认为编程语言的变革类似于生物的进化,同样存在一个脉络,有些进化的分支会逐渐缩小,最终消亡,而有些语言会被其它语言继承下去,长盛不衰。对于内核越小,越干净的编程语言,它的生命力就越强,因为它还有很多可以扩展的空间,即便有一些地方存在缺陷也容易改正,当然也存在大量的“小”语言无声无息的就消亡了。俗话说就是“小船怕风浪,大船难转弯。”
100年后编程的基本规则会是什么,显然摩尔定律一定不再适用了,并行现在看来是一种可能的趋势。不过并行计算到底能到达哪个抽象层次,是应用开发,还是完全交给编译器?
不过现在看来,以后的一种趋势一定是要节省人的时间。“程序员最需要的编程语言就是可以让你毫不费力地写出程序第一版的编程语言,哪怕效率低得难以接受。”
增加软件和硬件之间的软件层也是一种趋势,虽然这是一种消耗硬件性能的方法,但是这可以让编程灵活起来。
“如果你自己做不到,就去当老师。”
这句话在语言设计领域并不成立,因为语言设计对实践的功底要求非常高。其实在任何一个领域中,学术界和工业界都存在着不同步性,极端的例子就是文学研究和文学创作。
设计语言时要牢记:把车开直的方法不是通过将车身对其画在地上的分割线,而是通过瞄准远处的某个点,即使你的目标只在几米开外。
十二、 语言的发展
“编程语言的特点之一就是它会使得大多数使用它的人满足于现状,不想改用其它语言。”也就是说“人类天性变化的速度大大慢于计算机硬件变化的速度。”人总要到非变不可的地步才会去做出改变,于是“新三年,旧三年,缝缝补补又三年”,最终还是逃脱不了被抛弃的命运。但困难之处也在于如何识别“夕阳语言”,况且对于程序员来说,好不容易把一门语言玩的溜了,结果却要给它判死刑,听着就够残忍的。
十五、设计与研究
设计求“好”,研究求“新”。但这两条路最终会发生交叉,因为“只用新的创意和理论,才会诞生超越前人的最佳设计;只有解决那些值得解决的难题,才会诞生最佳研究。”
如果创造一种编程语言看做是设计而不是研究,最大的不同在于设计者会更多的考虑用户,而不是靠主观的思维闭门造车,简而言之就是做产品的思路,以用户为中心。
作者对编程语言的理解也很有趣,“不要把它看做是那些已经完成的程序的表达方式,而应该把它理解成促进程序从无到有的一种媒介。”要更多的着眼于过程而不是结果,有的语言就善于描绘思路,而有的语言最终成品非常漂亮,而过程和成品采用的媒介通常不一样,比如雕塑时就用石膏来设计而用大理石来做成品。就可以所以评价一种程序“并不是看最后的代码是否漂亮,而是看程序从无到有的这条路径是否漂亮”才有意义。
作者很早就提出了“快速迭代”的概念:“如果你正在设计某种东西,就应该尽快拿出原型,听取用户的意见。”应用起来就是尽快的先搭出架构来,尽快能先看到一个基本的模型,即便有很多地方是fake的。就像在绘画领域,“准确画出一个事物的方法,不是沿着轮廓慢慢一点点的描,因为这样每个部分的错误会累积起来,最终导致整幅画的失真。”
总而言之,这本书谈论的东西并没有什么高精尖,更多的是带了很多人文主义关怀,“学而不思则罔”,代码写累了不放拿这本书放松一下大脑,来点人文思考。