我的第一个任务,是写一个“企业网站”。所谓企业网站,说白了就是首页放一张公司大楼的照片——但我们公司连平房都没有,钱总大手一挥:“找张XXXX大厦的图,底下写‘合作伙伴’,再PS一行小字‘上海XXXX集团’,没人会查。”
我负责后端,写一个新闻发布系统,钱总给的工期是三天,主打一个“赶工式开发”。
第一天,我吭哧吭哧建好了数据库,表名叫news,字段有id、title、content、time。那时候我还是个编程小白,压根不懂字段类型的讲究,随手给content设成了varchar(50),意味着每条新闻最多只能写50个字。钱总过来检查,看了一眼就皱起了眉:“你这不对啊,新闻怎么可能只有50个字?最少也得写满一屏!”
我怯生生地问:“那……应该用多少?”
钱总摸了摸发亮的脑门,沉思三秒,拍板决定:“用100!100个字,够写一段话了!”
于是我麻溜改成了varchar(100)。后来这个系统上线,我们发布的第一条新闻标题是“热烈庆祝我司乔迁新址”,正文是:“我司已于近日搬迁至北京市海淀区知春路XX号院B座3楼欢迎大家前来参观指导业务洽谈请联系钱总电话138********”。我数了一下,整整97个字,差3个字就爆字段,堪称“极限踩点”,钱总还得意地说:“你看,我选100就对了,多精准!”
第二天,我开始写后台逻辑,用的是ASP.NET + C#,代码全部手写——因为没网,Visual Studio的智能提示功能需要联网下载索引,我那台“祖传电脑”连不上网,所以它只认识最基本的系统类,堪称“智能提示界的废柴”。
我想写一个DataTable,输入“Data”,智能提示框里只有一个Object;输入“.”,出来的选项只有ToString()、GetType()和Equals(),跟个摆设一样。我当时就懵了,这感觉就像是你要做一道满汉全席,结果厨房里只有一把指甲刀,巧妇难为无米之炊。
但人是被逼出来的。我从书架上翻出那本《ASP.NET从入门到精通》,发现光盘里附带了示例代码。我把光盘塞进去,光驱发出“轰隆隆”的拖拉机声,折腾了五分钟,终于读出来了。我像找到了武功秘籍一样,一行一行地抄,一行一行地改,连注释都抄得一字不差——在那个年代,复制粘贴是程序员的核心技能,和算法、设计模式并称“编程三大法宝”,谁能熟练掌握复制粘贴,谁就是办公室里的“技术大佬”。
但bug还是如期而至。我写了一个循环,从数据库里读取新闻列表,绑定到Repeater控件上,运行之后,页面上啥也没有,一片空白。我检查了数据库,有数据;检查了SQL语句,没写错;检查了Repeater模板,也没问题。我盯着屏幕看了半个小时,头上开始冒汗,后背都湿透了——那时候没有AI帮我找bug,只能靠自己硬扛。
然后我做了一件所有2008年的程序员都会做的事:加断点,一行一行地F10。断点就是我们当年的“救命稻草”,它像一个X光机,能让你看到代码执行到每一行时,变量的值是什么、对象是否存在、程序走的是哪条路。在没有AI的年代,断点和Console.WriteLine(),就是程序员的眼睛和耳朵。
我F10了大概五十次,眼睛都快瞪瞎了,终于发现了问题:我在绑定数据之前,把Repeater的DataSource设成了DataTable,但忘了调用DataBind()。就这一行代码,在今天任何一个AI都会自动帮你补上,但在2008年,它让我加班了两个小时,还被钱总骂了一句“笨死了”。
那天晚上,我回到出租屋,躺在床上,脑子里只有一个念头:DataBind(),你给我记一辈子!