如何写出优秀的软件,更优秀的编程-《黑客与画家》教我的那些事

《黑客与画家》的第2章:黑客与画家,既是章节名也是本书的名字
黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。
应该如何介绍Paul Graham,才能让中国读者了解,这是一个在美国互联网界如日中天的教父级人物?—阮一峰
生信是是指生物信息,也就是我希望他们应该将自己看作bio-hacker,这些不了解都不影响正常阅读本文。

如何写出优秀的软件,更优秀的编程-《黑客与画家》教我的那些事_第1张图片
图片发自App

Paul Graham在序言的结尾说:

虽然黑客从外表看上去一般都是呆呆的,但是他们的大脑内部却是一个有趣得让你吃惊的地方。

不过,看Paul还不算太呆。

黑客与科学

Paul认为黑客真正想做的是设计优美的软件,而科研、计算机理论、数学、科研和论文并不是黑客擅长和应该做的。

为了配合论文研究性的主题,你很容易就把工作重点从开发优美的软件转移为开发一些丑陋的东西。
黑客搞懂“计算机理论”(theory of computation)的必要性,与画家搞懂颜料化学成分的必要性差不多。
黑客的最高境界是创造规格。

科学家会把自己的工作尽可能弄得看上去像数学,以显得自己像数学家一样聪明。一页写满了数学公式的纸真是让人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)这样,你会受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。这个对将要分享数学统计的我来说,是啪啪的打脸啊!不过也没关系,“拿来主义”在生信中不错的做法。

对于黑客工作的考核可能会非常困难,唯一有效的外部考核就是时间。谁说不是,对做这个公众号,唯一考核的也就是时间。平时说的各种10W+的考核方式,不过是容易实施。

怎么优秀的编程,写出优秀的软件
  • 打草稿——你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
  • (好的)编程语言—应该是一支铅笔,而不是一支钢笔。——话说小编很早便心有灵犀地换成了写不断铅笔啦,当时喜欢铅笔其实就在于可更改性。
  • 实践——黑客通过实践学习编程。黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到的是原创。
  • 临摹(模仿)——临摹大师作品是传统美术教育的一部分,作家也是这么学习写作的,同样地,黑客可以通过观看优秀的程序学会编程,阅读大量优秀程序的源代码
  • 逐步完成——一幅画是逐步完成的,同样,不能盼望有一个完美的规格设计,再动手编程
  • 对美狂热的追求——一幅优秀的绘画作品必须比它应该有的样子更好,达·芬奇(《女性的肖像》)在少女的头后面白了一片数值,他很仔细地画出了树枝上的每一片叶子。坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。


    如何写出优秀的软件,更优秀的编程-《黑客与画家》教我的那些事_第2张图片
    图片发自App
  • 心理周期——黑客就像画家,工作起来是有心理周期的。

  • 如何与他人协作——多人一起完成一幅作品并不罕见,但每个人画的部分都是不一样的,你肯定找不到某个部分是两个人一起画的。同样,编程中正确的合作方法是:将项目分割成严格定义的模块,每一个模块由一个人明确负责

  • 换位思考——从他人的角度思考问题正是成功的奥秘所在。“换位思考”并不就意味着你要做自我牺牲。了解别人的对于事情的看法,并不代表你为他的利益服务。某些情况下,比如打仗,了解对手正是为了打击对手。判断一个人是否具备“换位思考”的能力的一个好方法,就是怎样向没有技术背景的人解释技术问题。这个如果引申,那就是“怎么给外行简单的说清楚一件事”。
    如果你不能简单地解释一样东西,说明你没真正理解它. —爱因斯坦

  • 直觉——优秀的软件符合用户的直觉,别指望用户去读使用手册。

声望

声望这个东西,总是经过漫长的时滞以后才会确立。就像遥远星系发出的光,经过了许多光年才能被我们看到。那些如今声名显赫的绘画作品,来自于五百年前的画家的卓越工作。莎士比亚出现的时候,戏剧这种文艺体裁才刚发展起来,专门表演戏剧的场所“戏院”才刚刚诞生。他把戏剧这种艺术形式提升到一个难以触及的高度,让后世的每一个剧作家都不得不生活在他的阴影之下。一个新的媒介刚刚诞生的时候,人们热情高涨、兴奋不已,短短几代人就探索清楚了这种媒介的大部分可能性,把它的能量发挥到极致。编程目前好像就出在这个阶段。
这么来说,生信不仅仅是刚刚诞生,还在探索的路上刚刚出发呢。

在达·芬奇时代,绘画并不是一件很酷的事情,达·芬奇用自己的工作推动绘画成为一种伟大的表达方式。同样,编程到底能够有多酷,取决于我们能够用这种新媒介做出怎样的工作。同样,生信到底能够有多酷,取决于我们能够用 这种新媒介做出怎样的工作!

你可能感兴趣的:(如何写出优秀的软件,更优秀的编程-《黑客与画家》教我的那些事)