晚上十一点半。屏幕蓝光刺得眼球发酸。点开那个拖了快一个月的后台项目。线框图里排得那叫一个严丝合缝,强迫症看了都得竖大拇指。可一进预览窗口,好嘛,全他妈挤到左下角去了。切到手机浏览器。我对着设计稿抠了半天的圆角按钮,直接隐身。右下角冷不丁弹出一行灰字:页面加载失败。就这。你在这儿较劲,那边早就塌了。

顺手拉开抽屉。底下压着本黄了书脊的旧教材,《Dreamweaver UltraDev网站开发综合应用》,作者刘涛。目录页还印得清清楚楚:网站设计与开发基础,精通网站创建,创建网站综合应用。当年我抱着它啃,纯粹是为了学怎么把一堆乱码似的代码,拼成个能看的网页。如今再瞥见那套分步走的教程,嘿,简直跟我抽屉里那些列得满满当当的人生计划表一模一样。连用不同颜色荧光笔标注的优先级都如出一辙。仿佛照着步骤走,人生就能自动跑通?真当生活是台按了播放键的DVD啊?

咱们干活儿,是不是都惯着这种“线框图心态”?先把框架搭死,再往里填肉。笃定按图索骥就能一路绿灯。结果呢?生活压根不是段写死的HTML。它动不动就蹦出个不兼容的“浏览器”。早上临时改口的行程。旁人随口抛来的期待。半夜突然反悔的心情。你前脚刚把逻辑理顺,后脚现实就给你甩个报错。漏洞藏得深,你只能死命按F5。直到页面彻底卡成灰屏。不过话说回来,这心态未必全错。只是太贪心了,总想一次性把变量全控死。现实可不吃这套死逻辑。

书里扒拉出一章叫“动态数据绑定”。教人把页面上的字儿、图儿,跟后台数据库拴在一块儿。早年间我光盯着代码看,觉着这就是个纯体力活。现在琢磨过来,人过日子不也这么干吗?总盼着把脾气、阅历、人情世故全塞进一个严丝合缝的模型里。图个安稳。可数据它自己会涨。人也会变卦。关系更是条活河。非要把活东西焊死,最后准得卡在半道,连个首页都进不去。我觉得这事儿吧,未必是咱们没本事。是“绑定”这词儿本身就跟人性犯冲。你越想控制,它越反弹。

刚入行那会儿,我脾气可硬了。计划一乱就上火,项目一拖就觉得自己砸了招牌。干久了才咂摸出味儿。哪有什么一次成型的好东西?站都是磨出来的。预览。挨骂。翻日志。改代码。再预览。改了十七八个版本,熬了三个通宵。那些对不齐的格子、按没反应的按钮、转圈加载的图,压根不是当初画错了。是它在真刀真枪的环境里,磕碰出来的包浆。浏览器各玩各的版本,渲染结果自然不同。人这摊子事,也一个德行。

换个思路吧。允许页面偶尔白屏。允许中途多按两次刷新。路反倒能走通。以前总以为长大了,就得把每个变量都掐死,把每个交互都做得滴水不漏。其实真到了懂行的那一步,兼容根本不是把bug全杀绝。而是卡住的时候,知道去哪查、怎么打补丁。或者干脆拔了网线,起身去接杯热水。日子本来就是一笔糊涂账。哪有什么标准解法?能跑起来,就算赢。当然,这话听着像老生常谈。但真被现实按在地上摩擦过几次,你就会发现,认怂比硬刚管用得多。留点余地,反而活得久。

把书重新塞回抽屉。书签正好卡在“综合应用”那页。我不打算再往下啃了。过日子本来就不指望有本什么标准操作手册。咱们也就是在预览、报错、打补丁的循环里,跟这烂摊子慢慢和解。人这一辈子,哪能事事都算计得严丝合缝。能在这么个安静的夜里,突然把自己那点弯弯绕绕看明白。够本了。