下面呢,我们先来到第一个简单主题, af 主编程。它大致历史是什么样子的?为什么突然咱们今天开始讲这个,而一年前、两年前不讲这个啊?那它的第一阶段实际上叫做代码不全。代码不全什么概念呢?就是我作为一个程序员,我知道要干什么,那么我写个函数名,你帮我把函数题写出来,我写了一行注示,说我打算干这个事情一回车,那你把底下的代码给写出来啊, 那这样做来做去呢?其实它带来一个很大的问题就在于,首先我还是需要会编程的,对吧?我得架好环境,装好东西,装好加法,装好什么东西的,然后我还要会写第一句,然后你才需要写。所以实际上本章讲,咱们像普通的测试人员、运维人员、产品经理都不会深度借助这里边去的。但是在这个阶段呢,我其实就已经这个开始用了,我们当时用 github 靠拍了也是收费版本, 然后也给他们交了钱,但交了钱之后发现这种写法其实很慢,因为大部分时间都是我们在思考,那我们去写前面东西的时候,还要把它想清楚,否则他下边写不好啊,所以这段时间其实用的很少。那第二个阶段呢?大约是在去年的时候出现了一种 word 抠点,他呢叫做情绪编程,或者叫做氛围编程。这个东西我觉得也不太好翻译,大家就直接用 word 抠点去, 他的目的什么呢?他说啊,我们直接利用自然语言描述,然后直接让他写出代码来,不就可以了吗?那 ai 为什么突然可以干这件事啊?是因为出现了智能体这样东西啊, 龙体的一个核心特点就是他通过你给出的一个最终的目标来自己决策,中间到底要分几步,哎,我是要去找他的旧代码吗?还是要到网上查这个技术怎么用呢?还是什么东西呢?然后再把这一切一点点的全部给用起来,大致就是这样的, 如果我音量稍微加大一点啊,那这样的一套思路的话呢,就变成了一种样子。但是再往后的话呢,人们又开始思考一个事情,那就是我到底该用什么标准方式和他说吗?当然你用任何方式和他说,早晚也能把软件开发出来,但是是否存在这么一种形式, 这种形式和它的交互次数啊,出错的概率啊,什么什么的都是最有劲的,这样的话我们又省钱又省时间,那这样的一个东西好不好呢?哎,好,这个东西呢,叫做 spike, 滴滴,就是你可以叫做软件需求规范的驱动的开发这样一样东西啊。那到了第三阶段呢,人们就开始思考这个,这个其实也是我思考的一个重点,因为我在之前的时候呢,正在做人工智能的需求分析这个课题,这个课题其实从零九年我们就对它的标准进行了一些研发,那个时候还没想过是人工智能的标准啊, 只是说人类写需求应该这样写。但是到了一七一八年呢,我意识到它的结构相对完整,而且是一个非常严谨的这么个框架,就这个,那因此的话呢,它实际上在人工智能出现之后也可以,当时我预见到二十年之后,我也没想过它会来这么快,二十年之后这东西可能会变成一个好东西,那没想到呢? 大概在二二年,二三年左右,哎,人工智能就出现了,所以那个时候我就转向了这个人工智能编码,然后把这个事情整个的都连在一起了。
粉丝9660获赞3.5万

当你有了一个 nas 和一个 ai 之后,啊,浏览 nas 就 变了一种新的方式。比如我在这个文件夹里存的是我下载的一部三体有声小说,我平常用电脑的时候就喜欢听着这个小说,那如果我要是打开这个文件夹,找到某一集啊,点开 总是不那么优雅,也不方便,于是我就想自己做一个在线的播放器。我计划是这样的,首先它是一个 web 播放器,在线播放音频。第二, 音频来源就是我那个有声小说的文件夹。第三,播放列表按照第一级、第二级、第三级这样顺序播放。第四,增加一个断点续播的功能,用一个文件记录 正在播放的是哪一级的哪一个时间点,下次打开播放器的时候,可以在断点的地方继续播放。然后我就把这总结的这几点发给 ai, 特意强调,我们要先做计划,先不要写代码,这样我们就能大概知道他是怎么理解的我们的需求。 重点是先不要写代码,这是外部拷定的第一原则,先规划再动手。你要确认 ai 是 否正确理解了你的需求。你看啊, ai 首先让我们选择技术站,如果你不理解没有关系,这不有推荐吗?但是你不理解的地方, 你最好还是向 ai 问个明白,因为 ai 的 推荐是根据你提的需求内容来推荐的,你自己不确定完不完善需求的情况下,那么它的推荐自然也不一定非常的准确。我们先阅读一下 ai 制定的计划, 做这种简单的需求, ai 给的规划还是比较完美的,如果你不需要的计划或者功能,也可以直接让他删除,如果哪里要修改,就直接让 ai 修改,直到修改完美再去执行。开发 这里他需要让我来确定方案的几个选择的方向,我按照自己的需求选好之后就直接发给他了,确定好之后就直接开始开发,开发的进度快慢和你的需求复杂度直接相关,中途他也有可能再次跟你对话沟通细节。 我那些需求总共花了十分钟,中间零次中断,也就是一次性出来成品,看一下完成度吧。基本的播放功能是没有问题的,播放列表也是按顺序来的,但是这个记忆播放进度是有问题的。那我们改这个 bug 的 时候,你不能跟 ai 说你这个记忆播放进度的功能有问题,解决一下这个问题。 你这样说了,大概率这个 bug 还是会继续存在的。那 ai 他 要是知道自己犯的这个错,他就不会犯错了, 之所以犯错就是因为注意力没有在这个逻辑上面。所以我们指挥 ai 改 bug, 就 要尽可能详细的描述出他所出现的错误,只要你总结的信息足够多,给他描述的错误足够详细,他改的就会越顺利。现在重新启动起来,看一下改的怎么样,听一下这个第五集, 然后刷新一下页面,哎,这不就正常了吗?那举一反三哈。 其他的譬如你在 nas 上存的照片、视频等,都可以根据你的想象搭建一个浏览页来浏览远程存储的文件啊。你也可以根据你的使用习惯搭建一个文件管理器来管理,只要你能创造出需求,就可以让 ai 来帮你实现。

在 ai 辅助编程中,每次执行命令都会消耗宝贵的 token 配额。 r t k rest token killer 高性能 c l i。 代理能将 token 消耗降低百分之六十至百分之九十。 r t k。 已单个 rest 二禁制文件发布,零外部依赖,开箱即用,支持超过一百种常用命令,加载延迟低于十毫秒。 工作原理很简单, r t k。 拦截 c l i。 命令输出,过滤掉无关信息,压缩结果后再发送给 l l m。 比如 git status 从三千 token 压缩到三百 token ls 命令节省百分之八十 token 项目已获得四万四千六百一十一颗星标,深受开发者社区欢迎。支持 homebrew 安装持续集成安全检查,通过 mit 许可证,开源 安装方式多样, homebrew npm 或直接下载二禁制文件,访问 r tki app 或 github 页面即可开始使用。 github 项目采用现代化 c i c d。 流程,持续更新维护,加入 discord 社区,获取技术支持与最新动态, 立即体验 r t k。 让您的 ai 编程更经济高效。访问 github 点 com 斜杠 r t k 横杠 ai 斜杠 r t k。 给项目一个新标,支持开源发展。

