《黑客与画家》读书小记

一直以来有个看书的坏习惯,拿到一本书,刚开始三分钟热度一口气看了个三分之二,热度过去了,剩下三分之一就一直拖着了。去年夏天买了本《献给阿尔吉侬的花束》,剩下那么几节一直拖着没看完,自己倒也不纠结后面的内容,就这么坦然地拖着。
这次也是一样,上学期疫情返校后从学校图书馆借的一本《黑客与画家》,本想着暑假看完的,又是拖了最后那么几页。

最近逼着自己抽出时间看完了。不得不说这本书是谁看了谁就想立马创业,书里有很多看待问题的角度我觉得很新奇,特别是作者能站在当时那个年代大胆去预测未来,去推测计算机、编程语言在百年后会变成什么样;百年后我是等不到了,不过回头看当下这十几年的发展,还真八九不离十确实是那么回事。

在我的印象中,搞技术的人有两种形象。第一种是蓬头丐面,没有社交,直来直去,电脑和人一直绑在一块的人。另一种是不善言辞,沉默低调,思维天马行空,还有自己额外的小兴趣小爱好的人。很长一段时间以来,我都认为前者才是技术大佬的象征,甚至觉得这样很酷。但随着后来接触到了很多人后,我才意识到技术和生活并不冲突,你完全可以在合上电脑后转手抱起一把吉他起来玩。
技术能力的提升并不是以牺牲生活质量为代价的。以前总是抱着一种“以中有足乐者,不知口体之奉不若人也”的借口,来刻意逃避生活中的种种琐碎,认为自己内向一点,邋遢一点,反倒是“高技术力”的象征。这种想法在见到那些真正的大佬后,彻底被颠覆了。
书中描写的搞技术的“书呆子”,他们将心思花在了别的地方,从而不在意在“学校”中的“社交”。我个人认为这并不可取,有些东西并不是非黑即白不可兼得的,说到底还是个人懈怠了。

黑客和画家一样,表现在“做什么”,而不是“怎么做”。

书中将黑客与画家的种种特征作类比,强调黑客更多是设计一个新的事物,而不是像数学家一样偏向研究。
1. 能经过外部考核的就是时间
书中很多地方都提到了要“以史为鉴”,回头看技术的发展历程,对比当下,我们能找到那些在历史的长河中翻涌沉淀下来的东西。它们能够被各个年代的人们接受,这就是优美的事物,这就是好的设计。
历史的车轮不仅仅是滚滚向前的,它本身也是在不断重复循环的。智能机普及后,10 后的孩子们天马行空地想出了可拆卸电池的点子,无线耳机被接收后,又有人想拥抱有线耳机。这虽然是段子,但细想一下,以前过时的理念,是否能够在当今这个年代,靠着当下的先进技术重新蜕变呢?

  1. 避免过早设计,不要盼望有一个完美的规格设计,再动手编程。
    一个庞大的程序,其实跟一幅画作一样,是不断修改而来的。但是很多人往往会坚持自己内心的严格要求,或者说是“编程信仰”之类的东西,做好完美计划再开工。完全没必要一开始就做好万全的考虑,给自己挖下一堆的坑,这样只会徒增初期的工作量并消耗自己的信心。这也是自己从弃坑的无数个项目中感受到的。泪目( Ĭ ^ Ĭ )

