假期读书|《黑客与画家》读后感

大家,好,今天是假期最后一天,五四青年节。我历来的习惯是小长假结束前一天随便拿起一本书来读,读完更好,随便翻翻也行的,这样第二天工作便无生杂念,当然能写下一篇读后感就更好了^_^。调整一下准备明天的工作吧!

正文开始:

这本书是一个散文集,一共15篇,每篇文章之间没有关联,大家可以跳跃着来读。"黑客与画家" 是其中一篇,书名也取了这篇文章的名字,大家现在看的这篇文字也是重点在理解"黑客与画家"这篇文章的基础之上的读后感。黑客与画家有什么联系呢,我在《架构修炼之道》一书的最后一章也写过类似的文章,题目叫做"程序与健身",只要思考,联想,两种事物之间是有联系的,实际上按照哲学的思维万物之间皆有联系,当然我思考的水平还远远没有达到《黑客与画家》这本书乃至这篇文章的高度,更不敢妄异曲同工。

黑客的定义

当提到黑客,在一些大众的眼里面,黑客就是入侵计算机的人,和计算机犯罪联系在了一起。那么黑客一词最早的时候是定义为那些专门解决计算机中出现疑难问题的人,是一流能力的象征,自由软件基金会的创始人理查德.斯托尔曼说:"出于兴趣而解决某个难题,不管它有没有用,这就是黑客。"可见,从精神层面看,黑客追求着一种愉悦或者是享受,是有精神追求的人。黑客在这本书中也倾向于代表着优秀的程序员或者软件设计师,但是对"软件工程师"这个称谓,作者是不太赞成的。作者认为优秀的软件设计师如其说是工程师,还不如说是建筑师,建筑师表现在 "做什么",而工程师表现在 "怎么做",有意思的一点是,在英语中 "建筑师" 和 "架构师" 是同一个词architect,那么优秀的程序员不仅负责建造,还负责架构。当然作者也提到,"做什么" 和 "怎么做" 不应该分得太开,比如一名软件架构师或者设计师,决定做一件事,知道做什么,却不知道怎么做,那是一件自找麻烦的事情。

黑客与画家都是创作者

根据以上叙述,可以看出黑客是跟计算机有关系的了,那么书中先对"计算机科学"描述了一番,书中的观点将计算机科学分成了"三段",两端和中间。中间的这部分是由计算机博物学家研究的方向组成,比如网络数据路由。两端中的一端是数学家,比如二进制,十六进制换算等等,另外一端则是我们说的黑客,按照书中的描述,黑客们只想写出有趣的软件,"对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料",此时文章第一次将黑客与画家联系在了一起。为什么要把画家跟黑客放在一起,此时我GET到第一个主要原因之一就是画家是属于创作者,黑客也是创作者。除非黑客仅仅是按照产品的需求或者说是产品规格说明书一字不漏的编写代码将产品实现出来,那么此时黑客就不是在从事创作的工作,正如书中所描述的那样 "那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已"。此时的程序员是被当做技工,职责就是将产品经理的"构想"翻译成了代码而已,这样的程序员距离创作者实际相差十万八千里。

黑客与画家的学习途径

黑客和画家都属于创作者,创作者们学习的途径是相似的。画家学习绘画主要是动手去画,黑客学习编程也是一样需要动手去写代码。我们常说"三思而后行"实际上对于黑客等创作者更应该是"先行而后思",三分想七分做然后再三分想,充分做到十以上。创作者们的另外一个学习途径是通过范例,画家去观摩别人的画作,书中提到"对于画家来说,博物馆是美术技巧的图书馆",而黑客的学习范例,就是阅读别人优秀的源代码,"开源最鲜为人知的优点之一,就是使得学习编程变得更容易了"。

黑客与画家的学习方法

创作者们创作的过程也是相似的。一幅画是逐步完成的,起初只是一张草图,然后再慢慢的雕琢细节。书中提到,很多的名人古画如果放在X光下检查,都能看出修改的痕迹,有的四肢被移动过,有的脸部表情被调整过。也有的时候绘画,原先的构想就是错的,这个时候必须接受修改。这点跟黑客编写代码也是极其相像,而且绘画的过程应该值得黑客去学习,因为我们不能盼望着有一个完美的设计,然后再去动手编程,这样想是不现实的,实际上经验也告诉我们这个确实是不现实的。我们在学习软件的时候很多设计的书籍,比如《架构整洁之道》中都会提醒,不要过早优化。动态的修改,这个特性也驱使黑客们更喜欢动态的编程语言比如ruby,Python,而不喜欢静态的编程语言比如c++,java等,因为动态的编程语言不必提前就设置好各种变量的数据类型。注:书的作者更认为编程语言的灵活性最关键的地方应该在于 "语言应该非常抽象,最容易修改的语言就是简短的语言"。

黑客与画家的细节之美

"坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了",既然一直拿黑客和画家做关联,那就不得不提达芬奇,书中以达芬奇的《女性的肖像》为例,这幅画是人物画,背景是一片树枝,既然是背景那么大家都认为是次要的衬托物,但是达芬奇不这样想。他把这片作为背景的树枝处理的非常细致。许多观众走到这幅画的前面,当还没有看到标签上达芬奇的署名的时候,已经被它深深的吸引住了,甚至大家都没有意识到这是达芬奇的画作。当那些看不见的细节叠加在一起,就这样产生了惊人的效果,"仿佛上千个细微的声音都以同一个音调在歌唱"。优秀的软件同样也要对细节的美有狂热的追求,当看到有些代码连格式的缩进都乱七八糟的时候或者看到丑陋的变量名的时候,对于阅读软件的人的心里都会造成不可言述的描绘。绘画和软件都是为用户服务的,"程序写出来是给人看的,附带能在机器上运行。"

黑客与画家的工作心里周期

黑客与画家都属于创作型工作,都需要热情或者灵感。专业的说法是工作起来都有心里周期。想一想,是不是有时候我们会为了实现一个新的想法,去着迷的连续工作写代码好几个小时。对于此,我想直接引用书中有一段描述是这样的。"对于编程,实际上意味着你可以把bug留在以后解决。消灭bug对我来说属于轻松的工作,只有在这个时候,编程才变得直接和机械,接近社会大众想象中的编程的样子",这才是真正的黑客啊,反观我们是在解决bug,而黑客认为解决bug是机械的工作。继续书中的描述,"你的程序应该能产生x结果,但是却产生了y结果。哪里出错了?你知道自己最后能解决这个问题,所以做起来就很轻松,就好像刷墙一样,接近于休闲了。",在书的作者来看编程永远是创作性的工作。

黑客与画家都需要合作

书中介绍历史上很多伟大的艺术创作都是多人合作一起完成的杰作,当多个画家共同创作一幅画的时候,每个人的所画的步伐都是不一样的。这里面有分工,仔细读来跟软件工程相似,比如大师负责画主要人物,助手画家负责画次要人物和背景。但也绝对找不到某一个部分是两个人一起画的。跟我们一个团队去编写软件系统是不是类似,不过作者强调了一点,"需要合作,但是不要合的过头",书中写到如果一个代码有三四个人共同开发,就没有人真正"拥有"这块代码。这种情况一旦发生,就像"一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码"。因此我们实际软件系统开发中,每个模块都有一个人明确负责。


原文发布于微信公众号 - 程序架道(xindongbook17)

原文发表时间:2019-05-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券