这本书的作者是在互联网届举足轻重有“创业教父”之称的哈佛大学计算机博士保罗·格雷厄姆,作者试图从许许多多不同的方面解释计算机时代的内在脉络解释它的发展轨迹,帮助我们看清现在的位置和将来的方向。想把握这个时代就必须理解计算机,关键就是理解计算机背后的人,我们的时代是程序员主导的时代,而伟大的程序员的就是黑客。本书澄清了黑客的概念,计算机世界到底发生了什么以及黑客伦理,这个书名就是在提示应该把黑客与画家当做同一种人来看待,编程是一种艺术创作,黑客就是艺术家,开发软件与画家作画、雕塑家雕刻、建筑师设计房屋并没有本质不同。这是计算机界经典著作,讲了很多,我挑选一些有意思的内容写。
为什么会存在等级的关系?
现实世界中在任何团体中都存在等级关系,在成年人真实世界中形成的团体都存在某个共同目的,团体的领导者往往是最善于实现目标的人。但是学校就不一样,学生内部形成的团体没有一个共同目标等级关系却是评空创造出来的,没有任何严肃标准的前提下产生排名的情况我们会说情况“倒退至人缘比赛”,某个人的排名不是根据他的真正能力而是主要根据他专攻排名的能力,没有外在的对手孩子们就互相把对方当作对手,如果存在对于真正能力的外部测试,球队的新人就会很高兴向老队员求教,老队员也会尽力的帮助,产生一种传帮带的光荣感,球员的地位通过他们本身出色的能力获得而不是通过排挤他人获得的。所以说学生内部就是这种关系的社会,因为除了每天把小孩聚集某个地方关几个小时以外学校并不会有其他的真实目的,所以学生内部形成这种关系也就很自然,学校生活的两大恐怖之处,残忍和无聊也是出于同样的原因。
编程=“打草稿”?
通常在上机编程前先在纸上把程序搞清楚,我其实和作者一样喜欢直接编程而不是像学校教育的那样,先确保主体是正确的一股脑把代码堆上去,再修改,最后编程核心却是调试,这在没经验时很痛苦的,学校教育方法就像绘画或者建筑等创作领域就是“打草稿”,作者后来认为大学里教的编程方法是错误的?作者认为把整个程序想清楚的时间点,应该是在编写程序的同时,而不是写代码之前。这是与作家,画家的做法完全一样。
要明白这一点是不是颠覆了我们的认知,保罗解释道,编程语言首要特性是允许动态扩展,语言是帮助思考程序的,而不是用来表达已经想好的程序,是一支铅笔而不是钢笔,像学校教育的那样编程,那么静态类型是一个不错概念,但,他认识的黑客没有一个人喜欢用静态类型语言编程,反而需要的是一种可以随意涂抹,擦擦改改的语言。他举了一个例子,人们都不想正襟危坐,把一杯盛满各种变量类型的茶杯,小心翼翼放在膝盖上,为了与一丝不苟的编译器大婶交谈,努力挑选语言,确保变量类型匹配,好让自己显得礼貌又周到。
明白这一点的好处还在于免除了折磨科学家的“对数学的妒忌”,包括我们每个人都认为数学家比自己聪明,尤其是科学界,这样科学家就会把自己工作弄得像个数学家,这就会成为严重的问题,会受到巨大诱惑,而不是真正解决真正的问题,比如现在更热衷于评价哪个框架好,要选择什么语言,而不是优先把真正的问题场景优先考虑。
软件设计与创业?
还有国内程序员深恶痛绝的PM问题,里面有千千万万悲伤的故事,大学和实验室不允许黑客做他们想做的事情,另一个出路可能就是企业。不幸的是大多数企业也不允许,大学和实验室强迫黑客成为科学家,而企业强迫成为工程师。”码农“是程序员的自嘲,也是外界的印象,在他们眼里,程序员就是用软件实现某个功能而不是设计软件也就是技工,设计软件自有职业叫PM,程序员这一技工就是实现PM的”构想“,这样其实也没错,可以减少结果的标准差。
大公司这样做减少了设计上的灾难,他们只要做到不太烂就能赢,书中介绍到一个观点,如果你想开发优秀软件的方法之一就是创业,如果有一天你想去赚大钱创业公司能够成功的原因之一就是要记得PM这个问题,如果你的竞争优势在软件设计,而对手是大公司,并且有一群产品经理来设计,那么他们永远超越不了你,当然这样的情况少之又少,就像你无法攻入城堡与对手面对面搏斗。书中谈到真正的软件设计的战场在新兴领域,这里没有人建立”城堡“,只要你做出大胆设计,就能战胜大公司,比如”滴滴“,微软,苹果,惠普都是这样成功的。保罗觉得所有创业公司都能这样取得成功。
程序员如何做到自己喜欢的事情?
程序员自己创业会有两大问题,不会单纯享受技术,而是要付出大量精力处理与技术无关的事情,单调乏味又惊悚恐怖(书中的形容词),另一个赚钱的项目不是好玩的,大多数优秀的程序员是好”玩“的。如果想赚钱就不得不干麻烦讨厌的事情,这些事情也没有人愿意义务干,好玩额软件的需求量,比不上解决客户麻烦问题的软件需求量,开发编程语言的收入比不上把某些公司老掉牙的数据库连上服务器的收入。所以初级程序员还是不要进入外包公司,因为都是做相同的项目,重复地做,技能得不到快速提升。
解决方案就是找一份养家糊口”白天工作“(day job),这个词是作者从音乐家身上来的,音乐家晚上表演,所以白天可以找一份其他工作,简单说就是,除了有一份赚钱的工作,还有一份为了爱好的工作。这不是一个新方法,但也不是一个简单的方法,放眼国内互联网公司哪个不加班,又如何去找呢?关于这个问题,在知乎和微博上讨论的比较多了,加班完全是由于效率和能力的问题。在做完本职工作其他时间可以开发优美的软件,开源软件的这种工作模式可能就是正确的模式,其他领域的创作者也都验证过了。
书中谈到了,热爱这个词,在面试中如果有些博客或者github会有加分,公司面试会主要专注在业余时间写了什么,如果不热爱就不能做到真正优秀,热爱编程就会不可避免的开发自己的项目。
这本书还有意思的地方很多,每章又相互独立,选择自己喜欢的就亲自去读读吧。
网友评论