来源:Gitee 封面人物 丨 2022-10-13
硅谷著名创业孵化器 YC 创始人保罗格雷厄姆撰写的《黑客与画家》文集中认为:许多人认为摆弄计算机和画画是两件截然不同的事情,计算机是冰冷的、精准的、井然有序的,而画画却是原始欲望热烈狂放的表达方式,这种看法是错的。在创业之父看来他所知道的所有行业里,黑客和画家最相像,艺术是可以和计算机产生连接的。
这种碰撞也发生在一位 90 后小伙身上。一个学艺术、爱跳舞、热爱嘻哈的 B-Boy,居然还喜欢计算机?Gitee《封面人物》在国内一档职场综艺中发现了这不同于传统刻板印象的程序员。他艺术系毕业,不做设计师却「转码」做了程序员,而且一干还干到了全球顶尖科技公司里的开源技术团队去。
他曾说过:「写代码」有趣的地方其实和「写作、写歌、作诗、作画」这些艺术都是一样的,都是因为你可以去创造出一个世界上原来没有的东西,都是一种个人表达。
今天,Gitee《封面人物》就和大家一起听听这个多向度的极客关于编程、关于开源的认识与思考,以及他是如何做出这些选择,又是如何理解自己的,以下是 Gitee 与他的对话。
黄玄: What’s up guys,我是 Hux 黄玄,自诩是一个数字艺术与计算机科学杂交出来的「黑客与画家」,现居美国纽约。我目前就职于开源技术网红团队 React Core Team 负责 React Forget 编译器项目,之前也曾参与过 Hermes JavaScript 引擎、React Native、ReasonML(ReScript) 等 Meta(旧 Facebook) 主导的开源项目。
在国内期间,我曾担任过阿里巴巴的前端工程师、微影时代的前端基础工程团队负责人,并深度参与了饿了么的 PWA 项目。因为从入行以来就一直话多热爱分享,所以有幸被不少技术圈的朋友认识,这次也很荣幸能被 Gitee 邀请来做这期 reflection(反思)色彩非常浓厚的采访!
黄玄: 我比较幸运,由于家父工作的原因,从小家里就有计算机,而且还会订一些杂志报刊,比如计算机爱好者、电脑报之类的。所以我很早就开始沉迷于网上冲浪有了一些计算机爱好,不过他很少教我,基本就是直接扔本书给我,可能我的自学能力就是这么来的。
老实说, 我对编程的原始动力都是源自儿时对 ACG 的兴趣 。那时,我会把手绘的漫画扫描到电脑里用 Photoshop 上色;BASIC(一个古早的编程语言)还没学两句就开始尝试写 WAP(年轻人可能要查一下才知道什么意思了)风格的回合制小游戏;再后来接触了 Flash 就开始用数位板画逐帧动画,最后在机缘巧合下发现 Flash 里居然还有一个叫 ActionScript 的编程语言可以做游戏,从此便一发不可收拾起来,开始去临摹类似雷电(飞机大战)、火柴人格斗(小小)等那个年代较火的小游戏。
现在回想起来,我觉得「会写点游戏」这件事最大的收获之一是我从此不再沉迷于游戏了,可以说是起到了个「祛魅」的效果。
这段自由探索时期大概从小学后期持续到整个初中,后来上了高中就被迫卷起来了,所以我勉强算是有点童子功吧(笑)。
虽然和那些信息竞赛出身的同学相比非常「野路子」,但从一开始编程给我的感觉便不再是「做题」,而是一种「创造」,甚至可以说是一种「创造艺术(游戏是第九艺术)」的过程。
黄玄: 格局打开地说,作为在中国互联网元年附近出生的一代人(90 后 / Gen-Y),我们其实已经是基于 Web 的数字媒体的原住民了,只有把所处的时代客体化才后知后觉「新媒体」和「互联网」是需要被区分的,我一直到高三都不知道我喜欢的东西在大学里居然是个艺术类。不熟悉数字原住民概念的同学可以看我在早年的一篇博客,扯远一点说,00 后 / Gen-Z 多是移动互联网原住民,而再下一代人则可能会成为元宇宙原住民。
至于什么时候想到以后可能要从事互联网及成为程序员呢?
其实,我读的专业分为影视特效和网络新媒体两个方向,我当时的第一志愿本来是影视特效,但没想到那时广院把我叫回北京参加了那年的一个网络方向的“拔尖创新”人才选拔活动。这次经历让我开始思考以后到底想要做什么,也才意识到互联网对人类的巨大意义,而且这也是一个可从事的行业。后来高考出分后,广院给我打电话让我挑方向时我便选了网络新媒体。
我们系的课程像是培养互联网领域的「杂家」,视觉、交互、产品什么都有,也有一些编程课,尤其是前端课程特别「顶」。大二的老师是时任豆瓣前端的陈蒙迪师哥(也是我现在在 React 的同事),大三的老师是时任豌豆荚前端 TL 的赵望野师哥。
这样看我后来成为前端工程师也并不意外,唯一比较意外的可能是职业生涯开端:大学前两年,我做设计比较多,而且大二暑假还是拿着交互设计师的 offer 进阿里实习的,但是后来觉得工作内容太无聊了,直接在公司内私信了 拔赤老师(阿里巴巴知名前端开发工程师) 转成了前端,并且一呆就是整个大三。
黄玄: 我非常感激在国内的成长经历,如果说 2009/2010 年 3G 与 iPhone 入华算是中国移动互联网元年的话,那么我也算是有幸作为一个小兵亲身参与及见证了它从爆发到白热化竞争的历程。这种「野蛮生长(developing)」和后来在硅谷带给我的那种「成熟感(developed)」非常不一样。那时机会很多,变化非常快,怎么说呢,it was a wild ride(非常野),可能会很 overwhelming(感觉整个人要被淹没了,喘不上气),但我也怀念那种速度带来的多巴胺。
从前端领域的发展来看,那几年刚好也是前端技术由于 HTML5 与 JavaScript 独一无二的跨平台能力得到重视,人员需求爆发,且急迫需要从刀耕火种走向工程化的几年。现在回过头看,我自己的专精和职业发展很大程度上也受到那几年环境的影响,比如说无论是 JavaScript 的模块化、CSS 的「去层叠化」、React/Vue 的声明式与组件化,都是催生于大规模生产所需要的分责以及抽象的需求。
那几年里我做的项目全都是移动端的业务,也对我日后成为国内 PWA 布道第一人(大言不惭),以及对 React Native 非常感兴趣的导火索吧。这些链接都是这段经历里我有幸得到社区重视的一些技术分享,我通过参加活动也得以建立了一些连接,包括在线下认识贺老、小右、题叶等非常厉害的同僚,这种机会在后疫情时代可以说是弥足珍贵了。
黄玄: 首先还是很单纯有一个对「高处」的向往吧。我相信程序员们都还是很容易能感受到,毕竟平时使用的软硬件绝大多数都还是被硅谷公司主导的,而且越底层越有原创性越是如此。至少在前端领域来说,我后来的技术养分几乎是靠阅读英文文档与观看英文会议来摄入,或者是和同僚讨论,因此不经意间变成了国内的 influencer(意见领袖)。
彼时我曾进行过一次美西自驾,并且两次受邀去谷歌总部参加 Google IO 全球开发者大会,参观了很多硅谷公司,接触了很多人,也逐渐坚定了这个「要去风暴中心看一看」的想法。
另外一个很重要的原因是我意识到了自己的瓶颈。那时感兴趣的东西越来越硬核,诸如 React 背后的函数式编程理论、JavaScript 标准背后的理论与实现、浏览器背后的图形层与网络层等等,所以我强烈意识到需要一个更加科班的学习才能解开很多疑问。我当时虽然拿着文学学士的文凭,但是申请学校时非常强硬的一个交叉学科都没申,一心想读正经的计算机科学。
虽然读的过程很苦逼,经常边刷教材论文边需要自己补数学,但感觉很值得,尤其是在编程语言理论、函数式编程、编译器、虚拟机这个垂类下师从了一位可以在 Mathematics Genealogy(数学家系谱)里一路追到祖师爷 Church(丘奇)的教授,也得到了一定的学术训练,最后确实有脱胎换骨的感觉。
黄玄: 目前,React 最为人所诟病的一点就是「性能优化的心智成本过高」。实际上,如果完全不刻意优化性能的话,React 的开发体验是非常好的;但在大型项目中,性能优化往往必须要做,这时候当前的 React 就需要开发者手动标记 memoization(记忆化)来优化渲染的性能,这同时又牵连出了 referential identity(引用变不变)的问题,并且这还对 useEffect 的触发有 consistency(一致性)的影响,综合起来就带来了非常大的心智负担。
Forget 项目的主要目的就是通过引入一个「足够聪明」的编译器,它能够自动生成合适的记忆化的代码,这样开发者写源码时就不需再操心这件事了,所以美其名曰「React without memo」。由于这个过程需要进行依赖收集,因此你可以期待这个编译器日后会接管更多的依赖管理,进一步降低用户的心智负担,最后让 React 达到 fast-by-default(出道即巅峰默认就很高性能)的目标。
我目前是这方面的 tech lead,所以基本上从技术决策到团队建设到测试发布等方方面面都要操心。当然,有非常多非常棒的同事参与或者帮忙,我们内部的工作方式比较灵活,经常是一个人身兼多个项目组。
黄玄: Bringing the community along(带着社区一起发展)。我们巨大的社区遗产是一把双刃剑,所以一直对兼容性、互操作性这些要求非常高。但是这就会带来一些类似「船大难调头」的问题,虽然我们并不是要调头,但是想要带着一个巨大社区「进化」,肯定是比没有任何遗产重新做来得更容易。
黄玄: 国际化可能体现在两个方面。
一个是团队本身的国际化与跨时区导致我们团队更加习惯于一种相对大多数企业来说更为松散的工作风格,可能异步的文字交流(如聊天软件上)足以解决 80% 的问题了,会议更多是去做一些同步或者是非常深入的技术讨论。
另一个是整个社区的国际化,甚至说是去中心化吧。比较直观的·感受是在文化上会非常包容,在思考问题的时候会考虑到各种多样性,对沟通会非常重视。但更深层次的感受是一种同时存在的很强的归属感与责任感 —— 很多 Core Team 成员都是把「开源社区」放在第一位的,一方面你会非常能感同身受软件行业以及开源文化里那种「世界大同」的理想主义的存在,但另一方面如何去平衡冲突、去回应期待、去领导整个社区,然后提供一个大家愿意追随的方向,这些都不是容易的问题。我相信在任何一个国际性的开源团队或组织工作,可能都能感受到我说到的这些吧。
黄玄: 从我自己的观察来说,React 的上限还是公认比较高的。
一是对于大规模(larger-scale)场景来说,我们的设计哲学是在抽象的同时尽量保留所有可能性(don’t make rare cases impossible), 基于 React 你可以自由定制出一套解决方案。另外就是我们比较重视能带来全局优化可能性的底层能力(make impossible things possible),比如大家看到由并发渲染作带来的「渲染中断」、「服务端组件」、「优选湿化」等等。国内有一些同行形容 React 是「引擎思路」,我觉得这个比喻还是挺恰当的。
黄玄: 汝之蜜糖,彼之砒霜。 相比于一些其他框架,我们对应用层的控制力就比较弱,带来了目前「使用门槛高」的问题,我猜测是 React 在小公司与个人爱好者中风评比较差的最大原因。目前我们主要想在两个方向上大幅吸收复杂度:一是在核心层加入编译器(Forget),第二个是与一些比较知名的类库与元框架(meta-framework)合作来推动整个生态的易用性。
黄玄: 我觉得我好像很自然就有一种「朴素」的开源情结,对于自己使用并且影响了自己的东西会有一种感激以及想要回报和参与的感觉,比如尊重产权与 credit,比如对于自己做的且认为很有价值的东西,会想和大家分享。
个人博客主页: https://huangxuan.me/
往大了说,我认可的可能是一种全人类的理想主义吧。其实我在节目中想赞扬与推广的「开源精神」并不只是狭义的「开放源代码」,而是一种广义的「开放、共享、共建」的精神,包括开放标准(比如 Web,C++,JS,HTTP……)、开放知识产权(比如 RISC-V),甚至是国际间能达成「基础科学是全人类的财富」的这种共识,其实都属于这个范畴。
黄玄: 我当然是一名自豪的程序员,但是我也会觉得自己还有程序员之外的一面,比如说我还挺爱音乐和运动的,从小就喜欢嘻哈文化里的一些东西,喜欢 Rap 和街舞,也会自诩是一个「老年 B-Boy」。
我觉得分享知识与想法是一件很有意义的事情,所以疫情期间也开始尝试自己拍视频,但终究还是因为精力有限分身乏术,无法做到自己心中满意的「斜杆青年」的样子。至于要「有 swag」,是因为经常会被人评价到这种「反差」,所以想要以此提醒自己,不要害怕特立独行,继续坚持做自己就好了。
黄玄: 这也是我自己这几年一直在琢磨的人生课题。
其实我在疫情在家工作期间也曾有不小的的精神健康问题,后来也是通过学习反思,甚至是读了点哲学书籍后才重新找回了生活节奏,比如刘擎的《西方思想讲义》、马尔库塞《单向度的人》、西美尔《货币哲学》。
我认为平衡生活首先要有一些工具或者方法论,比方说对注意力的管理,可以利用数码产品的 focus mode 来帮助在工作和生活等不同的场景中建立边界;比如说对任务和时间的管理,可以尝试区分重要和优先级避免自己总是工作超时;比如说对内心能量的管理,要管理好自己对他人,以及他人对自己的期待,在沟通中和同事建立个人边界......
但我自己觉得最重要的还是思维上的,从内心深处认同多向度的人生价值,这样才不会很容易就被工作霸占了生活的全部。是的这听起来很荒谬,但我发现无论是对工作极度有热情的人(比如特别多的开源爱好者),还是单纯被系统带着卷的打工人,其实都还是很容易被规训。生活是自己的,不要被强迫着生活,而是要去拿回自己对生活的主动权。
黄玄: 我觉得「浪漫」和「实干」并不矛盾,但如果一定要选一个的话,那我可能还是「浪漫派」吧。我需要一个浪漫的理由(理想)才能驱动我的行动(实干)。
我觉得可能是这个时代有的时候让我觉得过分现实与功利主义了,所以我会在社交网络上更多的表现出我想反抗它的一面。
黄玄: 技术更迭真的越来越快了吗?或许是真的,但是我觉得我们不要人云亦云。
应用层的技术,只要还没吃完上一波基础理论进步的红利,其实一直都发展得很快。而越偏基础理论的技术,其实发展得不见得有多快。可以想象一个龙卷风,越外层的地方线速度一定是越大的,但风暴中心其实可能很缓慢。我觉得科学技术领域在很大比例上还是符合还原论的,层展出来的部分其实没有那么难消化。
就我自己的观察来看,年轻一代的程序员的优势是成长在一个各方面资源都更加丰富的时代,基础普遍要扎实一个档次,学东西非常快,更有从「第一性原理」出发的创造力。劣势可能是相对上一代程序员来说,没有那么多的时代红利了,毕竟从头去解决的问题没有那么多之后,更容易产生「面试造火箭,上班拧螺丝」的感觉,可能需要耐心一点去寻找或者等待方向。
黄玄: 我其实并不是一个在大方向上依赖规划的人,所以更多还是一种愿景吧。肯定还是希望能继续做有原创性和有意义的事情,也会好奇说有没有什么机会能动用到自己全方位的技能。
作为一个 ENTP(笑),整体上还是会保持一种开放的可能性,然后就像乔布斯在斯坦福大学的毕业演讲语录说的:”…and most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.”(最重要的是,要有个跟从自己内心和直觉的勇气。他们早就知道你真正想成为什么样的人,其它一切都是次要的。),继续一如既往相信自己的直觉以及听从自己的内心吧。
黄玄: 我一贯的态度都是「摧毁比创造容易」。正如 Gitee 曾说过的「开源生态建设,并非朝夕之功,是个聚沙成塔的过程,我们相信中国开发者的创造力,我们也相信自己的坚持与努力的力量」。其实越是复杂的环境,越应该敬佩那些愿意付出行动与探寻解决方案的人。世界需要开源,而开源也需要商业与环境的支持,我由衷感谢所有在为开源建设付出努力的人。