黑客美学 ——《黑客与画家》读书笔记
作者:互联网
序言
人们对于“黑客”一词总是充斥着刻板印象,昏暗的房间里头戴黑衣帽的技术达人手指如行云流水般敲击键盘,编写的病毒程序通过网络分发到世界的各个角落,带给大众无穷的恐慌与无数的损失。这些负面印象或许是大众传媒带来的误解,“黑客”一词来源于英文“hacker”,原指醉心于计算机技术且水平高超的电脑专家,尤其是程序设计人员,早期是带有褒义的。
我们且抛开对于这个词汇的固有偏见,正如Paul Graham在书中所说的,黑客指精通某方面技术,但不受当前技术领域局限的人。从艺术的角度,我们可以认为黑客就是某一领域的匠人。达芬奇和梵高是绘画界的黑客,贝多芬和巴赫是音乐界的黑客,这些黑客都有他们的共性,那就是从来不服现实的束缚和管教,具有极强的创造精神和好奇探索的态度。Paul对于黑客的洗白以及他提及的黑客美学(即黑客群体共有的优秀美德)让我在懵懂学习了四年编程并自以为踏入了软件从业者的从业门槛之后,对于为什么编程、什么是好的程序员有了更多的思考。
黑客与画家
绘画的这个创作过程就值得学习。我认为黑客也应该这样工作。你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。
Paul在这一章节中指出了黑客编程与画家创作的共同点,认为编程应当是一门具有创作性的学问,而非只是像流水线工作一样循环单调地累加作业。黑客设计软件架构的时候就如同画家拿铅笔勾勒出画作的轮廓,这时的架构需要易于扩展且关注全局。思考当前严重内卷的软件行业现状,从事优美创作的黑客只是少数的软件架构师,而大多数软件开发人员仍旧是底层打工的码农,他们接受着已有的模块设计和算法设计,实现着一个个具体的小功能。或许这样说还过于乐观了,许多企业的软件架构师甚至都不能被称为黑客,他们在面对着业务条条框框的束缚的时候,往往不得不暂时放弃优美的设计。白日工作可以很好地解决这一现实困境。在白天为了保障生活打工,在夜晚则可以尽情涉足自己热爱的领域。以我自己为例,虽然白天被各种作业的deadline追赶,忙碌奔波于课程教室之间,但是我会在夜间打开电脑轻放音乐,在开源社区里学习近期的新算法,或是阅读最新流行的前端框架源码,这便是我的夜晚工作。我想,每个人都需要拥有一段属于自己的进行优美设计的黑客时间。
另一条路
互联网软件能够让你前所未有地了解用户行为。你不必再人为挑选一个小型的用户样本,进行重点观察。每个用户的每一次点击你都可以看到。所以,你不得不仔细斟酌到底要看哪些行为,因为你不应该侵犯用户的隐私。
在这一章节中,Paul以互联网创业先驱的身份对网页端软件之于桌面端软件的优越性提出了自己的见解。Paul写这本书的时候是千禧年初,正是网页端软件产生萌芽的时候,反观现今互联网前端的迅捷发展使得越来越多网页端产品的出现,更可见作者的远瞩性。
桌面端软件是建立在操作系统的基石上的,因此首先需要适配各类操作系统,这不仅会给用户带来体验上的割裂感,而且考虑到不同的UI元素与字体渲染引擎方案,不同系统下的客户端的用户界面的差异性带给用户更复杂的交互体验。此外,桌面端软件将用户、软件和特定的PC机绑定在一起,如果用户需要在另一台PC机上使用之前购买过的软件,则可能需要重新下载和付费。而网页端软件不仅可以省去下载安装桌面端软件的繁琐步骤,还使得用户与特定的PC机解耦,在任何一台可联网的设备上用户都可以使用网页端软件。此外,网页端软件的开发者可以及时发布版本更新,用户甚至可以在不知情的情况下使用最新版本的软件,这是桌面端无法企及的。对于桌面端软件而言,版本的更迭和发布的时间跨度往往是几个月甚至更久,因为我们不可能期待用户每隔几天就更新一次自己的桌面软件。
不要在半夜里发布代码,然后回家睡觉。
这使我想到了去年在滴滴实习的时候我的mentor的告诫。我实习的项目组的开发的产品是一个面向司乘投诉平台的内部网页,由于每天都有新的bug反馈,产品的迭代速度特别快,几乎一天就有3-4次代码提交和上线。虽然现有的Docker等敏捷开发技术使得开发环境、测试环境和生产环境趋于标准化,但是测试与生产环境数据的不同步等原因还是使得在测试环境通过的代码运行在线上的时候出现bug。还记得有一天我加班到11点多,终于解决了一个线上bug准备部署到线上的时候,mentor凑过来语重心长地告诫我“不要在下班前提交代码,除非你想继续加班”。看来每个程序员都有过在自己认为发布的代码版本绝对可靠的时候被bug扼住脖颈被迫加班的经历,从Paul创业的时代到2020年,这样的经历仍旧不过时。
设计者的品味
好设计是模仿大自然的设计。
现在学界蓬勃发展的人工智能算法其实可以被理解为模仿大自然的算法,越优秀的AI算法对大自然的模仿能力越强。例如,神经网络是一种预测建模算法,本质上它的设计和构建模仿了神经元层面的大脑功能(即轴突和树突相互作用,通过系统传递信息);遗传算法是一种搜索/寻路算法,本质上它模仿了细胞繁殖和适者生存的进化规律;强化学习是模仿经典条件反射的算法,智能体将学习使用一个策略,从而使每一步都能获得最大奖励。将原始输入应用到算法中,可以让智能体开发自身对问题的感知,并改进该如何利用最有效的方式去解决问题。由此可见,好的设计灵感都是源自于大自然的鬼斧神工,自然美学不仅影响着艺术界的复兴,还引领者工业界的发展。
梦寐以求的编程语言
Paul在这一章中在解释简洁性的时认为Java语言设计在简洁性上存在问题,他认为实现简单的hello world在java中过于复杂。但是我并不很认同Paul的这个观点,因为我们更多地会使用java语言编写更加复杂的程序,而java中的类和封装以及面向对象的思想能够使得程序更加简洁,因此我们不能只片面关注简单代码的复杂度,而应该重视某个语言的内在思想的美。
标签:网页,读书笔记,用户,美学,算法,黑客,软件,Paul 来源: https://blog.csdn.net/weixin_41168256/article/details/112234998