📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

What Big Tech Still Gets WRONG about Great Programmers | Casey Muratori

A Life Engineered56:34

Transcription

他们以说“干净的代码是一件可怕的事情”而闻名。你对干净的代码有什么问题?我的意思是,最简单的说法是,这是凯西·莫里托里。他的动画系统被用来构建过去 25 年来一些最著名的系列游戏,包括《博德之门》、《上古卷轴》和《帝国时代》。而且他毫不讳言地告诉你他的真实想法。>> 我真的不在乎人工智能。它完全没意思。我就是不在乎。凯西出色的面试方法解决了大科技公司尚未解决的问题。>> 我总能进行一次面试,从中判断一个人是否对编程了解很多。>> 这可能是一个错误,但你现在为什么不采访我呢?>> 好的。>> 非常感谢凯西今天来工作室。哦,>> 谢谢你邀请我,史蒂夫。>> 当然。那么,让我们从你的经历开始。你过去有哪些主要的决定性时刻,如果它们以不同的方式发生,可能会导致你的人生结果截然不同?>> 嗯,我想最大的一个可能是在我上高中的时候。呃,我进入专业编程的经历非常不寻常,因为最初,你知道,我只是一个在家的孩子,这显然是在互联网还没有普及的时代,所以那真的很孤立,我只是像那个时代的任何孩子一样在家编程,但碰巧有一个人住在我所在的同一个城镇,他后来去了微软工作,他基本上说,如果你想在微软实习一个夏天,因为我们那里有一个实习项目。这对我们来说会很棒。就像我因为他在那里有点影响力而报名一样。通常他们不会,你知道,他们不会招收一个高中生。所以我当时想:“这听起来太棒了。”我真的不知道这意味着什么。我真的不知道微软是什么。我的意思是,显然我大致知道他们做什么,但同样,没有互联网意味着你与它没有多少联系。所以,能够出去做这件事,确实彻底改变了我以后的人生轨迹,因为我在那里认识了人,然后我没有上大学,而是来这里和我在微软认识的人一起工作。那纯粹是运气,对吧?我的意思是,我不可能以任何方式促成这种结果。这纯粹是碰巧,就像我住在那座城镇并遇到了那个人。所以,那纯粹是完全的运气。如果不是那样,我就会去上大学。我认为我别无选择。>> 当你遇到那位把你带回来的长辈时,你已经对电脑感兴趣了。是的。是的。是的。>> 好的。>> 嗯,我以前总是编程。我从小就学会了编程,因为我父亲是一名程序员。嗯,他在一家公司工作,又回到了我刚才说的那个转变。他在一家名为数字设备公司(Digital Equipment Corporation)的公司工作。是的。显然,如果你了解计算机历史,你就知道他们非常有名,但他们已经不复存在了,对吧?他们被吸收到英特尔和康柏等公司的一部分。他们开发了 Windows NT,这是我们今天使用的内核。所以,这是一家非常有历史的公司。我父亲在那家公司工作,嗯,他是一名程序员,他教我编程。所以,我比你可能想象的要早学会编程,如果你是一个普通的孩子。对。所以,这确实是我一开始就了解编程的原因。是的。所以,你父亲是一名程序员,如果不是这次实习,你很可能会上大学。你实习的时候多大了?他们把你飞到西雅图地区了吗?>> 是的。是的。那大概是我高中高二和高三之间。是的。>> 你在实习期间做了什么?>> 尽管我今天行为不端,但那时我更加行为不端。对。因为我还是个孩子。你什么都不知道。我从未有过工作环境的经验,所以我真的不知道发生了什么。我真的需要一个严厉的管教,比如有人能约束我,告诉我我们该怎么做,然后去做,随便什么。不幸的是,对我来说,恰恰相反的事情发生了。所以,在我到达之前,对于那些不知道微软过去如何进行实习的人来说,通常他们会一起来。所以,我和另外三个实习生之类的,对吧?我们会一起来,然后我们会交给那里的一个人,他会负责管理我们的工作。对?当时就是这样运作的。我不知道现在是什么样的。可能不一样了。当我到达时,本应给我们安排工作的人不在。所以,发生的事情是,有另外一个人。他来自 BBT,在微软工作,他只是想给我们安排一些事情做。基本上是因为他们不知道还能做什么。就像,好吧,嘿,伙计,你能给这些实习生安排点事做吗?所以,他让我做的第一件事就是写这个。你能写一个加载 ANI 文件的库吗?ANI 文件是他们过去在 Windows 中用于动画光标的文件。我甚至不知道。这可能仍然支持,因为 Windows,你知道,向后兼容,但 ANI 文件只是一个动画格式。他认为他们可以用它来做某种动画。我不知道。那个部门一团糟,没有人对任何事情有好的计划。所以,他们只是在想办法。所以,我去了,写了那个,但那没花多长时间。它很简单。即使以我当时的技术水平来说,这也不是一件很难的事情。>> 这就是光标从指针变成比如恐龙或者沙子。是的。>> 嗯,或者那叫什么?>> 沙漏。>> 沙漏。沙漏就像翻转过来,那就是,它只是一堆像素蒙版和几种颜色。>> 我的意思是,这真的很基础。是的。而且是老式的。所以,我想说它是一个索引调色板。它不是真正的 RGB,后来我认为他们确实添加了,你知道,他们扩展了它来处理它。但我想在他让我做的时候,我甚至不认为文件格式支持 8 位颜色。它是,它是,或者每通道 8 位。它更像是,你知道,8 位调色板,甚至可能更少,可能是 4 位调色板。它非常简单。所以我做了一个东西,然后他们说,我不知道还能做什么。重点是,那只是混乱,整个夏天什么都没发生。>> 非常有趣。我认为微软>> 没那么有趣,但谢谢。>> 对我来说很有趣,因为我知道微软有不同的时代,我认为 90 年代那个时代仍然有很多个性,人们只是做自己的事情,而且脾气很大。>> 我认为在 2000 年初,千禧年之交,它变得比以前更加企业化了。>> 我认为你说得对。>> 好的。所以,你知道,我们有像 16、17 岁的凯西,然后发生了什么?你从西海岸的雷德蒙德回来,然后>> 你的人生中接下来发生了什么?>> 所以,嗯,我在那里的时候,显然,嗯,我认识了克里斯·海克。基本上,因为他们正在开发 Win,并且他们试图发布它。在那段时期,你得到的东西之一,再次,这听起来可能很奇怪,这可能听起来对习惯于“好吧,你不是总是在微软有免费食物吗?”的人来说很奇怪。那时你有免费饮料之类的,但没有免费食物。食堂是补贴的,除非你在赶工期或者类似的时候,否则就没有免费食物,因为他们知道人们可能会加班,他们会提供餐饮。所以,在会议室里。如果你在深夜闲逛,就会有那些,你知道,那些金属餐饮托盘,或者你在办公室里闻到,你会闻到一些,“哦,那闻起来不错,对吧?”然后你就跟着它走。所以,我认识他们是因为,嗯,我有时会加班。我没什么事可做。所以我总是在那里。我只是会去工作或者随便转转。所以,晚上,我进去了一次。我说,“嘿,你们在这里做什么?”他们说,“哦,你想吃点东西吗?”他们给了我一些。所以,我就是这样认识克里斯·海克(Chris Hecker)的。我还认识了约翰·布洛姆(John Blossom),他也在那里,还有约翰·罗斯(John Ross),他也曾在那儿。我认识了这些人。他们后来在这里创办了一家公司,叫做 Definition 6,做游戏相关的事情。什么都没成功。但当我回到家时,我很高兴能和这里的程序员在一起,因为这对我来说是一次非常有趣的经历,我当时想,我只想去做那个。就像,无论发生什么,我都想去做。所以,我没有上大学,他们正在创办一家公司来做这件事。我说,我可以加入吗?对?对。他们说,“当然。”所以,那是我进入这个行业后做的第一件事。然后,从那时起,我只是找到了真正的工作,因为他们有很多联系,他们会为我担保,说我还可以,对吧?就像,嗯,你知道,他不是完全不行。所以,你知道,聘用他。所以,从那时起,我最终在 Rad Game Tools 工作,我在那里完成了大部分游戏行业的工作,这些工作都被发布了,对吧?就像大多数实际出现在产品中的东西,都是在那里。>> 本集由 Linear 提供。说实话,你今天使用的问题跟踪器并不好。比修复问题本身更糟糕的是与跟踪它的软件作斗争。Linear 与众不同。它速度极快,设计精良,专为现代软件开发而打造。像我这样的工程师喜欢它的键盘快捷键。它给我一种 Vim 的感觉,与 GitHub 等现代通用工具直接集成,并且内置项目更新,让每个人都能保持同步。这样你就不会更新你的问题,然后立即去 Slack 提醒相关人员。这只是使用 Slack 进行问题跟踪,但步骤更多。Linear 是 OpenAI、Verscell 和 Perplexity 等一些最知名、发展最快的公司的工程师的首选。现代项目需要现代问题跟踪,它能无缝地为大小公司服务。我个人喜欢 Linear,因为我认同他们的价值观。你必须信任那些对他们卖给别人的软件实行零 bug 政策的人的问题跟踪软件。说真的,没有 bug。无论你是在工作中使用它,还是想在副业上尝试一下。请访问 linear.app/ 了解更多信息。我也会在描述中提供链接。再次感谢 Linear 赞助今天的对话。>> 这太神奇了。16、17 岁的孩子是如何与合适的人建立联系的?>> 完全是随机的。>> 是的。而且,我的意思是,我不知道这是否是幸存者偏差,或者别的什么,但是,你知道,比尔·盖茨在那里长大。他的,你知道,不知何故,他接触到了电脑,你知道,可能在你之前。他,你知道,制作了 BASIC 编译器,你知道,以及微软早期所有那些传说。他是个十几岁的少年。他就像为企业编写软件。所以我只是想知道,那些幸运的,早期接触到这些东西的人是否就是那些成功的人,还是说有一种特定类型的人,他们会把这种东西显化到宇宙中?我的意思是,我认为在很大程度上,这是一个双向的事情。你知道,可能有些人,我不在这个群体里,他们就是那么好,他们会自己显化,但我不是,我的意思是,有些人,你知道,他们只是在 16 岁时就写了一个很棒的游戏,或者那个时代发生了一些人。他们就是那么好。而我不是。所以,我认为对于那些不在那个更小的精选群体里的人来说,这确实是双向的。你必须努力工作,并表明你经常做这些事情,这样别人才可能相信我们应该给这个孩子一个机会。但同时,也需要那些长辈去看看,然后说,我想给这个孩子一个机会,对吧?所以,我认为对于那些不在那个超级独家的利基市场里的人来说,这确实是双向的。不幸的是,这意味着相当多的运气。你必须碰巧以那种方式遇到某人。但我在我自己的生活中,至少尽力将这一点内化。所以我总是试图帮助那些我看到的人,比如,年轻人在做很酷的事情,我认为他们对编程充满热情。我总是把他们介绍给我的朋友,他们正在招聘。我说,你应该看看这个孩子。你应该看看这个孩子。对?因为我只是在回报,因为我想,如果当初没有人为我做这件事,那它就不会发生。让我们谈谈你可能会给 16、17 岁或者比这稍大一点的人,或者职业转型者的一些建议。>> 比如他们应该参加训练营吗?他们应该自学吗?如果可能的话,他们应该上大学吗?他们应该回去上大学获得计算机科学学位吗?他们应该如何进行?>> 伙计,我不知道。嗯,你知道,这就是为什么我说我试图做我刚才说的那个双向事情的另一半,那就是说,如果有人在那里找到了他们热爱的事物并且正在做这件事,我想找到他们并帮助他们。所以,我认为,尽管听起来很愚蠢,我认为你能给某人的唯一真正的建议是,如果你真的对你正在做的事情充满热情,那么你只需要相信,如果你,你知道,保持愉快,容易相处,不要,你知道,不要做那些可能会让那些想看看是否能给某人机会的人感到反感的事情。然后,尽你所能让那种热情自己说话。发布东西,你知道,有一个流,你做事情。嗯,尝试参与其中,这样你就能被看到,因为否则我们就找不到你,对吧?这个想法是有一个彩票在进行,而且不是完全随机的,你可以增加你的接触面。我认为今天的接触面从未如此之大。你可以直播。你真的不需要征求任何人的许可就可以做一件事。你只需要去做。而当今时代的美妙之处在于,即使在世界上非常贫困的地区,你也能接触到电脑。至少,你可以接触到手机。有数十亿部手机。或者,如果你有一台电脑或某种笔记本电脑,你可以捣鼓,你可以下载所有这些免费工具。知识就在那里。你可以接触到 YouTube。如果你能接触到所有这些以前不存在的资源,而且它们都是免费的。如果你有什么东西在驱动你,比如拿起一样东西,让好奇心驱动你。让,你知道,无论你的动机是什么驱动你,你都可以去做一件事来引起注意。>> 我的意思是,为了延伸你使用的比喻,如果你不玩彩票,你就不会中彩票。玩彩票就是人们在看你,他们看你,因为他们可能在某个时候,他们必须看到有潜力的人,对吧?所以,你不想做的是,发生一次偶然的相遇,一次偶然的你去的地方,有人偶然来到你的直播,无论是什么,你不想发生这种情况,而你看起来不像是一个对这件事充满热情、值得有机会的人,以及任何事情。如果你追求的是那个,对吧?而且,我想,如果你说这个播客的总体理念是卓越的职业生涯,那么是的,就像你在谈论主题一样。你必须表明你有点与众不同。你不必是世界上最好的,对吧?但你必须表明,哦,这个人,他对这件事比大多数人更关心一点。这很重要,你知道,我收到了很多关于我 Discord 的问题,他们说,“嘿,史蒂夫,我刚刚获得了一个实习机会,我该如何,你知道,给他们留下深刻印象,以便我能获得回聘,或者,也许我可以再次实习,只是为了确保他们充分利用这个机会。”而我的回答只是,你现在得到了某人的关注。所以,不要浪费它。你知道,你知道,我来自亚马逊,我们雇佣了数百名实习生,他们涌入西雅图。我们已经没有地方安置他们了。是的,你知道,他们终于有了一点钱,因为我们给了他们丰厚的薪水和津贴。而且他们可能第一次离开家,你知道,除了大学。而且,你知道,他们在新城市,那里还有很多其他年轻人。你可以去派对,或者你可以,你知道,你可以充分利用你默认获得的关注,>> 对吧?所以,为什么你要浪费你拥有的关注来给人们留下深刻印象,这样,你知道,我不知道你会被分配到哪个部门,我不知道你将从事哪个产品,我不知道技术栈会是什么,但你真的能以一种让你自己印象深刻的方式来应用自己吗?它不会,而且它不一定是一种非常特定的类型,比如,哦,你知道,我深入研究事物,或者,你知道,我非常擅长展示我的所有工作,或者无论是什么,只是让你自己印象深刻,同时你拥有另一个人的关注。嗯,而且,你知道,我在公司环境方面经验不多。所以,我甚至不知道如何回答这样的问题,对吧?你有很多经验,知道那是什么样的。但另一方面,我可以这么说,当你只是谈论一个非常关心编程的经验丰富的程序员会如何与你互动时,对吧?他们只是想看到你关心代码,伙计。你一眼就能看出来。我曾经和别人私下讨论过这个问题,所以我不说名字,但我实际上最近和某人讨论过这个问题,因为他们问了一些问题,我基本上说,为什么我认为,你知道,我当时认为这个人很好,他们说,为什么,你,你知道,你怎么知道的?我说,我记得一个人在谈论代码时发生的所有事情。我说,他们注意到这个了吗?他们注意到那个了吗?或者他们似乎真的被这件事困住了,因为他们认为它没有很好的解释。所有这些等等,在我脑子里,我想,我能看出这个人的大脑是那种真的希望这段代码能正常工作并且工作得很好,而且他们不满足。他们不仅仅满足于,你知道,那个东西,你知道,通过了代码审查所需的任何标记,对吧?他们不是这样的。他们是,这段代码真的好吗?我真的理解它是如何工作的吗?至少对我来说,我一眼就能闻出来。当我看到这样的人时,因为这很罕见,大多数人只是,我不知道,我只是想把事情做完,对吧?或者,我想给某人留下深刻印象,对吧?>> 我能一眼看出那个真正的人是,不,我参与其中了,对吧?所以,至少对我来说,就是这样。我能看出一个程序员是否达到了那个水平,他们可能还不够好,但我知道如果他们继续这样下去,他们很有可能有一天会做得很好,因为他们会有一个反馈循环,永远不会放松。当你从不放松时,你就会变得越来越好,因为你学习并深入研究。你不会让你的大脑欺骗你,让你认为你已经明白了。你知道。所以,总之,在亚马逊,我们称之为领导原则“主人翁精神”。>> 好的。所以,亚马逊提供胡萝卜的方式是,他们说,这里有很多股权。你现在是公司的所有者。你是否,你知道,你是否体现了主人翁精神?你关心吗?基本上是这样,你关心正在发生的事情吗?>> 我认为这就是你在谈论的,也就是,当涉及到代码或你正在处理的任何事情时,你关心它吗?你知道,你维护的东西,你并不真正关心。你可能只是口头上说说,但如果你真的关心它,你会密封你的甲板,你知道,每两年一次,或者无论何时你应该这样做,对吧?然后还有所有这些延迟的维护。>> 嗯,我认为最终,如果你关心某件事,别人会注意到的。>> 而且几乎无关紧要是什么。我喜欢书呆子。不仅仅是技术书呆子。我所说的书呆子是指你喜欢某件事,以至于你不在乎别人怎么看你。那可能是一部电子游戏。那可能是一部电影、动漫或漫画,也可能是木工或音乐,或者任何东西。但你是个书呆子,因为你想知道这里发生了什么,你非常关心,你关心,你知道,你对自己的看法。所以,我认为最终你想要一个书呆子,你想要一个对代码充满热情的人。所以,让我们来谈谈,你,我认为你的职业生涯中只在小团队工作过。是这样吗?这是一个公平的描述吗?这并不完全正确,因为我确实在,我咨询时,我为 RAD 咨询时,我确实参与了 Larabe 项目,那个项目相当大。嗯,这是与英特尔的一个项目。所以,整个结构都很大。但总的来说,我开发东西的理念是,我一直发现小团队的生产力最高。所以我一直试图围绕着在那方面组织自己。我确实认为,我可以理解挑战,我将尝试运行一个千人组织并让它做对某事,因为这是另一回事,对吧?就是试图弄清楚如何让这么多人真正一起做有用的事情。所以我很欣赏。我只是觉得我对此不感兴趣。所以我一直只是把它留给别人。我说,有很多想做这件事的人。据我所知,他们会做的。但是,嗯,我从来不想,嗯,做那个。所以,我一直试图让自己专注于我直接的事情。让我们来谈谈代码层。好的。>> 你,你,你以说“干净的代码是一件可怕的事情”而闻名。我想我的问题是,你对干净的代码有什么问题?你对间接和 vtables 以及运行时执行有什么问题?就像,那件让你反感的大事是什么?因为看起来你对其中一些是可以接受的。>> 哦,我没意见。>> 是的,当然。我没意见。我的意思是,我希望事情运行良好。我的意思是,最简单的说法是,我想要好的软件,只要我们能弄清楚怎么做。这就是我想要的。所以,干净的代码,我认为区分很重要,因为这总是会出现。所以,有些人只是认为干净的代码是他们喜欢的任何东西,我无法反驳,因为我也可能喜欢它,对吧?你认为的干净代码可能是我认为的好代码,对吧?>> 嗯,当我谈论或者我在那个病毒视频中谈论干净代码时,它变成了那样,对吧?那是我课程的一部分,我在这门课里讲到,我把它放在引号里“干净的代码”,因为有,有某些规范化,人们已经做出了,他们说,这里是我认为你应该做的事情,而其中一些在我看来是相当错误的,原因是因为当我想到在编程问题上,至少需要什么时,你必须意识到你正在写的东西将在 CPU 上如何执行,因为如今不幸的是,这非常容易,我希望不是这样,但如今很容易做出几个糟糕的决定,养成几个坏习惯,最终导致你的软件运行得非常慢,再次,我希望不是这样,我希望你需要更努力才能做得对,比如,我希望你需要犯更多的错误,但就像,我们不幸地在性能上有这些悬崖,而且不幸的是,很容易掉下去。所以,关于干净的代码,嗯,那个视频只是在谈论,发生了一些非常不幸的事情,很多人不理解。那就是,如果你使用的是所谓的运行时分派。所以,一些编译器不知道它当时要做什么。所以,它必须使用某种间接的,你知道,它会进行一次间接分支。人们没有意识到这有多糟糕。不幸的是,有些人认为这只是虚拟函数成本的问题,但事实并非如此,因为虚拟函数在代码流层面实际上是相对免费的,因为前端如果能预测虚拟函数分支,它就会执行。你不需要付出任何代价。虚拟函数的真正成本是,不幸的是,很多人,我就是为什么我在干净的代码中展示了这一点。比如,他们说,写小函数,偏爱多态和动态分派以及后期绑定以及所有这些东西。当你把它们加在一起时,你得到的东西是编译器无法查看和优化的,因为你在做所有这些事情,调用所有这些非常小的函数,非常小的东西,比如虚拟的 get 和 set 之类的。它们将代码原子化,以便编译器无法查看整个东西并说,“哦,这个巨大的堆栈只是将这个变量加二,”对吧?如果它是静态分派,如果没有那些虚拟化,那些未知的类型在中间,它就可以做到。所以,我在那个视频中试图传达的是,不幸的是,很多人只是认为,我的意思是,我希望你的代码是邋遢的,你知道,这是我的错,因为我应该,我应该拍一个更长的视频,我想,也许有一天我会,但我试图让人们理解的是,实际上,你真的需要编译器为你折叠这些巨大的路径,因为所有这些微小的东西使得编译器无法做到这一点,因为它不知道提前的类型是什么。如果相反,你能将你的思维转移到静态分派,编译器总是会知道类型是什么。突然之间,同一个函数,以前可能是灾难性的,现在就没问题了,对吧?特别是如果它在循环中等等,对吧?所以,有一些小的思维转变,你想让程序员意识到,因为他们不一定需要做很多额外的工作。他们只需要知道它们之间的区别。这有意义吗?>> 当然。嗯,也许我们可以把话题转到招聘上,你知道,我当时在问>> 这是你的强项。我在这里没什么可说的。>> 嗯,不,我只是,你知道,如果你看看数字,嗯,你知道,我有一个,我有一个“举杯者”嗯,我曾经和他一起工作,他在我成为“举杯者”的过程中帮助了我。他说,你知道,好面试官和坏面试官的数字不好。基本上,你知道,每个人都做过这些分析,但他们并没有真正公开结果。但最终,我提到的那个人,他已经退休了。嗯,总之,他说最好的面试官比率高 30%。大概是那个顺序,但是>> 不是什么,但是>> 是的,有一些可衡量的东西在那里,但是他们放过了一些人,他们可能不应该被放过。然后他们可能拒绝了一些人。显然,你必须谈论第一类和第二类错误。然后他们说,最差的面试官比随机机会还要差。>> 好的。所以,如果你只是抛硬币,招,不招,那个人输入会更好。>> 而最差的面试官。好的。是的。嗯,但是,翻硬币不会比最好的好。>> 所以,围绕着这个硬币的抛掷,你刚才谈到了这些边际的嗯,收益等等。所以,就像我们没有,没有人,谷歌或亚马逊或 Meta 或任何公司,没有人真正掌握了面试过程。>> 我明白了。>> 嗯,我不认为,但我很想问你,如果你能挥挥魔杖说,好吧,这就是默认招聘的方式,那会是什么样子?所以,这是我之前被问过的问题,我的答案从来没有真正改变过,但你必须稍微谨慎一点,因为就像我说的,这真的不是我的专长。我认为我总能进行一次面试,从中判断一个人是否真的了解编程。我认为没有办法判断他们是否会富有成效。>> 所以,分成两部分。富有成效的部分,我一无所知,因为它太重要了。你可以通过面试判断一个人过去是否富有成效,但要知道他们是否会在你的公司富有成效,或者他们是否已经停止富有成效,我不知道该怎么做,对吧?嗯,你知道,看看他们做了多少事情。我不知道。那部分似乎几乎不可能。我认为我知道怎么做的是面试过程,这个人真的知道他们在做什么编程。而我喜欢这样做的方式来自于一个已经被提到过的人,那就是克里斯·海克。是他教我怎么做的,他在这方面非常出色。我只是做他做的事情。那就是,这是一个深入的面试。你基本上和这个人谈了一会儿,你显然知道他们的简历,因为你已经收到了。你缩小到一个你选择的东西,这样他们就没有真正的能力去选择它。你缩小到一个他们选择的他们以前工作过的东西,然后你一直深入到实际的实现细节,让他们教你那个东西。我从未见过这个失败,一次都没有。原因是因为如果你真的很棒,你总能做到。如果你不是,你真的做不到,因为你不知道。所以,我认为这是一个非常好的面试过程,用于确定这个人是否理解编程。另一部分就是,我不知道。所以,我不知道它是否可解。所以,我认为这是 30% 的一部分。就像,我认为也许好的面试官能做到这一点,但他们能判断出这个人是否会和你一起工作并完成事情吗?我不知道。是的。所以,我们接受培训的方式,我也培训过其他人,那就是面试中有功能性和非功能性部分。所以,今天的功能性面试部分是一堆编码问题,这些问题与你日常做的事情没有任何关系。这似乎很糟糕。是的,我不喜欢那些。>> 像 LeetCode,你知道,反转链表,你知道,用恒定的空间和线性的时间,或者>> 你知道,翻转二叉树,无论是什么。你每天都不做这些事情。然后有一个系统设计的东西,再次,他们称之为系统设计面试。它丝毫没有模仿系统设计。我们不会和陌生人谈 30 分钟。>> 好的。>> 你知道,设计 Twitter feed,无论是什么,对吧?是的。>> 嗯,这需要更多的努力,你知道细节很重要,你知道,有很多人需要我们协调。它不是,你知道,我只会,这是我的数据库盒子,里面有每一条推文,然后这就是我们将如何创建 feed。所以,这就是我们将如何做的。所以,在功能方面,听起来就像,让我们深入挖掘,看看他们是否能教我一些我不知道的关于一个特定的我不知道的东西。所以,我不,我假装不知道。我的意思是,你不是故意的。你不是想误导他们,但你不会主动提供答案,对吧?你会让他们去做。但是>> 有几个原因。一是,一个人需要在一个舒适的环境中与你讨论技术话题。>> 如果你进去就说,反转链表,就像,好吧。我的意思是,要么他们练习过,那样他们会感到舒适,但这对我没有帮助,因为它只是他们练习过的东西,要么他们从未真正认真考虑过,而他们只是被抓了个措辞不当,你知道,他们只是,“哦,好吧,我想,你知道,我这样做或者别的什么。”如果你专注于某个人做过的事情,那已经是一个舒适的起点。他们应该理解这段代码。如果出于某种原因他们不理解,如果他们不理解他们写过的代码,那对我来说已经是一个很好的信息了,这可能不是我想要的人,对吧?我可以告诉你我 30 年前写的代码,即使我可能记不清确切的细节,但我记得所有这些事情,对吧?>> 是的。>> 嗯,这对于好的编码者来说非常重要。他们应该知道他们是怎么做到的。所以,你试图做的是让他们站在自己的立场上。是的。>> 然后从一个自信的立场出发,你写了代码,你掌控着一切,你做了什么?带我走一遍,然后我会给你一些曲线球。你会说,“哦,如果我们必须在 30 毫秒内完成怎么办?”比如,如果我们不能通过这一点怎么办?看看他们如何回应,因为现在他们在一个地方,他们有一个坚实的基础,他们正在以一种真正会在你的公司里解决问题的方式来解决问题,因为从根本上说,当他们真正工作时,他们不会被要求出现并解决一个他们从未想过过的完全不相关的问题。你知道,对吧?所以,嗯,我发现这很有效。而且我发现你可以很快地判断出某人是否好用。到目前为止,就像我说的,我真的从未见过这是个问题。它只会给你那个。它只会给你那一个知识点。那就是,这个人是,他们是称职的程序员吗?而这就是你得到的唯一东西,以及你如何获得其余的东西。所以,你知道,我可能会后悔。好的。但是>> 跟我随机走一趟,进行一次面试。>> 好的。嗯,因为我没有你的简历,我也不知道,嗯,你能不能告诉我一些你职业生涯中自己写过的代码,你参与过的,而不是你管理的别人写的?>> 好的。嗯,我想最后一个是我在亚马逊票务工作的时候。所以,我们基本上就像一个 Ticketmaster 的克隆。>> 哦,好的。>> 但是我们不在美国运营。我们有计划把它搬到美国,但我们在欧洲运营。>> 好的。>> 是的。>> 所以,订购系统,退款,基本上是后端。对?>> 你在做后端。>> 是的。好的。>> 那是最后一个,那是最后一个我写的代码。>> 是的。>> 所以,告诉我一些关于这个后端的事情,它包含什么?它必须处理像票务这样的事情,它是在提供网络服务,还是在提供,什么基础知识?对?是的,有网络和移动应用程序,但基本上,想法是这样的,有两种类型的售票。有一种,你知道,一场音乐剧的演出可能不会卖完,或者有,你知道,贾斯汀·比伯或泰勒·斯威夫特之类的。有,有非常大的>> 对票务的需求。所以,那些是我们的高流量售票。所以,我们会,我们会宣传,嘿,票务将于,你知道,上午 9 点 BST 或类似时间开始销售。所以,交通量最大的时候会发生在 T0。>> 好的。>> 票务的事情,你知道,对于普通入场,你可能只需要,你知道,你可能只需要做一个计数器。嘿,我有多少 GA 票?>> 但在大多数情况下,你知道,有座位安排。你有 A、B、C、D 座位。>> 而且你不能重复销售。>> 正确。>> 如果我,如果我卖了,而且不像航空业,>> 我不能超额预订。而且,而且当发生这种情况时,你知道,那简直是一场运营噩梦。>> 好的。所以,你在这段代码中做了什么?所以,你,你必须写,比如,这是什么语言?你为那个部分写了多少后端,那个处理这些票务的部分?>> 是的,它是在 Java 中。我们把事情分解成网络服务。所以,按不同的职责划分,所以有一个订购系统。>> 好的。嗯,订购服务显然有不同的组件与之相关,但是订购系统>> 大致告诉我这个 Java 程序是如何构建的,这个处理这些票务的程序。>> 是的,基本上都是通过网络 API>> 好的。>> 嗯,对于这些大型售票,你有这个两阶段购买。所以,如果你曾经买过票。>> 你进去,你提出一个请求,然后有,好吧,这里有我们为你准备的票,你有 15 分钟的时间去结账。好的。>> 所以,你拥有优先购买权。所以,基本上,我们会进行某种搜索,我们称之为“限制”。所以,你会搜索并限制这些票。>> 然后你就基本上锁定了它们。好的。>> 然后后台有一个计时器,如果计时器过期,你就必须购买了,否则它就会回到池子里。>> 所以,当你进行这种搜索和限制之类的操作时。所以,传入的是什么?这是某种 HTTPS。有人在发送,他们正在发布一个,那是什么?它是 REST API 吗?我不知道。它是,基本上是 REST API,但你有一个客户对象的句柄。>> 那是怎么发生的?>> 嗯,在后台,它会拦截请求,然后说,哦,这里有一个客户 ID。然后它会去分派到客户服务,相当于客户服务,然后重新激活那里的客户。所以,当你处理所有这些信息时,你有一个,一个 Java 客户。>> 好的。所以,你看到了我所做的一切,对吧?>> 是的。是的。>> 现在,这是简单版本,因为我不想让这个面试花满一个小时,对吧?>> 我可以更深入,但,是的。>> 困难版本是,我会让你走完整个票务系统的过程。所以,你有多个机器。

