黑客与画家 第二章 黑客也是创造者

2014年10月14日

契机

读这本书是因为阮一峰,一个能称之为我偶像的人。大学期间看着他的博客长大。

豆瓣读书上,他的搜索结果只有两条,其中一本是笔记摘要,另一本就是黑客与画家。

第一印象是:这是一本讲黑客精神的书,当然我有准备,作者很可能会去维护黑客们的形象:他们不单单是那些一天到晚想着入侵、攻破一类事情的聪明人。我觉得黑客与其说他们聪明得很危险,倒不如说是好奇得很逗比(是个褒义词)。作者大概会说些历史谈点技术吧。

看完前言时,我的期望瞬间改变了。有点<大学生创业指导手册>的意思。

入正文,第二章笔记。

黑客和画家的异同

相同点:他们都是创造家

槽点: 这里本来想说不同点的,但仔细一想,作者表达的意思又不是黑客与画家的不同点。暂且说成对计算机界吐槽吧。

计算机科学这个像模像样的名称

我老板常说的话,计算机哪里是什么科学,就是人类工程经验的总结。自从70年代惊艳爆发以后,计算机发展之路一直是以经验纠正为主。

比如,计算机体系结构:

60 70s:为了充分利用晶体管,大伙全扑倒了指令集并行上,好处很显而易见啊,干十个人的工作,只收五份工资

80s 90s:存储墙问题出现,简言之,CPU太快内存太慢,CPU存取数据像面对着一堵墙。这时候重点是针对存储器的优化,人们经验上的改变是——编译器要和指令集一起开发了

2000-:半导体撑到极限,摩尔定律终结,多核异构又成为标签

诶呀这个例子一举。扯远了

考核指标

计算机博士好考核,毕业你得发一篇SCI,两篇EI,SCI影响因子要大于0.5才可以避免盲审,一篇SCI可以顶两篇EI,CCF推荐的A类会可以抵一篇SCI,两篇B类会抵一篇SCI,如果没有SCI理论上也能毕业,但面临的盲审问题一旦过不了就只能延期。是的我倒背如流。

但黑客的工作不好考核。时间?设计美感?影响力?

理论不是那么重要

对于一个画家而言,我想他的整个成长过程大部分时间都在作画,而不是翻那些理论书,或者考那些无所谓的证书。

黑客搞懂“计算理论”的必要性,与画家搞懂颜料化学成分的必要性差别不大。

这个例子太妙,点个赞。因为我的计算导论一类的课程学得一团糟,终于有大牛出来替我松口气了。

颜料成分那些东西,记住点就行了。写程序嘛,知道时间\空间复杂度,再学点状态机就够了。 直接上手,不需要投入太多纸上谈兵的时间。把整个程序考虑清楚的时间点,应该是编写代码的同时。

自由度

画家使用工具应该是优雅的,随意的。这里又有一句精妙的比喻

我认识的黑客,没有一个人喜欢用静态类型语言编程。我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼地放在自己的膝盖上,为了与一丝不苟的编译器大婶(没打错,肯定是故意的)交谈,努力地选词语,确保变量类型匹配,好让自己显得礼貌又周到。

前段时间都在写python,某天突然心血来潮用C解决某个编程竞赛的list,奥哟各种错误不堪入目啊。静态类型确实很烦人,谢谢你大神,又替我说话了。

话说回来,编程语言作为一项工具,顺手应当放在首位。俺们都是热爱自由的人,放那么多条条框框,何必呢。

静态类型是某些计算机语言的一个特性,指编译时对变量类型进行严格检查,典型代表是C\C++\Java。这类语言中,声明变量的时候必须指定类型,而且以后不能再改变。这必然意味着,只有在你对整个程序和细节思考成熟以后,才能编写代码。与之对应的是动态类型语言,变量包含的数据类型可以随时改变,比如python。

纸面上的快感

如何提升论文的逼格?堆公式啊!

一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此你就收到巨大的诱惑,去解决哪些能够用数据公式处理的问题,而不是去解决真正重要的问题。

这句话醍醐灌顶。这也是高中本科过渡到工程实际面临的最重要问题。以前一直觉得万事万物,必然存在其本征联系。后来解空间大了,碰见几个NP难问题就觉得只是个瑕疵而已,追求完美之心一直存在。总抱有的一种幻想是,找出这个问题那个本征公式,必然能通过公式推导出更多问题的解。现在我只想说,少年想多了!

要止损还是更高的收益

如果某一天你想要去赚大钱,那么记住上面这一点,因为这是创业公司能够成功的原因之一。大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。

之前对量化投资感兴趣,多方咨询,得出的看法是,量化投资资金量大,只要存在可能的潜在收益,并且保底可能性大,就进行交易。大公司很想量化投资,只要不太烂,就能收益可观。但股神传奇可不是以减少标准差为策略起家的。

相比于遵循规则追求完美,适当的冒险,虽然承担了更大的失败几率,但却保住的更多收益的可能性。而且去那些新兴领域,遇到的阻力几乎为零。只要敢于提出大胆的设计,合理分工,就能在这里战胜大公司。

黑客的工作状态

创作者几乎都有个“白天工作”,只有在空闲时间里才真正进行自我的创作。对于一个程序员而言,业余时间做出来的东西,侧面反映了他对这个行业的热爱。

科学家搞研究的途径,往往是通过实验和解题来学习,他们不会通过干活来学习。

科学家研究的基础是现有的,完美的成果。就是那个大圆,在圆上凿出一个凸点。

而黑客创造性的工作在于,其工作的原创性。一开始可能就是一个点,没有其他人完美的结果可以依赖。

学习编程

大学里学习编程,印象深刻。几个老师在台上照着本参考书,言之无物,还有万年不换背景的PPT。

其实我和作者的观点很类似,学习编程,要问题驱动,从范例入手。

还是以绘画为例:

一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。无数古代油画放在 X 光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部的表情经过了调整。

而且当今开源社区这么红火,github上又有大量的开源项目,程序员简直是最具有分享精神和学习精神的职业了。这样的大背景下还不去借鉴别人,帮助别人,就有点太说不过去了。

作者最后还说,避免过早优化。我的观点是,再一件事情没有从0变为1之前,思考10,100,1000是没有意义的。不要太早优化,不要太早决定事情该如何做。

小结

  1. 自由,摆脱束缚
  2. 看清本质,不拘泥于华丽的外表
  3. 冒险,拒绝平庸
  4. 谁说业余爱好就不是主业
  5. 循序渐进

comments powered by Disqus