作者:Lew C
小心啊,里面有 400 摄氏度呢!
我啊,就像大多数人一样,喜欢吃披萨。我不太会去给别人讲什么是好披萨,什么是坏披萨。我只想尽力做好披萨,把我的披萨烤炉搬出来,升到该有的温度。
这事儿说累也确实挺累的。但这是一种爱的付出。我以前是全手动做的,从面团的含水量到发酵时间都自己控制。有时候,我还会多走一步,用那种免揉面团的方子(就是不揉它,直接放冰箱里一夜,让它自己发酵)。发酵得慢一点,风味会变,出来的成品也会稍微好点。
现在呢,我就直接把原材料扔进面包机,让它跑披萨面团的程序就好了。它帮我和面,帮我发酵,真像变魔术一样。
然后我把面擀开,铺上配料(当然啦,奶酪要放在配料下面),滑进已经预热好的烤炉。物理学开始起作用了------超热的烤石把饼底的水分抽走,烤出又脆又棒的饼底。撒点粗粒小麦粉,让披萨能从铲子上滑进炉子里,不会全糊成一坨。
什么时候才算是披萨?
披萨到底是啥?至少得有面饼、酱料和奶酪。这定义其实挺宽泛的。小孩可能会拿一片面包,涂点番茄酱,再盖一片奶酪,就叫它披萨------技术上说,还真没错。
但最离谱的披萨罪状,那得颁给 Costco。
每次我去 Costco,我都会想到他们的披萨。那披萨是最悲伤、最惨的披萨形式,被批量生产出来,低价亏本甩卖。底厚厚的,基本没啥弹性,就是为了吸收上面一大堆酱料。再撒上一船的奶酪。然后照流程放进烤炉里定时加热,出来后切开放盘子上。
一个员工对着一堆可怜的人群大喊号码,喊了好几个小时,声音都有点哆嗦了。终于轮到你。别的地方可能还会给张纸巾或叉子,Costco 就直接给你一大块披萨,放在一个勉强能撑住它的小盘子里。底就是纯碳水,奶酪几乎全是脂肪,酱料咸得跟海水一样,还带点甜味。
我每次去 Costco 都想,这次我一定不买披萨。可每次,最后都带着披萨走出来。我根本不饿啊!我为啥总要这样折磨自己?我知道啥是好披萨,那我为啥还老吃这种东西?
答案只有两个字:方便,便宜。有热的、现做的、价格还那么低,这诱惑谁顶得住?于是我就一次又一次地中招。
为什么感觉这么眼熟?
写软件,就像做披萨一样难。当然,是不同类型的难。我现在正在做一个功能,比如说表单的异步校验:用户输入点东西,我这边就要发请求去服务器验证对不对。如果验证不过,那就提示失败。
我要改这个,是因为老版本的做法不直观,用户根本搞不懂发生了啥。现在大家每天都在用各种好用的 App。你可能不喜欢,但 Facebook、Instagram 那些,确实看起来挺漂亮的。
我是一个人搞开发,当然没法做出 Facebook 那种体量和品质的东西。但我做出来的东西,得至少不能差太远。如果我做出来的 App 特别难用,用户马上就能感觉到不好,毕竟外面到处都是做得很不错的应用。即使他们是在公司强制用,也会觉得难受。
开发者到底干嘛的?他们会思考怎么做是最合理的,对照业界标准,重构旧代码,规划和开发新功能。但你看到的结果是:他们写代码。
AI 也会写代码。现在它写得也越来越好了。它不会骂你,不会说"你应该去看本书"。它会一遍遍试,直到帮你搞出个能跑的版本来。
所以说,AI 和人类开发者在"技术上"算是做了同样的事------都写代码。但 AI 的产出速度远远超过人类。最近有个词叫"vibe coding"(感觉编程),就是说你告诉大语言模型你想做啥,然后它就直接 spit 出一个实现方案来。
这时候你就像 Costco 那个把披萨推进烤炉的员工。他从披萨堆上拿个披萨,放进炉里,等几分钟,烤出来了。他根本不参与披萨怎么做出来的过程。
所以如果顾客说披萨味道怪,出问题了,那个人能怎么办?他只是按流程操作。他能做的也只有:扔了,重做。会不会结果不一样?他希望不一样,但也不确定,因为他根本不知道披萨是怎么做的,对吧?
就像 Costco 披萨比其他选择方便又便宜,AI 也是一样。
你要我为一个开发岗位打广告、筛选简历?太麻烦了。还不如让 AI 来试一把。你说 GitHub Copilot 一个月才多少钱?$20,跟开发者的薪水比根本没得比。性价比差太多了。
人类开发者最大的优势是什么?
我作为一个人,什么都不懂。我脑容量有限,专注力也有限。不知道东西,听起来像是弱点。但"我不知道"其实是通往下一步------"去搞明白"的起点。我经常上网搜东西,查 StackOverflow。
每次学到点新东西,我的大脑都会试着找个"最小公因式",把新知识跟已有知识关联起来,好记也好用。
我也曾经熬夜和 ChatGPT 一起试着做个 Godot 游戏。最可怕的就是------ChatGPT 永远不会说:"我不知道该怎么实现。"
它会胡乱猜一通,明明完全错了,还说得像真的一样,有时甚至提一些根本不存在的东西。AI 面对"不知道"的方式就是"瞎编",它就像个不愿承认自己不懂的新手开发者一样,乱提建议只为了显得自己懂。
但人呢?如果不懂,可能就不会轻易动手。这其实是一种天然的安全保护:你不会干你不懂的事。
但 ChatGPT 不一样,它会给出"看起来合理但完全是错的"答案。就像一个想装懂的实习生。
当然,AI 给的答案现在比以前准确多了。但这些建议是最优解 吗?安全吗?能避免内存泄露吗?
如果出了问题,开发者该怎么办?他们一开始就不知道怎么实现这个功能。所以他们只能把报错信息丢进 LLM,再试试看下次能不能好点。
成功也许有,但也许没有。可一旦出 bug,他们能修吗?大概率修不了。
因为------他们压根就不懂。
以前学开发,是要花几年时间,理解系统是怎么运作的。现在,一个语言刚入门的新人也能靠"感觉编程"搞出完整方案。门槛的确是降了,技术上也确实是实现了。
但出了问题怎么办?数据泄露了,AI 引入了安全漏洞------那责任还是在你。你说"ChatGPT 搞出来的 bug 啊!"------这不能当借口,只会让你像在说"我的狗吃了我的作业"。一旦出了事,被抓包,那叫一个社死。
毕竟,你被托付做一件事,**至少也得认真做吧?**总不能全甩给 AI。
AI 的角色是什么?
AI 的强项,是能快速读完一大堆资料,从各种资源里总结出重点,帮有经验的开发者节省研究时间。就像我那面包机一样,它自动帮我处理和发酵的步骤,在关键步骤上提供协助。
但如果整个人只是把 AI 回答复制进 IDE,出错了再粘贴回去,那就是灾难。举个例子,Angular 做表单的方式。以前,那些表单又乱又不强类型,经常出运行时错。后来,Angular 提供了强类型方案,稳定多了。
但现在我看到很多文章,哪怕是新写的 ,还在教老方法。为啥?很简单------因为老方法出现得早,资料多;新方法还没被写出来太多。所以旧 API 的曝光率反而更高。
我可以让 ChatGPT 用新方法写表单,但前提是:我得知道要问这个问题。
懂这个的人越来越少,更多人只会回头再去问 AI,结果就是------老办法越用越多,问题就越积越深。
问一句总比自己研究来得快,对吧?
从最严格的角度说,Costco 披萨的确是披萨。但做披萨的过程已经被简化成了:
- 把披萨放进烤炉
- 等它烤熟
- 切开披萨
今天刚入行的开发者,面对 AI 的诱惑,会把开发流程也变成:
- 问 AI
- 拿到答案
- 把编译错误贴回去
- 运行看看
- 把运行时错误贴回去
- 简单测试
- 好了,发布!🚀🚀🚀
技术上,他们的确写了代码。但就像 Costco 的员工根本不懂披萨怎么做出来的,那些开发者也不懂自己软件是怎么运作的。这,迟早会出大问题。