你以为系统编程只能靠 c c 加加? rust 用内存安全和高性能重新定义了系统开发的可能性。 rust 是 由 mozilla 基金会主导开发的静态强类型编异型语言, 核心设计目标是同时兼顾高性能内存安全与高并发能力。过往的系统级开发语言 c c 加加性能极强,但容易出现野指真内存泄露等安全问题。 而带垃圾回收的语言安全系数高,却存在较大的运行时开销,并不适合底层开发。 rust 相当于自带智能安全辅助的高性能跑车,既保留了接近 c c 加加的运行速度,又从语法层面杜绝了绝大多数内存安全漏洞。 这里要注意,不要把 rost 等同于带语法检查的 c 加加,二者的底层设计逻辑完全不同。要实现这样的设计目标,核心在于 vast 独有的内存安全机制,它实现内存安全既不需要依赖垃圾回收,也不需要开发者手动申请释放。内存 核心靠使用权、借用生、居住期三套规则所有检查都在编一阶段完成。这就好比房屋租赁的规则,房子的使用权属于房东,租客只拥有约定租期内的使用权, 到期必须归还,不会出现多人同时占有同一套房屋引发的产权冲突。这些检查不会产生任何运行时额外开销,运行速度和 c c 加加处于同一水平。不要误以为内存安全一定会牺牲运行性能,其中所有全是 rust。 最核心的设计 有三个不可打破的基础规则,第一,每个值在同一时间有且只有一个所有者。第二,所有者离开变量作用时,对应的值会被自动回收。第三,值可以在不同变量之间移动,也可以临时借出使用权。我们可以用买奶茶的场景来类比, 你买了一杯奶茶,你是唯一的索用者,你喝完扔了奶茶就被销毁。你可以直接把奶茶递给朋友,也就是使用权。移动也可以让朋友尝一口,也就是临时借用。这里要注意,不要把 rest 负值和其他语言的负值混淆。 rest 负值默认是所有权移动,不是深拷贝,不会重复占用内存。 在保障内存安全的基础上, rest 还支持非常灵活的高级抽象能力,也就是我们常说的零成本抽象特性。 它支持范型特征、模式匹配等高级抽象语法。所有这些抽象层都不会带来运行时的额外性能损耗。 这就像你在餐厅点定制套餐,不管你是选固定搭配还是自定义配菜,厨师都是按最终的需求直接做好出品,不会因为你选了自定义搭配就额外收服务费或者出餐速度变慢。 和很多待运行时的高级语言不同, rust 的 抽象都会在翻译阶段直接展开为对应底层代码,不要觉得用了高级语法就一定会拖慢运行速度。 除了常规场景下的内存安全, rust 在 病发场景下的安全保障也十分突出,它从语法层面保证了病发场景下的内存安全,编一期就能检查出数据竞争问题。核心规则是,同一时间要么只能有一个可变引用,要么可以有多个不可变引用,读写操作不能同时存在。 这就像公共自习室的使用规则,要么大家都安静看书,也就是只读,要么只有一个人上台发言,也就是可写,不会出现几个人同时抢一个话筒的混乱情况。要注意, rust 不是 完全消除所有并发症问题,逻辑层面的死锁,业务逻辑错误仍然可能出现,只是不会出现内存不安全的并发症。 了解了这些核心特性后,我们就能明确 rust 适用场景边界。它的优势场景集中在对性能稳定性要求极高的领域,包括操作系统、内核、数据库、底层 web assembly 组建 云原声、 flexibly 组建云原 v m p e 组建云原声基础设施等。目前 linux 内核已经正式支持 rust 开发,微软也在使用 rust 重写 windows 底层的安全敏感模块, 但它并不适合快速迭代的小型业务脚本、临时数据处理工具。这类场景,严格的翻译检查反而会拖慢开发效率。不要把 rust 当成万能银弹,任何场景都强行使用。它的优势只在性能敏感、对可能性要求高的场景才能体现。 rust 的 所有安全保障其实都来源于它严格的翻译期检查逻辑。它的翻译期是出了名的严格,会把内存错误、类型不匹配引发安全问题,甚至部分逻辑错误都在翻译阶段暴露出来。不修复这些问题就无法生成可执行文件。 这就像你参加 b 卷考试,监考老师站在你旁边,你写错一个知识点就立刻指出来让你修改。虽然做题的时候会觉得麻烦,但提交的试卷正确率会非常高。翻译速度慢是 rust 的 明显缺点,但是换来了运行时的高稳定性, 线上运行时极少出现崩溃问题。不要觉得翻译报错多,就是代码写的太差,这是 rust 的 正常保护机制,大部分报错跟着编辑器提示就能直接修复。 对于已有成熟项目的团队来说,也不用担心落地。 rust 需要全量重构,它天生支持友好的跨语言户操作能力。 rust 支持和 cc 加抓代码无缝互相调用。你可以在现有 cc 加抓项目中嵌入 rust 模块,替换安全敏感的部分。也可以在 rust 项目中直接调用成熟的 cc 加加第三方库,不需要把现有项目全部推倒重写。 这就像老房子翻新,你可以保留质量完好的旧家具,只把老化有安全隐患的水管、电路换成新的,不用把整个房子拆了重建。 另外, rust 翻译出来的二进制是静态链接的,部署的时候只需要单独的可执行文件,不需要附带任何运行时环境。不要觉得用 rust 就 必须重构整个现有项目,渐进式替换是最合理的落地方式。 最后我们来说说 rust 的 学习曲线特点,它的学习曲线比大多数常见编语言更陡,入门阶段前一二个月会频繁被翻译报错卡住,尤其是所有权、行命周期这类其他语言没有的概念,理解起来需要一定时间。 这就像学开手动挡,汽车一开始起步频繁熄火,换挡经常卡壳,但是一旦熟练之后,开起来既快又稳, 不用怕半路出故障。目前 ross 官方的学习文档非常完善,社区活跃度也很高,遇到的绝大多数问题都能找到现成的解决方案,不要因为一开始上手困难就放弃。熬过入门阶段之后, ross 的 开发效率甚至会超过 c 加加。以上就是今天关于什么是 ross 的 语言。

我用 ai 帮我开发了一款学习助手 learning assist 这个产品,它的主要功能就是辅助你去制定学习计划。比如说你想要学习一个技能,在一开始的时候,你对这个领域是完全未知的,然后你就会去网上去找各种的学习方法,比如说去某站上去找对应的课程,去某书上找对应的攻略, 这过程就会消耗一定的时间和精力,然后像这个 learning assist, 它就能够解放你以上的整个过程。这里就是 learning assist 这个产品的主要界面。然后你在右边这一块,它有一个你制定你想要学习的一个技能,比如说我的目标想要增肌,你就可以直接告诉他, 然后输入之后他就会反问你一些问题,比如说他想要知道你增肌的目的是什么,为了提高你的运动表现,还是说改善体型等等,你是完全零经验的,还是说你已经有了一些系统性的经历。 比如我的目标就是改善我的体型,然后我现在也没有任何的训练基础,你就可以发送给他。为了了解更多你的个人情况,他还会去追问你一些问题,比如说你想要用多少时间去改善这个目标,然后这里你就可以把你各种各样的需求都告诉他, 他就会基于你以上输入的所有的个人情况,给你输出一个比较简易的学习计划,然后这里已经生成了,这里就包括你的个人情况,还有你的学习方向的建议。比如第一周你的主要核心目标是什么,第二周的核心目标是什么?预期成果大概是什么样子的, 以及他还会给你一些网上优质的核心资源的推荐,有些优质博主的推荐,如果你觉得他这个学习方向不满意的话,你也可以在这里去反问他,比如说我觉得训练量太大了, 减少一点,或者你觉得训练量不够,想多增加一点,你都可以发给他。有了这个学习方向之后,他可以为你去制定一个具体到天的一个学习任务,只要去回答是,他就开始为你输出了。然后每日的计划表生成出来之后,你点击这个保存为学习目标,他可以把你的个人情况以及你的学习方向的建议,还有你每日的计划表进行一个 保存。这里就今日任务,比如说第一天,也就是五月七号我要做的任务是什么?第十七天要干什么?第二十四天要干什么?第二十八天要干什么?你每天要做的事情都会生成。在今日任务上面,这里还设计了一个小功能,就是让 ai 去鼓励你,它会基于你每天的任务以及你的目标,你的个人的学习情况,给你一个针对性的一个鼓励。 你可以每天在这里去点击去进行签到,如果你哪天忘了,你也可以把它取消。有了最适合你的学习方向,有了每日计划表的这个存档,还可以把计划表给打印出来,这样我就把它打印出来了, 说他第一天我要干什么,我要看什么课程,第二天我要干什么,以及我要看什么课程,贴到你日常最显眼能每天看到的一个地方,这样执行起来对我来说也会相对更加高效一些。我已经把我这个学习项目传到了我的 github 上,如果大家感兴趣的话,也可以供大家免费去下载和使用。

