一个VibeCoder,为何开始古法编程
众所周知,我是一个喜欢(也只会)VibeCoding的人。但是最近我却开始“古法编程”了。
古法编程:指自己写代码而非使用AI完成代码。
我做了什么
我用了几天的时间,在只会Python语法的情况下,用FastAPI+SQLite搭建了我的博客的简易后端。目前已经上线了,搭配上AI做的前端(这我是真不会了,我艺术细胞一点儿都没),上线到了这个站点。
代码仓库用的是CNB而不是Github,我也不知道为什么反正一开始是这么选择的。仓库y也放在这里了。
为什么要“古法编程”
这似乎是一个逆着潮流的决定。越来越多的人开始VibeCoding,新手小白也能够自己做出自己的网站,但是我却开始研究古法编程,自己设计HTTP接口、自己设计表结构……其实这不是因为我不会VibeCoding,而是因为我最近VibeCoding的次数越来越多,我也越来越发现了“古法编程”的重要性。
新手小白和程序员同时VibeCoding,那么差距在哪里呢?新手小白知道要和AI描述需求,如果TA是一个表达清晰、思维缜密的人,那么他描述需求的能力甚至不逊于程序员。但是他做出来的效果,却可能和程序员的有着天壤之别。
当你遇到一个AI味爆满的页面——蓝紫渐变色、满屏emoji、一个个圆角卡片。你也许知道他为什么不好看,但是也许小白很难说出“帮我把emoji换成SVG”等话。这还是个简单的例子,更进一步的:
AI很喜欢写没有后端的东西,你让他帮你写一个最近很火的”工作台“,他只会把数据存储在LocalStorage,随着你更换浏览器、清除数据,你的数据也会灰飞烟灭。这时候程序员就能很好的告诉AI
请你构建一个完整的后端服务,使用SQLite/MySQL
当然,我不是说小白没有办法这么说。如果TA愿意去咨询AI,那么AI肯定也会告诉TA解决方案,可真正的差距其实是在思维上。我们先不说思维,继续沿着这个例子推进。
当AI帮你写好了服务并且部署到服务器上,新的问题接踵而至——为什么不能实时刷新,为什么在电脑看到的和手机不一样。此时我们可能能够很轻松地说用WebSocket、SSE,但是小白呢?还是和上面一样的。在最重要的“安全”一环,程序员们,或者不叫程序员,叫做有程序员思维的人,他们熟悉SQL、熟悉各类命令,很自然就能想到一些边界。
SELECT * FROM posts
ORDER BY id DESC
LIMIT ? OFFSET ?
---令传入的第一个?为num,第二个为start---
乍一看没啥问题,但是有一个边界就是num=-1的情况。当出现这种情况时,会返回所有数据。也许这个边界AI很轻松就能发现,但是以此类推,如果是更高级的更巧妙的漏洞呢?在不明确让AI进行审计、对抗性审查时,他很有可能就藏着这种小漏洞。
所以说,真正重要的不是编码能力,而是这种思维。我认为我评论区说得很对的有这么一个评论:
而他说的是真的。我让AI直接给我接上后端用SQLite,AI也只是按照我的说法,没有进一步使用SSE和WebSocket做到实时刷新。这种感觉也许可以靠VibeCoding的项目数量来达到,通过不同类型的项目来获取不同方面的知识,达到一个广度。但是既然都是这样了,那还不如自己上手来的快。而且多掌握一门技能何乐而不为呢?
如何“古法编程”
这个部分就简述吧,反正编程就都是那样的。
首先,我找到了GPT,和他阐述了我要开始“古法编程”,让他传授一点“先人“在没有AI的情况下是怎么知道如何设计、有无更有方案等的。他就告诉我了一些经验:
搜索时多方位搜索,可以通过表象思考还能怎么描述,这样更容易搜出结果
设计程序时不能最求完美,要按照阶段来。
那第二点我认为是最有用的,无论是”古法编程“还是VibeCoding,都需要这个技能。我在做博客的时候,经历了几个大阶段:
前情提要:我在开头的表述不准确,我在做这个之前做过一个简单的东西,大概了解了如何使用SQL。
超级简单的版本:这个版本只有4个接口,查看文章列表、查看具体文章、新增文章、删除文章。
完善一点的版本:我自己构造边界测试,然后提ISSUE最后自己修复。后续的tests转为由AI维护。
带有鉴权的版本:这个部分我认为是最难的。因为这就是涉及到OAuth2了,然后又会引出一堆东西,包括不限于哈希、为了不从时间判断用户是否存在而设置的DUMMY_HASH……。我看文档的时候那叫一个震惊,佩服于设计这些的人的智慧。
拆分重构:我发现了
main.py非常臃肿,聚合所有接口,于是研究了APIRouter,进行了拆分。同时部署上线服务器,并让AI完成CI/CD的撰写。评论功能:设计了评论有关功能。
异步升级:这个也是难中之难。虽然说在FastAPI当中异步非常之简洁,但是为了了解其中的原理,我去翻看了《Python asyncio 异步编程》,力求研究其背后的原理,更好地理解他是如何调用的。
然后就有了现在的 新博客
学到了什么
受益匪浅啊!不仅是FastAPI、SQL,更有git的使用等等。只能说通过这次古法编程让我学到了很多。我也得继续古法编程。下一步也许就是加上附件功能、对一些API接口做限流了。
说到API接口限流,我也试过攻击。结果最后在火毅盾的CDN和宝塔的WAF拦截下,我的电脑IP被拉黑了……不过,真的:
这是好事呀!!!!!
END.