📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Should A New Coder Use AI?

Syntax1:02:19

Transcription

欢迎来到 Syntax。今天我们为你准备了一期“百乐门”节目。这是你提问,我们回答的环节。我们收到了很多非常好的问题,包括有人试图攻击我们,我们深入研究了他们编写的代码。他们试图使用 XSS,我们将详细介绍并解释那是什么。关于“人们是否真的同时运行五个代理”以及“那看起来是什么样的”这类问题,都非常棒。你知道,比如“你如何可能审查那么多代码?”嗯,如果你同时运行五个,那么不同类型的分页有哪些?有人问,有基于游标的,有基于页面的,有基于偏移量的,还有无限滚动,而且其中还涉及金钱。呃,新手程序员应该使用 AI 来编程吗?你觉得呢?对吧?比如,如果你刚开始学习编程,如果你有 HTML、CSS、JavaScript,你应该使用 AI 吗,还是不应该?从 PHP 和 jQuery 技能提升。有人想找新工作,但他们的技能有点过时了。在这种情况下,你该怎么办?最后,看起来你们有很多副业项目和类似的东西,Wes 和 Scott。你如何能一边照顾孩子和家庭,一边管理这些?所有这些好东西。所以,这些就是问题。让我们开始第一个问题,这个问题来自 Paige Netheringhouse,她总是提交最好的问题。我刚给她发了私信,因为我说:“Paige,你让工作变得轻松了。”顺便说一句,如果你有一个“百乐门”问题想让我们回答,请访问 syntax.fm FM,在 URL 栏或者菜单里有一个叫做“百乐门”的按钮。点击那个按钮,在框里输入你的问题,我们会为你解答。顺便说一句,有人试图进行跨站脚本攻击我们。嗯,我把它放到了这一期节目里。我们将调试为什么有人会进行跨站脚本攻击我们,但 Paige 说:“嘿 Scott 和 Wes,我想问一下,当你们用 Cloud Code、Cursor 等编写代码时,是否使用多个 AI 代理?我越来越喜欢使用 Cloud Code 来处理日常的功能开发,但我仍然不信任它能自主编写遵循代码库中已建立的约定新代码。使用现有的实用函数,保持代码的 DRY(不要重复自己),等等,等等。TL;DR:在 Claude 做出任何代码更改之前,我都会对其进行审查,并且我会像鹰一样盯着它,以避免在功能完成时进行重构和重写。然而,我看到人们是如何能够启动多个代理,同时处理五个独立的功能。像 Cursor 这样的 AI 公司吹嘘开发者可以有多个不同的 LLM 处理同一个功能,然后选择他们认为最好的实现。是的,Cursor 里有这个功能。你可以设置它来生成,你可以说‘嘿,生成五个,我来选最好的。’对我来说,这似乎是一种为了试图审查所有这些 AI 生成的代码而导致疲劳的配方,上下文切换太多,等等,等等。我是否因为对我的代理要求比其他开发者更高而过于控制了?我想不是。嗯,它还在继续说,你们是否同时使用多个 AI 代理?我为此写了很多东西,因为我觉得这对于我们目前所处的阶段来说是一个非常好的问题。每个人都在谈论你必须同时运行五个代理,如果你不这样做,你就会落后。>> 完全同意。>> 但我发现,而且我很想知道 Scott 的看法,我发现 AI 生成代码最耗时的部分总是在两端。首先是规划需要做什么。所以,无论是代码风格,还是你如何实际解决问题,嗯,无论是实际问题是什么,以及如何与之交互,以及使用什么包,等等,等等。确保你输入的一切都是实际发生的事情,并提供所有上下文,这可能是最耗时的,对吧?嗯,然后第二耗时部分是实际审查它,对吧?比如测试它是否真的有效,它是否在某个地方制造了混乱,它是否只是复制粘贴并复制了大量的样式,并为将来制造了问题。但我确实,我刚才说了,Scott 和我正在处理这个 Syntax 代码库。嗯,我们有一期节目会讲到它,但那是一个代码库,它对页面的制作方式、组件的制作方式、CSS 的制作方式、突变(mutations)的制作方式都有非常明确的定义。因为 Scott 在前期花了很多时间来详细说明它会有多严格,我发现它在不完美的情况下做得非常好。嗯,当然我们犯了一些错误,但>> 我认为,因为它提前记录了所有应该如何工作的东西。它实际上比许多其他“绿地项目”(green field projects)做得更好,那些项目只是有点失控。对吧?所以,同时使用多个代理。你怎么看?我现在还没有同时运行五个代理,因为代码的实际生成不是现在慢的部分,对吧?它只是我提到的两件事。软件开发很大一部分不是写代码。是我在思考“下一步是什么?”所以,我会让一个代理运行,当它在处理那个问题时,我就会转向看,好的,我下一步要处理什么?我应该如何处理某件事?需要做什么?我可以记录一些问题吗?我需要和 Slack 上的某个人谈谈这个问题吗?我发现它在那里真的非常有帮助,我可以就像我通常会实际写代码一样,我可以让那个东西运行,然后去处理下一个问题?因为这个原因,我经常可以同时运行两三个,但它们会相互重叠。很多工作会相互重叠,从而加快速度。哦,是的。你知道吗?这取决于具体是什么。我不太关心的东西,我可以运行更多。项目,无论是个人软件,我不在乎它有多么随意。当然,我可以同时运行很多东西,然后说,“哦,出了点问题。修复它。”之类的。但对于真正的软件,对于我真正关心的东西。不行。不行。而且我对此非常严格。关于你提到的关于 Sinhacks,你知道的,制造混乱之类的,我们之所以会有混乱,即使有 AI,部分原因也是因为项目的范围改变了很多。代码中有既定的模式,嗯,嗯,需要进行很大的调整。而且因为这样,我认为这些本来就是普通开发者也会遇到的错误和问题,AI 也是如此。所以,对我来说,我甚至不会把我们遇到的很多问题归咎于那种类型的事情。你百分之百正确。我前几天发了一条推文,让我读一下推文吧。让我读一下我自己的推文来验证一下,那就是“你们中的一些人,我用‘你们’是反讽的,但‘你们’中的一些人让 AI 为你们做一切,但仍然很懒惰。”这正是我在这件事上所说的,因为前期工作和后期工作极大地影响了中间的工作。如果你计划好了,如果你有强烈的偏好,如果你有明确的安排,嗯,如果你在代码库中已经建立了良好的模式,如果你有正确的上下文预处理,以及所有这些东西,你与 AI 合作的最终结果将会无限好。不仅如此,如果你对要完成的任务有清晰的理解以及如何完成它,结果也会好得多。我们应该专门做一期节目来讨论这个。事实上,我一直在计划一期关于如何有效地使用 AI 工具进行编码的节目。人们在这方面遇到的一些最大问题,比如懒惰,就是认为工具会解决你所有的问题。你只会说,“我要扔一些技能或者一些 MCPs 或者一些 whatever 到这个东西上,它就会完成。”不,你需要有清晰的指示。你需要知道你需要完成什么。如果你不知道如何完成,你需要与 AI 合作来完成前期研究。因为我认为你们中的一些人正在把这些提示当作“制作这个功能,就这样做吧”,然后对最终结果不满意,因为 AI 会很懒惰。它会一遍又一遍地复制实用工具。它会以各种方式编写随意代码。工具可以提供帮助,但它们不会拯救你。前期完成这项工作将是使之成为可能的事情。当我开始使用 Syninhack 平台时,我编写了非常详细的手动规划文档,说明了流程如何工作,游戏如何工作,所有这些。而且,我认为这有助于我们进行的任何 AI 工作来完成事情,因为它有那些信息。>> 是的。>> 所以,这取决于,嗯,我通常不会对一些事情进行很多代理的“ YOLO”(你只活一次)。我不会只是扔一个 bash 循环,然后反复给它一个 AI 的名字来处理某件事。我会每一步都验证这些东西,对于代码,我会做前期工作。我会给它清晰的提示,我会给出非常明确的指示。说到这个,Wes,>> 你知道什么在这方面做得很好吗?Sentry。Sentry 实际上刚刚发布了一个新的 CLI,Sentry CLI,它在这方面做得非常好,因为它能告诉你错误的根本原因,嗯,它使用 SER,他们的 AI Seer 来告诉你错误的根本原因,并直接从 CLI 返回,这与一些 AI 工具配合得很好,因为你可以说,“使用 Sentry CLI,获取所有错误,将它们编目为任务,以及你如何管理任务。我使用一个叫做 dex 的东西,然后使用 sier 的根本原因作为描述,然后你就可以轻松地修复错误。所以 Sentry 在拥有所有这些信息方面做得非常好。但再次>> 重申我的观点,你正在用所有必要的信息来预处理 AI。它有错误,它有根本原因,它有文件,它知道该做什么。它可以去完成。如果你不提前做这项工作,无论是手动还是通过 CLI 还是通过 Sentry 还是其他什么,>> 它都不会那么好。我关于这一点想说的另一件事是,我认为同时运行多个代理的用例更多。它可以是自动的,对吧?比如你可以说,“哦,Sentry 里记录了一个东西,自动尝试建议一个修复。”有时就像检查一个属性是否存在,然后假设它存在一样简单,对吧?但就像很多人,我还没有走这条路,但很多人正在设置多个工作树。所以,比如 Git 中的工作树,如果你签出一个工作树,你基本上就是把代码复制到第二个文件夹。所以你可以在你的电脑上同时运行两个或三个版本的代码库,或者在你运行这些代理的地方。它可能也在云端。如果你正确地设置了你的东西,嗯,使用工作树和你的 npm 脚本了解工作树,那么你就可以同时运行多个。但我还没有走这条路。还有一件事,我知道我们对此谈论了很多,但我认为另一个巨大的用例就是那些你一直想修复但就是没时间去做的错误,因为就像,我不知道,需要一点时间来设置。你需要研究它。而且它可能是一个相对两三行的修复,但只是进入它的开销是你永远不去修复它的原因。这是你只是让一个代理去处理,然后让它去做的非常好的事情。比如我们有什么?比如声音在我们一个音频播放的东西上太大了,嗯,是的,我可以分支出去然后做一个 pull request 之类的,但就像,只是让一个代理去处理它,找出代码库中的位置,然后它只是一个简单的,只是一个东西。把音量调低 20%。搞定。>> 是的,让它去。点击合并按钮。>> 好的。下一个问题来自 Max。我看到很多网站使用分页或无限滚动,但我认为我从来没有在任何地方看到过好的解释。为什么网站使用分页?如何决定一个好的分页大小,以及何时最好一次性显示所有内容?哦,好的。对我来说,我告诉你这个。这绝对是一种感觉。我确定有一个硬性数字,但对我来说,这很大程度上是“吃自己的狗粮”(dog fooding),使用自己的作品,自己的应用程序,看看什么感觉好,什么感觉不好。我认为像无限滚动这样的东西更像是“信息流”(feed),对吧?信息流总是会继续给你下一条内容。它就像一个永无止境的内容之井。你可以继续心不在焉地滚动。大量的数据列表。对我来说,这更适合分页,因为你希望人们能够导航到特定页面。比如 Syntax 现在有将近 1000 集节目。我们不会把所有节目的主列表设置为无限滚动,因为你永远无法说链接到第 19 集,然后找到早期的或那些节目。对我来说,这对于分页是有意义的。然而,你有多少集完全取决于感觉。比如,Syntax 的列表我认为是每行三个卡片,然后因此有多个三个是有意义的,对吧?>> 它在响应式设计中永远行不通。你总是>> 当你降到两个时,你就会有那个奇怪的,那个奇怪的一个东西缺失。>> 嗯,你知道,你只是从三个变成两个。是的。不,你有一些视图,CSS 看起来很糟糕。不,对我个人来说,那就是它,那就是区别。但很多都来自于使用你的东西,知道什么感觉好,什么感觉不好,并预测用户的需求,对吧?我们还应该说,有两种分页,对吧?有偏移量分页,比如你有列表 1 到 10,每页 10 个,你点击第 2 页,然后你看到 11 到 20,对吧?那就是偏移量。偏移量分页不起作用的地方是内容频繁更新。所以你可能,例如,如果你有一个列表,比如推文,而且这些推文每分钟左右更新一次,你可能正在阅读第 1 到 10 页,然后你点击第 2 页,然后第 1 页的第 10 条现在是第 11 条,对吧?>> 因为它被推下去了。在这种情况下,你必须使用一种叫做基于游标的分页,而不是说给我第 50 个,给我从第 50 个开始的 10 个,当你按日期排序时,等等,你只是说给我所有介于这些游标之间的项目。这意味着,这是我看到的最后一个项目的 ID。现在下一页将是那个项目之后的项目。而且,它们通常甚至没有与它们相关的页码。它们只是基于你正在查看的内容,而且如果你想长期收藏某样东西,或者如果你有不断更新的数据,这很有帮助。我最喜欢的分页是无限滚动,但当它们更新 URL 时,因为我发现很多无限滚动,如果你不小心碰到了什么。我前几天和我妻子一起看了 Restoration Hardware 的网站,>> 他们有,我不知道,大概有 80 件不同的物品在他们的边柜类别里,边桌和边柜,我们滚动了大概 10 分钟,我不小心点了一下,就结束了。就这样,我搞砸了,我不得不回去,我花了大概三分钟才滚到最后,它一直在加载更多。他们本应该做的是,每次你加载一个新页面或你经过一个新内容时,你就应该用 pushState 更新 URL,这样如果有人刷新页面,你就会回到你原来的位置。那是 Pinterest 的一个问题。对于你只是说“我不知道,每次刷新它的速度都不同”的发现类事物来说,这是一个小问题。>> 是的。我,我,对我来说,那是一个明确的情况。产品列表是一个明确的情况,我认为你不应该使用无限滚动。这只是我个人的看法。>> 我认为没关系,因为人们可能会滚动到底部,但没有意识到还有更多内容,或者每次有人滚动到底部时,他们心中都会有一个选择,是停止还是继续。但如果总是有更多内容呢?这就是为什么像 TikTok 这样做得很好,对吧?总有更多内容。总有更多可以消费的,而且很难从中抽离出来说“我应该继续吗?”关于分页的另一件事是,这可能现在不是一个大问题,但比如广告。人们过去每页放三个项目,因为每次你翻到下一页都会产生一次页面展示。所以,现在网络上的很多分页只是因为有人在广告销售部门工作,他们不想让他们的页面展示量下降一点点。>> 嗯,广告。是的。哇。>> Kaylin,这是一个非常好的问题。如果你今天学习编程,你会使用像 Cloud Code 这样的 AI 多少?我正在学习编程,已经完成了 Web 开发训练营,JS、CSS 和 HTML。我有一个基础的 Python 水平。我正在犹豫应该使用多少 AI 来帮助我在“分析瘫痪”(paralysis analysis)的情况下进行编程。我应该完全拥抱 AI,并使用 Cloud Code 进行项目开发,还是应该把它放在一边,自己学习?我老实说,我多年来对这个问题的看法改变了很多,对吧?因为有人会说,“不,别碰它。”比如,先学习基础知识,然后“忍受”它,然后你就可以使用了。但现实是,其他人都在使用它,你可能会在很多事情上落后。但如果你只是简单地“砰砰砰”地输入到框里,希望答案能出来,而实际上什么都没学到,也没有真正解决任何问题,你就无法成功,对吧?因为这个行业里有更聪明的人,更有经验的人。他们也能做到,而且他们很聪明,他们能解决问题,对吧?>> 是的。>> 那么,你应该使用它吗?我认为你应该用它来帮助你研究,找到问题,理解功能。我一直都在使用 AI 来“超级充电”我的学习和对我不完全理解的领域的理解。对吧?比如你是一个问题解决者,而这个问题解决者的一部分就是理解代码库,理解可能出现的错误,理解这些部分如何协同工作,而 AI 可以在这方面真正帮助你,对吧?比如,是的,它也可以为你编写代码,但一个巨大的好处是它可以帮助你弄清楚如何解决问题以及如何非常高效地进行研究,而不是被这些晦涩的问题困住。比如,我们过去花了几天时间,我有时会遇到一些让我花费数天时间的错误,而现在它只是“你认为这可能是什么?这些东西如何交互?你认为这可能是什么?在这里添加一些日志记录。”它只是能够更快地做到这些事情。所以,你必须,作为一个进入这个行业的 Web 开发者,你必须弄清楚如何解决问题,如何变得聪明,而这是一个你将要使用的工具。如果你只是把它当作拐杖,就像回到计算器和学习数学一样,你知道吗?比如我的孩子们现在正在学习乘法和除法。是的,当然你可以简单地把这些数字输入计算器。>> 是的。>> 它会吐出来。>> 但你确实需要理解这些东西是如何工作的,以及为什么它会起作用。不是因为有一天你会需要在没有计算器的情况下进行长除法。你口袋里有一个,但因为你脑子里思考和解决问题的方式,那是一项至关重要的生活技能。所以,这就是我的想法。嗯,哦,是的,我还有一些例子,但你先说,Scott。你可以继续。你知道,我百分之百同意你的大脑需要处理概念,你才能知道问题是什么,解决方案是什么,事情的总体流程是什么。而我个人使用 AI 来帮助我发现这些东西,而不是让它为我做事情,就是把那些对我的大脑来说很难理解的东西分解成我可以更好地学习的方式。比如,我真的很喜欢图表。我真的很喜欢项目符号列表。我真的很喜欢代码中的技术解释。我不喜欢大段的文字。嗯,我总是谈论阅读障碍,但当我看到大段的文字时,我就会迷失在其中,什么都记不住。另一个大问题是,很多开发者不擅长用易于理解的方式进行技术写作。他们要么离问题太近,要么太“书呆子”,以至于无法真正理解普通人在学习技术时会怎么想。比如,那些深入研究困难技术问题的人,他们往往会用他们自己能理解的方式来解释事物是如何工作的。因为他们比大多数人聪明得多,所以它不会起作用。所以我真的用 AI 来提炼,而不是说“去 AI 那里问这个”,而是给 AI 一些我难以理解的文档,然后说,“把这个分解成项目符号列表。为我创建图表。创建像 ASCII 图表一样的东西,说明这个东西是如何工作的,什么连接在一起,主要的技??术部分是什么?这些东西是什么,它们如何相互通信?嗯,比如你问 AI 的那种问题,当你给它实际的文档让它从中获取信息时,它不会“幻觉”,你仍然需要验证这些东西。但如果>> 你只是问 AI“这个东西是怎么工作的?”,它通常会告诉你,即使它没有在你面前的信息。但如果你给它硬文档,然后说,“阅读这些文档,并将其提炼成图表,给我项目符号列表,技术解释,等等。”对我来说,这就是我个人的使用方式。这样,我就可以阅读,我就可以消化,我的大脑就可以工作,而不是>> 只是为我解决一个问题,随便什么。因为你确实需要知道这些东西是如何工作的。嗯,今天你仍然需要知道这些东西是如何工作的。在 Synhax 平台上的一个例子,我们刚刚制作的。所以,平台的一部分就是获取一个目标,获取某人编写的代码,然后进行比较,对吧?我们把它们导出为 PNG。嗯,然后你基本上进行差异比较,然后计算分数。嗯,我们在过去遇到过的一个问题是,微小的差异,比如一个阴影比应该的多 10 像素,或者一个颜色稍微偏离。这些东西会让你失败,而且有点不公平,因为你显然做到了,但它就是不够好,对吧?所以,我开始思考,“好吧,我们需要构建一个算法来比较这两样东西。”所以我问,“好吧,有哪些比较事物的方法?”嗯,我们发现有实际的像素差异比较,直接的,这个像素是红色的,另一个也是红色的吗?如果是,你就做到了。如果不是,你就没做到。然后还有结构相似性指数测量。嗯,然后还有对像素进行一点点不同的加权,然后弄清楚,嗯,如果像素是向上或向下的,但就像,我用 AI 研究了这一点,然后我发现,“好吧,这里有几种不同的方法。”所以我说,“好吧,让它去吧,给我每种方法的例子。”我能够相当快地测试它们。然后我们意识到,“好吧,结构相似性在很多情况下都行不通,对吧?有很多小的边缘情况。所以我们把它扔掉了。实际的,直接的像素差异比较不太好。然后实际的加权比较算法,它做得也不好。对吧?所以,但这并不是浪费。这是我做的非常快速的研究,它能够把它构建出来。然后我们做了很多工作,或者我做了很多工作来弄清楚不同的权重,以及如何对不同类型的像素进行加权,以及如果透明度加权少一点点,我们就把它做得相当好,然后我们都进行了测试,然后我们发现了一些主要的缺陷,比如如果你设置了背景图片,它会让你达到 98%。我们说,“是的,或者背景颜色。”我们说,“不,我花了这么多时间来弄清楚一个好的解决方案。”而且,当然,我问了 AI,它只是不断地给我提供那些垃圾解决方案。>> 然后实际的修复只是,就像 Scott、CJ 和我,我们只是谈了大概半个小时。>> 我们说,“我们能提高分数吗?也许弄清楚背景分数是多少。”然后,但是,就像这半个小时的实际问题解决,以及看着它,弄清楚为什么它会引起这个问题,我们有哪些可能的选择。嗯,然后我们终于有了一个想法。我们将在另一期节目中讨论实际的解决方案。但我们想出的实际解决方案,然后我们只是把那个解决方案输入到框里,它就能够实际生成代码,而且它奏效了。它现在运作得非常好。所以,就像>> 我觉得这是对,就像>> 问题解决的一个很好的解释,但仍然使用 AI 来帮助你解决问题,你知道吗?>> 是的。是的。我认为就是这样。你应该“用它来帮助你节省时间,而不是让你替你做事情。”我的意思是,Prime 说得很好,如果你只是让它替你按所有按钮,它就会让你变笨。>> 特别是如果你刚开始的时候,男人。是的,这太疯狂了。我一直回到那条关于人们现在拥有 AI 却仍然懒惰的推文,因为那真的,嗯,有了这些 Cloudbot,男人,人们宁愿把他们的数据通过 Discord 服务器,通过别人的服务器“热土豆”式地传递,而你只需要告诉 AI 编写一个聊天程序,然后用 Tailscale 或其他东西就可以使用了。而人们只是说,“我只想在我的 Discord 里。”那太疯狂了。好吧,但现在你正在发送你的,这些同样的人,他们不明白,>> 他们输入的任何个人数据,或者 API 密钥,或者其他什么,现在不仅仅是发送到 Anthropic 和 OpenAI 的服务器,它们现在会永久保存在 Discord 服务器上,并通过它传输。这只会增加你的攻击向量。这会增加你的不安全。你必须知道这些东西是如何工作的。你必须动脑子,人们。我认为这已经成为一个主要问题,是的,有很多这样的例子。如果你是一个开发者,认为我发现这些东西很难谈论,因为我对它非常看好,但我也认为很多这些人是“错误的”,如果你认为你是一个开发者,而它只会为你做一切,它肯定为你做了更多,而且它肯定影响着就业市场以及 Web 开发中的一切。但如果你认为它会完全为你做所有事情,而你只需要坐享其成,你就会陷入困境。>> 是的。而这正是我对人们在 YouTube 频道上谈论 AI 时留下负面评论感到恼火的事情之一。我们有,我觉得我们有非常审慎的看法。不仅如此,我们还了解所有这些事物是如何运作和连接的,而你要么被那些没有技术理解力的人批评,他们大喊大叫,要么被那些只是看到所有其他骗子和烦人的人,然后把你归入那一类的人批评,仅仅因为你说了“AI”这个词,就像>> 是的,他们说,“哦,它输出糟糕的代码,你就有麻烦了。”>> 是的。>> 是的,但它也非常好。比如,你见过它能做什么吗?它非常好。我不认为你给了它足够的信任。>> 是的。>> 是的。>> 是的。这让我很沮丧。很棒。>> 下一个是非 AI 问题。>> 是的。下一个是非 AI 问题,来自 Will。嘿 Wes 和 Scott,我走了传统路线,获得了计算机科学学位,理论性强的课程,扎实的基础。它绝对给了我一个思考和学习的框架,我并不后悔。但说实话,很多实际的东西都是我自己摸索出来的。是的,完全是这样。考虑到目前的就业市场,我甚至没有申请。我设立了自己的 LLC,并立即开始建立客户群,这意味着立即学习现实世界的开发。例如,在学校里,客户端和服务器端验证被反复灌输给我们,这很好,因为我们总是自己编写。Zod 从未被提及。验证模式(validation schemas)不是一个概念,毕业后我偶然听到有人随意提到它们,不得不停下来谷歌一下它们到底是什么。这个“兔子洞”彻底改变了我构建表单的方式。电子邮件也是如此。我被教导使用 SMTP 来处理联系表单和事务性电子邮件。就这么简单。Basin、Formspree、SendGrid、Postmark。它们从未出现过。更令人惊讶的是,没有人谈论 SPF、DKIM 和 DMARC 的可送达性。>> 我们有一期节目讲了所有这些。可送达性不是一个话题。垃圾邮件文件夹不是一个话题。你只需要发送电子邮件,然后祈祷。现在,我毕业半年了,经营着自己的公司,我一直在想,我还在错过什么?学校没有教我们什么对日常工作真正重要?你知道什么有趣吗,Wes?我曾经是佛罗里达大学 Web 开发课程的董事会成员,我想是的。我应该知道这个。我应该。但那已经是足够久以前的事了,大概 10 年前,我完全忘了。但我以前会去参加这个活动的会议,和我一起的是大约六名其他开发者。我记得当时就在想,他们需要在这个课程上得到很多帮助。他们甚至在那时就在做事情,而且 10 年前事情发展很快,但>> 仍然我记得当时就在想,哇,这个课程与我日常使用的,与大多数人日常使用的东西相比,太落后了。他们教授的技术类型,比如 Web 设计和 Photoshop 之类的,尽管那只是其中的一部分,而且这已经是 Figma、Sketch、Illustrator 存在之后了,我们正在将所有东西矢量化,这已经超出了 Web 的范畴。所以,大学在这些实际的东西上,你遇到的东西上,移动得非常慢。我想说,我在早期职业生涯中学到的很多有用的东西都是从导师、我的老板以及我在不同工作中遇到的各种老板和同事那里学到的。比如,我认为如果我旁边的那个家伙没有尝试早期的 Angular,或者另一个家伙在 React 发布的那一刻就在研究 React,我就不会那么早就掌握 JavaScript 框架。所以,这部分需要通过拥有一个更稳固的人际网络来解决,与他们交流想法,或者关注和倾听那些尝试有趣和不同事物的人。所以,我没有一个好的答案来回答这个问题。我认为你只需要继续积累经验,但不要因为你选择了自己的道路并拥有自己的客户,就可能陷入“真空中”。所以,尽你最大的努力确保你不要陷入那个“真空”。嗯,Wes,你对这个问题有什么答案吗?>> 我确实,我确实做了完全一样的事情。我大学毕业后就开始自由职业,经营自己的公司。当人们说“学校应该教 X、Y 和 Z”时,我总是觉得很恼火。是的,但学校教你理论,如何思考,如何研究,如何处理事情。而他们没有教你 Zod 和所有这些非常具体的细节,那些只是实现细节,而且他们根本不可能把一生的学习内容塞进一个每周三小时的课程里,对吧?比如,我教过很多人,亲身和在我的课程中。很多人给我发邮件说,“嗯,在上了这门课之后,我知道成为一名 Web 开发者所需的一切了。”我说,“不,不,绝对不是。”比如,它会教你,“这是如何将这些部分组合在一起的。这是如何学习的。这是如何调试的。”然后你职业生涯的其余部分将是学习新东西。这些东西每天都在绝对地变化。你正在学习新的方法。而你被教授了客户端和服务器端验证,这很好。现在你可以去弄清楚,好吧,人们实际上在用什么?你必须去构建东西来真正弄清楚这些东西是如何工作的。你必须遇到垃圾邮件问题,然后深入研究 SPF、DKIM 和 DMARC 到底是什么。这就是你作为一名 Web 开发者的工作。所以,我不认为,是的,我认为有时这些大学教的东西很旧,而且很难让课程保持最新,但我认为他们并没有真正对你做太大的伤害,当你喜欢,你作为一名 Web 开发者的工作就是走出去,然后“消耗所有这些东西并学习它们”。所以,是的,在烈火中试炼。有人试图对我们进行 XSS 攻击。我觉得这有点意思。我们会把那个东西放在视频里,但我也会解释一下。当人们提交“百乐门”问题时,你可以输入任何你想输入的内容。有人写了“关闭文本区域,打开脚本标签,fetch,webhook,某个 URL,然后 encode URI component document.cookie。”他们试图做的是,他们希望我们拉入这个用户输入,然后简单地将其设置为 HTML。这曾经是一个更普遍的问题,当时框架还没有为你处理好。这意味着,如果你正在显示用户的一些文本,并将其作为 HTML 输入,如果有人在那个框里输入 HTML,他们可能会在你的浏览器上运行 JavaScript 代码,对吧?而这个家伙试图做的是运行一个脚本标签,当加载时,它会运行一个 fetch 请求,获取整个文档的 cookie,不是服务器端 cookie,只是你可以用 JavaScript 访问的客户端 cookie。嗯,然后将它们发送到这个随机网站,这个网站似乎已经被关闭了。可能是一个机器人。但这有点意思。如果我们曾经构建过东西,比如我们在 React 中做过,我们有一个叫做 dangerouslySetInnerHTML 的东西。它之所以被称为 dangerouslySetInnerHTML,就是因为如果你将这个评论作为 HTML 而不是简单地将其转储到 React 组件中,它就会执行 JavaScript 并运行那个 fetch,你就完蛋了。所以,这有点意思。你不会经常看到 XSS,因为像所有框架都让自我 XSS 变得非常困难。但它仍然是可行的,特别是对于许多这些 AI 代理,它们返回 Markdown。如果你没有正确地清理那个 Markdown,它可能包含一个脚本标签,然后当它被转换成 HTML 时就会执行。>> 是的。好的。下一个问题来自 toxik nilot,据说是 Scott Tolinsky 的反写。Syntax 的历史问题。当你刚开始播客时,你的潜在联合主持人名单上有谁,你考虑过增加第三位主持人吗?我想说的是,当我独立构思出 Syntax 的所有想法和概念,包括标志等所有东西时,那并没有发生。嗯,我想 Wes 是名单上的最后一个人,直到其他人都说“不”我才考虑他。播客在任何形式上都不存在,除了 Wes 和我,嗯,我们有很好的感觉,有很好的融洽关系,并且是播客的粉丝,并且对播客有强烈的看法。如果不是 Wes,我就不会做。嗯,我甚至没考虑过。是的。>> 是的。字面上没有其他人。而且我认为这在行业中是更常见的。是的,有时人们有想法,然后他们去寻找人。但很多伟大的公司,很多伟大的项目,它们只是源于两个人聊天,然后意识到,“啊,我们想法一样。我们会合作得很好。嗯,我们应该做点什么。”所以,我认为这有点意思。>> 它是自然产生的,这让它变得更好。媒体艺术中所有最好的东西都是自然产生的。你知道吗?我永远无法理解,在音乐中,当有人说他们是“行业内定”(industry plant)然后成功了,比如 Drake,对吧?人们如何>> 令人讨厌。人们如何陷入其中,然后说,“哦,是的,这个行业内定,对我来说就是艺术。”就像这个人>> 可悲的是,大多数人是>> Spotify 上的 AI 音乐让我抓狂,而且它很受欢迎。>> 所有最好的乐队都是人们有机地找到彼此然后合作的。所以,我不是说这个播客是艺术,尽管我是。我只是认为它对我个人来说是这样运作的。>> 是的。对我来说也是,我不想说我能够虚伪地做这样的事情,比如成为一个“行业内定”或者像你在 TikTok 上看到的那样,人们能够简单地伪装成某种东西并使其奏效。一个非常有趣的事情是 Finn Mckenty。他有一个 YouTube 频道叫做 Punk Rock MBA,他有,我不知道,将近五十万订阅者,几百个关于朋克和硬核历史的视频。然后有一天他干脆停下来,说,“我其实并不真的喜欢那种音乐,但我就是对它了如指掌,做了惊人的研究。”我不知道这是不是真的,但有一部分我认识他,我有点觉得是真的,他发现了这个行业,进入朋克硬核场景>> 然后成为一个绝对的,不一定是骗子,但就像“我这样做是因为我意识到这是一个细分市场,我将在这个细分市场中取得巨大成功。”嗯,他做到了,然后他停了下来,他说“我要做别的事情了。”比如,我在那里做得很好。我不知道我是否能做到。>> 不,那不适合我。是的,感觉必须到位。是的。>> 是的。Christian 说,“嘿,伙计们,我在一家小型软件公司做前端开发已经五年了。我想去一家大公司。我发现这很困难,考虑到我的背景。我对于初级职位来说是过度合格的,但由于技术栈 PHP 和 jQuery,我无法完全满足大公司对中级职位的期望。你们会建议如何处理这种情况?我觉得我们在这个播客上已经谈过 7000 次了,那就是你是一个问题解决者,而你的工具已经过时了。好吧?显然,人们仍然使用 PHP,但 PHP 和 jQuery 的技术栈现在已经非常老了,对吧?比如,我们已经有很多年了,比如 React 已经有 12 到 15 年了。你的技术栈已经过时了,你需要快速地学习现代技术栈,因为那是一个,你可能错过了两到三波浪潮,你知道吗?