搞 studio 呢?呃, sorry, 我 要扫码登录一下。 好,我们可以看到一个,呃,个人中心的这样一个创建的这样一个课程 啊,我们打开这个 web coding 的 这个视讯音啊,我创建的 web coding 这样一个视讯音。好,我们可以现在就开始了。 刚才给大家解讲解一下概念怎么去用啊,然后还会又涉及到什么 plane 的 这样个模式啊,我尽量给大家讲完吧。好吧,这次 就是计划模式嘛,就是我可以先不写代码。那好,那我们在写,刚才写代码其实是我随心所欲的写,就是我只给了一个非常简单的 prompt 去写, 去描述,对吧?但其实我们现在更多的需要的是什么叫做归约编程啊?归约编程,顾名思义呢,其实是以规范文档驱动编程,我们可以把它简简称 s, d, d 叫做归位编程,那其实是一种规范的这种核心的编程方法,就是说什么就只只在明确需求和规则的定义。就比如说刚才你看我,同样的,我同样的完成了呃,两个, 两个爱心的操作。第一个,是啊,我直接叫他,你帮我画一个爱心圆,对吧?直接叫他画了一个爱心圆,他并不知道我应该使用什么样的方式去画 好,他知道他说了他用 python 的 形式去写,但是呢,那其实我需要的可能就不是 python。 好, 我需要的是 html 的 这种形式,那我的一个效果是什么样子的?然后他应该是什么颜色的 这些东西,你应该把它描述清楚,那这个东西呢,我们可以把它简单地称为叫做归约编程的这种形式。 好,好,这个叫做归约编程啊,叫做 s d d, 就是 就是我们其实现在很多人写代码,或者很多人用这个 web coding 这样一个, 呃,就是用这个 ai 去做 coding, 它其实它并没有进行一个归约编程,这种方式会导致 你用 ai 去写是 ok 的,是可以写的,但是你会导致你做大项目之后,越做越写越乱,越写越乱,然后你要去调,越调越乱,最后这个项项目或者说这个代码就崩掉了,就不能用了, ai 毕竟不是人嘛,对吧? 所以说呢,你尽量地告诉 ai 更多的东西,而不像人,我需要很一些少的东西,你应该把这些细节,什么东西越详细越好告诉 ai, 呃,然后呢,我们有这些归约编程之后呢?我们就能提升软件的开发效率、质量和协助,对吧?然后我们可以把这个东西叫做 spec, 呃,叫做指导性的这样一个文件啊,我们可以把它,你也可以把它想象成一个叫做需求的 markdown, 对 吧?一个 prd, 对 吧?然后在 ai 编程的 时代呢,其实这个规约性,也就说指导性的这样一个文件是非常非常重要的,也就导致后来我们出现了一个东西,叫做 plan 的 这样一个模式,就有个 plan 的 这个模式。好,你看这个 code 八点 有啊,你看有三个形式。第一个就是啊,执行的这样一个一个工具,对吧?一个是询问的这样一个工具,你可以跟他聊,他不会去帮你做事。第三个就是 plan 的 这样的模式,就是计划的模式,就是我跟他去做一个计划,比如说,嗯, 比如说我现在要做一个动态很炫酷的这样一个 m c p 工具, 哦,就是动态很炫酷的爱心跳动的网页,请你帮我做一下计划, 做一下记。 好。就是,呃,就是比如说我现在要去做一个网页的话,它就可以做一些计划,就比如说,呃,就使用的这个 plan 的 这样个模式。好,它就会去写一个 markdown 文档出来, 然后呢,后续的所有的工作流或者 workflow 啊,它都会执行根据这个,呃这个 markdown 去做。嗯, 好卡呀,嗯,稍微有点卡,大家可以等一等。好吧,其实就很简单一个事情,就是先做一个计划嘛,对吧? 好,你看它会先了解你的需求,想要什么东西,然后看一下现有的内容,然后确定我的需求,其实本身这就是 plan 模式要去做的事情。 好,嗯,有回放,有回放。 然后呢?啊,我等一下看,等它弄完了之后呢,我们再去弄。那其实现在呢,嗯,多种的 ai coding 都是支持,像 code, body, cloud 呀, cluster 等都是支持 plan 的 这样一个模式的。 然后呢,我们,呃,比如说,呃这个 cloud code, 对, 这个你可以去写嘛?就这个东西它可以自己去写,你可以你们大家自己看一下嘛,就是比如说这个是做什么的,然后,呃这个是写需求文档的,就是就是那个,呃需求文档嘛, 然后这个是澄清规则,然后技术方案 plan 的, 这样是做技术方案的这样一个 task 是 做任务清单分解的, 就是你可以看一下,大家可以看一下那个东西怎么去做的。呃,以及说,呃,我们其实在整个 prompt prompt 这样一个过程中,它的最核心的指令,第一个就是需求文档,第二个就是计划分解,第三个哦,就是计划 就是一个可执行的这样一个计划技术方案,第四个就是一个 task, 就是 一个任务的分解。那么最后一个就是我们就 work, 疯狂的 work 好,呃,为什么要去做这些东西呢?为什么是要去做?首先第一个做这些东西肯定会有很多的好处。第一个就是我们人写代码和 ai 写代码,它的区别在于 ai 它不知道自己究竟做到哪儿来了, 它也不知道以前写代码质量究竟如何。所以说呢,我们 去写这些东西呢?第一个啊,念录可追踪,就是每个技术选择呢,都要规范到整个的具体需求里面来。好, ai 就 知道我应该选择什么样的技术选型,比如说 html 怎么去它,它选的是它前端是用的什么?用的 v u、 e 还是 html, 对 吧?或者说还是用的那个,嗯,那个 rev, 这些选型要选好,然后整个对团队的协助也很好。 就是说,嗯,我,我如果说只是我一个人写代码,我少写点无所谓,那我后续去补。但是一个团队里面去写,那我要 task 给它分开, a、 a、 a 去做这个, b 去做这个, c 去做这个,对吧? 所以说,嗯,对团队的写作是非常友好的。 然后呢,就是呃抗噪性会非常好,就是呃文档的话会就是大模型呢,它的 overfitting 就是 就是过离合嘛,过离合, 嗯,会导致越写越差,越写越差,越写越差,你就要明显地告诉他,我应该去做什么,应该不去做什么,所以说会让他的抗噪生能力变强。

朋友们好,我是你们的张老师,我们今天这节课呢,给大家去讲一下我们的 ai 辅助的助手,也就是说我们如何通过 ai 来让 ai 去给我们解决问题呢?哎,老师啊,今天这节课带领大家去玩一下,那首先呢,我们上节课去讲了,我们 跑了第一个项目,对吧?我们把这个 hello a s 去打出来的,有的同学老师这不是加入 ai 吗? ai 在 哪呢?对吧?我们之前官官方官网上有一个,我们通过一句话命令就能找出我们的某音的,对吧?评论啊,点赞啊,等等等等。那么这节课老师教你们一个核心的东西,就是我们怎么利用 ai, 然后让它去完成一些错误的输出, 哎,给我们错误的一些解释,你们也可以去通过 deepsea 啊,通过 codes 啊这些平台也可以去完成,但是我们既然是,对吧编程,我们通过编程的软件 更快更快捷的让他们去做出一些操作。那么老师啊给大家去举一个例子,假如说啊呃,我们通过 m c p 的 话,它是会通过我们的 api 接口来进行给我们去做一些操作,但是现在我不这样去干, 对吧?我现在我要去让他去给我纠错,那么首先第一步,我现在我要让他去给我找到在线小程序 id, 并且输入,哎,输入一些命令,对不对?那么我们首先呢通过我们的扩展工具找到我们的 a s, 然后这里边有空键解锁,然后我们去打开一下, 这个呢就是打开我们的控件了,对吧?打开我们的控件的时候,我们怎么去找到它呢?哎,我们看一下,哎,我们找到这一个点击我们这个的控件, 找到这个控件之后,它里面有文本,哎,如果说对这些不太了解的同学们,因为这个没有怎么去变动,如果不太了解的可以看一下老师之前的课程,那么我们这种格式化呢,还是比较友好的,我们首先通过我们的方式去添加一下, 添加完了之后呢,我们需要去输入,对吧?我们需要去输入,输入怎么去输入呢?这里边有一个哎 input, 然后我们这里边有一个 input, 然后点击 click, 对吧?然后输入完之后呢?然后 click, 然后我们复制一下,我们先试一下吧,测试一下他能够去找到一个空键,对吧?找到这个地方了,所以说啊,我们测试没问题,点击复制,然后复制完了,我们在这里边去给他去粘贴一下 啊,我们先,哎给一个正常的一个命令啊,给大家去讲一个正常的一个操作,对吧?我现在需要在这里边去输入,哎,一二三四,那我哎哎直接 你看他这个直接给我们去携带出来的啊,我们把一二三四五六七八九零直接运行一下,我们在这个文件里边点击运行,我们看一下本地这个他提示已经有修改, 修改完了之后呢,我们看一下能启动了,启动完了之后是不是在这里边给我们把这个输入框已经想要输入到这个文字去输进来了,这个就是我们这个程序是执行的。那有同学可能老师,呃, 在直行的时候,他有可能在这一条他会报错,对不对啊?我现在搞一个假的报错,哎,这个地方看起来没有错误, 看起来没有错误,哎,然后我们直接点击运行,我们直接在这先停掉,先停掉了之后我们点击,哎,我可能在这里边,哎,输入一二三四 啊,在这里边输完了,对不对?看起来没有毛病,那我点击运行,哎,你会发现这里边怎么老是这里边,怎么报错了?但是这些东西我看不懂,你可以把这些甩给 deepseek, 也可以甩给其他的这种 ai 工具。 当然我们现在要通过我们的 cost 里边,哎,这个问答的形式,我们首先选择 ask, 哎,如果说你要 m c p 的 话,它会根据 api 形式来给我们进行一个对照,但是我们以问答的形式,这样也可以啊, 那首先我需要把这个代码全部粘给他,然后 ctrl c, 然后在这里边 ctrl v, 哎,他会去把我们一到十七行的所有能够读一遍,然后我们再把错误的信息放到这, 对不对?然后把它去抛到这,然后我说,哎,这个地方为什么错误呢?哎,对吧?我,我把这个问题去抛给他,然后我们看一下他怎么去给我们去解释的, 他会把我们的错误信息,哎。一二三四传给 input, 这个,这个你看人家需要的是什么?需要的是一个 string, 但是我们传的什么,我们传的是一个一二三四啊,是一个浪形, 所以说啊,你看他直接的解决方法,把一二三四改成问号,我们是不是把这个东西,哎拿过来,然后贴到这,对吧?拿过来贴到这之后,然后我们再去执行一下,我们这个地方清空 直接运行,你看是不是同学们,他就相当于说我们少了一步,因为我们没有清空操作啊,我们可以因为老师要给你们去做一个演示, 所以说他会把我们的这个错误信息去直接解决掉的。那有同学可能问老师,这个东西哎,完全交给 ai 了,那以后老师是不是会失业呢? 哎,也感也感谢同学们的关心呢啊,我觉得这个如果说对你们有所帮助,哎,你们怎么去用,嗯,对吧,能怎么去解决你们的问题,这个老师就感觉到很欣慰,哎,也, 那有的同学可能问啊,老师,这个完全都交给 ai 了,那你是不是以后就失业了? 同学们也感谢同学们的关心呢啊,因为老师啊,会持续的帮你们去输出啊,也会去教你们,呃,如何去解决问题,对吧?遇到一些问题,如何去解决问题,所以说啊,老师有的是方法跟办法以及经验经历, 哎,这些啊,都希望能够帮助到你们,哎,所以说啊,也不用同学们的担心呢。哎,老师啊,一直也在一直持续的学习, 所以说我们共同进步,共同为了去做出一个好的一个产品努力奋斗。其实老师啊,录课也也挺晚的,你看现在已经两两点半了, 所以说给大家去坚持录课,坚持录一些好的课程,嗯,我觉得说到这对不对,同学们如果说感兴趣的话, 哎,是不是给老师一剑三连啊,点个关注,也希望同学们能够在自己的这个业务里边能够学的开心,学的快乐,感觉到很荣幸能够去帮助到你们,这个是我的初衷。我们后期啊,就是一定要把 ai 去结合起来,因为现在新时代了,我们一定要不不要被这个新时代所抛弃, 有的人可能还比较抗拒,还比较抵触,哎,老师这个 ai 是 不是,呃,是不是有点傻?现在我们不比之前了,现在 ai 已经很强大很强大了,我们只有不断地自我更新,才能跟上时代的步伐,你才能在这个时代的红路红红利里边 有所获有所得,才能做一些事情。也希望大家在这个新的一年哎,能够开开心心,快快乐乐的成长,能够学到一定的知识。好吧,我们这节课呢,就讲到这,我们下节课再见。

