本章节的内容还在更新中,内容以及目录结构还在不断调整~
AI 编程发展到今天,一个人真的能干一个团队的活。前端、后端、数据库、部署上线,过去要好几个人配合才能搞定的事情,现在你一个人指挥 AI 就能把整套东西搭起来,全栈开发的门槛低了很多。
但这里有个问题:你能让 AI 写代码,可看得懂它写的是什么吗?它给你两个技术方案,你能判断该选哪个吗?它告诉你「这样改没问题」,你怎么知道它没在忽悠你?
如果这些问题你都答不上来,那就好比在闭着眼睛开车,很容易翻车。所以现在无论是技术岗求职,还是自己创业倒腾产品,都要求掌握全栈开发,本章的目标就是形成一套面向 AI 时代的全栈开发教程,争取让读者能够独立开发产品。
我的技术成长路径
大学毕业后,我名义上的工作经历主要是后端开发,但实际上即便是在没有 AI 的时候,我就已经算是全栈工程师 + 产品经理了。
老读者知道,这个网站最早发布的是算法刷题教程,围绕如何让大家更容易地理解算法,快速掌握刷题技巧,我是花了很多功夫的。
比如网站配套的 Chrome 插件 就是一个例子。插件开发要用 JavaScript,同时要了解 Chrome 浏览器、页面渲染的基本原理,妥妥属于前端开发的范畴。
当时为啥要开发这个插件?就是因为很多读者反馈:可以从网站跳转到 LeetCode 去做题,但是在 LeetCode 页面上,不能快速地知道网站是否有这道题的讲解。
为了解决这个「反向查询」的问题,插件内置了算法题到网站教程的链接,同时在 LeetCode 页面中插入按钮,方便读者一键跳转到教程学习。
就是从那时开始,我艰难地入门了前端。当时我真的是完全不懂 CSS、JavaScript 那套东西,只能在其他人分享的片段里寻找蛛丝马迹,全靠打日志和肉眼观察页面样式,然后把观察到的问题输入到 Google 里面搜索,这个开发过程你听起来就知道有多枯燥。
最后终于弄出第一版勉强能用的 Chrome 插件。这版插件是用 HTML/CSS/JS 三件套手搓出来的,本章后面的 前端三件套 HTML/CSS/JavaScript 会介绍这种原生开发有多么原始,代码也非常难维护。
后来我了解到前端有个叫做 jQuery 的库,比原生开发方便一些,就用 jQuery 把插件重写了一遍,稍微好维护了一点。我也有听说 React/Vue 等更现代化的前端开发框架,不过本着代码能跑起来就行的心态,实在懒得弄了。
再后来,我一时兴起,开发了本站的 算法可视化面板。这套东西用到的技术比较杂,简单说就是在 JavaScript 代码的编译阶段「插桩」,插入一些自定义代码把算法运行时的数据抓取下来,然后再用前端页面把这些数据可视化渲染出来。
这些细节对用户是隐藏的,从用户的角度就是:输入正常的 JavaScript 算法代码,运行后就能看到整个算法的可视化流程了。
在开发这个工具的过程中,我对 NodeJS、AST(抽象语法树)、React 等技术积累了不少经验。
再往后,我觉得咱们这个 labuladong.online 网站的页面太丑了,想弄得好看一些。
当时我用的是一个叫 Hugo 的静态网页生成工具,能直接把 markdown 文本渲染成 HTML 文件,然后能部署到服务器或者 GitHub Pages 这种静态托管平台。
Hugo 是用 Go 写的,好处是简单、高性能,但页面颜值我不满意,而且很难扩展新的页面功能,所以我就改用 VuePress 这种基于 Vue 的网页生成工具了,因为它可以直接用 Vue 开发新的页面组件,扩展性好,更容易写出漂亮的页面。
经过不断地摸索和尝试,不断给页面加新的功能满足读者的需求,我算是入门 Vue 开发了。
上面介绍的是我折腾自己网站的过程,主要集中在前端领域的技术栈。对于后端的技术栈,我的涉及面也比较广。
传统的 web 开发就不说了,对于小型项目来说 MySQL + Redis + SpringBoot 一套就能搞定。当然,我认为这套技术栈是前几年开发速度最快的方案,现在(AI 编程时代)更快速的方案是 NextJS 全栈开发框架,本章后面会介绍。
除了传统的 web 开发,我还对大数据系统、基础设施(Infrastructure)开发有经验。
因为我在一个搞消息队列的公司工作过很长一段时间,接触到的技术比一般的业务后端更偏底层,比如如何存储超大规模的数据、如何管理上千个计算节点,这里面会涉及 Kubernetes 集群管理、大数据系统运维等技术。
话说回来,这些企业级技术听起来高端,但我觉得对于大部分读者没啥卵用,除非你就是干这方面工作的。
因为绝大部分工作岗位,都属于业务开发的范畴,也就是后端 + 前端的技术栈。哪怕是你自己开发一些小产品,就那点流量,根本没必要用 Kubernetes 对吧?
不过有了基础设施层面的开发经验,对一般的后端开发确实有一些好处。
举个最简单的例子,比如我们去云厂商购买云服务器搭建服务,一般的想法就是访问云厂商的网站,在网页上挑选配置,完成创建,对吧?
那你是否知道有个叫 terraform 的东西,不需要你去页面上点点点,就可以程序化地创建、更新、管理这些资源?
程序化管理很重要,尤其是 AI 时代。你让 AI 去 UI 页面上操作是很麻烦的,还容易出错,但是如果能通过程序化的方式管理,那对 AI 就非常友好。如果你没听过 terraform 这个东西,下次不妨试试看。
上面简单介绍了我个人的技术栈,接下来说一下我对 AI 时代学习技术的几个判断。
全栈技术一直在变
从我的经历也能看出来,全栈开发的相关技能不像数据结构、算法、设计模式等属于万年不变的基本功,而是会随着业务和技术的发展经常变化的。
比如我上大学的时候,还流行自己搭建服务器,用 Python 的 Django 框架开发个博客系统。Django 当时也号称是全栈框架,路由、数据库、模板渲染、后台管理全都内置,理论上一个框架就能把整个网站做出来。
可现在呢?主流早就变成了前后端分离:页面交给 React/Vue 渲染,后端只负责提供 API 接口,Django 那种后端渲染 HTML 模板的开发方式,在新项目里已经很少见了。
再比如我前面提到的 jQuery,当年火到几乎就是前端开发的代名词,结果没过几年,React/Vue 就成了主流,jQuery 逐渐就没人用了。
所以学全栈和学算法的策略不一样。算法你学透一遍,十年后还是那些东西;全栈技术没法一劳永逸,追着每个新框架去学是学不完的。
目标驱动学习
既然技术一直在变,那到底该怎么学?我认为最好的策略,不是为了学而学,而是跟着需求、兴趣进行学习和实践,这就是所谓目标驱动。
你单纯为了学而学,就没多大意思。费半天劲掌握一门技术,没用它做出任何东西,过段时间技术 out 了,你学的东西也跟着贬值了。
我觉得比较好的状态是:先有一个要解决的问题,然后研究如何解决,逢山开路遇水搭桥,朝着一个目标持续发力,最终达成目标,这其中的努力就有成就感。至于中途学会的那些技术,反而是顺带的收获。
多年前还没有今天这么强大的 AI,只能靠 Google 搜索手动遍历互联网寻找解决方案,靠打印日志来调试程序。今天多方便,AI 本身就近乎一个全知全能的专家,它不仅能回答你的技术问题,连代码都能给你安排得明明白白。
所以,如果你为了学而学,就会悲观地认为自己再怎么学也学不过 AI。但换个角度想:你有一个目标,带着 AI 一起去完成,我之前描述的那些枯燥的调研、试错过程都让 AI 代劳,你作为总舵主指哪打哪,这不是很爽?
技术广度 + 85 分是最优解
不过,想当好这个总舵主,你自己得懂行。那是不是要把技术学得越深越精越好呢?其实不是。这就跟考试类似的:
从 0 分到考 60 分是相对容易的,花点时间就能摸到门道。
从 60 分到 85 分会难一些,你得把常见的坑、常用的套路都搞熟。
从 85 分到 95 分就更难,从 95 分冲到 100 分,那是难上加难,可能要投入成倍的时间,去抠那些一辈子都未必用得上的细节。
这个过程中,难度是一级一级往上递增的,但收益却是一级一级往下递减的,越往后付出的努力越多,换来的提升越小。
在没有 AI 的年代,很多技术岗位逼着你必须达到 95 分甚至更高。因为你不抠到极致,就没法证明自己比别人强,拿不到那个工作。
但现在不一样了,那些最苦最累、最考验熟练度的活,AI 干得又快又好,你再花大量时间去卷 95 分以上的细节,性价比就很低了。
所以 AI 时代的最优解,既不是 0 分(完全不学,全甩给 AI),也不是 100 分(死记硬背所有技术细节),而是扩大自己的技术广度,每种技术掌握到 85 分左右就够用了。
到了 85 分这个水平,你最起码有了两样优势:
第一,看得懂 AI 在干什么。它写的代码、它给的方案,你能看明白大致逻辑,而不是完全看不懂。
第二,不会被 AI 忽悠。再强的模型,也有降智的时候,可能会一本正经地胡说八道。你有 85 分的底子,就有能力分辨哪些靠谱、哪些是它在瞎编。
至于那些具体的语法细节、API 参数、配置项,记不住没关系,用的时候让 AI 给你查文档、写代码就行了。
在这个章节中,我不会带你抠技术细节,只讲最核心的原理脉络,从前端到后端、Web 开发、部署上线、运维都过一遍,帮你把全栈开发的知识骨架搭起来,对每个技术场景都掌握到 85 分的水平。
学完本章,你就能轻松驾驭 AI 干活,一个人独立把完整的产品做出来、跑起来。