错过了 GraphQL。嗯,还有什么?你还错过了什么?你知道,我们现在已经本地优先了。所以,我可能会让你必须去构建一个副业项目。你必须扩展。你必须在这些事情上变得更好。你必须构建一些东西。如果你不能在工作中做到,你就必须去构建几个小的副业项目,这样你就可以扩展并理解这些东西是如何工作的,对吧?比如,我可能会在关键词填充方面做得很好,因为就像这样,不要选择,我很好奇 Scott 的想法,但是如果你要构建一个副业项目,你必须瞄准雇主想要什么,而不是仅仅是你个人想使用的东西。我认为今天那可能是 React、Drizzle 或 Prisma,使用 vanilla。>> Drizzle >> 和 Tailwind。>> 是的。你看,但问题是,即使你不喜欢 Prisma,它现在也被许多大型公司绝对地使用着,而且这是一个非常有价值的技能。Zod 非常受欢迎。然后,你必须扩展使用 AI API。所以,将这些 AI LLM 集成到产品中,以及使用 LLM AI 编码工具来构建你的东西。我认为如果你能掌握所有这些,你可能就准备好申请这些中级职位了。>> 是的,我我是我在这方面最糟糕的人,因为>> 我正要说一些晦涩难懂的未发布库,只有八个下载量。>> 是的。是的,这太有趣了。我刚才和 Courtney 谈论过这个,我谈论了 Clawbot 的东西,现在是 Open Claw,她当时说,“也许这次你过早地投入某件事会派上用场,因为>> 它确实如此。”>> 是的,确实如此。是的,当然。是的,非常有趣。就像那是我的一个问题。我我我同意你在这里的任何观点,Wes,因为否则我认为我没有一个好的观点。我也喜欢前沿的东西,但是如果你想养家糊口并找到一份工作,你必须看看,就像那句老话一样,没有人会因为推荐 IBM 而被解雇。>> 是的。>> 而且你必须了解那些不像我们那样快速变化的大公司有什么问题。我的问题是,一位教授曾将我描述为过于乐观,我总是对事情过于乐观,比如哦,当然这项技术会起飞。哦,当然这是……我坚信这一点,这让我对实际选择变得极其盲目。所以,我不是最务实的人。这绝对是真的。下一个问题来自 John Love。我一直在关注你们,听说你们都有孩子、工作和很多副业项目。我处于类似的情况,但我不知道如何腾出时间真正深入研究一个副业项目或学习如何设置硬件等。你们是如何在家庭、工作和课外活动之间平衡时间的?>> 我认为对我们俩来说最大的事情是,我们工作的一个重要部分是探索、学习和教学,而没有深入研究副业项目,你就做不到。>> 所以,虽然我维护着代码库,并且我正在长期处理事情和管理语法团队之类的事情,但这确实需要时间,但我想说,显然还在录制播客,我想说我仍然有 50% 的时间花在探索和深入研究主题以及作为我实际工作的一部分来处理副业项目上。所以,除此之外的事情,现在往往是深入研究我能用我的套件做什么。比如我的 3D 打印的东西从一开始就完全是和我的孩子们一起做的项目。>> 甚至到了我们两个孩子都能加载和卸载 3D 打印机。他们可以做到。他们可以选择他们想打印的东西。他们可以在上面探索想法,诸如此类的事情。>> 编码副业项目往往是我真正投入的、与工作无关的事情,它们让我的日常生活流程变得更好。比如,我刚建的一个东西对我妻子和我来说会非常有用,我们今年要去参加一个大型旅行,以庆祝我们的 40 岁生日。我想,你知道什么会很酷吗?一个旅行中心,旅行的每一天都有行程。它会在地图上显示所有地点,然后如果你选择一天,它就会有你那天要做的所有事情的地址和电话号码。它会内置预算,这样你就可以看到整个旅行要花多少钱。我可以使用 AI 来估算晚餐等费用。比如指向餐馆,然后说,“嘿,为我估算一下这些餐馆的晚餐费用。”就像那是我的妻子可以接受的一个应用程序,因为它正在处理我擅长的事情,也就是计划,并增强它们,这样我就可以帮助她更好地计划,因此是我的时间的一个有用的利用。这不仅仅是我在工作之外浪费时间。>> 是的。人们总是问我这个问题,我想说我生活中最大的挫败感就是时间不够,做所有我想做的事情。可能每个人都有。>> 但我不知道,我有一些建议是>> 我喜欢开始一个想法,深入研究,掌握它,然后完成它,对吧?>> 我一次不会做一万件事。我只是,我想学这个。我深入研究。我弄清楚了。我继续前进,然后我继续做下一件事,对吧?我已经这样做了,电子产品、小型发动机、3D 打印、房屋翻新、烹饪,等等。然后我觉得我有一个很好的,我仍然做很多 3D 打印,但我不是,我不是花几个小时学习 3D 建模软件。比如,我现在知道如何使用它,而且我做得相当好,而且当我需要做一些需要使用它的事情时,我就可以开始做了。另一件事是,我很大程度上是基于尝试新事物和涉足不同事物的兴奋感。你会偶然发现一些令人兴奋的东西,一旦你找到了它,你就会找到时间,对吧?>> 这和生活中任何事情都一样,你知道,比如锻炼或任何事情,就像一旦你喜欢它,就像有什么东西在你脑海中咔嚓一声,就像是的,这太棒了。>> 你会找到时间做这些事情,对吧?>> 比如,我每天在手机上有四个小时的屏幕时间,我整天坐在电脑前,对吧?可能有一两个小时我可以挤出来,对吧?下一个技巧是异步学习。比如听播客、YouTube 视频,比如有很多空闲时间你可以进行异步学习,无论你是在开车还是只是在杂货店排队。我只是会打开一篇文章,然后开始翻阅它,你知道,因为>> 我可以打断一下,说一下我昨天做的一件我不太自豪的事情吗?在 Target 的药房排了很长的队,比如 15 个人,自从我设置了我的 tailscale 网络以来,我一直在运行 open code serve。我在药房排队时一直在编码,而不是在那里闲逛。我当时正在提示 AI 代理来处理一些愚蠢的事情,我当时就在想,我现在关不掉。我为什么现在关不掉?我认为这是一个问题。>> 哦,太疯狂了。我的最后一个技巧是,就是把很多你不喜欢的东西都去掉。比如,我似乎喜欢很多东西,但是,我不知道,我对电影一无所知。我对流行文化一无所知。我对曲棍球或任何体育运动一无所知。>> 昨天有人告诉我奥运会正在举行。我完全不知道今年有奥运会。这些都不是坏事。比如,我不是说不要看曲棍球,因为比如,你想怎么过就怎么过你的生活。>> 对很多人来说,这些都是非常令人愉快的。只是对我来说不是。>> 嗯,我有不同的奇怪兴趣,我可以谈论,而不是像曲棍球运动员和电影。>> 看,我需要这些东西。否则,我的大脑就会>> 确切地。是的。而且你知道对你来说是什么,你知道。>> 完全同意。是的。是的。这是我需要从我的头脑中走出来的时刻。>> 如果我度过了漫长而紧张的一天,我的首选不是看电视。>> 或者看一些像很多人说的“哦,我喜欢看《单身汉》或这些脑残的电视节目,因为它只是关闭我大脑的一种方式。”>> 如果我感到压力很大,我妻子说,“你想一起看一集节目还是别的什么?”我说,我有点想写一篇文章,或者看一个关于 3D 打印的 YouTube 视频之类的。>> 就像对我来说是这样,而且我知道我自己。>> 我们目前正在 Netflix 上观看《单身之恋》,这是一档韩国约会节目,所以,我每年都喜欢《单身之恋》,因为它非常不同。比如,如果你把,我总是想到,如果你把一个美国人放在这个节目里,那就会像一场爆炸,因为约会文化如此截然不同。这很有趣。但我喜欢那种垃圾电视。那就是我。Jason Bourne 说,“我一直在玩 Transformers.js。这是一个 JavaScript 库,它允许你从 HuggingFace 加载 LLM 模型。它是由 HuggingFace 构建的。>> 而且你可以在 JavaScript 中运行它们,无论是在浏览器中还是在 Node.js 中。我正在开发一个个人开发网站。我的想法是使用一个小的浏览器模型,输入我的简历和 LinkedIn 数据,然后构建一个类似 ChatGPT 的 rag 搜索,可以回答关于我的工作经历的问题,主要是以一种有趣的方式来学习 rag 和 LLM,以及对招聘人员和潜在客户真正有用的东西。>> 我有一个非常粗糙的工作版本。>> 我已经将我的简历数据嵌入到 JSON 中,并将相关部分从控制台日志传递给模型。它似乎检索到了正确的上下文,但响应却变成了我不知道,或者说没有上下文。>> 我无法判断这是提示问题,还是小型模型的限制,或者我需要一个具有更好推理能力的大型模型。>> 所以,这有点有趣。>> 所以,rag,它的意思是,你拿一些东西,比如我们使用,我们不实际上在语法网站上使用 rag,但我用它来处理语法记录,你拿一些东西,比如所谓的“话语”,比如某人说的两三句话,然后你可以对其进行向量化,将其存储在向量数据库中,而那个向量只是你所说的数字的表示。>> 然后它被映射在数千个不同的维度中,你可以使用向量搜索来查找与该内容相似的内容,对吧?>> 所以,我可以搜索“react 陷阱”,然后它会显示所有我们谈论过与此类似的内容的发言,而无需实际说出“react 陷阱”这个词。>> 所以,他在这里所做的就是,他已经将他的整个 LinkedIn 和求职信等内容向量化了。>> 然后,在你运行 LLM 聊天之前,你进行一次基于用户所问内容的向量搜索,然后你将这些检索到的内容。>> 这被称为检索增强生成。你将找到的内容放入提示中,然后你问问题,给定这些数据,它就会给你一个答案。>> 所以,他遇到的问题是,是的,它获取了正确的上下文,但它没有做到。>> 所以,你的 rag 可能没有捕捉到正确的部分。>> 所以,当我处理记录中的话语时,有时它会找到我想要的话语,但它缺少来自之前或之后的内容。>> 所以,我修改了它,所以,是的,你可以得到一句话,但也许可以提取它之前的两句话和它之后的两句话,然后将其作为上下文。>> 如果你百分之百确定你获得了所有正确的上下文,那么,是的,模型可能不够好。>> 我不认为 transformers.js JS 在本地模型中对于简单的直接聊天非常好。>> transformers.js JS 在小型本地模型中更有意义的是那些做非常具体事情的模型。>> 深度检测、面部分割、对象检测、毒性检测、文本到语音、>> 翻译,那些经过精确调整和训练以做好一件事的模型,而不是>> 我发现它不如那些巨大的 LLM,你可以给它文本,它就会返回给你。>> 所以,是的,找一个更大的模型。>> 找一个更大的模型。是的。好的。>> 最后一个是渴望过去。>> 问题是,为什么 Chad Whitaker 的视频会出现在 Syntax YouTube 频道上?他的视频与频道上的其他内容格格不入。我很高兴在我的信息流中看到另一个 Syntax 视频,结果却很失望,因为它不是 Wes、Scott 或 CJ。他们是我想要看到和听到的人。>> 嗯,谢谢你这么说。我实际上会谈论 Chad 的事情,因为 Chad 是一个非常有才华的开发者。他拥有开源方面的悠久历史和知识,并且在 Sentry 负责所有的开源资助工作。>> 现在,Chad 有机会在 Syntax 上分享一些他的知识。>> 所以,我我我首先要说的是,当有机会让 Chad 分享他的知识时,>> 他为我们制作了一个小小的试点,我说,“哦,这太棒了。这与我们在节目或频道上的内容有所不同。它涵盖了我们三个人不如 Chad 深入的内容。>> 在这个过程中,我认为我们都学到了,尽管我认为 Chad 的内容很棒,而且我认为它被低估了,但它不一定是一个好的选择。>> 我认为,如果你在那里,你应该去听并订阅。>> 嗯,因此,Chad 将继续他的内容,但他在自己的频道上这样做,我们将在节目说明中提供链接。>> 所以,我认为我们收到了反馈,但我也认为,你说是的,可能不是一个好的选择,因为它太不同了。>> 我会直接说,那是我的选择。>> 我认为我以为这会是一个很好的对比,但最终我认为,对他来说,以一种>> 是的。而且由于这个挑剔的算法,他在自己的频道上做得更好。>> 是的,完全同意。>> 所以,我们会链接起来。>> 如果你对 Chad 的东西感兴趣,如果你对开源话题感兴趣,比如 Chad 去乌克兰采访了 Drizzle 的人,比如他在自己的频道上做了一些很棒的事情。>> 所以,关注那个频道。>> 他将在那里继续这样做,但如果你因为任何原因不喜欢那些内容,你将不会在正常的 Syntax 信息流中看到它们。>> 好的。>> 病态的推荐。>> 我要病态推荐。>> 我觉得我在这档节目中已经说过几次了,但我不知道我是否真的把它作为病态推荐。>> 我的终端屏幕。>> 你可以看到它告诉我下一个企鹅曲棍球比赛是什么时候。他们将在 2 月 3 日对阵岛民队。>> 这只是这个小东西的众多屏幕之一。>> 它是一个简单的电子墨水屏,带有一个电池和一个 USB 充电口。>> 一个开关按钮。>> 你可以非常轻松地为这个东西编写自己的软件。>> 我非常非常喜欢这个设备。>> 这是我放在桌子上的少数几样东西之一。>> 是的,它现在显示着企鹅队的比赛,但每 15 分钟就会换成不同的屏幕,无论是距离年底还有多少天,还是我的日历,还是下周的天气,还是各种各样的东西。>> 而且你可以非常轻松地为你想要的任何东西编写自己的代码。>> GitHub 贡献。>> 我有 YouTube 订阅者之类的。>> 所以,看看它。>> TR RML。>> 我认为这就像,如果我为我们的礼物节目准备了这个,我会说这是一个完美的节日礼物,但我自己要求圣诞节收到这个。>> 所以,>> 非常棒的东西。>> 病态。>> 是的,我真的很想要一个电子墨水显示屏。>> 看起来太酷了。>> 有人问了一个关于不同电子墨水显示屏的锅的问题。>> 所以,也许我也会看看。>> 顺便说一句,电子产品,我要病态推荐我的焊锡枪。>> 所以,哦,过去我我有一个那种 USB C 的焊锡笔,它效果很好,但我发现我并不总是有合适的线缆,因为它需要是那种>> 比如支持 PD 的线缆。>> 然后我也发现我必须找到移动电源,>> 然后有时它在我的背包里,或者别的什么。>> 我发现我使用它的次数不多,因为我必须到处找我想要的东西。>> 所以,我也有这个,很多年了。>> 这是 Ryobi 的焊锡枪,我一直用它。>> 它很快就热起来了,而且它就是能用。>> 我有大量的 Ryobi 电池。>> 你可以随便插一个。>> 它总是在我的工作室里。>> 它有一个漂亮的,它有一个支架,你知道。>> 所以,如果你要买焊锡枪,不要买。>> 插电的那种很好,但是,我讨厌找插头,因为>> 是的,同感。>> 你永远不能,你必须在插头旁边焊接,或者找一个延长线。>> 这些电池供电的绝对是完美的。>> 电池能用,我不知道有多少小时的焊接时间。>> 它会自动关机。>> 它只是一个很棒的小东西。>> 所以,无论你做什么,你不必买 Ryobi 的,或者你可以买 DeWalt 的,或者任何版本的。>> 但我一直对这个套件非常满意,作为一个焊锡枪。>> 我在焊接方面一直很糟糕。>> 我觉得这是我一直想磨练的一项技能。>> 我看过 YouTube 视频。>> 我练习过。>> 我都试过了。>> 我焊接技术太差了。>> 我确实有一个那样的。>> 是的。>> 不是那个特别的,但我确实有一个送纸器。>> 是的。>> 是的。>> 你用那个小的 USBC 的吗?>> 是的。>> 它很快就热起来了。>> 它很好。>> 它有一个漂亮的尖端。>> 是的。>> 是的。>> 这很难。>> 这确实是一件很难学习的事情。>> 我的并不完美,但我觉得,我不知道,十年后,我做得相当不错了。>> 是的,我从第一天起就一直很糟糕,而且仍然是。>> 是的。>> 太棒了。好的。嗯,非常感谢你的收听。>> 我们稍后会再见。>> 和平。