Jonathan:好吧,早上好。至少对我来说是早上。我是 Jonathan,正在 Exercism 播客里和 Ethan Hansen 聊天。Ethan,非常高兴能请到你。你在世界上一个很不一样的地方,时区完全不同。所以对我来说是早上,对你来说是晚上。不如先跟大家简单介绍一下你自己吧?你现在在哪里?在忙些什么?大致说说你目前的状况。
Ethan:好的,谢谢你,Jonathan。很高兴能来。虽然你得特别早起,我得熬一会儿夜,但很高兴我们能凑成这次录制。对,我在俄勒冈。西海岸,西海岸,我长大的那个小镇。嗯,我现在正放假,从大学,从学校放假。我在俄勒冈。我在西海岸。我在俄勒冈。我在西海岸。我在俄勒冈。我在西海岸。如果你想知道我怎么走到这里的,那是个挺有趣的故事,我很乐意讲。如果你只想要简短的介绍……
Jonathan:原来如此。好,太棒了。俄勒冈,我很想去看看。我印象里那不是……是波特兰的所在地吗?就是波特兰吧?西雅图在华盛顿州,如果我没记错的话。所以你们是邻居。对,我敢说这两座城市之间有点较劲,不过我们也不必一上来就聊这个。可你怎么还在放假?我以为大家都回去上课或者上班了。那边是什么情况?只是因为学期安排之类的原因吗?
Ethan:是的,其实我认识不少在别的大学的人都已经回去了,也进入了状态,但我的学校还没开学,凯斯西储大学,我就在那儿。我大概再过四天就要开学了。
Jonathan:好。Ethan,你在那儿学习多久了?你现在求学之路走到哪个阶段了?
Ethan:我现在是大二学生。不过我总跟人说,我本该是大三了,因为我其实休学了一年。上大学之前,我在疫情期间休了一个间隔年,我觉得那可能是我这辈子做过的最好的决定之一。我因此躲过了 Zoom 上网课。而且我还在一家很棒的公司工作,做了一些量子计算相关的事情,那本身就是一个故事。
Jonathan:哇。那么就是说,2020 年初的时候,你应该还在上学,对吧?那应该是你最后一年。疫情来了。那会儿你……你应该才刚过一个学期吧?还是说你已经开始了大学第一年?然后你就想,我不干了,我要走?具体是怎样的,能说说细节吗?
Ethan:对,好的。我是 2020 年 5 月高中毕业的,对你们那边的人来说就是中学。所以正好赶上最严重的时候。那时我开始在这家量子计算公司实习。做了一段时间,我很享受。但情况一直没有好转,疫情什么的。我就想,嗯,我真的想继续上网课吗?高中最后那一两个月我已经尝过滋味了。我决定不。在这家公司,我做了些市场营销的工作,那算是自然衍生出来的……其实我自己有一个关于量子计算的播客,如果有人想听的话,叫 quantum computing now。我有一阵子没在上面发东西了,因为我在学校做研究。但做这个播客是很棒的经历,在这家公司做这些工作也是。跟人交流,琢磨怎么把复杂的科学、工程和技术难题讲给偏商业或者普通听众听,这真的非常非常有意思。
Jonathan:好。我们回来了。欢迎回来。中间插播了一段断网小插曲。可怜的 Ethan,你正说到一半,我这边就卡住了。我们想办法接着刚才的地方继续。不过我会把剪辑拼得天衣无缝,没人会知道。谁都不会发现这一段。
Ethan:给你后期剪辑做个参考,断开之后几秒我拍了一下手,希望音频里的那个尖峰能帮你更容易找到位置。
Jonathan:不错。就是那种小东西,他们叫场记板之类的,就是……对,拍板。我觉得这说不定能放进 Exercism 的周边商店。就是一个小……对。
Ethan:对,那个拍板。差不多。对。
Jonathan:好,抱歉,我们倒回去一点。在技术故障之前。你刚跟我说你在一家公司开始了实习。那你是怎么……在那之前你一直在上学,毕业之后就成了实习生。那是暑假打工那种吗?还是你只是想,我得找点事填满时间?当时是怎么回事?
Ethan:一开始只是暑假做做,后来我把它延长成了一整年的间隔年。但那并不是为了填满时间。我对量子计算真的很有兴趣。我觉得它很迷人。它有可能改变很多事情。不过就目前来看,我觉得这有点像一场赛跑。我不确定哪一个会先赢,是量子计算先改变更多东西,还是 AI,毕竟 ChatGPT 之类的搞出了这么多疯狂的东西。太疯狂了。不过话说回来,你见过多少这类东西?因为我跟一些相当懂技术的人聊过,他们却说,我没听说过 ChatGPT 啊,跟我讲讲。
Jonathan:对,我大概……大概不是什么好事,也正是这时候我意识到它的威力。因为它突然冒出来,我当时想,行行行,随便吧,又是那种,哦,区块链之类的,大家都……你总觉得这是不是一阵风。但我妻子不太会说……她会说英语,但她是瑞士人,英语不是她的母语,她有一个小小的儿童生意,得做很多营销,尤其是 Instagram 帖子、newsletter 之类的东西,因为那是她自己的小事业。总之她前几天给我发消息说,你能不能帮我弄点营销材料,比如一封 newsletter,或者一条 Instagram 帖子,你得写一段描述。说实话我很讨厌写营销或者宣传材料,因为它会占掉你一块脑子,那种……嗯,随便吧。所以我就想,哦,干脆……我听说过 ChatGPT 能做营销,那我去试试。我当时特别怀疑,心想这肯定很糟。总之我们一起弄,她坐在那儿,我们输入,比如,给一条 Instagram 帖子写一小段宣传材料,按下那个键,我们给了它相当具体的指令,出来的东西让我们觉得,这太惊人了。或者说,对我妻子这个非英语母语者来说,能拿出营销材料,而且不用花整整三个小时去写,这太震撼了。我在学校学的是英国文学,所以对我来说,英语算是……我懂英语,我知道怎么把它写好、把东西串起来。我被震撼到了。所以现在她所有的宣传营销材料都交给 ChatGPT,我就说,哦,我们这是在给机器添柴。哦,绝对是。太可怕了,真的很可怕。抱歉跑题了,不过这事怪我。
Ethan:不不,都怪我。不过好,我感觉我们是在往回倒着讲。我们先讲了我现在的状态,去年在做什么。但如果你愿意,我可以从头把整个故事讲一遍。
Jonathan:那就来吧。我喜欢听故事。故事最好了。
Ethan:好,太好了。那么,我是在俄勒冈的一个小镇出生长大的。不是同一个小镇,但在上大学之前,我从没住过人口超过 2000 的城市。所以那……什么?2000?对,那太小了。对。我说小镇,别人会说,哦,大概两三万人吧。我说不不不,最近的两三万人的地方得开 20 分钟车。对。哇。对。但我很喜欢那里。我总是在农场里跑,种东西,照顾山羊,砍树,各种好玩的事。但长大后,我发现自己很喜欢摆弄东西。于是我开始动手做东西。我有个很棒的朋友,他是个比我年长的家里朋友,职业上是个出色的机械工程师,但电子方面凡是能知道的他都懂。他玩遥控车,周末为了好玩自己造遥控飞机。不是买套件,而是自己画设计图,然后用热丝切泡沫塑料。总之是个特别聪明的人。他帮我做了一些东西。我学着摆弄,然后发现自己动手摆弄东西的时候很慢,因为我喜欢一次就弄对,万一弄坏了,它就不工作了。我一开始大概就有点知道这一点,但没真正完全想明白。所以从六岁起,我就想成为每个六岁小孩都想成为的人,当然是航空航天工程师。我想做……飞机。对。对。大家都说,好啊,如果你想当宇航员。我说,不不不。我说出“航空航天工程师”这几个字,所有人都说,这孩子是谁,他怎么知道航空航天工程师是什么?对。对。不过……太厉害了。对。从那儿以后就一路走下坡了。不过,我六岁就到达巅峰了。对,然后我就一路念书,想当航空航天工程师,很努力地学数学和科学,上了高中,开始读一个真正的工程课程。我的高中挺酷的,有不同方向可以选。我选了工程,是工程与航空航天科学方向。我想,这就是我想做的。结果我真进去了,才发现就是一大堆文书工作,对吧?这不是我想做的。我是说,这也说得通,因为你得确保一切都记录妥当,不能出差错,因为一旦出了差错,火箭爆炸,六个人丧命。对。
Jonathan:这属于高风险,不容失败的那种。
Ethan:绝对是。差不多同一时期,我开始玩一些代码,一部分是因为这对工程师有帮助,我就想学一学,另一部分是因为我想做每个初中生都想做的事,做自己的电子游戏。然后我就想,等等。我喜欢摆弄东西。我不喜欢那种要确保火箭不爆炸的压力。我有点喜欢写代码,它有点像摆弄东西,但你可以做得更快。而且就算搞砸了,某个服务器崩了,也没人会死。
Jonathan:没人会死。对。所以,比如潜艇软件之类的……
Ethan:对,对。所以我想,这很酷,我想多做这个。于是我开始找,高中时我在 IBM 做过实习。我做的是软件方面。那很棒,那是我人生中最棒的几个夏天之一。我开玩笑说,那次实习我最大的收获之一,就是我不想要一份通勤一小时的工作,因为那太糟了。但除此之外一切都很好。那是高二和高三之间的暑假。之后我毕业了,疫情来了。其实倒回去一点。在 IBM,我提前完成了一堆项目。所以实习的导师对我说,你可以直接联系 IBM 的某个人,就说,嗨,我是实习生,跟我讲讲你在做什么。我说好。于是我翻了通讯录。我看到,哦,量子计算。我大概知道那是什么。听起来挺有意思。我跟 IBM 的一些人聊了聊。他们很好心,愿意花半小时跟一个什么都不懂的高中生说话,那孩子说,我对量子计算一窍不通,但我就是想问你问题。听起来很酷。对。然后我就想,这听起来真的很酷。这些人超级兴奋。而且这听起来像是三样我很喜欢的东西的交汇,对吧,数学和科学,对,数学、物理和计算机科学,这太棒了。
Jonathan:总之。
Ethan:所以我开始更深入地了解它,我很喜欢播客。我听,我是个播客上瘾者。我听太多了,而当时几乎没有好的量子计算播客。我就想,这个我可以做。我能跟人聊天,我能做播客,能有多难?于是我开了一个播客,跟很多人聊了天。到了高三快结束的时候,我其实已经跟另一家在纽约的公司谈好了实习,做的是……但那是实体的量子计算相关的东西,所以我得亲自到场。结果疫情来了,如果世界上有哪个地方会封城,那一定是纽约市。那肯定去不成了。
Jonathan:关得比小丑还快。
Ethan:绝对是。所以我想,哎呀,怎么办?后来我收到一封那种标准邮件,说,嗨 Ethan Hansen,我看了你的播客,我想让我公司的 CEO 上你的播客。我心想,行行行,可以,我们做吧,我以前做过。但我在给这个人的一封邮件里,加了一句,就当是附言吧,嗨,也许试试看会怎样。我写的差不多就是,附言:我今年夏天在找实习。你们公司刚好有这类机会吗?结果回我的人原来就是 Catherine,后来她成了我的老板。她说,我们通个电话吧。然后她说,那你什么时候能开始?我当时想,哦,我可没想到这次会面会拿到实习 offer,但我接受。对,后来疫情继续肆虐。我真的很不想上网课。于是我延长成了间隔年,在这家公司工作。那段经历很棒,我学到了很多。对,间隔年结束,我回到学校,在凯斯西储开始学计算机科学,一直进展得很好。刚读完第三个学期,快要开始第四学期了。对,大致就讲到这儿了。其实上个学期,我一直在跟凯斯西储的一个量子计算小组做研究。我们其实快要……我们希望能很快发表结果。太棒了。不过,那是一段不可思议的学习经历。我还在学习,对吧,还有很多东西我不懂,但对我这个年纪的人来说,我经历得算很多了,我想。
Jonathan:哇,我是说,我从没跟任何聊过、或者说比……比“量子计算”这个词到底是什么意思懂得更多的人说过话。以我那点非常有限的、非技术背景和经验来看,它听起来就像打了鸡血的计算机。这大概就是我对它的印象。不过,也许我们就此深入聊聊,也许你可以稍微解释一下,也许试着把它跟现实世界联系起来。对我来说,量子计算总是听起来像国防部、间谍、机密、发射之类的东西,你知道,它周围有那种神秘感,可以说是神秘色彩。所以我们就打破一下僵局,我想稍微拆解一下它到底是什么意思,也许很多人会真的感兴趣。
Ethan:对,对,当然。你说得对。我在自己的播客上经常聊到的一个大话题,业内很多人也在聊,就是量子炒作,对吧。我不知道我们现在处在炒作周期的哪个位置,但我觉得接近顶峰了。炒作很多。不过,我听过的最好的非技术性解释,来自一个叫 John Skerritt 的人,他上过我的播客。他在微软。他非常擅长向大众讲解这个。他举的例子是这样的:普通计算机,你做 Exercism 这么久了,肯定知道,普通计算机靠一和零运行,对吧,比特。它要么开,要么关,没有别的。
Jonathan:在最底层。在最底层,你面对的大致就是这样。
Ethan:对,正是。我们可以用这个搭出各种复杂得离谱的东西。但没错,在最底层,就是一或零,你可以把它想成一个电灯开关,对吧?要么开要么关,没有别的选项。而量子计算开辟了一片完全不同的、可以拿来计算的空间。你可以不把它想成电灯开关,而更像一个 Philips Hue 灯泡。它不仅是个调光器,可以更亮或更暗,也就是在一和零之间,还能呈现出一些奇怪的东西,如果你的概念里只有一或零,那这些东西根本说不通,比如不同的颜色,对吧?如果一切都是黑白的,你根本没有别的颜色可用。对。所以,如果你愿意,你仍然可以……抱歉,倒回去一点。这个 Philips Hue 就像一个量子比特,对吧?也就是我们说的 qubit。如果你愿意,你仍然可以把它当普通灯泡用,对吧?那样没什么意思,你没法在房间里弄出疯狂的颜色,给你的大学疯狂派对用。但如果你愿意,你可以就只是开和关,那也是个选项。所以这就是说,量子计算机能做经典计算机能做的一切,而且还能多做一点。你说它像打了鸡血的计算机。我觉得这有点偏了,因为……如果我们看一和零的模型,那更像是把灯泡弄得亮一点,而不是一种全新的做法,让你做那些在旧规则下根本说不通的事。所以这带来的结果是,它让你能把某些计算做得比其他计算更快或更高效。有些算法我们完全不知道……经典方法就是最好的做法,把它放到量子计算机上跑毫无意义。其实我写过一篇关于这个的文章。你知道经典的电子游戏《毁灭战士》吗?
Jonathan:知道知道,我小时候常玩,那是个经典。
Ethan:对,对。现在人们会想方设法让任何你能想到的东西跑《毁灭战士》。对吧,那个梗就是,好吧,这玩意儿是个挺酷的智能设备,但它能跑《毁灭战士》吗?所以有人让它在三星智能冰箱上跑起来了。有人在 Kindle 上跑起来了,还不是 Kindle Fire,是那种黑白的。
Jonathan:最基础的那种,对,Kindle。
Ethan:对。所以你看,如果量子计算机真的只是一台超级加强版的普通计算机,而你能在智能冰箱上跑《毁灭战士》,你会以为量子计算机也能跑《毁灭战士》。结果今天,量子计算机跑不了《毁灭战士》。好。原因是……
Jonathan:它不通,它不……范式差太多了。这么说对吗?
Ethan:不是。原因是量子计算机太小了。虽然三星智能冰箱里的比特也不多,但它仍然比量子计算机里的比特大好几个数量级。IBM 刚发布了一台 433 量子比特的机器。不是 43.3 万,就是 433。而我这台用来和你聊天的笔记本,里面大概有数十亿个比特的晶体管。对。所以这里有一种根本的……或者说不是根本的,但确实是数量级上的巨大差异。而且,在量子计算机上跑《毁灭战士》本来也没什么意义,它不会给你带来任何好处。只有某些特定的事情能让你在计算上获得涡轮增压,其他事情放到量子计算机上跑毫无意义。
Jonathan:好,哇。那么,我在这上面有很多问题。量子计算有不同的编程语言吗?能对应那种灯泡调光的感觉,这么说能理解吗?
Ethan:对,当然。这问题很好。有些人走的是造全新语言的路子。比较有名的例子是 Qsharp,有点像 Csharp。微软开发的。还有 Silk,算是……一门实验性的编程语言,我记得是苏黎世联邦理工开发的,一个研究小组做出来的。它在量子计算领域里做了一些很酷的东西,我就不拿来烦你或者听众了。所以那是两门语言,但人们主要做的是,在标准编程语言里写一个包,用它跟量子计算机通信。比较流行的例子有 IBM 的 Qiskit、Google 的 Cirque。这两个都是用 Python 写的。另外,如果你想用 Julia,有个叫 yow.jl 的东西,它不属于任何公司,跑在 Julia 上。
Jonathan:好。Ethan,量子计算在现实世界中的实际应用,你说你在 AI 和量子计算之间左右为难,为什么这么说?你在这两种不同的方面、或者不同的范式上,看到了什么样的未来?
Ethan:对,对,这问题很好。我觉得……量子计算在长期有很多非常强大的前景,能做我们经典方法做不到的事。比如,如果你想模拟某个有量子力学效应的东西,最好的办法之一就是把自己的量子计算机当成模拟器。它本身就把量子效应内置了,因为它就是一台量子计算机。同时,我们在 Google 的 Alpha Fold 这类东西上看到了惊人的进步,它能仅凭编码蛋白质的 RNA 就正确预测蛋白质的三维结构。如果你的蛋白质足够小,其中会涉及一些量子效应。他们能只用机器学习和海量数据把它做出来。这有点像一场赛跑,看哪一个会先……因为我们造的量子计算机越来越大。我跟你说过,IBM 刚发布了一台 433 量子比特的机器。去年,人们做到的最大数字是 127。它们在变大,而且变大得越来越快。但距离我们需要的、用海量算力和深度学习完成 Google 那种计算的水平,我们还差得远。
Jonathan:天哪,因为我就是觉得,听起来有点像……说错了你可以纠正我,当年把人送上月球用的程序,好像……说起来有点吓人,但跟我们现在现代笔记本上习惯的比起来,小得可怜。好像只有几千字节。所以量子计算是不是也处在类似的位置?就是说,把那种算力包装起来的能力还在开发中,这么说能理解吗?是不是这项技术还没发展到能让地球上的每个人以个人身份用上的程度?
Ethan:对,对,我觉得是这样。有些人说量子计算根本不会成功,对吧。他们出于某种理由认为会有一道根本性的障碍,让我们造不出超过一定规模的量子计算机,或者我们找不到足够多有价值的算法。我在自己的播客上和一些非常聪明的人聊过,我从他们那里听到的基本上是,举证责任在这些唱衰者身上,他们要说明宇宙里有某条根本法则让我们无法扩展它。大多数人把它看作工程挑战。你说的是技术栈需要建起来,好让我们真的拥有那些与环境充分隔离、能用得上、又能维持足够久的量子比特。还有一部分人大概处于中间立场,他们说,你家里永远不会有量子计算机,它永远会在某个数据中心里,为你需要的、需要大量算力才能解决的事情提供服务。它在某个数据中心,你发一个查询过去,它比你用经典方法更快地把答案返回来,但你家里永远不会有。我觉得这也许是最可能的。量子计算机非常脆弱。我们周围的世界充满经典力学,因为要让某样东西保持在量子区域,或者说保持在能让它产生量子效应的合适条件下,它必须被控制得非常非常好。把这种东西放在家里,有小孩到处乱跑,有狗在叫,对,还有猫在到处跑。自从古代美索不达米亚的泥板上留下猫爪印以来,猫就一直在到处跑。所以我不觉得这在家里会特别可行。但这是有可能的。这方面我可能会被证明是错的。
Jonathan:那么,量子计算机是不是需要……听起来它需要像控温一样,房间里不能有温度差或者静电,也不能有噪音?你说它脆弱,但为什么会这样?量子计算机为什么脆弱?
Ethan:对,对,好问题。它脆弱是因为,要得到一个控制良好的量子比特,你必须把它和环境隔离开。所以你说得对,今天大多数量子计算机都必须非常非常冷。它们用的是所谓的稀释制冷机,能把温度降到非常接近绝对零度。也有一些不需要这样。量子计算有几种不同的模式,这也是另一个很大的不同点。过去在标准经典计算中,我们一次只有一种主要的计算模式,比如先是真空管,然后晶体管出现了,显然更好,于是我们用晶体管。今天我们还在用。而在量子计算里,至少有十种不同的模式,我没法全凭记忆把它们一一说出来,但有离子阱、光子、超导。人们也在研究硅自旋量子比特。所以,我想这四个算是主要的,但还有一大堆别的,没人真正知道最后哪个会胜出。其中大多数,我相信,硅自旋量子比特、超导,都需要非常冷。离子阱也是冷的。离子本身超级冷,设备不需要冷,但离子超级冷,因为它们被激光精确地固定在那里。然后……太疯狂了。对吧?哇。对。对,你能理解我为什么觉得这超级酷,想多了解一些了吧。
Jonathan:对,对。哇。这真是……跟你的 TB、GB 硬盘、SSD 完全不是一回事,你知道,它处在另一个技术区域,大概可以这么说。哇。那是当然。对。所以这让我想到一个问题,就是……
Ethan:下次见。对。
Jonathan:你在这家量子计算公司做过实习,对吧?你高中毕业后在一家专攻量子计算的公司工作过。大多数人走的是相反的路:先读计算机科学学位,把它读满,然后出来说,我是专业人士了,签我吧,你知道。但你走的是反过来的路。从公司实习再回到学习,那是什么感觉?说你是回去学常规的计算机科学,对吗?所以你现在……你看过硬币的一面,现在又看到了完全不同的另一面。在你的学习里,这个转变是怎样的?
Ethan:对,很不一样。确实很有意思。你说得对。我在学的是经典计算……我不知道,说硬币的两面不太准确,因为,也许也准确,因为这还是同一枚硬币,这大概就是这个比喻最重要的收获。因为一方面,一旦你真正深入进去,经典计算中我们知道的东西和量子计算中我们知道的东西之间有根本性的差异。但归根结底,你还是要面对同样的那些基础:算法分析、良好的编码习惯、懂得如何在团队里协作。所有这些东西在所有领域都会很相似。所以从书本理论来说,我第一学期的一门课最最基础的内容就是算法和数据结构。无论你用什么架构,要写出任何有价值的东西,你基本都得懂那些基础的数据结构和算法。不过,等你真正深入进去,我在大学里还没怎么做到,我想会变得有些不一样。你会开始看到同一枚硬币的两面。但现在我大概是在看整枚硬币。
Jonathan:对,好,挺酷。所以你还没有完全钻进去。另外,我之前还想问这个。你提到你是在农场、乡下、户外长大的,很偏手动的那种,你知道。而现在你大概有相当一部分时间都花在屏幕前。你的电脑成了你围绕着转的东西。你怎么从计算机的世界里出来,重新跟那个更物理的世界建立联系?你需要这样吗?还是你不太在意?这在你身上是怎样的,尤其是考虑到你的出身?
Ethan:对,我绝对需要这样,毫无疑问。有时候我会把两者混在一起。我最喜欢做的事之一,就是把笔记本拿到门廊上,一边看日落一边用笔记本,如果天气够好的话。在俄勒冈,经常下雨,不太行。所以,我想我最喜欢做的一些事,尤其是在俄勒冈,如果你打算来,你说过你想来这边,如果你真来了,你至少得去哥伦比亚河峡谷一带走一次徒步。美得不得了。我喜欢去徒步。我觉得那是重新亲近自然的好办法,这很重要。我跟公司里一个人聊过,他说,每个人都得有一件基本上跟盯着屏幕的案头工作完全无关的事。对他来说,其中之一就是骑自行车,这也是我喜欢做的事。所以,我觉得这非常重要,我要说,徒步、骑车,这些都不错。
Jonathan:Ethan,你有兄弟姐妹吗?你的家庭构成是怎样的?你在家里排第几,可以这么说?
Ethan:对,我是老大,我的两个弟弟妹妹跟我完全不同,对技术毫无兴趣。一个想做全职的戏剧演员,另一个想做戏剧灯光。所以,虽然我是老大,我在家里有点像个异类。
Jonathan:是更偏创造性那种吗?你家有哪些……该怎么说呢?你说你是异类。这是不是意味着计算机科学技术从来不是家里的重点?你是怎么走到这一步的,显然你学了数学和物理,动手摆弄东西,想造东西,那是个自然的进程。不过我想说的是,你父母能引导你,让你意识到你做的那些事其实适合更偏技术的领域,这挺难得的。那一切是怎么发生的?是父母鼓励你去追求这些吗?
Ethan:对。那一切是怎么发生的?
Jonathan:那一切是怎么发生的?
Ethan:对,我说异类,与其说是被排斥,不如说是那个比较特别的一个。你说得对,家里其他人可能更有创造性一点,不那么偏逻辑。我很多事都用一和零来思考,所以计算机科学对我来说来得很自然。不过,说到我的成长,有一件很幸运的事,我的一对祖父母当过很久的老师。我能……他们真的非常鼓励学习。从我还在襁褓中起,他们就一直在为我的大学基金出钱。他们说,我们希望这孩子能好好发展,能发挥他的全部潜力。所以我从他们那里得到了很多鼓励。说实话我不知道,我觉得我的人生里有几个转折点。如果不是那一次,我不知道我会不会走上 STEM 这条路。那次我因为除法哭了出来。我在二三年级学除法,就是搞不懂。不知为什么,就是不开窍。我的祖父,那位老师,他在一所初中之类的地方教书。有一天晚上我哭完之后,他让我坐下来。他给我讲了微积分预科,不是,抱歉,不是微积分预科,是代数预备。我还是个二三年级的孩子。他说,好,我们来引入一个概念,叫 x。你要通过……好,如果我们有 x 乘以这个等于这个,x 得是多少?我说,哦,显然是 4。他说,好,那我们稍微重新排列一下。现在 x 等于这个除以这个,我们来做除法。我说,哦,我懂除法了。所以,对,对于那些比较……那算是基础的东西。而对于那些更偏技术的东西,我记不清从什么时候起,我就成了家里的 IT 负责人。在懂技术这件事上,我很快就超过了我家里其他所有人。所以很多都是自学。我有点算是永远在线,总是在读东西。哦天,这听起来太书呆子了,大家评论里可要友善点。不过我大概初中时最喜欢的爱好之一,就是看可汗学院的视频。一半是为了那种满足感,哦,我得了这么多经验点,一半是因为学这些东西本身就很有意思。所以,对,有很多鼓励,也有很多自学。
Jonathan:对,你提到……你说到除法,我学乘法表的时候也有非常类似的经历,我当时大概……七岁,七岁,记得他们说,好,我们来学乘法表。我就是不懂。就好像我脑子里的神经元还没长出来,直到有人解释说,比如,拿三头牛,三乘以三头牛,那就是这里三头,这里三头,这里三头,现在你有多少?然后我说,哦,这么简单。然后那枚硬币就掉下来了。不过这也是个很有意思的问题,我在播客里问过很多嘉宾,就是……
Ethan:它们还没长出来。
Jonathan:在学习方面,你觉得自己也有那种硬币掉下来的时刻吗,还是说写代码的时候有某个时刻?这问题可能有点难说清,但在我学编程的经历里,我肯定有过,因为我断断续续试了很久,夹在生活和带孩子之类的中间,但肯定有那么些硬币掉下来的时刻,突然你就,哦,你在问题里坐了有一会儿,然后它就掉下来了。但有些人,比如 Eric,他说,没有,就是信息被吸收了,然后就说通了。没有什么顿悟的时刻。那你通常是什么样的?要到一个概念固化下来、说得通、并且你能把它整合进那个编程问题或者语言的其他方面,你需要做什么?
Ethan:对,这问题很好。我觉得这方面我更像 Eric,至少写代码的时候,它好像一直就是说通的。有几个概念我遇到过。比如写代码整体上,我说过,我用一和零思考,我做梦都梦见二进制和矩阵的列,但……不过对某些概念,确实有那种硬币掉下来的时刻。其中一个大的就是递归。我初中开始学编程。那段时间我一直在做普通的编程,我想主要是 JavaScript,也许有一点 Python。没有递归。就是,我调用一个函数就是调用一个函数。我甚至从没想过从一个函数内部调用它自己。那要怎么分析它之类的?到了高中,我修了 AP 计算机科学,得学这一整套递归。我完全搞不懂。我说,从一个函数内部调用它自己到底是什么意思?我想了很久。最后,像你说的,确实有硬币掉下来的时刻,但除了坚持,我没法解释到底是什么让它开窍的。我想这也许关系到一件非常重要的事。我听一些年长的软件开发者说过……要成为一名好程序员,并没有什么固定的特质,唯一的一点,我主要是从这个人那里听到的,他说,我不确定这是你能学会或提高的东西,这更像是你这个人天生的构成,但你必须能够尝试、失败、再尝试、再失败,而且做得非常快,一遍一遍又一遍。而且要有股狠劲……
Jonathan:而且要有股狠劲、够执着。对,对,绝对是。这不是选项。你只能爬起来继续走。对。对。这真的很有意思。
Ethan:绝对是。再见。而且这是我在认识的每一个好程序员身上都注意到的。他们很多人,当然,天生就聪明,学东西很快。但对大多数人来说,是这样的,对,我花了八个小时才弄明白这个函数为什么跑不起来。我就想,天哪,我中间肯定早就出去散个步了。
Jonathan:八个小时,那可是很多时间。花在一样东西上的时间真多,但我完全能理解,我完全能体会那种东西跑起来的满足感,我觉得那正是我在 Exercism 上玩得很开心的地方,因为有好几次,这还是在最基础的阶段,从 Hello World 往后第三道练习,你知道,我就想,这应该很简单,它确实简单,我一直跟自己说它简单,可它并不简单,然后最后你搞定了,你就,哦天哪,就是这样,就是那样。不,我真的……找到了那个分号,对,就是那个该死的分号,你知道,每次都是。嗯,这也是我有点喜欢编译型语言的原因,因为它就是,呃不对,你看这儿。所以那挺有意思的,我最近在玩 Go,还是很喜欢,我大概每期播客都会说这个,对。
Ethan:对,我是说……我大概每期都会说这个。如果你喜欢编译型语言,喜欢 Go,喜欢有好看的错误信息的东西,让我快速给你推销一下 V,因为这就是我上这个播客的原因,至少是你认识我的原因。
Jonathan:先给所有听众一个提醒。V 正在筹划成为一门语言,由 Ethan 打造。我们很快就要发布它。嗯,Ethan 说他很快会发布。所以我完全相信他的话。我们大概会尽量让它跟这期播客同期发布。所以如果你在听,一定要去看看。不过 Ethan,在我把这个推销的热情磨掉之前,还是交回给你。
Ethan:对,录这期的时候它在 Exercism 上还没准备好,但希望我们已经准备好,最后再加一样东西。它会非常棒。不过,V 是我最喜欢的语言,毫无疑问。就像我说的,我从初中就开始编程。我试过很多语言。我用 JavaScript、Python、Go、汇编写过。我从零开始做过 HTML 和 CSS。我用过 Julia。我试过 Kotlin,基本上你随便挑一类语言,我大概都试过。V 是我最喜欢的一个,远远超过其他。它的语法跟 Go 非常像。它跟 Go 的不同之处之一是快得离谱。所以我推销的时候经常说,每门语言都有那个“是”的字,对吧。比如 Python,那个“是”是,是的,写起来超级好玩,没人会说,呃,我讨厌写 Python。它简单,对吧,对初学者友好。而“但是”是它太慢了,像编程语言里的面包车,对吧。C++,那个“是”是,是的,好吧,我们解决了 Python 太慢的问题,但写起来很糟。有些人很疯狂,会说,我喜欢写 C,比如纯 C 或者 C++。我说,我可不想应付那么多内存分配的东西和空指针错误。我觉得 V 没有这些“是……但是”。它是……
Jonathan:这话可不小。我是说,这可是个很大的、很大的说法。
Ethan:多大的说法……我要说 V 的那个“但是”是它没有庞大的社区。这正是我为什么很兴奋能在 Exercism 上做它,因为我觉得人们一旦学了它,就会爱上它,我们就会围绕它有一个庞大的社区,大家会聚拢过来。它快。写起来好玩。当我想到一门编程语言应该怎么运作时,我会想,哦天,我真不知道在 V 里该怎么做这个。然后我想,好吧,如果我来做,逻辑上应该这么来,结果它就是能用,因为它是一门讲逻辑的编程语言。它快得离谱。写起来好玩。它超级安全。等 V 的页面上了,你就能在 Exercism 的页面上看到这些。我建议大家去看看。太好玩了。
Jonathan:如果你正在做这个,因为我们眼下在搞“12 and 23”语言挑战,我不知道你看到没有,基本上就是每个月学一门新语言。我觉得对老练的开发者来说,这是个不错的小挑战。这也是给 V 的推销,一定要把它列进你的清单。它很快就会发布,所以盯紧它。不过,因为通常说到性能很强的语言,Rust 常常会冒到最前面,但据说……这只是我从空气里捞出来的信息,可以这么说,它一开始非常难懂,难写,或者说一开始很难理解,就因为它的那种……我不知道。我不知道这是不是真的,也许你可以说明一下。但能有一门又快又好写、又不那么复杂的语言,会很酷。也许不那么复杂。
Ethan:好。听着,我认识足够多喜欢 Rust 的人,所以我不打算太狠地损它。关于它我要说的一点是,它快,但它不小。V 超级小。如果你想编译 V,V 本身就是用 V 写的。你想编译 V,就下载源代码。V 一秒之内就能把自己编译好。如果你愿意,你可以让 V 先编译自己,再用生成的二进制文件在一秒内再把自己编译一遍。就是这么快。相比之下 Rust,如果我没记错,完整编译要 30 多 GB,还要一个小时。大多数人其实不会自己去编译,他们会直接从发布页面下载预编译好的二进制文件。但如果我在电脑上打 V,它会去 GitHub,拉下源码,自己编译,就这样更新。太酷了。又快又小。太棒了。
Jonathan:啊,酷。这让我很期待弄到 V。关于这门语言,稍微问一下,它出现多久了?你是怎么遇到它的?V 有什么背景信息会让人感兴趣?
Ethan:对,我不太清楚它出现多久了。不算特别久。它是比较新的语言。还在 0.3 版本。所以算是 beta 吧,但我是大概两三年前知道它的,当时它算是 GitHub star 数增长最快的语言之一之类的。那时候,我现在也还做一点,不过现在我发现 Exercism 了,就改做 Exercism 了。我有一个 GitHub 代码仓库,里面就只是用一堆不同的语言实现阶乘,算出某个数的阶乘的程序或者函数。我那时想,我要学几门新语言,就用这个办法。于是我试了 V,心想,哦天,这个酷。对,我就是这么发现它的。从那以后我一直很喜欢它。它很棒。
Jonathan:酷。啊,让人兴奋。太棒了。谢谢你给我们介绍这些。也谢谢你把它做出来。你知道,Exercism 正是靠像你这样的人对某些东西产生兴趣才建起来的。我们真的很依赖这个。所以非常感谢你在这方面的帮忙。这也正好引到你是怎么加入 Exercism 的。说说这段故事吧。也许我们就聊几分钟,再看看聊到哪儿。
Ethan:对,当然。我喜欢开源的东西。我在学校有个挺得意的事,就是我基本上让所有朋友都用上了 Signal,而不是 WhatsApp 或者 Messenger,因为它是开源的,注重隐私,各种好处。所以我在找开源的东西。我想我用了一个叫 alternative.to 的网站。我在找 HackerRank 的开源替代品,Exercism 就是冒出来的其中一个。而且……哦对,我知道我为什么在找那个了,因为我在学 Julia。我在找一个练它的好地方。Exercism 是其中一个有 Julia 学习轨道的,所以我就试了试。其实我当时甚至不知道它是开源的。我以为我只是在找一个像 HackerRank 那样的东西,好让我学一门新语言。我开始做 Julia,某个时候我看到一个,看看这个页面的源代码,我就,哦,它是开源的。于是我四处看了看,想,不知道他们有没有 V 学习轨道。然后我挖掘了一下。结果发现有些人很久以前就开始想过这件事。那会儿还是 0.2 版本,连 0.3 都还没到。根本成不了。所以我就问,嘿,还有人在这上面做事吗?那个人居然回了我,这很不容易,你知道,了解 GitHub 的人都知道,你会在某个地方找到一个死掉的 issue,然后问个问题,永远得不到回复。而我居然得到了回复,太不可思议了。
Jonathan:回复,太不可思议了,像扔进大海一样。
Ethan:对,就像直接掉进黑洞,再也见不到。不过,真的有人回了,说,老实说,我已经转去做别的东西了。如果你想要这个学习轨道,就拿去吧。我说,好吧,我大概至少能做一部分。于是我开始在空闲时间做一点。对,我们现在差不多要发布了,希望如此。
Jonathan:因为我们之前聊过。我记得你当时正在把事情推起来。能跟你碰个面真好。不过,我很期待看到它发布,也帮它拉点支持。所以,如果你在听这期节目,你就是那个需要一起把第一条 V 学习轨道做起来的 V 集体的一员。那你发布的时候会带上什么?多少道概念练习、多少道练习,你给大家准备了些什么?
Ethan:对,还比较简陋。没有概念练习,但有 20 道练习。我想构成大概是 10 道简单、7 道中等、3 道困难。好。
Jonathan:好。太棒了。那会很棒。很期待。我们会向大家通报进展。如果你对 V 有任何问题,欢迎发邮件。Ethan,我们也会在节目说明里放一堆东西。我写了一份长长的清单,就为了记住我们聊过的一切。
Ethan:给我发邮件,或者我会看 Exercism 论坛,如果你想在上面开个讨论并 @ 我,尽管来,对。
Jonathan:酷。我会确保有相应的分类。我想我们可能得加一个 V 分类。不过好,还有几件小事我想聊聊,然后我就让你去睡觉,我自己也去弄杯早晨的咖啡。各位,我在开普敦,离得可远了。那是非洲的最南端,我很喜欢这点,因为它离很多东西都很远,但我挺享受我们在这里这件事。
Ethan:早晨好。我没意识到你是没喝咖啡在做这个。我不得不说,我太佩服了。太不可思议了。
Jonathan:我用茶顶的。我用茶顶的,因为当时只有茶。我们特别讲究。我是说,你大概也是,知道你们西海岸的美国人通常是,这会是很大的以偏概全,我大概会因此挨骂。但咖啡在开普敦是件大事。我们的咖啡品质真的非常幸运。不过我知道美国西海岸整体上对咖啡也非常挑剔。其实我觉得世界上大多数地方大概都这样。
Ethan:你刚才说西雅图和波特兰之间的较劲。我想我得把咖啡这局让给西雅图,他们的咖啡更好,但我们的桥更多,所以我不知道谁赢。
Jonathan:对,这说法很好,嗯,衡量一座城市有多酷,有些挺有意思的指标,但我们必须……我得说这局又得让给西雅图,很不幸,因为我们在开普敦有西雅图的咖啡。所以如果哪天俄勒冈的咖啡能到我们这边,那就是个好日子了。绝对的。所以,好。好,在往下走之前,Ethan,你有什么特别推荐的咖啡烘焙或者拼配想让大家试试吗?你到那种咖啡控的级别了吗?
Ethan:我不是,但如果你哪天到俄勒冈,一定要试试 Dutch Bros Coffee。那是俄勒冈土生土长的。他们从某个小镇上一个小棚子起家,大家都喜欢,现在他们差不多到处都是了。
Jonathan:酷,Dutch Bros Coffee,向他们致敬。他们大概永远不会知道自己在播客里被提到了。除非,当然,我们直接把节目发给他们,说,嘿,给听节目的人一个折扣码吧,也许我们可以这么做。好,Ethan,有几个问题我们每周都会问很多嘉宾,算是我们的固定菜单,我觉得它们很酷,尤其是跟 Exercism 有关的时候,我们想帮人们学习,想帮人们把自己摆到能学会编程、学会思考的位置,编程、写代码之类的事。所以第一个是这样的。我们有个说法,叫你会为之“死守”的那座山。这听起来大概有点戏剧化。我觉得可能是有点。但有什么是你真正想坚守的一件事,尤其是在技术领域,或者说你会真正捍卫什么价值?我想我们刚才聊的是为之而战,但“捍卫”也许更合适。你觉得那件你会说,这是我很看重、觉得特别重要的事,是什么,尤其是在技术领域?我觉得可以很宽泛,范围挺大的。
Ethan:对,我的答案是,不知道你在 GitHub 上见过没有,有一份清单,叫,黑客定律之类的。
Ethan:对,好。其中一条是,代码阅读的时间总是比写代码的时间长。所以我要死守的那座山就是,你应该写……抱歉,写好的注释和好的文档,比写好的代码更重要。这是我今天的热门观点。
Jonathan:酷。这很有意思。写好注释比写好代码更重要。我在这儿记笔记。这是金句。太好了。
Ethan:也许在 Exercism 上没那么重要,你知道,如果没人会看到你那份示例提交,那也许没那么重要。写那个函数就行。但如果你把在 Exercism 上学到的东西用到工作里,或者用在开源社区里,那这一点我绝对要死守。
Jonathan:好,这很有意思,因为我觉得,给东西写文档、写好注释,不只是帮别人,它其实也帮你把想法组织得更有逻辑……它其实帮你理清思路。有点像写论文前先做规划,你想先定下引言,在真正动笔之前先把论文规划好。我觉得这跟我们 Exercism 很看重的一点有关。我常听 Jeremy 这么说,他花在思考上的时间比真正写代码的时间还多。而且他写代码的时候,往往只是在把他已经想清楚、生成好的解答写出来。所以代码其实只是思考的具象化。我觉得这跟很多好的最佳实践也很契合,这很棒。所以如果今天大家能带走点什么,如果你在学编程,在做开发,把你的注释写好,用它来思考,把东西规划清楚,它帮你,也帮别人。
Ethan:对。
Jonathan:希望这说得通。那座山不错。谢谢。
Ethan:我会这么做的。谢谢,谢谢。你说的它帮到你,不只是现在的你,还有未来的你。有人说,写代码要像别人会读它一样。我总是尽量把代码写得像六个月后的我要来读它一样,到时候我根本不知道自己在干什么。
Jonathan:对,对。就像……上下文。上下文为王。所以给人这个,帮人获得这个,真的很酷。好。我下一个问题是。
Ethan:对。
Jonathan:你能指出哪些关键的行动或行为加速了你的学习吗?你能在别人身上看到哪些行为,能……让学习变得有效吗?
Ethan:对,我想我要回到之前说过的,就是一遍一遍地尝试和失败。我不知道有什么是我明确做过、加速了我学习的事,但没错,你会撞上障碍,对吧,这不是问题。你总会遇到某个奇怪的错误,怎么都想不出来。我觉得有些人太偏向那种,我绝不向任何人求助。他们就这样,像我朋友那样,对,我盯着这个函数看了八个小时,终于弄明白问题出在哪了。也有人撞上障碍就举手投降,或者马上问别人。我觉得我的建议,或者说我自己不得不做的,因为我也偏向那种,我自己能搞明白,我就埋头干,部分是因为我不想麻烦别人,或者显得很蠢,因为他们会说,笨蛋,你少了个分号,在第 13 行。我就,啊,你说得对。所以,设个定时器,你觉得哪个数字最合适,就设,比如 5 到 15 分钟这个区间,好,我要在这上面挣扎 X 时间。如果到点了还没弄明白,那么如果你有人可以问,比如同事或者朋友,那就去问他们,帮我看看这个。或者上 Stack Overflow,你可以来那套经典的,嗨 Stack Overflow,我有个问题,然后你就得到一个踩和零个回答。这总是很有趣。或者有时候对我有帮助的是,我就出去散个步,对吧。如果周围没人,我什么都做不了,我挣扎了那么久,那就清空脑子,走五分钟,回来。我还要说,即使你在专业的软件开发环境里,如果你所在的地方不鼓励,嘿,你需要的话就去散个步,清空脑子,回到状态,那也许值得去找个别的地方,因为我待过的所有好公司都鼓励这个,这非常重要。心理健康……如果你脑子一团糟,是写不出好代码的。
Jonathan:说得对,非常对。好。这是我们今天最后一个问题。今天早上聊得很开心。好,问题是这样的。这周你对社区有什么推荐?范围可以很宽。比如去大西洋或者太平洋游个泳。如果你在俄勒冈,去 Dutch Bros Coffee 买杯浓缩。你这周对社区的推荐会是什么?
Ethan:我想我已经说了。我已经说过,去看看 V,伙计。它太棒了。太好玩了。如果你想要更有趣点的东西,我得推荐 Metaculous,一个网站,metaculous.com。M-E-T-A-C-U-L-U-S。这是我最喜欢的消磨时间的方式之一。我大概用得有点多。它是一个让你预测未来的网站。上面有个问题,比如,到 2035 年,太阳能板总共会产生多少太瓦时的电?然后你说,好,我猜范围是这样,大概在这里和这里之间。他们会做的,是让几百个人上这个网站,都来预测。你离真实数字越近,得分越高。他们做这个,是想帮人们更好地思考自己对世界的看法。对我来说很有帮助,比如,你知道吗,我的偏见说这事有大概 40% 的概率发生,但如果我真去查数字,其实更接近 75%。我本来不会这么想。太疯狂了。所以这是我对大家的推荐。要不就去看看 V,学完它之后,因为它学起来超级快、超级好玩、超级容易,去看看 Metaculous。
Jonathan:好,酷。听起来很棒。Ethan,非常谢谢你今晚抽出时间,对你是晚上,对我是早上。真的很有意思。整个量子计算的话题,我算是听过一点点,但我觉得……我也会去听你的播客。如果你在听这期节目,我们也会在评论区放上 Ethan 的播客。请去点赞、订阅,加入进来。我也会在空闲时去听一听,因为我发现聊这个太吸引人了。谢谢你为 Exercism 所做的一切贡献。非常期待 V 学习轨道很快发布。很喜欢这些推荐,跟你聊天很愉快,就挂在通话里。我们来做收尾吧。Ethan,再次非常感谢你抽出时间,祝你在俄勒冈度过一个美好的夜晚。
Ethan:谢谢你,Jonathan。这是我的荣幸,也谢谢你为 Exercism 所做的一切。我知道你经常要随时待命,需要的话凌晨 5 点半就起来,这一点我有亲身体会。所以,你做的所有事都很棒,我很感激。对,谢谢你请我来。
Jonathan:好,随时,随时。太棒了。各位,再见。
倾听、学习,并从我们的社区成员那里获得启发。