而且门票需要锁定,对吧?>> 所以,你可以大致看出这是如何运作的,对吧?就像,是的,有人会知道我将要问的某个随机事情的这么多细节吗?>> 是的。>> 并且能向我解释所有这些吗?也许吧。对。也许他们看了这个之后,他们都会说对了。但是>> 但是实际上,大多数时候你这样做,你立刻就能看出来,比如人们喜欢,如果他们能继续往下走,我能继续走下去,继续追问,追问,追问,你就说,“好吧,这个人显然有足够的胜任能力,可以成为我们正在开发的这个东西的程序员。”除非你对构成程序员有什么疯狂的要求,那样的话我现在就得问关于汇编语言的事情了,除非你有什么疯狂的要求需要我们满足。所以,你可以大致看出,因为如果这个人真的不知道发生了什么,答案就不会是那样出来的。>> 我通过了你的迷你面试。>> 是的。是的。对。你应该,你应该感觉到你做到了。是的。你没有吗?>> 我做了,是的。嗯,你问的没有一个问题是我无法回答的。>> 正是如此。而且你想要,而且,就像我说的,你知道,如果我真的想面试,那会困难得多,因为我想深入到比那更技术性的东西,但实际上就是这样,而且,再次>> 希望在整个过程中,你没有因为我问的某个疯狂的问题而开始恐慌,那个问题是出乎意料的,对吧?但如果我只是说,告诉我关于这件事的事情,比如,你知道,让我们谈谈三段论或者别的什么,那就会发生。就像,好吧,你知道,我的意思是,也许你知道,也许你不知道。我希望你会走向门票方面,因为有一个问题叫做碎片化>> 你会留下无人问津的座位,这些座位是无法出售的,因为没有人想独自去看音乐会>> 所以>> 哦,对了。就像两个人坐在两边。中间有那个东西。是的。>> 所以,嗯,而且人们也想要连续的座位,所以我做了一些研究,结果发现它非常类似于 Maloc。>> 好的。你如何分配内存,分配 RAM 或其他东西,在 C 和其他语言中。结果发现,这并不是一个已解决的问题。这取决于,比如,人们请求内存的次数,以及他们通常会请求的内存大小,是相同的大小,还是非常大的分配和小的分配。所以,就像>> 是的,这是一个碎片化问题,对吧?你正在使座位空间碎片化。所以,总之,这基本上就是它的运作方式。想象一下那个更难的版本,你花了一个小时,对吧?我一直发现它非常可靠。而且显然,在这种特殊情况下,我面试你也有一个问题,那就是我并不做那种系统工作。所以,我不是,如果我做了,我可能也会在脑子里,因为我确定你现在看到了发生了什么,你脑子里会想,我知道一些关于那种系统的事情,我会把它们往我想要看到他们知道的方向引导。我不会有任何关于票务系统的事情,因为我不做那个,所以我只是机会主义地,哦,听起来很有趣,我们去那里吧,它仍然有点奏效,但如果你,而且你总是假定会面试一个类似学科的人,比如你可能是在招聘游戏方面的人,如果你在游戏方面,你不会说,哦,我是一名游戏开发者,我正在和做分布式系统的人交谈,你知道吗?但总之,希望这有道理。>> 不,这非常好。还有面试的第二部分,你将其称为生产力,那就是>> 那是,我只是不知道>> 他们会成功吗?>> 是的。>> 在那个职位上,也有个人因素,对吧?所有那些东西。>> 是的。而亚马逊采取了一种非常具体的方法,我认为其他公司也开始采用,那就是真正专注于行为问题>> 也就是说,告诉我一次你,你知道,不得不应对一个艰难的截止日期。我们问这个问题是因为我们想知道,你知道,他们会如何>> 你知道,他们是否有这样的故事,但最终我们有很多截止日期。>> 明白了。>> 所以,你知道>> 我可以回答这个问题。我吓坏了。吓坏了。嗯,有用得恐慌,也有没用的恐慌。嗯,但我的意思是,在软件方面,你知道,截止日期和软件是相辅相成的。>> 是的。>> 而且,你知道,与投资不同,你知道,我们确实以过去的表现作为未来表现的指标。>> 明白了。>> 那么,我们进入快速提问环节。所以,>> 有什么事情是你希望人们停止谈论的?就是每个人都在谈论它,然后就像,停下来吧,拜托。>> 天哪,我不知道。对不起。我希望我有一个答案。嗯,有些事情我不在乎。比如我真的不在乎人工智能。嗯,但我并不生气人们在谈论它。我的意思是,这是新兴技术,所以,对不起,我没有一个好的答案。我不知道。>> 我,那是一个相当大胆的说法。就像你认为人工智能是,是>> 现在被高估了。>> 我不认为,我不认为它被高估了,我只是不在乎,对吧?嗯,所以这是其中一件事,我就会想,“好吧,是的,你知道,而且我也不必在乎。”就像有这么多的钱和这么多的关注都投入到它上面,我不需要在乎。如果有什么事情要发生,它就会发生。不需要我,对吧?所以我就只是想,“是的,好吧,那正在发生。”所以我只是倾向于不怎么关注它。但我并不介意人们在谈论它。所以,稍微退一步说,显然,人工智能的东西正在发生。如果只是,你知道,我们可以和它聊天,它听起来像个人,那是一回事。但是这些大公司,这些大型前沿模型,已经将目标锁定在编码上,这是他们真正想要优化这些模型的领域,他们正在围绕它构建工具、平台和功能。所以,就像,难道你对它对你日常工作的影响不感到好奇吗?我的意思是,作为一个老人,我不会那样想我的工作前景,因为我的意思是,说实话,我不知道我还有多久的工作前景,与人工智能无关,对吧?所以,就像,那是一个独立的问题。我可以理解为什么一个 20 岁的人会看着说,天哪,我不知道,就像,工作会是什么样子?会有编码工作吗?那会是一件事吗?所以,就这方面而言,我不会想太多,但就,就像,思考它,也许,你是否想看看它是如何工作的,或者用它来做些什么?嗯,不,因为总的来说,我喜欢编程。我真的不希望有人替我做。所以,如果结果是,哦,我们不再付钱给人们编程了,因为计算机正在做编程,你知道,也许经过 n 次迭代,代码生成就足够好了。目前它不够好,据我所说,但你知道,假设它在某个时候足够好了,我就会说,好吧,那么编程就是我的爱好,我不能靠它谋生,或者也许我已经退休了,所以它已经是我的爱好,我不知道,但这就是我的态度。>> 所以,基本上就像,好吧,我不需要工作,所以没关系。>> 是的,但就像我说的,如果我刚进入这个行业,我肯定会考虑,哦,我应该,我应该有一个备用计划吗?我应该,也许,你知道,你知道,我应该去读个法律学位还是别的什么,你知道,我认为有些东西可能具有保护性,比如法律学位,医生,比如有保护性行业的领域,他们不会让 LLM 做事情,对吧?我应该去读个学位吗?因为编程将成为一种爱好。它不会成为一种职业。完全有效的问题,我鼓励每个人都思考,因为我们不知道,对吧?我们不知道这些东西会变得多好。这就是新兴技术的本质。我们无法预测。现在,我认为,嗯,如果它在做一些有趣的事情呢?如果它能想出一个新的算法来帮助计算机图形学呢?或者,如果它能一次性完成 Quake 2 呢?你知道,所以你会说,“嘿,我想要 Quake 2,但里面充满了鸭子,我正在用高压水枪射击它们,或者类似的东西,而且它以那么高的质量完成了。”就像,这会引起你的兴趣吗?>> 不。嗯,我的意思是,任何认识我的人都知道,我不是游戏设计师,对吧?我不需要知道长着鸭子的 Quake 看起来是什么样子。我对 Quake 的兴趣在于纹理映射器是如何工作的,对吧?嗯,我的意思是,我知道纹理映射器是如何工作的。我的兴趣就在那里。所以,我想做的是,我想进入那个代码。我想自己写。我想看看我是否会应用相同的,或者,你知道,就像,如果我现在要做 Quake 2,我会说,“哦,好吧,我要做 SIMD 版本,因为它看起来不会一样。你现在不会使用跨度列表。它不适合。匹配硬件,就像当时一样,例如。所以,你知道,我想做编程。所以,如果它只是作为一个研究助手,做一些我并不真正想做的事情,比如去仔细检查所有这些事情,你知道,好吧。嗯,但只是,是的,我是一个喜欢做事的人。好的,那么与此相对应的是,现在什么被严重低估了,没有人谈论,但每个人都应该谈论?嗯,你知道,五年前,我会说性能,但我认为我们实际上已经赢得了那场战争。就像现在很多人都在谈论性能,所以我对此感觉相当好。所以,我不得不选择一些人们没有谈论的事情。我想,我不知道,如果我必须说一件事,那可能是继续谈论人工智能的话题,然后说,我觉得目前的知识产权,我的意思是,我会称之为盗窃。其他人可能称之为任何他们想称呼的东西,但我认为那不是一个已解决的问题。而且我认为这将产生影响。就像,如果你现在将由 LLM 生成的代码放入你的代码库,而结果是,我们发现所有这些代码都没有获得许可,并且被不当使用。这对那家公司意味着什么?这对你的代码库意味着什么?就像,我感觉人们需要谈论这里的法律问题。而现在,我理解公司为什么这样做,因为他们只是在疯狂地冲刺,他们说,我们稍后会处理诉讼。我知道,我的意思是,我不是确切地知道,因为我不认识这些人,但我知道他们一定开过会,他们只是说,看,我们会以某种方式解决诉讼。我们会去国会。我们会这样做。我们会那样做。我们会支付钱。谁知道呢?他们已经,他们只是,这是我们稍后会处理的事情。我们只是要疯狂地冲刺到终点,因为我们想成为第一个到达那里的人,而法律方面的事情稍后会开始。我认为我们其他人需要稍微谈谈这个问题,因为有些事情会发生,而且会有赢家和输家,我认为这是一个社会需要以比现在更道德的方式进行的对话,那就是,鸵鸟把头埋在沙子里,或者,抱歉,火烈鸟,随便什么鸟,鸵鸟,谢谢,对了,我完全同意,而且我认为它超出了代码的范围,你知道,我制作了数百个 YouTube 视频,而且我确切地知道,是的>> 我生活在某个地方,某个地方在这个巨大的矩阵中,字面意义上的数据矩阵,它已经被训练和预训练过了。>> 人工智能肯定已经将你的脸数字化了很多很多次,并将其训练成了一个权重矩阵。>> 还有我们的新闻通讯,你知道,它们就在那里,我并没有说那是可以的。>> 是的。>> 几年前,当这些 GPT 出来时,我说,“好吧,史蒂夫·温是谁?”他们说,“我不知道他是谁。”然后随着最新的模型,我说,“嘿,谁知道我确切是谁?”嗯,我敢肯定,它里面基本上包含了我的所有写作。而且我并没有让任何人这样做。而且,你知道,还有另一方面,比如人工智能和 LLM 非常有用。它们非常有用,因为它们已经被预先训练和训练了所有这些东西。而我的一部分就是,但我想要好的东西,但我也被偷了。这是公地悲剧。就像,不要偷我的东西,但是,好吧,如果其他人都可以。>> 对我来说很简单,因为我不使用它。所以对我来说没有悲剧。>> 正是如此。所以你只是,它是一条单行道。重点是,社会应该达到一个我们觉得找到了公平解决方案的地方,而一大堆人工智能公司拿走所有的钱并不是一个真正可接受的版本。但这就是现在正在发生的事情,对吧?所以,我认为重要的是,我们需要达到一个人们满意的地方,而不仅仅是一群赚了数十亿美元的人。那不是一个好的结果。而且我认为可能会有非常负面的>> 反弹,会损害计算行业和人工智能,如果他们不小心的话,对吧?因为有很多不切实际的幻想,比如,哦,它只会是乌托邦,然后,从这里到那里还有很长的路,充满了代际冲突和各种非常糟糕的结果,我们应该更认真地对待这个问题,而我们没有。所以,这需要发生,我不知道如何让它发生。我不是正确的政治行动者来让它发生。但这就是我对你问题的回答。>> 是的,这是,这是互联网的开放性,以及所有在那里存在的知识产权,以及这些公司是封闭的,但却从中受益>> 极大地,对吧?是的。>> 而且就像,好吧,你没有开放你的模型。>> nope。>> 你没有告诉我它是如何训练的。>> 我说,嘿,给我写一首听起来像披头士的歌。结果发现它已经被训练过披头士的歌曲。然后它创作了一首非常接近披头士的歌曲。>> 然后把披头士换成,你知道,凯西或史蒂夫,或者,你知道,你写论文时写的论文,你就像,“等等,我一分钱都没拿到,但我把我的血汗泪都投入到你的产品中,你把它重新包装并卖出去。”>> 是的。是的。嗯,我认为另一个问题是,我认为人们没有意识到,而且这是什么导致了,我认为很多人无法表达,但也能感觉到,那就是社会契约是在人与人之间。我认为他们忘记了这一点。>> 是的。>> 我知道当我把我的新闻通讯寄给你时,我没关系,你读了它,并且做了我知道你会做的事情。你也是。你把新闻通讯寄给我,因为你知道我读了它会做什么,而且你对此没意见。这是人与人之间的契约,而人与 LLM 不同。它们不一样,对吧?所以,假装你把东西放在互联网上,你就没意见了,就像,不,我们都有一个特定的稳定状态,我们达到了,因为我们是互相同意的人,我们一起找到了这个稳定状态。你不能只是带着一个掠夺性的 LLM 模型说,“哦,好吧,你同意了。”就像,没有人同意。我们所有的法律都基于上一代人,他们就不同的基本概念达成了一致。创作培训课程的艺术家正在考虑培训其他个人人类艺术家,以及他们可能会如何利用这些培训。他们没有考虑如果 LLM 出现会发生什么。所以,你不能假装他们同意了。他们没有。我认为这是一个非常关键的事情。而且,再次,它触及了你所说的核心。我认为这是很多人感受到的核心。所以,我们需要解决这个问题。是的,>> 确实如此。它对我来说不合适,因为它没有得到解决。>> 是的。而且,你知道,你有一些边缘诉讼,比如《纽约时报》,它们会浮出水面,你知道,将会有一场清算。是的。>> 我的看法,你知道,作为一个微小的内容创作者>> 要么以公平的方式与我分享一些利润,要么允许我说我不想让我的东西被索引。>> 是的。>> 并将其从你的模型中删除。这似乎是一个合理的请求,对吧?我的意思是,说这些话似乎是合理的。>> 是的。>> 然而,即使是这样,也还没有真正发生。>> 所以,非常有趣,我们将拭目以待。然后是最后一个问题,嗯,那就是如果你没有进入科技行业,你会做什么工作?就像,反事实是什么?>> 可能是律师。>> 老实说,我喜欢听最高法院的口头辩论。>> 哦,哇。>> 我喜欢和人争论。我很烦人。这都会奏效,对吧?>> 嗯,所以,我可能,我确实认为,我一直喜欢基于原则和其他事情争论。而今天,我喜欢看法律。我喜欢,听最高法院的事情,阅读判决书等等。所以,我觉得如果不是因为科技,我会做这件事。我不认为它会同样令人满意,因为我真的很喜欢编程。所以,也许音乐会很好,但现实地说,我认为我一直太害怕它有多难,以至于我从来没有真正进入过它。所以,我不认为现实地说,虽然我一直想在音乐领域拥有一个职业生涯。我认为那会很有趣。我认为我永远不会做出那个决定。我,我认为我没有>> 勇气,音乐家是非常勇敢的人,去做这件事。所以,我只是不,我认为我没有,我认为我没有能力说我要去做这件事来谋生。>> 绝对。有些行业就是,如果你是顶尖的 10% 的程序员,你的生活就相当不错。>> 你就搞定了>> 对吧?如果你是顶尖的 10% 的音乐家,那就像,哦,你试图靠它谋生。>> 是的。你必须是顶尖的 1% 或 0.1% 对吧?就像你必须是,你知道,一个非常著名的管弦乐队成员,或者一个摇滚明星之类的,你才能赚到很多钱。而通往那里的道路极其艰难。所以,基本上,你就是,你的才华和顶尖的 10% 的程序员一样,但社会并没有那样补偿你。对吧?我们有点谈到了这一点。我们触及了人工智能的事情,对吧?就像,编程也可能走向那个方向。未来可能如此。我们只是不补偿程序员,因为机器正在完成它,或者别的什么。那可能是事实。我们生活在这个时代,你知道,我认为自己很幸运,因为我可以用我一直想做的事情,一直想做的事情来获得一份不错的薪水。>> 太棒了。嗯,凯西,非常感谢你今天进行这次谈话,我需要你再来一次。我觉得我们只是触及了表面。>> 嗯,非常感谢你。我非常高兴。我非常高兴。随时你想,我会回来的。非常感谢。