大家好,最近发现一款完美适配 java 开发的一款 idea, 这种插件是带有 ai 能力的,然后它现在呢是有不限 talking, 它的名字叫 java ai, 我 们在这个 idea 的 这个插件市场里面去搜索这个 java ai 就 能安装,安装完成之后呢,你打开这个 java ai 这个插件, 它有一个模式叫做智能引导,那这个模式是干嘛呢?它会把你的需求啊分成五个步骤,比如说生成接口,然后生成表结构,然后的话还会给你生成前端页面,然后去编码, 那非常的爽。我们来看一下他怎么使用的,我们就用用一个非常简单的一个经典的例子啊,比如说做一个这样的图书馆的管理系统,我们输入我们的需求,要有登录功能,那我们选择好之后,我们就可以开始了,点击这个开始, 那么他第一步就是理解需求,然后他会对需求进行一个关键点的拆分了,然后的话他会去根据你的需求去整理出来,看有哪些核心的功能啊。这边就是他拆分出来的这个关键点啊, 那每一个关键点你都可以去修改,也可以去删除,你也可以添加他遗漏的这个关键点,他这边的话将需求已经拆解出九个关键点,那我们可以检查一下是不是有什么问题,如果没有问题,那么就我们就进行下一步, 那下一步的话就是会去设计这样的接口,那我们知道在开发当中,我们经常是接口新型,把接口定义好之后,然后各个小组就可以去配合去工作了。 然后这边的话他是整理出来有这么多接口啊,认证服务、图书信息管理,那基本上都是包含了,如果说这里有一个接口,你也是可以去添加这个加号,让他自己去描述啊。我们再进行下一步,那么下一步就是这个表结构的设计,那这一步是非常重要的。我们来看一下 他这边可以选择就是库里类型,有卖搜款,或者说这个其他的搜搜我之类的。 ok, 我 们看一下这个表的结构啊,这个是用户表, 然后这个是图书分类表、图书信息表、近月记录表啊,用户表,你看这里面有一个非常有意思的点,你看他这里面有几个字段啊,创建时间、 更新者更新时间,再看第二个表,创建时间、更新者更新时间,每个表这几个字段都是一样的,那么这几个字经常我们在开发中是要统一定义的,一般所以说他这个是好像是内置的提示词一样,就是每个表的这种 统一的字段都是一样的。我觉得他这个应该是针对这种经常用这种业务开发,可能专门做了优化过,所以说非常不错,非常非常的符合我们的开发规范。 那确实没问题,之后我们要点击全选,然后的话可以直接下一步,那你也可以去让他重新生成他这边的逻辑啊,就是每一个接口的一个具体的一个相当于是什么返回结果, 那这个其实非常有意思啊,这个其实是一个业务逻辑,这个逻辑的话我们要去确认是不是有什么问题,我们看一下它这八个接口的这个逻辑啊,我第一首先让我看的是这个返回结果 都是统一的 code message data 这种格式也是非常标准的,这种接口的返回值规范就是它自己其实是内置了很多很好的这种 java 的 这种开发规范非常不错, 那这边如果有问题的话,你可以进行调整或者进行删除,或者让他去重新去生成,没有问任何问题的话,他就进行到下一步,那么点击开始生成之后,他就会去进行一个原码的编辑。那么在这边的话,你可以去创建这个规则文件啊,就是我们 使用 ai 编程工具的时候,经常会定义一些全局规则或者项目的规则让你去遵守。比如说你的代码规范啊,或者说你的这个一些 团队的一个一个开发规范都可以写到这边去。那么他生成代码首先会遵循前面的这个开发逻辑呢,再到这个接口你的这个规则,然后去更好的去约束。所以他这边用户认证服务已经生成好了,我们大概看一下他这个代码的结构啊啊, ctrl 二层一个接口,登录的接口, 然后的话有这个实体,然后有这个数据库访问层,然后就业务逻辑层啊,是一个标准的一个三层架构。除了这个智能引导这个功能之外,还有一个非常有意思的功能是智能体,那么在这边选择智能绘画,然后在这个输入框里面有一个智能体, 那这边的话你也可以去自定义智能体那个这这个智能体的用法其实跟我们使用正常的这个 ai 编辑工具是一样的,我们可以去修改这样的一个啊代码,比如说我们要让它增加一个这种生成验证码的功能, 那我们就可以让它选中这个文件之后,让它增加一个验证码的功能,那么它这边就会去这个里面接口里面增加一个获取验证码的一个功能,就跟我们使用 ai 编辑工具是一样的, ok, 这边插件查看去修改。那么除了这个智能引导和智能体对话之外,那么它这边也内置了很多我们经常开发中用的这种工具啊。我们点开这个 ai 工具箱啊,这边有代码整洁,然后它安全修复。 那还有一些什么框架升级,比如说我们一些框架比较老了,这个还是非常有意思的,这个是我们在开发中可能经常会用到的。那这个插件呢?让我想起了很早以前我们去开发一些 java 代码的时候,一般会把表设计好之后呢, 然后的话去用一些工具去生成基础的这种增删改查,但是那种效果的话是不太好,因为它是固定死的。那么这个插件就是相当于那个功能的升级版,而且加了 ai 的 能力啊, 他应该是内置自己的一些模型,或者说他自己把很多这种 java 开发业务的这种提示词啊, 链接到这种模型里面去加强了这一块能力。那从这个插件里面一个智智能引导,还有一个叫做智能绘画的这个功能啊,特别像就是现有的 ai 编程工具,比如说智能引导跟我们用的这个 tree 啊,或者 code 的 它这个 快速的模式,或者说 solo 模式是非常像,这都是从一个需求,然后去拆解,然后去实现,然后去编码,然后去上线,这样一个整个过程都是通过一个需求去完成, 那么它也可以去设置这样的 m c p 啊、规则啊,还有这个记忆啊啊,非常非常有意思啊,一个插件里面竟然把一个 ai 编程工具的基本上方方面都包括了,非常非常不错,非常推荐大家去使用。

