第13章 夜以继日
#第13章:夜以继日
安奕盯着那个邮箱后缀,手指在鼠标上停顿了三秒。
tenglong-tech.com。
腾龙科技。
赵天豪的公司。
屏幕的蓝光映在他脸上,瞳孔里倒映着那串英文字符。窗外又一辆车驶过,车灯的光束扫过天花板,在墙壁上投下快速移动的阴影。键盘敲击声已经停了,房间里只剩下电脑风扇的低鸣,还有他自己平稳的呼吸声。
他移动鼠标,点开了那条招聘帖。
帖子内容很简单:“诚聘兼职VB程序员,参与企业管理系统开发。要求:熟悉VB6.0,有数据库编程经验,能独立完成模块开发。工作时间灵活,按项目结算,待遇优厚。有意者请将个人简历及作品样例发送至[email protected]。”
发帖时间是三天前。
回帖已经有十几条。安奕滚动鼠标滚轮,一条条看下去。
“待遇具体多少?”
“需要坐班吗?”
“我在BJ,可以远程吗?”
都是些普通程序员的询问。发帖人ID是“腾龙HR”,头像是个简单的公司logo——一条抽象的龙形图案,金色,盘旋着。
安奕关掉了帖子。
他靠在椅背上,椅子发出轻微的吱呀声。房间里的温度有些低,四月的夜晚,后半夜还是会凉。他伸手从椅背上抓起一件外套披上,布料摩擦的声音在寂静中格外清晰。
电脑右下角的时间显示:凌晨两点十七分。
他该睡了。
明天还要上学。
但安奕没有动。他看着屏幕,看着那个论坛的界面。这是“中国程序员之家”,2000年初国内最活跃的技术论坛之一。前世,他在这里泡了无数个日夜,问问题,回答问题,认识了很多同行。
这一世,这是他第一次认真浏览。
论坛的界面很简陋。蓝色的背景,白色的文字,表格布局。板块分类也很简单:编程语言、操作系统、网络技术、求职招聘、灌水区。每个板块的帖子数都不多,最新回复时间大多在几天前。
这个时代的互联网,还很小。
安奕移动鼠标,点开了“注册新用户”的链接。
注册页面弹出来。需要填写用户名、密码、邮箱、所在城市。他想了想,在用户名一栏输入:“Stone1999”。
Stone,石头。
磐石。
密码他设了一串复杂的字符加数字组合。邮箱……他停顿了一下。
2000年,国内的邮箱服务还很少。163.net刚刚成立不久,263.net也才起步,新浪邮箱还没推出。大多数人用的还是单位或学校的邮箱,或者国外的Hotmail、Yahoo。
安奕注册了一个Hotmail邮箱。
注册过程很慢。56K的调制解调器发出刺耳的拨号音,然后是数据交换的嘶嘶声。进度条一点一点往前爬,花了将近三分钟才完成注册。
邮箱注册成功后,他回到论坛,完成了用户注册。
然后,他开始浏览。
先看编程语言板块。VB6.0的讨论最多,C++其次,Java刚刚开始有人提及。帖子内容大多是基础问题:如何连接数据库,如何实现多线程,如何做图形界面。回答的人都很耐心,代码贴得很详细。
安奕看了几个帖子,没有回复。
他又点开网络技术板块。这里讨论的是TCP/IP协议、路由器配置、网站建设。有人问如何用ASP做动态网页,有人分享如何配置IIS服务器。还有人在讨论一个叫“Linux”的操作系统,说它是免费的,比Windows稳定。
安奕记住了几个关键词。
然后,他打开了浏览器的新窗口。
在地址栏输入:www.net.cn。
中国互联网络信息中心的网站。域名注册页面。
他输入了第一个域名:yishidai.com。
奕时代。
页面显示:该域名可注册。
安奕没有立即注册。他继续输入第二个:yiyun.com。
奕云。
也可注册。
第三个:panshi.net。
磐石。
也可注册。
他想了想,又输入了几个:smartphone.cn、mobilepay.com.cn、newenergy.com.cn。
全部可注册。
2000年,好域名还很多。
安奕关掉了域名注册页面。现在还不是时候。注册域名需要钱,每年几十到几百元不等。他现在只有不到一千元现金,要省着用。
更重要的是,注册了域名就要建站,建站就要租服务器,租服务器就要花钱。
他现在还负担不起。
但名单已经记在心里了。
他打开记事本,把这些域名一个个敲进去,保存为一个名为“domains.txt”的文件。
做完这些,时间已经到了凌晨三点。
安奕打了个哈欠。眼睛有些干涩,看屏幕久了,视线有些模糊。他揉了揉眼睛,手指按压在眼皮上,能感觉到眼球在指腹下转动。
该睡了。
但他没有关电脑。
而是打开了VB6.0的开发环境。
“磐石”系统的工程文件加载进来。代码窗口展开,上千行代码排列整齐。变量声明、函数定义、循环结构、条件判断……所有的逻辑都在这里。
安奕开始工作。
他先完善图形界面。
之前的版本只有简单的按钮和文本框,现在他要设计得更专业。他打开窗体设计器,拖拽控件:菜单栏、工具栏、状态栏、树形目录、列表视图。
颜色搭配他选了蓝白灰。蓝色为主色调,白色为背景,灰色为边框和分隔线。这是2000年流行的软件界面风格,简洁,专业。
菜单栏他设计了五个主菜单:文件、编辑、查看、工具、帮助。每个主菜单下又有子菜单:新建、打开、保存、打印、退出……
工具栏他放了常用功能的图标:刷新、备份、恢复、统计、报表。
状态栏显示系统时间、当前用户、数据库连接状态。
这些控件的位置、大小、对齐方式,他一点点调整。鼠标点击的声音,键盘快捷键的敲击声,在深夜里格外清晰。
窗体的布局完成后,他开始写事件处理代码。
每个按钮点击后要做什么,每个菜单项选中后要执行什么函数,每个文本框输入后要如何验证……
他写得很专注。
窗外的天色从漆黑慢慢变成深蓝,又从深蓝慢慢变成灰白。远处传来第一声鸡鸣,悠长而清脆。然后是第二声,第三声,从不同的方向传来,此起彼伏。
安奕没有抬头。
他正在写网络通信模块的雏形。
“磐石”系统最终要支持多台电脑联网管理,这就需要网络通信。2000年,网吧里的电脑大多通过局域网连接,服务器和客户端之间需要传输数据:上机记录、消费金额、会员信息、库存状态……
安奕设计了一个简单的协议。
客户端发送请求包,服务器返回响应包。请求包包含命令类型、数据长度、实际数据。响应包包含状态码、数据长度、实际数据。
他写了封包和解包的函数。
又写了发送和接收的函数。
然后写了一个模拟服务器的小程序,用来测试通信是否正常。
编译,运行。
两个程序窗口同时打开。一个模拟客户端,一个模拟服务器。他在客户端输入一条上机记录,点击发送。
数据通过网络(实际上是本机的回环地址)传输到服务器。
服务器收到数据,解析,显示在界面上。
然后返回一个“接收成功”的响应。
客户端收到响应,显示“发送成功”。
测试通过。
安奕松了口气。
他看了看时间:清晨五点四十分。
天已经亮了。晨曦的光从窗帘缝隙透进来,在书桌上投下一道细长的光带。光带里有无数细小的尘埃在飞舞,像微型的星系在旋转。
他该准备上学了。
安奕保存了所有文件,关闭了VB。
然后打开Word,开始整理今天要复习的内容。语文的古诗文默写,数学的解析几何,英语的完形填空,物理的电磁学,化学的有机反应……
他把重点写在纸上。
字迹工整,条理清晰。
六点整,母亲敲门:“小奕,起床了。”
“起来了。”安奕应了一声。
他关掉电脑。屏幕黑下去,风扇的声音渐渐停息。房间里突然安静下来,只有窗外鸟鸣的声音,清脆而欢快。
安奕站起身。
腿有些麻。坐了一夜,血液循环不畅。他跺了跺脚,血液回流,带来一阵刺痛感。他活动了一下肩膀,颈椎发出轻微的咔哒声。
推开房门。
客厅里,母亲正在盛粥。白米粥的香气弥漫开来,混着咸菜的味道。父亲已经坐在餐桌旁,手里拿着今天的《江城日报》。
“昨晚又熬夜了?”母亲看了他一眼。
“嗯,写点东西。”安奕去卫生间洗漱。
冷水扑在脸上,刺激着皮肤。他抬起头,看着镜子里的自己。眼睛里有血丝,眼眶有些发黑,但眼神很亮,很清醒。
十八岁的身体,恢复得很快。
吃完早饭,安奕背起书包出门。
清晨的空气很清新。槐花的香气更浓了,混着露水的湿润感。路面是湿的,昨晚下过小雨,水洼里倒映着天空的淡蓝色。
自行车链条转动的声音,清脆而有节奏。
到学校时,早自习还没开始。
教室里已经坐了一半的人。有人在背英语单词,有人在抄作业,有人在吃早餐。包子的味道,豆浆的味道,混在一起。
安奕走到自己的座位。
苏晚晴已经到了。她正在看语文书,手指轻轻点着书页,嘴唇微动,默念着什么。晨光从窗户照进来,落在她的侧脸上,睫毛在脸颊上投下细小的阴影。
安奕坐下时,她抬起头。
“早。”
“早。”
简单的问候。然后各自继续学习。
安奕拿出数学试卷。今天是第二次模拟考前的最后一次复习课,数学老师会讲几道压轴题。他需要保持专注。
上课铃响了。
数学老师走进教室,是个中年男人,戴眼镜,头发稀疏。他走上讲台,打开教案,开始讲解一道复杂的函数题。
安奕听着。
老师的讲解很详细,每一步推导都写在黑板上。粉笔敲击黑板的声音,清脆而规律。但安奕的思维有一部分在别处。
他在想“磐石”系统的数据库设计。
会员表应该有哪些字段?ID、姓名、手机号、余额、注册时间、最后登录时间……
上机记录表呢?记录ID、会员ID、机器编号、开始时间、结束时间、消费金额……
库存表呢?商品ID、商品名称、单价、库存数量、最后进货时间……
这些表之间如何关联?
如何保证数据的一致性?
如何提高查询效率?
他的手指在课桌下轻轻敲击,模拟着键盘的输入。脑海里,SQL语句一条条浮现:CREATE TABLE、INSERT INTO、SELECT、UPDATE、DELETE……
“安奕。”
数学老师突然点名。
安奕抬起头。
“这道题,你来说说解题思路。”老师指着黑板上的题目。
安奕站起来。他看了一眼题目,是一道解析几何和函数结合的综合题。前世他做过类似的题目,在考研的时候。
他走到黑板前。
拿起粉笔。
开始写解题步骤。
设点坐标,列方程,求导数,找极值点,判断单调性……每一步都清晰,逻辑严密。粉笔在黑板上划过的声音,沙沙作响。
写完最后一步,他放下粉笔。
“所以最大值是根号2,在点(1,1)处取得。”
教室里安静了几秒。
然后数学老师点点头:“很好。思路清晰,步骤完整。大家看看,这就是标准答案。”
安奕回到座位。
苏晚晴看了他一眼,眼神里有些惊讶。这道题确实很难,她刚才也没完全想明白。
安奕对她笑了笑,继续听课。
但脑海里,数据库的设计还在继续。
上午四节课,语文、数学、英语、物理。
安奕保持着高效的学习状态。老师讲的重点,他一遍就记住。需要做的笔记,他写得简洁而全面。课堂练习,他第一个完成。
课间休息时,他去厕所洗了把脸。
冷水刺激着皮肤,让大脑保持清醒。
回到教室,他拿出英语单词本,快速浏览。前世他的英语很好,工作后经常看英文文档,和国外客户开会。这一世,只需要恢复语感。
中午放学。
安奕没有回家。母亲今天加班,不回来做饭。他在学校食堂吃了午饭:一份米饭,一份土豆丝,一份西红柿鸡蛋汤。
食堂里很吵。学生们排队打饭,餐具碰撞的声音,说话的声音,笑声。空气里有饭菜的味道,消毒水的味道,还有汗味。
安奕快速吃完,回到教室。
教室里只有几个人在午休。有人趴在桌上睡觉,有人在看书,有人在听随身听。安奕拿出物理习题集,开始做题。
他需要保持成绩。
高考是第一步。考上华清大学计算机系,是计划中的重要一环。那里有最好的师资,最好的实验室,最好的人脉。
还有林浩。
前世他的技术合伙人,这一世,他要早点找到他。
下午两节课,化学和政治。
安奕同样高效地完成学习。
放学铃声响起时,他收拾好书包,第一个走出教室。自行车在车棚里,他推出来,骑上车,往家的方向驶去。
傍晚的风很舒服。
夕阳把天空染成橙红色,云朵像燃烧的火焰。街道两旁的店铺陆续亮起灯,小吃摊的油烟味飘过来,混着各种食物的香气。
安奕骑得很快。
他想快点回家,继续写代码。
到家时,父亲还没回来。母亲在厨房做饭,锅里在炖汤,蒸汽从锅盖边缘冒出来,带着排骨和玉米的香味。
“回来了?”母亲从厨房探出头。
“嗯。”
“先写作业,饭好了叫你。”
安奕回到自己房间。
放下书包,第一件事就是打开电脑。按下电源键,主机发出嗡鸣声,显示器亮起来。Windows 98的启动画面出现,进度条慢慢走动。
他趁这个时间换了衣服。
脱下校服,换上家居服。棉质的T恤和运动裤,很舒服。
电脑启动完成。
他直接打开VB,加载“磐石”系统工程。
今天的目标:完成数据库模块的核心功能。
他先设计表结构。
在脑海里构思了很久的方案,现在要落实到代码上。他新建了一个模块,命名为“Database.bas”,在里面定义常量、变量、函数。
首先,连接数据库。
2000年,Access数据库是最常见的选择。简单,易用,不需要单独的数据库服务器。安奕决定先用Access作为原型,后期再迁移到SQL Server。
他写了连接字符串。
写了打开连接、关闭连接的函数。
写了错误处理的代码。
然后,开始建表。
他用SQL语句创建会员表。
接着是上机记录表、商品表、库存表、消费记录表……
每一张表他都仔细设计字段类型、长度、约束、默认值。
建表语句写完后,他写了一个初始化数据库的函数。第一次运行时,如果数据库文件不存在,就创建文件,并执行所有建表语句。
测试。
他运行程序。
点击“初始化数据库”按钮。
程序在后台创建了一个名为“Panshi.mdb”的Access文件,然后执行SQL语句。进度条显示执行过程,一条条提示信息显示在状态栏。
“正在创建Members表……完成。”
“正在创建SessionRecords表……完成。”
“正在创建Products表……完成。”
……
所有表创建完成。
安奕打开Access,查看数据库文件。表都建好了,字段都正确。他手动插入几条测试数据,然后在自己的程序里编写查询代码。
SELECT语句。
WHERE条件。
ORDER BY排序。
JOIN关联查询。
他写了几个常用的查询函数:根据会员ID查信息、根据时间段查上机记录、查商品库存、查消费统计……
每一个函数都测试通过。
窗外的天完全黑了。
母亲敲门喊吃饭。
安奕保存代码,走出房间。餐桌上有三菜一汤:青椒肉丝、炒青菜、蒸鸡蛋、排骨玉米汤。父亲已经回来了,正在盛饭。
“今天学习怎么样?”父亲问。
“还行。”安奕坐下。
“模拟考快到了,要抓紧。”
“嗯。”
简单的对话。安奕快速吃完饭,又回到房间。
晚上七点半。
他继续工作。
现在有了数据库,图形界面也基本完成,网络通信模块有了雏形。接下来要把这些模块整合起来。
他写了一个主控模块。
负责初始化系统:检查数据库连接、加载配置、启动网络监听(如果有)、显示主界面。
然后写业务逻辑。
会员注册:输入姓名、手机号,系统生成会员ID,写入数据库,提示注册成功。
会员充值:输入会员ID、充值金额,更新数据库余额,记录充值流水。
上机开卡:选择机器编号,刷会员卡(或输入会员ID),系统记录开始时间,锁定该机器。
下机结账:系统自动计算时长和费用,从会员余额扣款,记录消费流水,释放机器。
商品销售:选择商品,输入数量,系统计算总价,扣款,更新库存。
……
每一个业务功能,他都写了一个独立的函数。
函数之间通过参数传递数据,返回值表示执行结果。错误处理很完善,每一步都可能失败:数据库连接失败、查询失败、更新失败、网络超时……
他写了详细的日志。
每个重要操作都记录时间、操作类型、操作人、结果。
这样出了问题可以追溯。
时间一分一秒过去。
窗外的车流声渐渐稀少。家属院里大部分人家都熄灯了。只有零星几扇窗户还亮着,像夜空里孤独的星星。
安奕喝了口水。
水是凉的,滑过喉咙,带来一丝清醒。
他看了看时间:晚上十一点。
母亲又敲门了:“小奕,该睡了。”
“马上。”
他保存了所有文件。
但没关电脑。
而是打开了浏览器,再次登录“中国程序员之家”。
论坛里又有新帖子。他浏览着,看到有人在讨论一个叫“QQ”的软件,说它比ICQ好用,注册用户已经突破百万。
有人在分享如何破解Windows 98的开机密码。
有人在问哪里可以到便宜的二手电脑配件。
安奕一条条看过去。
然后,他点开了求职招聘板块。
那条腾龙科技的招聘帖还在第一页。回帖又多了几条,有人问项目周期,有人问具体技术要求。
安奕盯着那个邮箱。
前世,他第一次接触腾龙科技,是在大三的时候。那时他已经在做自己的第一个创业项目,腾龙科技想收购,派来谈判的人就是周明。
周明。
那个前世窃取他创意,最终投靠赵天豪的“合伙人”。
这一世,周明应该已经在腾龙科技了。作为赵天豪的技术骨干,负责公司的软件开发。
这个招聘帖,可能就是周明发的。
他在找VB程序员。
安奕的手指在鼠标上轻轻敲击。
他在想,要不要投简历。
如果投了,可能会获得进入腾龙科技的机会。可以近距离观察赵天豪的公司,了解他们的技术实力,甚至可能接触到周明。
但风险也很大。
如果被认出来怎么办?虽然这一世他还没见过周明,但万一呢?
而且,他现在需要时间。高考在即,“磐石”系统正在关键开发期,他没有精力去兼职。
但不投的话,又错过了一个机会。
一个可能提前了解敌人的机会。
安奕思考着。
窗外的夜色更浓了。远处传来火车汽笛声,悠长而苍凉,在夜空中回荡了很久才散去。
他最终决定:不投。
现在还不是时候。
他需要先完成“磐石”系统,先赚到第一桶金,先考上大学。等有了基础,再和腾龙科技正面交锋。
他关掉了招聘帖。
但记住了那个邮箱。
也记住了发帖时间、回帖内容、所有细节。
然后,他打开了域名注册页面。
再次输入yishidai.com。
还是可注册。
他想了想,注册了一个免费的个人主页空间。2000年,很多服务商提供免费空间,带一个二级域名。他选了一个稳定的服务商,申请了一个空间。
空间地址:stone1999.homepage.com。
虽然简陋,但够用了。
他在空间里上传了一个简单的页面。页面只有一行字:“磐石系统,即将发布。”
然后留了一个邮箱:[email protected]。
这是他的第一个“官网”。
虽然现在没人会看到。
但这是一个开始。
做完这些,时间已经到了凌晨一点。
安奕真的该睡了。
他保存所有工作,关闭所有程序。电脑进入休眠状态,风扇声渐渐停息。房间里只剩下台灯的光,昏黄而温暖。
他站起身。
腿又麻了。
他走到窗前,拉开窗帘。夜空很清澈,能看到几颗星星。月亮是弯弯的月牙,挂在远处的楼顶上方。
夜风从窗户缝隙吹进来,带着凉意。
安奕深吸一口气。
空气里有夜晚的味道,有植物的味道,有远方的味道。
明天,还要继续。
白天学习,晚上写代码。
日复一日。
直到“磐石”系统完成。
直到高考结束。
直到一切开始改变。
他关掉台灯,躺到床上。床单是棉质的,洗得很干净,有阳光晒过的味道。枕头很软,头陷进去,疲惫感一下子涌上来。
闭上眼睛。
脑海里还在回放代码。
函数调用,循环嵌套,条件判断……
像一首无声的音乐,在黑暗中缓缓流淌。
然后,他睡着了。