我要投稿 投诉建议

读HackersandPainters有感

时间:2021-04-08 10:14:17 读后感 我要投稿

读HackersandPainters有感

  人类世界还没有充分领会到程序员的美学,但是Paul Graham却以生动的文笔与幽默的语言,和着犀利的思想,将这种美带到了我们面前,超越了时代,Hackers and Painters读后感。

  正是如此。不管你是一个做做纸飞机的业余爱好者,还是一个在软件工程的体制内谋生的专业程序员,究其根本,都是从事着创造程序的职业。我说创造,因为写程序是需要灵感,需要极大的热情的--这一点和画家无异--虽说计算机是精确的、死板的、有条不紊的,但是什么是程序呢?

  程序就是告诉别人一个算法中究竟有什么奥义,顺带告诉计算机怎么执行看到这种解释的那一瞬间,我就被这种美给折服了。多么原始而狂放的表现形式!告诉计算机如何执行?这种工作交给老实巴交的编译器大妈(Aunt compiler,亏他想得出来啊…)就好了。这样解释的话,程序员不是和画家很像吗?所以我就在想,"体制内的废人们在做什么呢?"每天上班打开TFS,干掉属于自己的几个Work Items,然后下班,离开"过早设计"的噩梦。在PG的体系里,他讨厌一切的静态类型的编程语言,声称你用那些语言写程序的时候,就像"正襟危坐,努力挑选着词汇想要不激怒那些死板的编译器"一样--PG认为静态类型的语言简直和学校里教你如何编程(例如先在纸上写下来)形成了完美的呼应,而这样通常不能产生好的程序,因为他认为程序是用来创造思想的,而不是表达一种已经存在的思想(这一点我同意,但是为什么他对C语言有那么深的成见?只能说他没有理解到如何用C来表达思想,或者说叫"隔行如隔山"吧,真是受不了这一批互联网时代的脚本小哥们…)--他推崇动态语言,认为可以涂涂改改的铅笔才是表达思想的最好工具。计算机是死板的,但是操纵计算机的人不能死板地握住钢笔心里没底。

  也许有人会说,这种方法论完全不适合于"团队项目",缺少"沟通",但是PG的"不能说的话"让我明白,有的时候,必要的词只是一些标签而已,为了在特定的时代攻击特定的人,人类总是喜欢发明禁忌的标签--其实他们只是想表达"我不同意"而已--通常的情况下,发动这样的言论的人往往处于极权统治的上层。

  PG的团队,就在他的这种方法的指导下成功了。当然,这里所指的合作与沟通,是在严格限定了个人职责,将工程划分为严格的模块后才形成的--几个人一起维护同一份代码,只会让这份代码变成肮脏不堪的杂物堆放间,读后感《Hackers and Painters读后感》。只要接口规定好,不同模块即使是采用完全不同的语言与通信机制也没关系的呀--大概这就是新时代的特点--在互联网上写程序,真的很灵活。

  上软件工程课最大的收获之一,就是让我明白了每个企业都有自己的文化,相互之间有时还水火不容。老师将微软的文化展现给我们,供我们学习参考,让我们获益匪浅;但是我们也不能一味地只是独尊一家之言,每种文化背后都有成功的故事,这种时候好心的成功者就会跳出来谦虚地解释,他是如何做得不比别人糟糕的。PG这个愤青,在书中对微软实施了各种讽刺与攻击,说微软太笨重,太迂腐(例如"我被告知微软的员工被建议不要参与开源项目,即使是休息时间也不行。但是大多数最好的黑客都在参与开源项目。所以实际上这个政策的作用就是使微软雇不到一流的程序员")。但是书里面也承认即使富有创新意识,大胆无畏,一个小公司也是无法与这样的大公司抗衡的--因为即使你能打得过国王,赤手空拳冲进他的城堡与他一对一决斗也是完全不可能的事情--城堡里的人甚至根本就不会意识到挑战者的存在--大概这就是大公司的生存之道吧,走增量路线,在自己的地盘上拼命修建防御工事以提防敌人入侵。然而PG也指出了小型起步项目的生存方式--去那些还没有人修建防御工事的、全新的领域(这种说法和邹老师课上讲的方法完全吻合),在那些地方迅速地成功。

  何为迅速?开发周期是一个重要的因素。PG指出,在互联网的时代,"版本号"已经渐渐消亡,软件的更迭升级更像是一个平滑滚动的过程--离开了桌面软件的"灾难式分发方式"(我还依稀记得那张Abelton Live的正版光盘被划伤的时候我的心情是多么糟糕…),便离开了传统的'开发周期--一天升级三四次都没有问题。关于Bug,处理的方法也和从前不尽相同--这里特别提一下苹果的丑事--在新版操作系统发布的时候,CD/DVD操作功能还没有完成--他们就这样把新的操作系统卖出去了!后来用户不得不自己充当修理工的角色,以打补丁的形式补上这个功能…

  传统的方法是--在每一次版本更迭中,加入大量的新Features,然后再把代码交给QA进行测试。但是这样到最后顶多也就是得到一个"统计学上合格"的版本。

  有时明明知道某个功能无法使用,但是新的软件还是照样被分发给用户。

  但是在互联网上情况就不一样了--既然不能用,挂出一个页面来干什么呢?另有一说,说互联网时代的最大优势在于用户全都是Beta版的测试小白,开发者们再也不用看着一堆Core Dump来猜测用户到底都干了些什么了。确实,即使有Bug又怎么样?Bug会在无知用户的严峻考验下迅速地暴露出来,迅速地被网站维护人员感知,再迅速地被开发者消灭掉--所以大部分用户所看到的软件都给人一种"毫无漏洞"的感觉--既敏捷,又不失严谨--至少看上去是这样的--不是很好吗?这种新时代的开发周期模式,确实值得"啊~在学校只学了C语言啊~什么都不会啊~"这样的孩子们好好反思--是时候了解一些能跟上时代的东西了,不要试图以80年代的方法论甚至技术来赚10年代的钱。

  读完PG的书,获益匪浅。黑客的桀骜不逊,小团队的灵活敏捷,美国式的自由精神,都值得我们好好思考与学习。