那个 m c p 是 什么?嗯,大家有懂什么叫做 m c p 的 吗?嗯,可以有,懂的可以和我那个互动,好吧。呃, m c p 啊,它的那个,呃,英文名字来放一个 m c p 啊,又叫做模型上下文协议, 它是二零二四年十月底,也就是说前年是由 anstropic 提出的一个开放的协议。 好吧,嗯,它是用来解决什么呀?是统一大模型的外部数据和工具之间的一个通信协议。那么在 m c p 之前呢?我们藏的是 functioning 的 这样一个形式啊,我们可以把呃,把这个想象成一个 充电器线接头啊,之前的话,我们啊用的那个充电器线那个接头,充手机那个接头可能有什么啊?苹果,苹果的那种专用那种小接口,对吧? 还有那种圆的,还有还有就是那种,呃下边宽上边窄的那种接口,那其实对于手机来说是非常非常不方便的,就是我,呃,这接口对我来说是非常非常不方便的,就是我不同的这个东西,我要去买不同的充电器线。 那好,那现在我们都统一了,所有的大模型呢,都用同一种接口,它给规范都用同一种接口,那么现在我们就统一的使用 type c 接口吧,对吧? 那同样的这个 m c m c p 呢?就是去去做了这样一个事情,就是规范了一个统一的一种标准,就一种标准啊,大家所有的大模型啊, 嗯,什么质朴清严的大模型啊,什么 cloud code 呀,对吧? cloud 这个模型,或者说那个 gpt 啊,或者说那个国内的什么呃, mini max, 对 吧?这些模型呢,都用同一种接口。 好,那其实这也会为 ai 呢,使用应用安全地访问各种操作,比如说本地的一些呃操作,也就是说一些远程数据提供了一个非常非常好的这样一个呃形式,呃,好, 当然大家可以看一下图啊。好,呃,这个呢,相对是一个远程服务器嘛?这个服务器就相对是一个 mcp 的 server 啊, mcp server, 然后啊,我们使用模型上下文协议,无论是什么 cloud 也好,或者说各种的 ide 工具, 那他们可以通过这个 mcp 的 这样一个服务去访问这个 server, 比如说这个 server 可能是做一个啊,谷歌的 谷歌浏览器的这样一个操作,对吧?好啊,它就去谷歌查找。好,这个 m c p 是 做什么?这个 m c p 是 做呃这个数据库的一个操作。好,然后这个 这个是做什么?这个 m c p 是 做一个呃,一个网页的啊,微博 api 的 这样一个操作,可能是 github, 或者说什么呃什么的东西,好吧,然后把它整合起来。 那么呃,智能体有一个非常非常好的,呃,就是大模型有个非常好的应用,就是它可以自觉地去调用所有的 mcp server, 其实它可以知道,哎,我现在在干嘛啊?我要应该去调用哪个 mcp server 啊?其实是,呃我们现在需要用的。 那好,那我们这里呢,我给大家就是,嗯,提供了一个啊非常好的 mcp 的 这样一个网站, 那这个资源站呢?它是有非常多的 m c p server, 大家有需要的可以直接去用,当然那个 ide 上也有,好吧, ide 上也有,可以看一下。 那啊,其实现在应应该是非常非常多的 m c p 的 这个广场,它提供了非常多的物, 比如说啊,我们常用的,比如说网页搜索的,网页抓取的这样一个 m c p 啊,然后或者说治图谱,治补补记忆的,这个是基于本地制图谱,可以实现一个记忆的,呃,永久化。好吧。 然后第二个就是你看啊,百度地图的 m c p 啊,然后 macdunk 转,呃, macdunk 转的就是清氢氧级的 macdunk 转换的这样一个 mcp, 那 其实像 github 的 mcp, 这个 github mcp 就 可以去访问一个你的操作,就是你的 github 的 这样一个呃数据空间啊,就是你的一个呃文件操作以及你的仓库管理。好, 现在我要去问一个同学,就是你们有多少人没有 github 这样一个呃账号的呀?没有的,打一个,没有,我看一下。 好,所以很多同学可能是呃非, 就是非科班的吧,就不是说计算机的,对吧?嗯,那没有计算机的,你们就可能就没有 github, 那 你们要去注册一 github 的 这样一个账号,好吧。嗯,就是你搞这些东西肯定是需要 github 的, 这个是没有任何任何的疑问。好,那这里的话,你看我 这边有很多的 mcp server, 你 可以直接去用,比如说这个 mcp server 的 话是做什么?从抖音链接下载无水印的这样一个视频,可以提取音频并转换成一个文本。好,那我们就可以去 github 上去看一下, 嗯,对吧?我们可以去看一下啊,怎么用的?教你怎么用的,你可以把它呃,你可以按照这个方式去配置, 那其实有很多。那好,我们现在可以打开 code body code body, 好 吧。呃,我们 code body 的 话啊,本地的 code body, 好 吧,你可以看一下啊,这个点击啊,这个地方, 点击这个地方,这个有一个,呃,大家看得到吗?就右上角的这个 cloud code, 呃, code body 的 这样一个设置按钮,看到吧, 点击一下,好啊,这边就有一个 m c p 的 这样一个 mark, 就 一个 m c p 的 市场, 现在看到吗?看,就是有一个 m c p 的, 这样就是一个一个按钮,就是一个那个螺丝钉的那个,看得到吧? called body setting。 哦,那没关系,好吧。啊,看不到,大家应该也知道,我应该是已经共享了完整的屏幕了呀,为什么看不到呢? 好,嗯,那在腾讯视频的同学们应该是看得到的吧,那我们点一下,点这个 mcp 的 server, 好吧,点了之后呢,我们可以有个啊 m c p market 这样一个市场,我们去下,你看可以下到很多这样一个 m c p, 那 么这个是可以直接去本地配置的,比如说,你看我现在的 m c p, 其实我已经接了一个叫 figma 的 这样一个 m c p, 一个 m c p 工具了啊,我们就可以直接去连 figma 的 这样一个市场了。那好,我现在去加一个,呃,一个 m c p 是 什么?就加一个 github 的 这样一个 m c p 吧,好吧, 这个 github 好 啊,加 github 的 mcp 需要一个什么?就是需要一个呃,访问这样一个 token, 那 么这个怎么去做呢啊?有 github 的 同学可以跟着我一起做。 好哦,我们首先第一个啊,打开你的 github 的 网站, 好吧,然后呢,你可以点击你的这个,呃呃,不是, 呃,可以点击这个 setting, 好 吧,点击这个 setting 之后呢,我们啊看到这边有一个 developer setting, 就是 开发者模式设置 developer setting, 看到没?好,我们点击这个 developer setting, 然后我们可以看到这样一个,呃,私钥的这样一个访问的 tokens, 好,我们点一下,好,我们有一个 find 这个这个 tokens。 好, 我们去创建一个新的这样一个 token, 这样一个访问令牌。好,我们去创建一下, 好,我们可以给他这个 token 啊,的 token, 这样名字就是 github, 对 吧? 我们可以给大家取一个名字啊,就是,呃,访问令牌,那随便了。 好,呃,随便取了个什么名字?应该是不能加。 呃,我们现在可以直接啊去创建这样一个 token。 好, 好,我们可以把这个,这个就是一个访问的这样一个令牌,访问这样一个令牌呢,我们给它放到 这个地方好保存就 ok 了。好,现在,哎,这个 m c p 呢?啊,它就能访问到你的那个上面去了,好吧?嗯, 好,然后呢?我们比如说我们还可以去创建这些市场。 呃,魔法这个东西大家自己去弄啊,好吧。嗯,这个这个东西不方便在课程里面去讲,是吧?好,然后就是,嗯,还有你可以随便安嘛,你可以随便安, 你需要什么你就可以去安什么,这个也是像基于嗯, cloud studio 的 mcp, 嗯,没有看清的,大家下来就看看回放吧。好吧, 好,我们可以自己去安。好。这是第一个,就是 m c p 啊,是什么?然后还有 rules, 就是 规则,就是这个 rules, 你 可以自己去给一个你的这个 id 设置一些啊规则,然后有时候 memory, 它的 memory 的 话就是记忆嘛,对吧? 然后比如说 skill 啊,就是能力啊,工具的能力,可以自己去创一些 skill, 这个 skill 的 话你可以自己去下啊,下了之后比如说这 agent, 这 agent 你 也可以自己去导一些 agent 进去,那我们后面慢慢讲。嗯,大家不用着急, 不用着急,至于说什么用处啊,我已经给大家讲过了,你可以 m c p 的 用处就是大家可以直接去做这个事情嘛,就大模型,你可以把大模型想象成一个大佬,对吧?它只是一个思考这样一个工具, 但是它没有手脚,我要去执行某个操作,比如说我要去执行网上 web 上去搜索的这个操作,一定要去有一个 mcp 的 这样一个 server, 就是 一个嗯,查找网页的这样一个工具才 ok 的, 好吧?所以第一个 mcp 你 可以把它想象成一个工具的,执行的一个服务器,就是服务,好吧?

