围观了这么多年:Web开发史上的那些坑
我们看到的Web开发史,可能缺了一大块
上个月,一篇叫《The Descent》的AI生成文章在开发者圈子里传得很火。讲的故事听起来很顺溜:开发者以前写HTML、用FTP上传,然后事情越来越复杂,现在更复杂。论点清晰,时间线整齐。但问题来了——这故事就像一张精选集,把一半的乐队都给漏掉了。
文章把2008年当起点。但那一年,我根本没盯着FTP进度条看。我当时埋在WordPress模板文件里,给客户做网站,让他们能登录后台、写内容、点发布——根本不用知道FTP是什么。我也不是一个人在战斗。CMS时代不是什么脚注,它是互联网真正实现大规模内容民主化的时刻。
今天的工具不是凭空冒出来的,不是什么"工具解决工具问题"的循环。它们是从人类需求、文化变迁、平台演进,当然还有真正的工程进步里生出来的。搞清楚这个区别,在你决定用什么技术栈的时候,很重要。
被忽略的"接生婆":那些教会一代人的平台
《The Descent》这个叙事漏掉了什么?几百万人在摸代码编辑器之前,先学会了HTML和CSS。他们是在MySpace上学的,改个人主页要写行内样式,试过嵌套太多marquee标签会发生什么。他们是在LiveJournal上学的,那个文本框就是他们的IDE,保存按钮就是他们的部署流水线。
Neopets、LiveJournal、早期的Blogger、MySpace——这些不光是社交网络。它们是披着娱乐外衣的Web开发训练营。想要自定义鼠标指针?自己去搞CSS。想让名字用特殊字体?去学font标签(学会了还觉得自己挺厉害的)。
这个时代很重要,因为它说明Web开发素养是通过可及性传播的,不是靠正规教育或专业工具。互联网自己教了自己。
Flash和那个"像App一样"的梦
然后是Flash。文章几乎没提它,这感觉就像聊现代JavaScript框架,不提jQuery或Node.js一样。Flash是当年开发者做交互体验的唯一选择,HTML和CSS根本做不到。动画、流媒体视频、带状态管理的Web应用——Flash全包了。
iPhone干掉了它,没错。但在iPhone出现之前,Flash塑造了一整代人对"Web体验应该是什么样的"的想象。它证明了用户其实想要App式的交互体验,只是那时候浏览器还做不到。本该是技术跟上的需求,先跑在了前面。
搞清楚这段历史,就能理解为什么2000年代末的开发者对JavaScript框架那么兴奋。我们终于有了浏览器API,能做Flash当年承诺的东西了。
为什么"工具生出工具"是个不完整的故事
《The Descent》说,现代前端复杂度之所以存在,是因为每个解决方案都制造了新问题,需要新方案来填坑。这说法不算错。但这就好像解释为什么城市会堵车,只说"每修一条新路就会产生更多交通"——技术上对,但漏掉了人们不断建城市的根本原因。
Web开发演进真正的驱动力包括:
浏览器平台本身。 浏览器能力在扩展。WebGL让3D成为可能。Service Worker实现了离线体验。WebAssembly打开了性能新大门。浏览器每多一个能力,就会有人写出新工具来利用它。
文化讨论。 大会、博客、Stack Overflow帖子,后来是Reddit和Twitter,这些塑造了问题的定义方式和哪种方案能流行起来。我们现在引用的"最佳实践",不是被发现的,是被谈出来的,有时候吵了好几年,才慢慢变成约定俗成。
商业逻辑。 公司在扩张,工程团队从三个人变成三百人。核心问题从"这个功能怎么实现"变成了"二十个工程师怎么维护这套代码库"。工具跟着钱和痛点走。
思维模型和原则。 DRY、KISS、YAGNI、LIFT命名规范——这些东西不是从天上掉下来的。它们是开发者被坑了多年之后,给痛点起了名字,才结晶出来的。它们成了新手开发者继承的词汇表。
钟摆论把前端历史描述成一个循环。我觉得更像一个螺旋——我们回到相似的想法,但站在更高的地方,带着更多上下文、更好的工具,有时候(但不总是)更多的智慧。
这对今天的开发者意味着什么
如果你现在在写代码,你站在螺旋的某个具体位置。你能用上的框架、工具、能力,是2008年的开发者做梦都想不到的。但你也面临他们根本想象不到的问题。
重点不是复杂度是坏的,也不是简单的工具一定更好。重点是你用的工具是对真实问题的回应,理解这些问题——它们从哪来,谁经历了它们,最开始试过什么方案——能让你成为一个更好的开发者。
当你的构建流水线挂掉的时候,你不是在跟莫名其妙的复杂度较劲。你站在一个交叉点,多年来无数人试图在现实约束下解决真实问题所做的决定,全汇聚在这儿了。
关于AI写历史这件事(包括这篇文章)
这是《The Descent》引出的那个让人不太舒服的问题:当Web开发史由在Web上训练出来的系统来写,会发生什么?这篇文章本身就是AI生成的。我的想法也被我读过的东西塑造着,而那些东西现在越来越多都是AI参与写的了。
我们得认真想想这件事。AI系统能整合现有知识,但它们没有凌晨两点调试生产环境故障的经历,也没有成功发布一个真正对用户有用的东西时的成就感。AI写出来的历史可能很通顺,但很空洞。
这不意味着我们应该拒绝AI辅助。这意思是,我们应该和塑造这些工具的人类体验保持连接。去跟老开发者聊聊。能看原始资料就看原始资料。有机会自己去经历那些问题。
互联网成为今天这个样子,不是只靠工具。是靠人——混乱的、有主见的、爱协作的、有时候很烦躁的人——几十年来一起解决问题。
我们都在场。只是各自站在这个不断进化的平台的不同角落。
你觉得Web开发的主流叙事里,缺了哪个时代?我在X @[handle]——聊聊我们都见证过的历史。