《黑客与画家》
作者:Paul Graham
译者:阮一峰
写在前面
忘了是怎么被推荐了,说有必要看一下这本《黑客与画家》。所以去网络上下载了电子书来看,看了几章觉得里面的观点和自己的理解很是符合。所以写一篇读书笔记,认真的学习一下这本书。(需要电子版书的朋友评论留下邮箱,我发给你们)
推荐程序员,技术爱好者,创业者和喜欢读书的朋友看原著,看完肯定会有很多思考。
这个读书笔记的目的是为了自己想看这本书的时候,拿过来快速的回味一下。放在网上也是同样的目的,如果没有充足的时间读这本书的朋友,看到这篇读书笔记之后,也可以很清楚的知道这本书讲了些什么,有哪些有趣的观点,举了那些有趣的实例。
这个读书笔记的结构是按照书上的目录结构展开,这样方便看到的朋友发现那里感兴趣,可以快速的去原著中找来读。
这本书的目录结构是
==================================================================
----作者简介(作者的经历)
----译者写的序(阮老师真的是个很厉害的人啊)
----1书呆子为什么不受欢迎
----2黑客与画家
----3不能说的话
----4良好的坏习惯
----5另一条路
----6如何创造财富
----7关注贫富分化
----8防止垃圾邮件的一种方法
----9设计者的品味
----10编程语言解析
----11一百年后的编程语言
----12拒绝平庸
----13书呆子的复仇
----14梦寐以求的编程语言
----15设计与研究
==================================================================
开始读书
作者简介
Paul Graham其人其事:
Paul出身于1964年,家里是匹兹堡的一个中产阶级,父亲是一个设计核反应堆的物理学家,母亲在家。少年时paul就开始编程,大学就读于康奈尔大学,主修哲学,研究生就读于哈佛大学,主修人工智能。博士毕业后去罗德岛设计学院学习绘画,想要成为画家。1992年在波士顿的一家创业公司开始程序员的职业生涯。1995年找到朋友Robert morris一起设计一个可以搭建网店的软件ViaWeb,后来又找到了Robert的同学Trevor blackwell一起开发。1995年的8月份他们拿到了天使投资人的10万美元,12月正式发展客户。1996年夏天拿到第二轮天使投资80万美元,1996年圣诞节,软件的客户数达到70家。1998年雅虎已4900万美元收购了viaweb软件,paul本人也就职于雅虎,但paul因不喜欢传统公司的工作环境,离职开始技术博客的写作。这本是就是在这个时间段完成的。
2005年paul找到朋友robert一起举办了一个夏令营,帮助大学生创业。很多创业项目取得了成功,随后他们合伙在硅谷成立了Y Combinator(YC),知道目前为止YC孵化出了很多优秀的项目。paul在硅谷的影响力也日益增大。
paul在YC提出创业公式:
搭建原型-》上线运营(别管bug)-》收集反馈-》调整产品-》成长壮大
译者写的序
序中简单介绍了黑客这个词,黑客并非指系统入侵者,而是指一些技术高超的程序员。hack这个名词指的是一个问题的解决方案,有好的方案和笨的方案。hacking指的是解决问题的过程,hacker指的是解决问题的人。
《黑客:计算机革命的英雄》文中提出黑客的伦理:
1、使用计算机了解世界不应该有任何的限制。
2、信息应该全部免费
3、不信任权威,去中心化(现阶段提出的区块链就是想要解决这个问题)
4、判断黑客的水平是通过技术而不是其他
5、可以用计算机创造美和艺术
6、计算机是生活更美好
此文中还有一种说法“对于黑客来说,关着的门就是挑衅,而锁着的门就是一种侮辱”。
1为什么书呆子不受欢迎
作者说“书呆子”和“高智商”有着强相关。作者青少年时期也是一个“书呆子”。作者把这个讨论放在第一章的目的可能也是因为自己是“书呆子”,所以多思考了这个方面。
作者首先分析为什么聪明的“书呆子”们为什么不仔细思考如何让自己变的受欢迎?
主要原因是聪明的“书呆子”们将自己的主要精力都放在了如何让自己变的更加聪明,而不是让自己变的受欢迎。因为文艺复兴时期的代表人物阿尔伯蒂曾说过:“任何一种艺术不管是否重要,如果你想要在改领域出类拔萃,就必须全身心投入”。
青少年让自己变的受欢迎也是需要花费很多的心思的。而“书呆子”们的精力主要放在其他他们感兴趣的事情上。
其次分析为什么不受欢迎就会被歧视和欺负?为什么会有歧视和欺负?
一部分原因是青少年心理未完成成熟,把折磨别人当做一种娱乐。青少年像是被成年人关在了一个叫学校的监狱中,他们对社会了解太少,时间太多过于无聊。校园生活是空虚的。孩子们喜欢团体,而“书呆子”们自然就必然变成了一个少数团体。
2黑客与画家
黑客和画家的共同之处在于他们都是在创作。
(作为一个程序员我之前一直以为这个职业是没有创造性的职业。看了这本书才明白,并不是所有的程序员都是黑客,只有那些有创造性的程序员是。不免悲从中来,所以当你对你一个职业的认识和一些业界大佬的认识不同时,说明你还需要继续努力)
黑客最高的境界是创造规格。
黑客不需要搞懂特别多的理论,就像画家不需要搞懂颜料的化学成分一样,黑客只需要自己去实现一个具体工作的时候,了解到其中的原理即可
黑客喜欢边写边想,不会先去想的很完美再去开始动手(这里要求黑客要有强的动手能力),在写程序的时候不断优化。整个过程就像是debug。所以黑客在写程序的时候喜欢用动态语言,而不是定义好的静态类型。这样的工作模式和画家建筑师的做法完全一样。
开发优秀的软件的方法之一就是去创业,但是这样有两个缺点:1是你需要处理很多非编程的事情,2能赚钱的软件一般都不是好玩的软件。
黑客如何才能找到自己细化做的事情?---找一个养家糊口的day job(白天工作),在业余的时间去开发优美的软件。在viaweb面试程序员的时候,一定要注意程序员自己用业余时间有没有写什么软件。如果不爱一件事情,不可能做的真正优秀。(所以在平时的业余的时间多去写一些好玩的软件放在github上,如果真正的热爱编程,肯定会忍不住去写好玩的软件的)
正确的开发合作方法是将项目分格成严格定义的模块,每个模块由一个人明确负责,模块与模块之前的接口经过精心设计,尽可能把文档写的和编程语言规范那样清晰。一个人完成一个项目是最好的,但是并不是所有人都是米开朗基罗,他曾经坚持要一个人画完罗马的西斯廷大教堂天顶壁画中的所有人物。
开发软件必须要考虑到人性的需求,想画家画的画是给人看的一样的。要求自己的源代码一定让人看的懂。《计算机程序的结构与解释》中写道“程序写出来是给人看的,附带能在机器上运行”。
3不能说的话
不能说的话有哪些?
这样的话有两个特点,1不能说出口,2他们是正确的。正确的话会引起人们思考。
如何找到那些不能说的话?
寻找标签!找到这些标签的词,自问自答是不是太主观。利用时空穿越,站在未来看待思考这些标签。
成年人教育孩子的很多时候的初衷是我们喜欢他们是这样的。不要欺骗孩子,不一定要孩子保持的天真无邪。
找到不能说的话的另一个方式是:观察禁忌是如何产生的?某个道德观念是如何产生的,又是怎么被其他人接受的。如果我们可以理解他产生的机制,那我们就可以应用于我们自己的时代。
希特勒曾经很推崇写实派艺术(representation art)但是希特勒是个失败者,所以写实派一直不得到认同。
为什么要找到那些不能说的话?
1、好奇,2、防止自己犯错,3、很好的脑力训练。
智力越高的人,越愿意去思考那些惊世骇俗的思想观点。这不仅是因为聪明人本身很积极的寻找传统观念的漏洞,还因为传统观念对他们的束缚力很小,很容易摆脱
知道哪些话是不能说的,之后要做的就是守口如瓶
当狂热分子试图引诱你说“到底是支持我们还是反对我们”,你不妨以不变应万变回答:“我既不反对也不赞同,我还没想好”。
永远保持质疑,要想清晰的思考,就必须远离人群。如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑,问自己,什么话是我不能说的?为什么?
4良好的坏习惯
黑客是不服从管教的。但是有些程序员注意到了知名黑客的怪癖,就会模仿,使自己显得聪明,这样的行为令人恼火而且还会延缓创新的过程
作者这里讲了一个很有意思的小故事:“上研究生期间,机房下午5点关门,可是他往往下午5点之后才开始工作,所以就去想偷机房的钥匙。一天晚上,凌晨3点,从天花板爬到管理员的桌子上,准备拿钥匙,可是警报响了。然后用了30s仓皇的逃出了大楼,冒着大雨,跑回了家,虽然表面看起来是若无其事,但是内心惊恐的觉得自己是一个犯罪分子,每辆经过的车都以为是警车,然后第二天把辩解的理由排练的滚瓜烂熟才回到实验室。但是出乎意料并没有追究责任的email,原来昨晚的警报是因为暴风雨闪电触发的”
8防止垃圾邮件的一种方法
在所有对抗垃圾邮件的方法之中(从软件方法到法律方法),我认为单独来看,“贝叶斯过滤”是最有效的方法。
9设计者的品味
哥白尼不认同托勒密的体系,一个极其重要的原因是,他觉得妥了提出的偏心等距点毫无美感。--托马斯.库恩《哥白尼革命》
美感是第一道关卡,丑陋的数学在世界上无法生存--G.H.哈代《一个数学家的道歉》
10编程语言解析
缓冲区溢出攻击--利用了C语言的某些特点
当在c语言中为输入的内容分配一片内存时,它会被分配到当前运行代码的返回地址旁边。返回地址是一块特定的内存,当前代码运行完之后就要运行这块内存中的代码。如果有人要攻击你的计算机时,他们猜出你会为某种输入分配256字节的内存,那么他就提交多余256字节的内容,目的就是覆盖旁边的“返回地址”。如此,当前的代码运行完之后,就程序的控制权就交给了他们制定的内存地址。而制定的内存是攻击者实现编好的机器码,然后攻击者的程序就运行在了你的计算机上。
如果其他高层的语言,则不会出现这个问题。C语言中如果不判断输入的长度,就会出现这样的问题,这种攻击就叫做缓冲区溢出攻击。
这种攻击和劫持飞机很像。乘客区和驾驶区想通就好像C语言中的数据区和代码区相邻一样。劫机者一旦进入驾驶舱实际上就相当于把自己的重数据提升为代码。
有些人认为程序语言应该防止程序员干蠢事(java),有些人认为程序员应该可以用编程语言干一切他们想干的事(Perl)。
11一百年后的编程语言
编程语言就想生物物种一样,存在一个进化的脉络,许许多多分支最终都会成为进化的死胡同。例如Cobol语言。作者语言java也会如此
任何一种编程语言都可以分成两大组成部分:基本运算符的集合(扮演公理的角色)以及除运算符以外的其他部分。
我的判断是那些内核最小,最干净的编程语言才会存在于进化的主干上。一种语言的内核设计的越小、越干净,他的生命力就越顽强。
现在我们的观点就是(1)一百年后的编程语言在理论上今天就能设计出来。(2)如果今天真能设计出来这样的语言,很可能现在就适合编程,并且能够产生更好的结果。
12拒绝平庸
埃里克 雷蒙德在《如何成为一个黑客》中说,如果想当一个黑客,建议重python和java入手,C和Perl深入,如果把黑客作为人生目标 应该考虑学习Lisp。
13书呆子的复仇
软件业有一场永不停息的战斗,书生气的开发者和官僚主义的经理之间总是发生冲突。
那些经理奇迹般的同时具备了两种很常见的但很难结合在一起的特点(1)对技术一无所知(2)对技术有强烈的个人观点
14梦寐以求的编程语言
可编程性、一次性程序、函数库、效率、时间、再设计