《黑客与画家》碎碎念

几个画画与编程想通的点:

  1. 关于范例。怎么学画画呢?可以临摹大师的作品。作家可以靠总结和模仿别人的文章学写作。程序员也可以通过看优秀的程序学会编程。这么说来,开源的运动让学编程的难度大大降低了。

  2. 关于修改。一幅画从构思、草图到填入细节,中间可能会经历多次修改。作者认为,编程也应如此。作者也因此反对过早优化和过早设计,认为动态类型语言更具灵活性。

  3. 关于注重细节。达芬奇的《女性肖像》(Ginevra de' Benci)(现保存在美国国家美术馆)的背景画的非常细致。他仔细地画出了树枝上的每一片叶子。也许没人会认真看。但达芬奇依然一丝不苟,绝不降低对自己的要求。同样地,优秀的软件也要求对美的狂热追求。优秀软件没人看见的内部也是优美的。“坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。”

  4. 关于创新。黑客和画家一样,是创新性的工作,工作起来是有心理周期的。而且,他认为,消灭bug是轻松的工作内容。就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方程求解就可以了。你的程序应该能产生X结果,但是却产生了Y结果。哪里出错了?

  5. 关于合作。许多教堂的壁画都是多人一起合作画完的,每个人负责画其中的几个人物。米开朗基罗坚持一个人画完了罗马的西斯廷大教堂(Sistine Chapel)天顶壁画中的许多人物,还被认为特别死心眼儿。软件开发也需要合作,不过要分工明确,每个模块都要严格明确负责人(owner),若合作过头,没人真正负责,代码就没人管理,全是冗余代码,就像公用储物间一样脏乱。

  6. 关于考虑用户的人性需要。大多数画作是为人类用户而创作。大多数软件是为人类用户准备的。为了吸引用户,你必须理解用户需要什么。比如,几乎所有最伟大的绘画作品都是画人的,因为人类总是对自身感兴趣。只有时刻考虑到用户的人性需要,站在用户的角度思考问题,换位思考,才能做出伟大的产品。“换位思考”并不意味着你要做自我牺牲。了解别人对于事情的看法,并不代表你为他的利益服务。某些情况下,比如打仗的时候,了解对手正是为了打击对手。以自我为中心的人很难设计出优秀软件。

你可能感兴趣的:(《黑客与画家》碎碎念)