重读黑客与画家
《黑客与画家》这本书的中译本出版于2011年4月,它的作者是美国互联网界"创业教父",哈佛大学计算机博士Paul Graham,他的译者是著名blogger、译者阮一峰先生。
这本书在2011年一上市就受到了广大人民群众的爱戴,我在第一时间拿到纸质书后,通读了两遍,当时感觉很震撼,可以说本书是我近年来读过的最优秀的人文类技术图书,个人非常喜欢,所以在去年在图灵推出多看电子书后,又购买了电子版《黑客与画家》,放到手机和Pad上随翻随看,最近又开始重读。
好书的特点是常读常新,一本好书往往沉淀了作者几十年的岁月,绝不是你草草翻上一遍就可以理解和掌握的。虽然是同样的文字,在不同的时间和环境阅读,往往给你带来不同的启示和感悟。下面是我重读的读书笔记。
Redesign——设计永无止歇
Paul Graham在黑客的第十四章-梦寐以求的编程语言里,写了一节关于Redesign的随笔。什么是好的文字?好的文字来自于不停的修改,好的编程语言和软件产品同样如此,在个人的工作生涯里,我的体会是,再多的修改也不过分。可以说没什么软件产品是完美的,完美主义者都是不断打磨产品以趋近完美。如果不信,那么各位看官可以打开你们一年前写得代码或文章,如果脸红的话就吱一声吧。
同样,如果你想不断的调整自己的设计和实现,那你就需要保证你的工作在某个特定阶段是可持续的。我的建议是无论选择公司,还是在公司内部选择工作,尽可能选择能够长期投入和完善的事情做,如果你半年做一个项目,之后又换成另一个,然后再换,除了积累了一大堆项目经验之外,1、你个人能力没有得到提升,2、你永远无法完成一个优秀的产品。在产品公司,你可以为优化某个算法或Ajax效果花费一个月的时间,这在以单纯做项目或外包的公司是不可想象的。找一家程序员被当做天才和宝贝的公司,去做可持续的产品…..
推荐两段核心文字,大家体会下阮一峰老师的翻译功底:
——为了写出优秀软件,你必须同时具备两种互相冲突的信念。一方面,你要像初生牛犊一样,对自己的能力信心万丈;另一方面,你又要像历经沧桑的老人一样,对自己的能力抱着怀疑态度。在你的大脑中,有一个声音说“千难万险只等闲”,还有一个声音却说“早岁哪知世事艰”。( You have to be able to think how hard can it be? with one half of your brain while thinking it will never work with the other. )
——如果你能平衡好希望和担忧,它们就会推动项目前进,就像自行车在保持平衡中前进一样。在创新活动的第一阶段,你不知疲倦地猛攻某个难题,自信一定能够解决它。到了第二阶段,你在清晨的寒风中看到自己已经完成的部分,清楚地意识到存在各种各样的缺陷。此时,只要你对自己的怀疑没有超过你对自己的信心,就能够坦然接受这个半成品,心想不管多难我还是可以把剩下的部分做完。
时间与流行
一种编程语言想要变得流行,最后一关就是要经受时间的考验——《黑客与画家》
时间有时候是很无情的,很多流行的东西,随着时间的流逝将变得面目全非。美貌与时尚如此,技术同样要经历岁月的洗礼。进入21世纪以来,技术热点不断变更,每次的技术更迭,就像流水冲刷河床一样,虚无的流走,沉淀下来的才是有价值的东西,我们要做的就是那些能沉淀下来的东西,这需要去判断和选择
进入21世纪,从静态语言到动态语言、面向对象编程到函数式编程、从模型驱动设计到领域驱动设计、从SOA到云计算、从BI到大数据、从BS到移动互联,无论技术热点如何变化,站着挣钱的永远是那些踏踏实实做产品和技术的。2009年SOA火热的时候,每家软件公司和互联网公司都号称自己面向服务了,甚至IBM、BEA等公司为SOA确定了SCA和SDO规范,但3年以后,无人再提SOA,无非就是用开放的技术实现原来的EAI么…
有位在校大学生问,“我们下学期要学习数据库,以后想从事大数据方向,不知道从什么方面学习大数据”。我的建议是,不要被现在大数据的噱头忽悠了,等你两年后毕业出来,可能已经没人提大数据这回事了。如果真的对数据感兴趣,踏踏实实把关系数据库学好,有时间的话再学一门编程语言,掌握数据结构,再有余力学习一些数据挖掘和推荐算法等知识,这就行了,相信我,你没那么多时间!
所以,正在流行的东西并不一定值得投入,流行感冒倒是流行,也没人追啊......
最大化你的价值
有人问,你为什么要从事IT技术研发工作?如果是乔布斯,可能的答案是改变世界;如果是人生导师,可能的答案是跟随你心。如果是我回答呢,答案就是如果不从事这个行业的话呢,我还真不知道该如何养家糊口:)
每个人进入一个行业,有必然性也有偶然性,现在想来,我进入软件行业可能是兴趣使然。我小时候就比较喜欢电子相关的东西,这个习惯保持到现在就是喜欢电子设备。大学的时候电子和计算机相关的课程都学的很好,其他专业课则一塌糊涂。毕业后进入一个工厂做电子设备测试,晚上则用车间的电脑学习编程,很快自己觉得可以找到工作了,就去面试,一面之下进入洪恩,稀里糊涂算是进入了IT行业。
工作了十几年,发现自己确实对技术比较感兴趣,曾经有很多机会转岗成为纯粹的管理和业务人员,但最终都没舍得放弃技术,当然技术也没什么大成,爱好而已。
为什么做技术,技术是什么?我的观点是:
1、与其他工种一样,技术可以谋生。很多导师说看准一件事情就全情投入,不要考虑收入,奋斗不息财富会随之而来。且不说只有你成事了财富才能来,就说没成事的时候我们总不能饿得头昏眼花去奋斗吧。准确一点是工作初期不要过分考虑金钱。总要解决温饱问题吧,那么做技术研发可以很容易达到这个目标。
2、技术是一种手段和做事方式。尤其是在现在这样一个互联网和数据的时代,可以说技术面前人人平等。你付出了多少,差不多就会得到多少。很多人羡慕创业公司的人获得的财富,他们只不过是把你20年平稳的打工生涯压缩成4年艰苦卓绝的创业,当他们冒着成为炮灰的风险在清晨的寒风里编程时,你正在温暖的被窝里做着美梦。所以就别羡慕了,那是他们应得的。
3、做技术需要终身学习,如果你个学习狂,恭喜你找到了一份完美的工作。有一次一个工程师告诉我,每次感到恐慌的时候,就开始学习,掌握了一门又一门语言和技术。最后他成为了一个通才之上的专才。书到用时方恨少,事非经过不知难,有时间就学点东西,没坏处,还能预防老年痴呆。
4、作技术可以最大化你的价值。如果你是卖煎饼的,买一个是一个,如果你开发了一个千万人使用的软件,那你做这个软件的价值就放大了千万倍。如果你做的互联网产品服务了千万个用户,你的做这个产品的价值也就放大了千万倍。如果你在做这样的工作,那么你就最大化了自己的价值,财富也会随之而来。如果没有,就去找这样的工作。
难易相成
古人云:有无相生,难易相成,长短相形,高下相倾。
很早就想说说困难和容易这点事。人生一世,我们到底是要选择做容易的事还是做难事?这个想法源于春节前的业务讨论会,有两位经理各执一词,一个说,为了让部门能够生存下去,我尽可能去做那些简单的相对稳定的任务,因为这样可以保证良好的现金流。另一个说,为了能让部门生存下去,我尽可能去做那些困难的利润更高的任务,因为这样可以保证良好的现金流。
难易相成,困难和容易会在不同的环境下会相互转化,我觉得这两位经理在特定场景下说得都没错。
就个人而言,我觉得我们应该尽可能做那些困难的事情,让别人变得不那么困难。无论是做软件还是做互联网服务,其实终极意义就是你做出来的东西能否解决用户的问题,如果这是一个容易解决的问题,那么很多人早已经解决了;如果这是个困难的问题,那就意味着很多坑等着要埋你。咋选呢,似乎怎么选都是炮灰,权衡一下,选择前者基本是无用功,那我们只好选择后者,我们本身也是爱挖坑的人,况且困难面前人人平等么。
JetBrains是一家捷克的软件公司,他们做的事情就是为Java,Objective-C,Python,Ruby,JS等语言写开发IDE,给程序员写工具可不是闹着玩的,他们对IDE的挑剔基本比肩女性对化妆品,但JetBrains开发出来的工具深受程序员喜爱,各种智能,各种效率,他们获得了极大的成功,为啥,因为做着别人很难做成的事。
让自己困难点,让别人容易点,说了半天,好像就这么点事。Paul在黑客画家里提到选择哪种技术和语言去实现软件的时候,同样选择了那些困难的有竞争力的事情去做。
逃离舒适区
本来想起名为逃离技术舒适区,后来想想这个话题具备普适性,就把技术去掉了。上一节谈的是困难和容易的取舍,这一节的话题算个延续。
什么是舒适区?如果你是个新手,你就没什么舒适区,什么都不懂嘛舒适个毛啊,在磕磕绊绊的学习中懵懂前行,期间可能还伴随着老鸟的嘲笑和进度的压力,终于有一天你武功大成,乾坤大挪移练到了第五重,工作中开始得心应手游刃有余,不断有新人或老人来找你解决问题,你微笑着迎接各种挑战,淡淡的送走困难,你挥一挥手,不带走一片云彩,这是什么境界?这就是你的舒适区,这和靠在沙发上看电视的舒适不是一回事,通常进入舒适区需要花费你很多的时间和精力,需要你不断的练习,一旦进入,你会enjoy it!
这时候,如果有人胆敢让你脱离舒适区,可算要了亲命了,你会勃然大怒,轻则争吵,重则离职。这种事遇到太多了,一个写前端的你让他学习一些后端技术,一个写Java的你让他学习一下C,得到的答复可能会,Sorry, I feel very uncomfortable!
没有人学新东西的时候非常舒服,一旦经历过从新人到老鸟的过程,再让你进入陌生的领域,那种痛苦会让你自发的去抗拒。但是一个人不可能永远躲在舒适区里,逃离舒适区会有助于你从不同的角度看问题,视野会更加开阔。人总要往前走的。
就我个人而言,我有多年的vim使用经验,目前在学习emacs,我从Linux转到windows再转到Mac,学习了多种编程语言,一直在练习自己的演讲能力并做了很多公开演讲。有时候做很多事就是为了挠自己痒处,避免在舒适区待太久。
很多人在某个地方待久了就会非常懈怠,没退休就像在养老,这时候我就知道,他们在舒适区太久了,与在哪个地方无关。
创造财富
《黑客与画家》里有两章是描述财富的,如果你是个财迷,那么就该去读读,如果你不是,读读我的读后感就行了。
财富和钱从来就不是一码事,所以大部分人只能去创造财富,因为你不是印钞机。但钱毕竟是流动的财富,所以大部分人还得通过创造财富去挣钱,那么一辈子挣多少钱合适呢?
在很多年以前,100万还能在北京买一套房子,大家还没有听说过PM2.5这个术语,蓝天还不是那么得稀有,有人写过一篇文章,大意就是一个家庭要多少钱才能正常的生活(什么是正常?好吧,你就当及格线60分理解),作者从购房、购车、赡养父母、教育子女、家庭生活、休闲娱乐、养老、货币贬值、物价飞涨等各个方面算了一笔帐,这个数字是600万。
——这位同学你不用站起来了,我知道现在100万在北京只能买个洗手间,我说得重点不是这个。而且要算也很简单么,如果你觉得现在北京买套房需要400万,那就加上300,如果在老家50万就能买,减去50即可,不离谱。
如何去挣这个抽象的600万呢?如果按照60岁退休计算,大部分人要工作40年左右,大家可以计算下,如果妥妥的工作了40年,你的平均工资要达到多少才能过正常生活。当然你也可以选择创业,高风险高回报,一旦创业成功,你就摆脱了这个“正常生活”的羁绊,可以有更多的时间和空间做自己更喜欢的事。但是这些成功的创业者不会就此不再工作了,他们可能会比普通打工者工作更长的时间。
为毛?很多有钱人完全不必再工作,但是他们工作起来比普通人还欢实。不是天生受虐狂和社会压力,而是无所事事使人感到孤独和消沉。我有个朋友移民国外,由于有房产完全不必工作,天天烧烤钓鱼,半年以后,他在MSN上告诉我“看到烧烤钓鱼就想吐,我必须要找个工作了”。
另外,如果你不是银行劫匪或公务员,你应该知道财富是创造出来的,而不是抢来的。乔布斯和沃兹创建了苹果公司,为自己、员工、开发者和社会带来了巨大财富,但别人并未因此而变得贫穷。所以建议大家尽可能去做创造财富的工作,而不是掠夺财富。
另外,如果没人给你报酬,你是否愿意去工作呢?唯一可能的就是这件事比较有趣,比如Linus Torvalds免费写了著名的操作系统Linux,他当时可没想着用这个操作系统赚钱。那我为什么写博客呢?嗯,思考中……
关于这个话题,Paul表现出了很多技术之外的Political智慧,比如允许赚到大钱的人保留自己的财富,比如藏富于民:
——一旦自己的财产有了保证,那些想致富的人就会愿意去创造财富,而不是去偷窃。由此导致的新技术会很容易被转化成财富。
——要鼓励大家去创业。只要懂得藏富于民,国家就会变得强大。让书呆子保住他们的血汗钱,你就会无敌于天下。
完结
《黑客与画家》可以为你带来技术、生活、自由、财富等各方面的思考,确实是难得一见的技术图书。事实上这次重读还有很多感受没有形成文字,希望以后有机会还能继续补充这篇文章。
身边越来越多的人开始使用Mac,经常被问道Mac的使用问题和技术问题。遂决定,每天发布一则#Mac技巧#。同时发布于微博和微信公众账号“Mac技巧”,微信号sagacity-mac,有微信账号的童鞋扫描下图片或搜索微信号即可