而为了日后能不断修改,或者说能方便的“打草稿”,需要借助语言的优势。弱类型,解释型的语言当然更占上风,随手写个原型就能快速跑起来查看效果。但我感觉这其实是把双刃剑,静态类型的语言在项目后期大面积重构的情况下,能避免很多动态语言的坑。不敢想象如果 Cardinal 是用 Python 编写的情况下,我之后再重构项目结构时会有多痛苦。

  1. 竞争新兴领域的市场。
    也就是人们口口相传的“风口”。这需要敏锐的嗅觉,把握住未来一段时间的热点。一片空白的领域,或者一个没有人称霸的领域,都是可以作为发育的起点。
    NekoBox 在今年 4 月份 Popi 提问箱被约谈后上线,也是我自己无聊做的一个小玩具,期间没有对外做任何的宣传推广,但在几个月后却收获了 80+ 的注册用户。着实让我吃惊。事后想想,当时 Popi 一倒,原 Popi 提问箱的大量用户四散而去,大大小小的匿名提问箱只要站出来的,都能分到一杯羹。差距在这时变得很小,只要你能比对方的功能多一点,操作简单一点,就能收获大批的用户。

  2. 白天工作 Day Job。
    这是在未来很难做到的一点了。书中提到黑客们在白天拥有一份能够维持生计的工作,夜晚能献身于自己感兴趣的工作中。但就目前国内这个内卷的形式来看,能在工作后保持不断学习,就已经很难得了。工作之余能投入开源社区工作的开发者,那更是稀有。
    不过好在我现在还在上学,兼职的工作之外能抽出一些时间来继续维护自己的项目,还能开几个新坑。也算是满足了。

  3. 从他人的角度思考问题,符合用户直觉。
    其实是说要把握好“整活”的度。有时候单纯因为某个功能酷炫,或者做起来不需要太费劲,便一股脑地把新功能塞进去。但看似酷炫的新功能用户可能并不会去使用,只是感动了开发者自己。
    这时,如果开发者同时又是软件的使用者,问题就会轻松很多,站在使用者的角度,我们能知道在下一个版本中最应该先加入什么功能,而非去整一些花里胡哨的烂活。直到自己在使用 Cardinal 办了一场比赛后,我才发现管理员后台需要能够显示选手的靶机状态信息,如果我一直作为功能的“测试者”而非功能的“使用者”的话,我可能一直都不会注意到这个需求。

  4. 如果软件运行在服务器上,一切都会简单很多。
    这也是书中一直在宣传的,一个跑在浏览器上的 Web 应用,比一个需要安装在本地的软件,其最显著的优势就是方便热更新。(这里不谈 React Native 那些)你可以做很多细微的改动,但用户却根本察觉不到。同时在发现了问题之后也可以快速响应。
    基于 Web 的应用对用户终端的配置要求也少了很多,开发者只需要去适配各种浏览器,而非各种操作系统,各种硬件架构。
    眼光在放广阔一些,不局限于服务器上的 “Web 应用”,这正是现在万物上云的趋势。很多原有的技术上云后,变得可以随时启用,易于扩展。就像上厕所一样

  5. 关注用户,研究用户行为。
    用户的反馈是很重要的一环。对于开发者,我自己很想知道我做的东西有哪些用户在使用,同时也很好奇他们都喜欢用哪些功能,更常访问哪个页面。
    这些用户行为不仅是用来满足个人的好奇心,对于评估软件的功能设计,乃至日后的维护调优工作也是很具有参考价值的。不过很遗憾目前我并没有找到一个好的用户行为跟踪与上报服务,暂且还是在使用 Sentry。但 Sentry 本身的定位是一个错误追踪器,用来追踪用户的正常行为还是不太妥。

  6. 不能说的话
    《不能说的话》这一篇十分的有意思。通过去回忆生活中被人们忌讳或禁止的话与行为,开找到新的突破口。
    正如上面所说: 能经过外部考核的就是时间。很多历史上在当时的那个年代被人们称作异类,或者觉得不可思议甚至不可能的事,在现在大都习以为常。时间改变了我们的习惯,让我们接受了很多在以前过于前卫的观点。那么如果我们立足于当下,揪出现今一些不被大家所接受的事物,它们是否在未来的五年、十年内,将会变得十分流行,人手一个呢?如果能提前开始布局,那么就领先了时代。
    保持着一颗永远质疑的心,即使是确凿的真理、或者大家认可的道德,都不妨可以在心中站在相反的对立面脑补一下,如果我这么做了会怎么样?会产生什么后果?多想想异端邪说,反倒能打开新的思路。
    当然,守口如瓶,内心想的东西永远不要说出来!

  7. 如何创造财富
    书中对于创业有一个很接地气的定义:用你现在的四年,拼尽你未来四十年的命,尝尽你未来四十年的苦,同时赚到未来四十年才能赚到的钱。
    而对于财富,它是一个很乐观的东西:

  8. 物物交换,金钱不是目标,财富才是。创造财富,是做出人们需要的东西。
    赚钱赚钱,其实目标追求的不是“钱”这么一堆纸,而是财富。高中的政治课上就说过,金钱只是一般等价物,它只是物品交换的媒介。因此,我们是要创造出能与人交换的资本。做出人们需要的东西,他们才愿意拿东西跟你换。
  9. 大饼谬论,付出和收入并不是零和的。
    但同时,我们创造的财富并不是从一个不可放大的大饼里切到属于自己的一小块。我们完全可以在不损害其他人利益的情况下,“凭空”创造出财富,我们的收入和付出并不是零和的。这个道理给了我很乐观的心态,大饼不是有限的,不是你获得了就该有人失去。
  10. 致富的两样东西:可测量性、可放大性。

    1. 职位的业绩需要是可测量的。
    2. 你做出的决定能够产生巨大的效应。
  11. 设计
    1. 好设计是简单的设计。
    2. 好设计是永不过时的设计。
    3. 好设计是解决主要问题的设计。
    4. 好设计是启发性的设计。
    5. 好设计是有点趣味性的设计。
    6. 好设计是艰苦的设计。
    7. 好设计是看似容易的设计。
    8. 好设计是对称的设计。
    9. 好设计是模仿大自然的设计。
    10. 好设计是一种再设计。
    11. 好设计是能够复制的设计。
    12. 好设计常常是奇特的设计。
    13. 好设计是成批出现的。
    14. 好设计常常是大胆的设计。
  12. 一百年后的编程语言
    作者对于硬件的发展给出了一种很奇特的观点,回头看看历史,我们会发现:随着未来硬件的性能大幅提高,新增加的运算能力都会被糟蹋掉。
    就像现在我们编程不再像以前一样斤斤计较那多出来的几 MB 甚至几十 MB 的内存占用了,因为现在大内存的机器已经成为常态。新增加了很多的性能的同时,现有的技术也会使得我们去,并且我们会去糟蹋浪费很多性能。但总体来说,系统整体的性能还是在不断提升的。
    比起浪费程序员的时间,要选择浪费机器的时间。机器不够了,可以轻松地横向扩容;人不够了,一时半会还真找不到合适的工具人。
    同时,书中认为并行计算在未来会被重视起来。其实我们现在有很多技术,因为他们诞生年代的限制,没能很好的支持当今的多核运行环境。(比如 Ruby 的多线程)这也成为了现如今这代人需要去解决的历史问题,目前也是在一个承上启下的过渡阶段。

嘛,大概就是这些。可能这篇文章的排版以及思路都挺乱的。我表达能力也很有限,思想深度也不够,可能很多地方我没有领悟明白。还是很推荐大家去看看《黑客与画家》这本书,确实能给人以另一种眼光看待技术。



喜欢这篇文章?为什么不打赏一下呢?

爱发电

0 条评论

 

昵称

快来评论~