初衷就是缓解大家的焦虑,程序员还是有它的重要性的。有这位叫 matt pocock 的 程序员,他分享了他在 webco 店里面的一些经验,我觉得很有作用,给大家分享一下。然后因为他有十八分钟比较长,我看一下我的一个工作流怎么快速的能够把他的这个论文扒下来,然后跟大家在三分钟内 讲清楚他的一些技巧,然后还有他的一些工作流方法,我觉得都说的挺好的。现在已经熟练使用八字幕方法了,这本地只要装上优秀的第二批,然后 很多视频其实都能爬下来的。那现在语言也完全不是问题了,短一点的直接爬了之后用 ai 分 析就可以了。那这边英文的已经爬下来了,那其实我们不需要中文的,我们给它停掉中间 这边让他把英文字母直接总结出来,然后我们看一下他讲的哪些方法。初衷就是缓解大家的焦虑,程序员还是有他的重要性的,软件的基础 比以前更重要啊,中文的就出来了,我们来看一下这个方法,对于总结视频 和学习,我觉得还挺好用的。他说 ai 时代不是代码变便宜了,而是坏代码变得更贵了。他意思是说 ai 时代大模型去生成代码,大家会觉得代码很便宜, 但其实深层的很多垃圾很难去维护,反而变得更昂贵。但是这个意思,所以他强调软件的基本功比钱更重要,我们需要一个明确的需求,然后我们要要有一个良好的系统设计,然后每一个模块是通过滴滴滴滴的关键词来进行一个开发, 然后后用 test 追踪的一个测试驱动开发,我们快速的过一下。首先我们不要迷信有文档的直接就生成了,这个生成代码很赖的,不管他的话,你整个后面持续增上,你越到后面你垃圾越多,你就很难维护出一个 bug, 你 可能修不好, 然后功能可能一直也实现不了。他有个方法叫归灭的一个技巧,就是让 ai 在 实现系统之前不断的去追问你的系统的需求的一些细节,然后可以这样提示,先不要写在码连续追问这个需求中不明确的地方, 然后你跟这个 ai, 比如说你有什么模型,两者之间达成了一个高度的共识包,然后这个细节就可以写成一个 prd 需求文档。 那这个就是说的先说的一个术语,垂直领域里面的术语需要互相都理解是在做什么,你的业务概念要两边要对齐,这样也能减少 ai 去胡乱命名。 那第四点小步测试吧,这一点就是说因为 ai 可能一下子丢给你很多代码,你没法去一步一步测试, 他的需求可能一下子就实现完了,那里面的细节到底怎么样,你心里也很虚的,所以他哦类型检查,每一步都跑一下,然后你的测试每次小不迭代,每次把测试跑完,下一个 t d d 对 他编程有球用, 那这个就是 t d d 追梦的一个测试,测试驱动编程的一个方法, 这个大家都知道,大家可以去用,然后他讲一下什么是好的代码库,嗯,他讲了一个生模块的概念, 就是去做解偶吧,不同功能之间不要有互相的牵扯,接口尽量定义简单,然后把一些复杂的函数定义深一点, 具有清晰的边界,不要生成在根目录或者前缀目录,生成一大堆零碎的文件和小函数,这是 ai 最擅长做的,特别是国产模型, 直接把一些小文件就丢在第一级第二级目录里面,他不去做一些高度的抽象和整合, 这样改起来会很麻烦,因为 ai 他 也需要去把这些文件全部读一遍,他在开新窗口的时候,那这样对重构对修改其实都很不友好,很容易出问题。下一个, 呃,也是跟上一个差不多吧。设置边界接口,那最后我们看一下他一个清单,哎。这是 ppt 总结的第一个让 ai 先提问,不要直接实现明确需求,边界异常情况,但哪些不是你要做的,把不要做的说清楚,让 ai 总结太理解的设计,然后你再对齐一下。第四点,指定要修改的模块和不能碰的模块, 这个对修改还挺重要的,先写测试或验收标准,小步实现每步运行测试类型检查,还有 link, 人类重点 review, 接口架构命名和模块边界,让 ai 最后总结改了什么,风险是什么,还缺什么测试。 一句话,让 ai ai 是 让代码写得更快了,但它它不会自动让系统更好。我们人还是需要有一个工程师的角色,更高一级的角度去思考问题。 转向了一个架构师吧,守住代码的质量,然后它所有的 skills 我 会放评论区里面,大家可以自取。

我有一条信息想要传达给大家,希望这能给那些觉得自己技能已经一文不值的人带来一些安慰。在这个新时代,我相信软件基础比以往任何时候都更加重要。我是个老师,最近一直在教授一门叫做 cloud code for real engineers 的 课程, 很有趣,也很有挑衅性。在准备这门课程的过程中,我不得不设计一套关于 ai 编程的课程体系。这其实有点像噩梦,因为一切都在不断变化,对吧? ai 是 一个全新的范式,我们肯定需要抛弃所有旧的规则,这样才能引入新的内容。围绕着这一点,出现了一种新的趋势,就是从规范到代码运动。 而从规范到代码运动的观点是,你可以写一份关于应用程序应该如何运行的规范,然后你可以用 ai 把它转化成代码。 如果应用程序出现了问题,你就回到规范了。你其实并不会去看代码,你只需要修改规范,再次运行编辑器,然后就会生成更多的代码。 有听说过这个的,请举手。如果你试过,请继续举手。好吧,我也试过,你们可以把手放下了。 我注意到的是,我会运行它,并且尽量不去看代码,但我还是会去看代码。我发现,首先我会得到一些代码,然后我运行它,结果得到的代码更糟糕。然后我又试了一次,结果代码变得更糟。我又试了一次,不断的运行变音器,最后只得到了一堆垃圾。 如果你也遇到过这种情况,请举手。是的,我觉得这样行不通,认为我们可以完全忽略代码,让代码自己管理自己。这其实只是换了个名字的,凭感觉写代码。那时候我并不相信这种做法。我当时想,好吧,我该怎么修复变音器, 我要怎么做才能让他每次都不生成糟糕的代码或者更糟的代码?于是我想,好吧,我需要用英语向大语言模型解释什么样的代码库才是好的。让我找出我以前最喜欢的一本书, 那就是 john oster house 写的软件设计的哲学。让亚马逊买一本吧。他对什么是糟糕的代码有一个定义,他称之为复杂代码。复杂性是指与软件系统结构相关的任何因素, 这些因素会让系统难以理解和修改。所以,一个糟糕的代码库就是一个难以更改的代码库。如果你无法在不引入 bug 的 情况下修改代码库,那它就是一个糟糕的代码库。好的代码库则很容易修改。 所以我想这个说的很好,我们再试试另一本书吧,试试程序员修炼之道。上亚马逊买一本吧,他们有一整张专门讲所谓的软件商。 这正是我所看到的现象。商的概念是,事物总是趋向于混乱、分崩离析和崩溃,而这也正是大多数软件系统的表现,不是吗?每当你对代码库进行修改时,如果你只考虑这次的改动,而不考虑整个系统的设计,你的代码库就会变得越来越糟糕。 而这正是我所看到的,在从规格到代码这个理念下,你只是一次又一次的运行编程,结果只会让代码变得更糟。现在有一个推动从规格到代码运动的想法,那就是代码很廉价。如果你听过代码很廉价这句话,请举手。 是的,嗯,我认为这并不对。我认为代码并不廉价。事实上,糟糕的代码现在是有史以来最昂贵的。 因为如果你的代码库很难修改,你就无法享受到 ai 所能带来的所有好处。因为在一个良好的代码库中, ai 实际上表现的非常非常好。这意味着优秀的代码库比以往任何时候都更加重要,这也意味着软件的基本功比以往任何时候都更加重要。这就是本次演讲的核心观点。 那么让我们进入一些实际内容吧。我将谈谈你可能已经遇到过或者还没有遇到过的 ai 相关的各种失败模式,以及你如何避免这些问题。只需要回归经典书籍,看看优秀的软件开发实践就可以了。 听起来不错吧。第一个问题是, ai 没有按照我的意愿去做。你知道吗?我当时觉得我脑子里有个好主意,而人工智能却做了完全不同的事情,或者他做了一些我不喜欢的规格,你知道他做出了我不想要的东西。如果你已经进入这种模式,请举手。凉爽的,好的, 出色。正如使用程序员一书中所说,没有人确切知道自己想要什么。是你和人工智能之间存在沟通障碍,对吧?所以,当你在和人工智能交流时,这其实就像人工智能在做需求收集, 他基本上是在从你这里弄清楚你到底需要什么。我还意识到有另一本书,弗雷德里克屁布鲁克斯的设计的设计书中谈到了一个叫做设计概念的想法。 当有不止一个人一起设计某样东西时,你们之间会有一个想法在流动,这个想法是你们正在构建的东西的一个虚无缥缈的概念。你正在构建的那个东西,或者说它的概念被称为设计概念。它不是一种资产,它不是你可以放进 markdown 文件里的东西, 它是你正在构建的东西的无形理论。所以我想好的,这就是正在发生的事情。我和人工智能之间并没有共享一个设计概念, 于是我想出了一个技能。这个技能非常非常简单,它叫做 real me。 过程是这样的,不断采访我,确认计划细节,直到我们达成共识,深入设计数的每个分支。 这也是布鲁克斯提出的观点,逐一解决决策之间的依赖关系。这个技能,比如说包含这个技能的仓库大概有一万三千颗星之类的,简直疯了,火遍全网,大家都很喜欢这个东西。这几行代码的意思是, ai 会问你大约四十个、六十个问题。 我遇到过他会问人一百个问题,在他满意之前,也就是在大家达成共同理解之前。这意味着他把 ai 变成了一种对手,不断地向你抛出想法,努力达成共同理解。这也意味着你之后深层的对话可以拿来变成产品需求文档之类的东西。 或者如果只是一个小的改动,你可以直接把它变成任务,然后你的 afk 代理就会接受。别艾特我。但我个人认为这比我用的工具 coco 的 里的默认计划模式要好。计划模式非常急于创建一个资产, 他真的很想直接制定一个计划并开始执行,而我认为先达成一个共同的设计理念会更好。所以这就是第一个小建议。接下来第二种失败模式是 ai 说话太啰嗦了,感觉你和 ai 之间几乎是在鸡同鸭讲。 如果你有过这种失败的体验,请举手,对吧?就好像 ai 说话时总是用太多的词语来表达他在做什么, 你们之间并不是在用同一种语言交流。对我来说,这种感觉非常非常熟悉。 如果你做开发者很久了,并且和领域专家一起工作过,比如说帮别人开发应用程序,假设领域专家想让你开发一个关于我也不知道,比如微芯片的东西,你对微芯片一无所知, 你就需要建立某种共享的语言,对吧?否则他们会用一些你听不懂的术语。你会把这些内容翻译成代码,但可能你自己都不明白那些代码的意思,而领域专家肯定也不会明白。所以你和领域专家之间就存在这样一种语言鸿沟。于是我又回到了领域驱动设计滴滴, 这其实是我还在探索的领域,但我读到的关于滴滴的一切都让我如获至宝,我真的超级喜欢它。而滴滴有一个通用语言的概念,通过通用语言开发者之间的交流,代码的表达以及与领域专家的对话,全部都源自同一个领域模型。 本质上它就是一个 markdown 文件,里面列满了你和 ai 都共同理解的术语。你会非常专注于这些术语,并且确保它们的含义与实际完全一致。 而且你会在代码中不断地使用这些术语。无论你是在讨论代码,还是在和领域专家交流,或者像我们这样在和 ai 沟通时都是如此。 所以我做了一个技能,这个技能就是通用语言技能,它的基本原理就是扫描你的代码库,查找术语,然后生成一个 markdown 文件。它会创建一个通用语言的 markdown 文件,里面有一堆包含所有术语的 markdown 表格。然后我把这个文件传给 ai, 我 自己也能阅读它。 实际上,每当我和 ai 深入讨论做规划的时候,我都会一直打开这个文件。我发现通过阅读 ai 的 思考轨迹,不仅能提升规划的质量,还能让 ai 的 思考方式变得更加简洁。 而且这实际上意味着最终的实现会更加符合你最初的规划。所以这个方法绝对是个强有力的工具,效果好的令人难以置信。这就是第二个小技巧,和 ai 创建一套共享语言。好吧,假设你已经和 ai 达成了一致,你很清楚你要构建的是什么。 ai 也确实构建出了正确的东西,但它就是不能正常运行。如果你遇到过这种情况,请举手,它就是不能用。其实有一个很明显的方法可以改善这种情况,那就是我们可以利用反馈循环。 我们可以使用静态类型。如果你还没在用 type script, 那 就太不可思议了。如果你在开发前端应用,却没有让大语言模型访问浏览器,让它能够查看页面,那它绝对是需要这个能力的, 而且你显然还需要自动化测试。我在这里注意到的一点是,即使有了这些反馈循环, lm 其实也没有很好的利用它们, 它并没有像一位资深开发者那样充分发挥反馈循环的作用,所以它的做法往往是一次性做太多事情,它会生成大量的代码,然后才想,我可能应该做一下类型检查,或者我也许应该跑一下测试,做点类似的事情。在程序员修炼之道这本书里,这种做法被称为超越。你的车灯 本质上就是开的太快,因为反馈的速度就是你的速度上限,反馈的速度就是你的速度上限。这意味着你应该边走边测试,采取小而谨慎的步骤, 而 ai 默认情况下在这方面做的并不好。所以第三项技能就是 tdd。 你 应该使用测试驱动开发,因为 tdd 会迫使大语言模型真正采取小步前进的方式。你先写一个测试,让这个测试通过,然后再重构代码,让它更优雅并考虑设计。 这里的问题在于,测试真的很难。测试一直都很难,原因在于当你编写测试时,需要做出大量不同的决策。 你需要弄清楚你想测试的单元有多大,你需要弄清楚哪些内容需要进行模拟,你还需要弄清楚你最初到底想测试哪些行为,而所有这些决策都是相互依赖的。所以,如果你测试的是一个非常大的单元,比如整个庞大的应用程序, 那么测试可能会非常不稳定,你可能并不想测试那么多行为。如果你只测试这个单元,你就需要对这个单元进行模拟,这一切都是相互关联的。在我整个开发生涯中,我多年来一直在思考这个问题。我们注意到,好的代码库是容易测试的代码库, 所以在这里我们又回到了代码本身很重要的这个观点,也就是说,你的代码库越好,你的反馈循环就越好, 因为你能够给大语言模型提供更好的反馈,它就能生成更好的代码。所以我就在想,一个好的代码库,一个异于测试的代码库应该是什么样子的?我们再次提到 john oster haut, 他 谈到了在你的代码库中拥有深度模块,不是浅层模块,也不是那种暴露出很多 很多函数的模块,应该是相对较少的大而生的模块,并且有简单的接口。我们来快速对比一下,深层模块有大量功能隐藏在一个简单的接口后面,隐藏了复杂性。如果你愿意,你可以查看深层模块的内部实现,但其实没必要,你只需要使用它的接口就可以了。 浅层模块则功能不多,接口却很复杂。我就等你们拍完照。代码库中的浅层模块大致就是这样,你会看到有大量不同的小块, ai 需要在其中穿梭和导航, 实际上这让 ai 很 难进行探索,所以你经常会看到这样的情况。如果你的代码库是这样的,而 ai 其实很擅长生成这种代码库,那么你就会遇到 ai 根本不理解你的代码在做什么的情况。 他会尝试去探索代码,但由于结构混乱且充满了浅层模块,可能无法及时找到正确的模块, 或者无法理解所有的依赖关系,所有这些内容他无法理解你的代码。那么一个充满深层模块的代码库是什么样子的呢? 其实他看起来是这样的,代码本身没变,只是被组织在了边界之内,上面有这些接口,而且这些接口你应该对它们有很强的掌控力,并且要精心设计, 否则你知道的, ai 可能会把设置搞砸,但具体的实现,你可以在一定程度上交给 ai 来处理。那么,如何把一个像这样结构的代码库变成那样结构的代码库呢?我有一项专门的技能可以做到这一点,提升代码库的架构。 事实证明,这件事其实并不简单,操作起来相当复杂,但它其实是一套可以反复使用的步骤。你只需要探索一下代码库,寻找那些彼此相关的代码, 然后把这些代码都封装进一个深层模块里。这样一来,这就是一个可测试的代码库,因为这些代码的边界非常非常简单,你在接口层进行测试,通过这个接口来验证, 这样你就可以开始了。所以,这是一个非常适合 tdd 测试驱动开发的代码库。但如果遇到第六种失败模式呢?假设你的反馈循环已经正常运作了,假设一切都开始步入正轨, 你现在能交付的代码比以往任何时候都多,但你的大脑却跟不上,对吧?如果你在开发过程中感到比以往任何时候都更疲惫,请举手。是的,我也是真的让人精疲力尽。而且我认为这样的代码库实际上让你的大脑更加吃力, 因为你和 ai 一 样,都需要把所有这些信息记在脑子里。而这种方式不仅让你更容易阅读和理解,还意味着你可以把这些模块或者说这些深层模块当做灰盒来对待。你可以这样做,比如说, 我只设计接口,但不会太担心或者过多审查具体的实现。显然,你可以在应用中那些不太关键的部分这样做。 当然,像金融等某些领域不能这样做,但在你应用中的许多模块里,你其实不需要太在意具体的实现。 只要你在模块外部有一个可测试的边界,并且你理解它的用途,能够从外部进行设计。我发现这样真的帮我省了不少脑力,因为我可以说,好吧, ai, 你 来处理这个大块内部的内容吧。 我只需要从外部进行测试并验证它就可以了。所以,这就是第五个建议,设计接口,把实现交给别人。但这意味着,每当我们接触代码,每当我们做计划时,都需要思考并意识到我们应用中的各个模块。 我们需要非常熟悉那张模块地图,它需要成为我们通用语言的一部分,我们还需要把它融入到我们的规划能力中。 所以在我写 prd 时,在 prd 内部我会具体说明模块的变更,以及这些模块内部接口的修改方式。我一直在思考这些。这句话来自 can't back。 每天都要投入到系统设计中,这就是核心,对吧?因为从规格到代码,我们并没有在系统设计上投入, 我们反而是在撤出投入,我们正在抛弃它,而我认为这一点是关重要,所以代码并不廉价,这是我希望你们记住的信息。 代码很重要。如果我们把 ai 看作是一位非常优秀的基层程序员,一种战术型程序员,就像在一线做代码变更的中试,那么你还需要一个在其之上的人, 你需要有人在战略层面进行思考,那个人就是你。而这需要我们过去二十年甚至更久以来一直在使用的软件基础技能。 如果你对我刚才提到的任何技能感兴趣,都可以在 gitlab 仓库 macpoc skills 中找到。如果你对我提供的培训或任何免费的内容感兴趣,我同时你也可以访问 ihero delta。 非常感谢大家, 我希望这些内容能让你在这个新的 ai 时代充满信心,这样你就能真正减轻积极的影响。谢谢大家。

新手小白用一小时时间能搭建出怎样的网页?这是一个记录梦境的网站,现在主要有几个核心模块,梦境快速录入、历史梦境日记库、梦境空间位置、梦境人物记录、梦境规律、智能问答、长期数据统计几个模块。这是我仅仅使用几个 对话搭建的出版用到的 ai 也只有豆包地址和 ai, 酷狗没有复杂的操作和提示词,可以看到作为出稿效果是十分不错的。接下来我会用 ai 完成整个网站的开发,做出实际可用的产品。后续我会将我用到的提示词、 ai 以及对话技巧全部分享给大家,期待完整效果和教程的友友们收藏加关注哦!

大家好,我是大白,这期视频的内容主要讲解到 web coding 的 概念,无论你是零基础小白,还是有一定技术积累的朋友,看了这篇内容都会懂得什么是 web coding。 接下来我会讲到 webcoding 起源以及 webcoding 在 我们的产品设计中替代了哪一个环节。最后来到一个 webcoding 的 工具推荐,假如你是一个零基础的小白,用什么工具入门比较好?如果你是一个有代码工具的朋友,那么你直接上手什么工具比较好? 那 webcoding 这个词到底是怎么来的呢?它是前 openai 创始人,也是特斯拉的前 ai 总监 ipc 去年在 x 平台上提出的一个新型编程方式, 这是他的原推文翻译过来的,大体意思就是说他在已进行项目设计的时候,完全放弃了对代码细节的把控, 整体对 ai 下发命令,让 ai 去实现功能和细节,如果出现了问题或者 bug, 他 在重复上置的过程让 ai 进行修改,最终完成了整个产品的设计的过程。他把这个过程总结成了一种新型的编码方式,叫做 recoding 费用文编码,这就是 我们火了一年的这个 web coding。 所以 web coding 是 一种通过 ai 辅助进行软件开发的方式,这里特别要注意,它是一个软件开发方式,开发者不再亲自的编写代码,而是通过自然语言与 ai 交流,生成程序或者完整产品的一个过程。 所以在早期的时候,他发了推人,说是最热门的新编程语言是英语,这里英语指代的就是自然语言,而在我们国内的话就是中文, 所以在未来的时候,我们不需要把精力大量的花费在编程语言上, python, java, js 这些编程语言上,而是要把我们的重信用中文写好,我们的产品需求就可以了。 那么 where coding 到底替代了我们产品设计中的哪一个环节呢?在我们传统软件开发过程中,大厂是需要这么多的岗位配合去完成一个项目的设计和落地的。 在我们的产品需求阶段,产品经理会根据用户的调研以及产品的功能输出设计一份需求文档,也就是我们上说的 p r d 需求文档。 进入我们的产品设计阶段,系统架构师拿到这份需求文档以后,会进行一个顶层的架构设计和技术选型,最终输出一份产品架构文档来。而我们的项目经理在接收到需求文档和架构文档以后,会进行一个项目风险把控和任务拆解。 ui 在 接受产品需求的时候,就开始进行整个的原型图设计了,进入功能开发测试阶段,研发工程师,也就是我们常说的后端和前端, 在接收到项目经理拆分的任务以后,会进行一个功能和细节上的实现,当然我们的前端也会接收到 ui 给的原型图,配合进行一个用户界面的实现。 测试公式时,其实在我们的产品设计阶段就已经介入了,根据我们的产品需求以及我们的价格文档就开始编辑测试用力了,然后在我们的功能开发测试阶段,就和我们的 r d 后端和前端一起进行, 完成一个什么功能就测试一个什么功能,大大减少了我们的项目周期,当我们整个产品测试的没有什么问题的时候,就交由我们的技术支持,在客户那边进行一个部署和交付,最终这才是我们整个的传统软件开发流程。 那现在在我们的小型项目中,人加上自然语言以及 ai 辅助工具,比如我们的 deepsea 什么呢?生成一份 p r d 需求文档,把这个需求文档下发给我们的 web coding 工具。我们部分 web coding 工具就支持了系统架构、 ui 设计以及前后端编码,包括测试 这个所有流程,输出一个完整的产品给我们的用户。既然有问题的话,我们先重复这个流程,下发我们需要改的 bug 修改点给 webco 攻击,然后重新一次又一次的最终完成这个整个端对端项目的一个交付。 那接下来我就用 web coding 的 方式,简单的举一个例子,首先是帮我生成一个抽奖的系统小程序,要求页面剪辑支持,我们支持十人的抽奖,抽奖是有滚动的效果的。 prd 需求文档,让 deepseek 帮我们生成一个需求文档, 生成完成以后,我们把这个需求文档复制到我们的 web coding 工具中,直接进行一个粘贴,让它帮我们根据需求生成我们想要的小程序。 好,这是它一个生成效果,我们先试一下, 那我觉得这块颜色太喜庆了,我想修改成白色背景呢, 这时我就给它一个下发我们的需求, 它一定对我们的需求进行了一个修改,看它浅色的背景,我们重新试用一下功能。 ok, 这就是我们 web coding 的 一个简单的绝例应用。 在千万行代码的大型项目中, web coding 工具就不一定支持这么多环节了,核心支持的就是我们的前后端编码对它进行一个提效,而我们的 ui 以及我们的架构会用单独的 ai 软件辅助它进行一个设计, 所以 webcoding 在 使用过程中,我们的能力要求慢慢是接近全站要求的,如果你要用好 webcoding, 那 么创意才是王道。 最后一点就是关于 webcoding 工具的推荐,如果你是零级服的小白,那我建议你用 lovebird, wizard 还有 bot, replete 甚至 codes 快 速验证我们的想法,小型的 mvp, 然后营销落地的 demo, 以及这种适合我们分技术快速上线一个项目。而有技术功底的,我建议你直接上 close code 以及 germany 啊 wait for z 的 chase, 然后它适合适合于我们全站的应用开发,复杂的业务迭代和技术的学习以及探索。然后证明大白介意是万事开头难,先动起来。根据上面介绍,零基础的小白直接用一款 ai 工具迅速验证你的你最有成就感的最小壁环, 然后重视 ui 的 就用 love 八 v 零以及国内就我们用 code 编程或者摆动秒答也可以慢慢进行学习,有技术的就直接上 color code, 课后国内的话用用 trace, 然后就你自己入门了。想落地一个产品,推荐的是 webcoding 课程,伍恩达的 webcoding 幺零幺 with replete 有 多厉害你搜下就知道了,出了很多 ai 的 课程, 然后 webcointing 目前的优点和缺点。 webcointing 目前是一种编程和软件开发方式,主要优势体现在这个效率提升和这个降门槛两个方面。但是很费啊,你懂的,它能让你快速的用起来,但不一定能让你做好产品。所以你还是要慢慢看懂一部分的啊, copy 的, 因为目前百分之八十可以代替这个编程人力,但百分之二十的架构以及这个技术安全,包括我们让产品设计的场景边界也需要人工介入,否则你做出来一个产品就是一个鸡肋。 但 ai 的 趋势已经是简单化的,等有一天 ai 能帮你处理产品的全部问题的时候,我们也不需要去学习 ai 了。 如果觉得这节课有用,欢迎进行一个点赞和收藏,我把这整个的 ppt 课件导出图片放在我的评论区的,有需要的可以自己续续。

哈喽,大家好,我是莫这个视频,我们给大家介绍又一个 ai 编程的一个方法,它的名字呢叫做 open code, 然后这里呢我已经安装这个环境了,大家可以看到 在我面前的这个呢是一个阿伦诺维诺为核心的这么一个集成喇叭板,然后上面有一颗 led, 我 之前呢就是给他写了就是让他 led 闪烁的这么一个小程序,现在呢我们来改一下,就是这个 gpl 十二,这里呢就接了一个按钮,然后按钮按下呢是高电瓶,我们让他帮我改成这个按钮,单机切换 led 的 一个状态。好,现在我们点击回车。 好,他开始执行,同时呢我们计时。好,这里计时,大家可以看到他现在呢正在处理,我们看他需要多长时间, 大家可以看这个是他更改的这个程序。好,现在呢正在编辑上传。 好,他已经编辑完成了,看到了吗?现在使用的这个是阿君路的这个一点八点六版本,他的使用的是 a b r 的 这个版卡。好,完成了,好,完成我们停止,我们可以看到大概用了四十秒钟,现在呢我们按单击这个按钮, 哎,大家可以看到他现在呢因为什么呢?就是我这个按键没有消抖,如果说我们按键进行一个消抖呢,就可以去实现这个目的了,那我们现在可以继续让他就是进行一个按键消抖,就可以完美的执行那个任务。那么大家觉得他和这个之前介绍的这个热心的这个小龙虾有什么区别呢?

我们公司给我们每个人配了不限量的 codex 和可乐的扣的,我几个月用下来有一种这样的感觉,就是如果我面对一个技术非常非常厉害的技术大牛,不管是认识的还是不认识的,在他没有 ai 辅助,而我有 ai 辅助情况下,我是觉得我完全不输他 就是有一种什么感觉呢?就是说我就是拿着枪的雇佣兵去打非洲的原始人,再怎么见状, 哎,扛不住我一两梭子过去,现在我用口袋思到一个什么地步呢?就是我有一个想法,到这个想法落地不会超过半小时,他就给我做出一个 demo, 比如说我之前想做一个苹果的 app, 我 完全不会的苹果的代码,但是 我把我的想法说出来之后,让他形成计划,半个小时他就给我做好了,包括我有的各种各样的, 就是网站的想法都写的非常非常快,而且我还能跟 ai 探讨技术架构,可以用最新的,就是我完全没听说过的但是比较新的技术,把这个整个技术站 写好。我知道我也是公司的螺丝钉吗?所以我说是雇佣兵,我作为一个雇佣兵去对付一个非常能力非常非常强的大牛,一两梭子的事吗?我真的有这种感觉。