这半生,我干过不少多此一举、画蛇添足、徒劳无功、买椟还珠的事情。我本来要写一本Java编程的书,我认为应该让这本书比较有趣,就给每一章结束的时候写了一篇小说。这是非常不专业的事,这些小说肯定不能出现在正式出版的编程书里,到时候都会尽数删掉。
再讲一件不专业的事情,下面这张照片是我在青海西宁拍的,如果没记错的话应该是2006年,我去工作。机房里的机器都很”普通”,如果不用丑这个字的话。但是有一家公司,他们设计的产品的外壳就是很漂亮,别人都方方正正的,他家的外壳还有一个腰线,每次进很吵的机房,看到他家的机器我心里就有点开心。
后来我碰到了他们公司的人,我说你们公司的产品设计的真漂亮。他可能认为这是客套话,其实我是发自肺腑的。后来客套话说多了,他问我你真的这样认为么?我说是的。他说他们的外壳是一个设计师设计的,以前这个设计师是设计衣服的。然后他把机器关了电,然后搬下来,给我看机器的背面,背面散热网和电源竟然也是设计过的,有点像一个眨眼的女孩。
我说我要给这台机器买一条项链,戴在她的脖子上,他以为我在开玩笑,其实我没有,我真的买了一条地摊货挂在这台机器上。别人问起的时候,我说这是开过光的,你们不要动。那条项链挂了至少一年半,后来我又去了几次,每次看到项链挂在那里就觉得还挺开心,再后来,就不知道被谁扔掉了。
当这件事情在我公司传开了,同事们都笑我,让我尴尬了好几年。说我是一个给机器买项链的人。
现在,我是一个试图在编程书里写小说的人。糗事一件,供大家开心一下。以下是被删掉的11篇“小说”,如果有人愿意读一下,非常欢迎。除了在这里,还有一个epub版本的,可以点击这里下载。
1.引子
2.潘闻来到公司
3. 令人“恐怖”的bug
5. 老人与手机
6. 与我同龄的路由器
7. 令人头痛的代码
8. 潘闻要改进Java语言
9. 测试员阿轴
10. 软件园冷暖
10. 潘新“试车”
11. “外向”的程序员
1.引子
我的老板叫潘新,他有一个小他十二岁的弟弟叫潘闻。最近,潘闻来到他哥的公司实习,他也是学计算机的。老板让我带他弟弟熟悉一下公司和业务。
老板潘新的编程生涯是从汇编和C语言开始的,现在他已经不再写代码了,但是对编程有强烈的爱好。
他看了本章Java版的HelloWorld,问了我一个问题,Java的类名,函数名,变量名啊,能不能是中文的?
我觉得这是个好问题,正好可以给他弟弟找点事干,就扩展了这个问题:Java语言支持的Unicode字符可以用在什么地方?变量名可以么?函数名可以么?类名可以么?
2.潘闻来到公司
部署网络的工作又有趣又繁琐,有时候繁忙的工作会让我的睡眠严重不足,但是我喜欢这个工作,所以,我每天都会早早的赶到公司,去查一下今天又有什么工作要做。
早上我赶到公司的时候,老板已经在公司了,我照例去问他有什么安排。他说:“今天你去接我弟弟吧,他大学二年级,要从外地赶来,他学的是计算机专业,这是他的电话,你给他打电话,问问什么情况。”
“没问题。”
“对了,他叫潘闻。”
我打了那个电话号码,在接通电话的那一刻,我以为把电话打给了老板,电话那头传来了一个和老板一模一样的声音。我赶忙仔细确认了一下电话号码,没打错。我问:“你是潘闻么?你听起来和你哥一模一样。”
电话那头传来了爽朗的笑声:“是吧,大家都这么说,我上午11点半就到了。我在火车站等你。”
我在车站接到他,简单的寒暄后,我认定潘闻是个阳光大男孩。他坐在副驾驶上,很自然的玩起了手机,一路上把他在手机上看到的新闻读给我听。东方的天空已经有些阴云,我问他:“你查一下手机上今天会下雨么?”。
“今天会有雷阵雨。”
我没话找话的说了一句:“你性格和你哥一点也不一样。”
潘闻沉默的片刻时间里,我意识到我说错了话,他悠然的回答:“都说哥哥是上帝送给弟弟的天使,我哥是上帝送给我的考试。”我着急把话题引开,听到他说考试,就连忙问道:“你现在刚刚考完期末考试吧?”
“是的,刚刚考完一些副科,还有两门主课《计算机组成原理》和《Java语言程序设计》。”
“这两门课程都非常有用,你哥的公司里,最主要的软件就是Java写的,这下你有用武之地了。”一路上闲聊了很多,乌云越来越黑,虽然还是中午时分,路上的车已经开了大灯,一阵阵的大风吹着路边的尘土和塑料袋漫天飞扬。偶尔有两颗顽皮的雨滴从空中落下,落在挡风玻璃上,积攒好久,我才开一下雨刷把它们擦掉。
一个多小时后回到公司,潘新已经在公司等着我们吃午饭了。在见到潘新之后,潘闻像变了一个似的,在吃饭的时候,潘新只和我在说话,他的弟弟对他来说就像空气一样,视而不见。
这可能是我吃的最压抑的一顿饭了,期间我数次想把潘闻拉到对话中,潘闻仅回复一两个词,就又躲闪了出去。饭后,一起回到了公司。潘闻在门口远离他哥的地方找了一个位置坐下,变戏法似的拿出一本英语单词背了起来。
天越来越黑,风越来越大,大风吹着办公室的窗户在颤抖。
突然之间,潘新平静的问了一句:“你考试考的怎么样?”我看到潘闻的身体颤抖了一下,半个屁股悬空在椅子上,嘴半张着,似乎那句回答像航班因为天气晚点了一样,迟迟不肯出来。见到此景,我有些心疼潘闻,又想转移话题,就说了一句:“好像要下雨了。”
老天爷仿佛听见了这句话,以一声炸雷作为回应,天被这个炸雷炸出了一个大洞,水冲了出来。雨越下越大,像决堤的大坝,水已经分不出你我,挤着一起浇了下来。乌云中的墨汁似乎把雨水染黑,雨越下,天越黑。透过玻璃,只能看到红色的尾灯连成一条路的模样。
兄弟俩仿佛没有被这瓢泼大雨所打扰,迟到的回答还是潘闻的嘴里讲了出来:“没太考好。《Java程序设计》考的马马虎虎,《计算机组成原理》没通过。”
相比于潘新的愤怒,窗外下的就像毛毛雨。潘新在咒骂着他的弟弟,数落着他弟弟的不是,我在那里感到手足无措,我被那一幕吓呆了,只听到潘新怒吼着让他的弟弟滚。潘闻默默的走了出去。我意识到,他没地方可去,就追了出去。
我说:“真遗憾事情变成这个样子。”
突然间,潘新笑了,露出一口白牙:“你不必担心,我了解我哥,他已经不生气了,只要他骂了我,这些天就没事了。”
“真的么?”
“当然是真的,这么多年了,我早就摸清他的脾气了。他现在知道我的《计算机组成原理》没考过,过几天他肯定会让我写Java的项目,在路上你不是说公司的软件是用Java写的么?”
“是的,幸好你的Java通过了。”
“我说了我通过了么?我只是说我的Java考的马马虎虎,我可没说我通过了。”
“你的意思是……”
“是的,我的Java也没通过,两门主课都没通过,只有那些副课通过了。你一定得教教我,否则我下学期补考也不一定能通过。”
雷阵雨就是雷阵雨,不一会儿,天所若无其事的晴朗,幸好这钢筋水泥修成的城市排水系统出奇的不好,保留着下过雨的证据。
3. 令人“恐怖”的bug
自从网络联通了每一个乡镇以后,我们这些以网络为生的人就有了一个符咒,每个人都痛恨去山区的机房或者基站里debug,尤其是夜晚。
X官庄村,在这里我之所以用X代替,是因为那一代的村子都叫X官庄,X代表一个姓氏,大概有10来个小村子,蜿蜒散布于一条山沟之中。山里人的淳朴和执着,每到夜晚降临,每个村子会把一扇或铁或木做成的 “门” 关上,以防有人偷窃,在黎明时分再打开这扇“门”让道路恢复通畅。
由于人口不多,每个村子建一个机房成本太高了,因此,就在这几个村子大概中心的位置——一片荒山中略平的地方——建了一个共同的机房。机房里有监控设备,当有人进入的时候,会拍照,然后记录下来。最近出了一个诡异的情况,每到凌晨,设备会记录有人进入这个机房,但是查看监控的时候,又空无一人。甚至有时候会显示有多人进入,看监控的时候,连个鬼的影子都找不到。
设备厂家已经找过了,设备也换过了,始终有这个问题,公司让我和潘闻去看看怎么回事。潘闻很爽快的答应了,但是我知道,这条路是真的艰难,尤其是晚上去的时候,一路上挪开那几个村子放在路上的“门”,要挪七八次。
因为这个“bug”总是出现凌晨1点多,所以,那天晚上,我和潘闻9点就出发了。
夜已经很深了,远离了城市的灯光,抬头就可以看到银河挂在天空。我们的车就像一只飞在空中的萤火虫,顺着山路蔓延。很快到了第一个“门”,这是一个很正常的“铁门”,只是生锈了,我下车推开这个铁门,铁门发出巨大的“吱吱嘎嘎”的声音,铁门附近的房间里的灯马上就亮了,屋里传出一声怒吼“谁?”,我回答我是来修机房的。房门被打开,一个亮度比照明弹还亮的手电射在我的脸上,我赶紧转头避开手电的强光。
盘问完毕,大爷放行的时候,我的眼睛才慢慢看清楚大爷的模样。已经秋天了,天气稍微有点冷,但是这个大爷只穿着拖鞋和一个裤衩,想必他应该是听到声音从床上一跃而起来抓“贼”的。
这样又经过了5个门,终于到达最后一个门了,最后一个门是最难缠的,因为这个门是专门挡机房这条路的,并没有村民每天来开关这扇门,所谓“流水不腐,户枢不蠹”,这扇门好几个月才打开一次,户枢已经蠹的不像样了。
我让潘闻也下车,他表示不理解,我说这扇门一个人打不开。下车以后,我用手机的闪光灯检查了一下这扇门,它比上次我看到的它的时候更糟糕了。它本来有三个门枢,两个已经锈掉了,只剩下最下的一个门枢和一把“锁”来勉强维持平衡。这把“锁”其实是一根生锈的铁丝,我让潘闻一定要抓紧。然后,我小心翼翼的解开了那根生锈的铁丝,那道门像脱缰的野马,猛烈的跳动了一下,在潘闻还没有反应过来的时候,中间唯一管用的门枢断了,门重重的砸在潘闻的脚上。
在车灯的照射下,我看到他的脸先是变成红色,随后变成紫色,眼睛足足比平时大了一圈,额头上的青筋突然鼓得像网线似的。最后,喉咙里发出一声低沉的叫声,把门向前一推,跪在了地上。
我吓的赶快过去问他伤的怎么样?他咒骂了足足一根烟的工夫才缓缓站起来,谢天谢地,他没有骨折,我和他把那扇门扔到路边,上了车,终于赶在12点前到达了这个荒野中的机房。
进了机房以后,我们查看了监控,今天好的不能再好了,好像故障神奇的修复了一样。为了模拟真实的情况,我们把机房的灯关了,只借着手机的背光东一句西一句的聊天。我心里想:“不会见鬼了吧,今天一点事情也没有。”好像鬼读懂了我的心思一样,实然间,机房的灯打开了,监控开始工作,再查看监控的记录,显示进来了三个人。
我看看潘闻,潘闻看看我,在凌晨的荒山野岭里,竟然有三个人在机房里,这可比《张震讲故事》刺激多了。我提议把灯再关了,再试试能不能重复这个bug。这次,我俩没什么好谈的了,小潘在手机里放了一首歌,我明白他的意思,走夜路吹口哨,能自己给自己壮胆。歌还没放完,灯又亮了,监控又开始工作,现在机房里已经有四个人了。
如此重复了几次,现在这个小小的机房里已经显示进来了十个人,挺拥挤的。我们俩个检查了电源,检查了设备,还重启了能重启的所有设备,都不管用。潘闻把机房门打开,把车发动起来,秋天的后半夜已经有点冷了,在山里,会更冷一些。我们在车里坐了一会,车里开着暖气,车窗已经起了一层薄薄的水气。我们决定搞不定就离开了,突然,小潘盯着车窗,说:“会不会是潮湿导致的呢?”
我从工程车里拿出梯子,找到摄像头,摄像头在外面,这个摄像头没有做任何防潮的设计,再加上山里不同于城市,到夜里,潮湿的水气会凝结在摄像头上,所以会导致在夜间失灵。
我们提交了一个报告,公司把这个摄像头换成了有防潮设计的以后,机房里就再也没有发生过“灵异事件”了。在我的职业生涯中碰到过无数的bug,有软件的bug有硬件的bug,但是只有这个bug让我感到过毛骨悚然。
5. 老人与手机
我看了一下今天的工作单:“乘园镇,中岗村,固定电话更换移动电话业务”。最近这几年,固定电话业务萎缩的非常厉害,公司大力推进固定电话改移动电话业务,人手不够,只要是有手有脚的人都要以此为主要工作。我是程序员,有手有脚,所以最近我做了很多这样的“外单”。
相比于城里格子间里的工作,我很喜欢“外单”。现在初春时节,城里虽然也有点点的花红柳绿,但这不过是虚虚的应个景儿。只有驱车到城外,满山的杜鹃轰轰烈烈的开,那灼眼的红色,一路摧枯拉朽的从路边烧到山顶。
车子在火海中穿行,经过的却是斑驳陆离的村庄,这种强烈的色彩对比给我强烈的视觉冲击。在这个装了橡胶轮子奔驰的世界里,城市化已经让村庄荒废了。我拨通了留下的电话,接电话的人告诉我他是帮另一位老大爷打的电话,并且告诉了我地址。我沿着村里仅有的一条小街道走到尽头,来到了那个看起来随时都要倒下的房子前。当我敲门的时候,门板剥落的油漆与灰尘不住的飘落。院里响起了一阵狗叫,随后一个满头白发的老人打开了门,一条狗安静的站在他身后,它静静的看着我,毫无敌意。
“我是来修电话的。”我说。那个老人笑了。
“好好好,进来吧,我不会用我的手机,我还是想用那个固定电话。”
他带我来到了一间卧室和客厅共用的狭小的房子里:“我现在一个人住,我那口子去年走了。我家里的电话只用来和我儿子联系,他在深圳打工。”他边说边指着桌子上的固定电话。
贫穷的证据随处可见。破旧的家具,一个暖水瓶。电器只有一个电灯和一部电话,老人的早饭还在桌上,一块馒头,几片咸菜。狗吃的早饭和老人是一样的,也是馒头,放在桌脚的碗里。
“我给我儿子打电话打不通了。”老人开口了。
“我知道,现在固定电话业务取消了,也就是说,这台电话不能用了。”当我说出这句话的时候,我看到老人有脸上流露出疑惑与失望的表情。我继续小心的说道:“你可以用手机。”
“我不会用手机。”老人回答。
“你可以到最近的营业厅里办一个每个月3元的套餐,营业厅里会送一台手机给你。”当我说这句话的时候,老人脸上的表情更疑惑了,他低声的问:“去哪里办理?”
“来吧,我开车带你去,你带上身份证。”当老人要上车的时候,他的狗一直跟着他,焦急的围着他转圈圈。我看出了它的焦虑,就让它和主人一起在后排,它安静的趴在老人的脚下。
到了营业厅,办了一个卡,我还要教老人如何使用手机。他不记得他儿子的电话号码,我又开车送到他家里,期间还折返了一次,买了一个插线板,老人家里没有给手机充电的插线板。
他从破旧的桌子里掏出一张纸,纸上记着他儿子的电话号码,我拨通了这个电话,跟他儿子说明了情况。当他跟他儿子通话的时候,我看到他的眼睛恢复了光亮。最后,我花了一些时间教他如何打电话,并且把我的电话号码也存在了那个手机上,告诉他,如果有问题,就随时联系我。
“我要付你多少钱?”
“啊,不用付钱。”我很快的说:“没什么,我只是路过这里,也不麻烦。”
老人有些吃惊:“但是你又买了这个。”他指了指那个插线板。
“没什么,这个不花什么钱的。”我说了再见,就走出了他的家门。老人和他的狗一直站在门口,我从后视镜里一直看到我的车子转弯,他们都没有离开。
一路上,我再也没有心思去看那鲜艳的杜鹃花,我的眼里只有那个破败的家,那个老人和那条狗。
后来,春节的一天,我接到一个电话,是他儿子打来的,老人让他儿子给我送一些家里种的花生。后来,我总会想到这个老人,不管我们认为多么简单易用的手机或者软件,对其他人可能真的难于上青天。做软件也好,做硬件也好,多考虑一下其他人。
6. 与我同龄的路由器
“这台设备都要比我年龄大了。”当我坐在机房的地上,用螺丝刀用力拧已经生锈的螺丝,汗水不停的落在我的手背上时,我这么想。
为了找到这台机器,我已经在机房转了很多圈,每一个机架我都看过了,终于在一个没有标签的机架里找到了这台白色的机器,红色的旧金山金门大桥的标志印在白色的壳上,这是一台1986年思科公司生产的Cisco Systems AGS路由器。我想:“工作了快20年以后,它的寿命应该快结束了吧?”
在几个小时以前,厂区一半的计算机不能联网了,我被电话吵醒,凌晨2点从被窝里拖出来,在冰雪覆盖的路面上颠簸了20公里,来到这家发电厂查找故障。这次排除故障从头到尾都很糟糕。我一到这个电厂,两个人接待我,一胖一瘦,有点像金庸小说里的胖头陀与瘦头陀。虽然体型差异巨大,但是两个人都非常的沉默加忧郁,铁青的脸,好像随时在准备倒霉。我下车之后,想寒暄几句,握个手什么的,结果两人开门见山的说:“网络不通了,你快点弄好,要在早班上班前搞好。”这句话一出,让我刚伸出去的手触电一样缩了回来。
在去机房的路上,我问了几个问题,一问三不知,只知道网络不能用了。
这还不算最糟,我刚进机房,很意外的看到一个矮小的中年男人在抽烟,我心里嘀咕:“机房里还能抽烟,怪不得一问三不知。”哪想这个中年男人接我心里的话说道:“因为是夜班我才抽烟的,要不然真熬不住。”怪不得心理学家说什么“思想是不出声的语言”,这个男人肯定是有什么招风耳,我想什么他都能听到。
我初步看了一下,大概有20多个机架,这些机器分属不同功能,有做办公自动化的,有做财务的,不一而足。最伤脑筋的事情是没人真正搞清楚这些线路的走向,毕竟20年了,网络在架床叠屋的环境下,能搞清楚的人越来越少。看完以后,我就知道,这次有不少苦头在等着呢。看着网线像意大利面一样盘在地上,我就知道今天可能要在这个机房里呆上一整天了。
“小伙子,你觉得怎么样?”抽烟男子问道,“网络不通了,是吧?没什么大事吧,以前也有个工程师,挺厉害的,他来搞几下就通了。书本上的东西是死的,经验是活的。”
当年我虽然从业不久,但是类似的话我听了不少,总有这种“以前的工程师”能神奇的把网络搞好。我只能报以礼貌的微笑。
“你参加工作多久了?”这个男人总有问不完的问题。
“半年多吧。”
“才半年?”他的脸上总算露出的笑容,仰头从口中吹出一根长长的烟柱,“嗯,是个新手啊,以前的那个工程师可是有15年工作经验呢,他可真厉害,我就没见过他搞不定的故障。他可真是个好手。”
说实在的,我在任何时候都不介意一个人对另一个人赞美,只是今天的这些话,让我实在是有些不舒服。我就沉默不语。
胖头陀和瘦头陀一直没开口,但是他们三人很自然的坐在一起,看着我一根一根的检查网线,在这个年久失修的机房里摸爬滚打。胖头陀和瘦头陀眯着眼睛看着,吸烟男则不停的评判着。在这个风雪交加的夜里,他一根接一根的吸烟,越吸越快,小眼睛兴奋的像烟头一样红,恐怕这么多年来都没有今天这么开心过吧。
愤怒像风暴一样慢慢的在我脑海中形成,我强忍着,还是一根一根的检查网线,试图找出网络的结构。一边寻找,一边用捆线器把那一堆像意大利面一样的网线整理的井井有条。功夫不负有心人,我终于找到了,那么多昂贵的设备传输的数据,都要通过这台1986年生产的机器路由传输出去去。现在这台设备已经不再运转了。
我总算可以继续开展我的工作了:“是这台路由器坏了,现在要更换一台路由器,这台路由器用的时间太久了,现在不工作了。”
“不可能吧,换新的没问题,如果换了新的还不工作怎么办?”吸烟男不死心的问。我没空再搭理他,就对胖头陀说:“这台机器是1986年生产的,可能刚建机房的时候,就已经买了这台机器。”胖头陀向瘦头陀使了个眼色,示意他去取一台新的路由器过来。
“不可能是1986年生产的,1986年的设备还能运行?我在这里呆了快10年了,哪台设备是什么情况我门儿清,我可以跟你打赌,绝对不可能是1986年的设备。”吸烟男不依不饶的说道。
一会儿,路由器拿过来了,我把旧的路由器拆下来,里面的背板上清晰的写着1986年制造,我递给吸烟男看。他狠狠的吸了一口烟,不敢相信自己的眼睛:“好家伙,真是1986年生产的啊,这么久的设备,竟然还能运行,真是见了鬼了!”吸烟男的活力好像一下子没了。
新的路由器被安装在机架上,我把网线接上,再接上我的计算机,把路由器配置好。一切都开始工作了,胖头陀打了个电话询问同事网络能不能用了?在得到了肯定的答复以后,我如释重负。我一面穿上自己的外套,觉得好像跑了个马拉松,混身的肌肉都在痛,嘴巴很干。我把东西收拾好,走出机房,外面的天已经有些亮了。雪中夹着小小的冰粒从天空飘落,把我的眼睛打的有点痛。
虽然我不同意吸烟男大部分的话,但是有一句话我还是挺认同的,他说“书本上的东西是死的,经验是活的。”
是啊,以从事信息工作的人来说,书上没讲的东西太多了。书上不会讲如何在雪夜里开车,书上不会讲如何面对客户的不友好,书上还不会讲如何处理绝望的情绪。我突然想起来当年的教科书上的一幅插画,在编程的时候,干净的房间里,客户在微笑,程序员在微笑,项目经理在微笑,甚至计算机屏幕上还画了一个微笑的表情符号,一幅和谐完美的画面,好像在聚餐一样。画里没有意大利面一样的网线,脸上没有汗水,来回的路上也没有雪。
这也是一本编程的书,我希望告诉大家这些事。在编程中,在项目实施中,总有无数的十字路口,大家要习惯,这些十字路口中没有红绿灯,过路口的时候一定要加倍小心,照顾好你自己。
7. 令人头痛的代码
上次雪夜修那台与我同龄的路由器回来后,我想看一看公司的软件到底可以支持多少种硬件。如果现出现故障,至少可以显示一些有用的信息,比如通过SNMP标准能返回设备信息,而不用再两眼一摸黑搞得自己精疲力竭。
中午和潘新吃饭的时候,我把这个想法和他讲了一下。我说:“我想研究一下咱们软件中处理不同设备的代码,看看有没有可能加上一些代码,如果设备出了故障,至少在软件中能个报错误出来。”
听到我讲出这个想法,潘新抬起头来看着我,半张着嘴,许久说不出话来。看那表情,仿佛有千言万语要说,这些话一股脑的涌上喉咙,像下班时间的马路,塞的结结实实的,一个字也没说出来。
过了许久,他才说:“你不要内卷,如果你要去查这些分外之事的代码,那么我也要去做一些分外之事,这会让我的工作强度更高了。我可不想让自己累着,再说了,这些代码又不是不能跑,你碰它们干什么。”
没有死心,下班回去以后,我找到了相关代码,不看不知道,一看吓一跳。一个长达15000多行的源文件,里面有很多条判断语句,每条判断语句处理一种设备。当每加入一种新的设备,就要在这个文件中多增加一条判断语句。确实很让人头痛。
我想起了《代码大全》上给出的解决方法,如果判断语句过多,可以改用表格驱动法,我又拿起了这本重达2斤,近10厘米厚,一直垫在显示器下的书仔细研究了起来。
对程序员来说,从键盘上敲出的代码可以分成两种,一种代码是负责软件运行的逻辑,另一种代码是要处理的数据。相比于软件运行的逻辑,添加要处理的数据要简单的多。
我正在思考这件事的时候,敲门声响了,我才想到今天是周五了,楼下的退休老师又要来找我了。一个刚退休不久的高中数学老师的确要寻找新的生命活力,王老师喜欢上了买足球彩票,虽然王老师从来没看过足球,根本不知道足球队和球员的名字,但是他仍旧喜欢买足球彩票。
有次我偶尔也去买一次玩玩,在彩票点碰到了他,当他发现我竟然对于球队,球员和战绩还能侃侃而谈的时候,而且我还是个程序员,从他的面部表情可以看在出来 ,他对我越来越敬重。于是每到周五,他就借口给我送本书,或者修一下手机什么的,来探讨一下买足球彩票的问题。
我只中过一次二等奖,不到300块钱,又加上他认为程序员和计算机有某种神秘的联系——那可是计算机啊,他曾经这么说过——我就成了他心中掌握了某种魔法的超级足球预言家。我一直保留着这唯一的一次中奖的凭证,只要有机会我就拿出来给别人炫耀一下,即使我早就赔进去了1000多块钱。我曾经给王老师看过我中奖的凭证,他赞叹不已,王老师一次也没中。
退休后的王老师没去跳广场舞,没每天早晨去公园用肚子顶树,而是研究起了足球彩票,在得知我是程序员以后,竟然也想学习编程了。他有一台女儿淘汰的计算机,在了解了他学编程的目的是为了辅助分析足彩以后,我推荐他可以试试.net编程,这个可以很容易在他的计算机上做一个客户端,并且我把几本书送了他。
王老师就是这样一个人,对别人的事情不关心,别人也不能干预他的事情。我曾经亲眼看到他动手打了一个跟王老师的妻子推销理财产品的人,拿着扫把追着别人打,周围的人总称他为教书把脑子教坏了的“疯子”。
对我来说,他的脑子一点都没坏,我内心为他鸣不平。经过了短短几个月,期间虽然也问过我一些这样那样的问题,但是,他的彩票分析软件竟然真的搞起来了。这次,又周末了,估计又要问我点什么东西,每次他就来20分钟,还能吃一顿王太太做的美味食物。
我开门以后,还没坐定,王老师像往常一样开门见山的问道:“小刘啊,我问你个问题,我想统计一下所有球队的战绩,每打完一场,我就要更新一次代码,用你教我的那个判断语句,每次都要写一次,麻烦的很,有没有办法让我把每次比赛的战绩输入在一个文件里,就可以不去修改代码了呢?”
我突然意识到,王老师碰到的问题就是我要解决的问题:把数据与逻辑分离。
我大体解释了一下如何做,如何读取文件,如何处理以后,王老师很开心的离开了。我就打开那个长达15000行的代码,提取出了里面要支持的设备,总共有1600多种设备。与众多的设备相比,操作并不复杂,这1600多种设备总共支持9种操作,每种设备都从这9种操作中选出一种来。
这是非常清晰的逻辑,完全用不着15000多行代码做这件事情。我思考了一会儿,只要把这1600多种设备分成9个文件,每个文件对应一种操作就可以了。我又花了一些时间,把这1600多种设备分类,把原来的9种操作分别写了一个方法,原有的15000行代码被压缩成了200来行,毕竟那15000行代码,绝大部分都是重复的判断语句。
以后再添加设备,只需要添加到相应的9个文件之一,代码完全不需要改动。
周一上班以后,我把代码给潘新与潘闻看,他们俩个都表示我代码修改的非常好。我笑了,这一幕是我所最爱的,把一堆混乱的代码整理得井井有条,并且能得到同事们的认可,感觉这是平淡生活中少有的乐趣。
8. 潘闻要改进Java语言
也许在编程史上最戏剧化的小插曲之一就是windows编程日益衰落了。短短的几年时间,所有的windows程序员都不见了。而我不知道该说有幸还是不幸见证了这个改变。
当我在上大学的时候,最让人感兴趣的是给微软的windows编程,《Programming Windows》的书有几厘米厚,然而几乎是一夜之间,大家都开始给web和手机开发软件了。现在,我才意识到,当年死记硬背那么多方法是没有任何必要的。
一天早上,我如常的上班,坐在那里查资料。潘闻坐在我旁边,看着非常的勤快,他的鼠标在快速的点击,显示器上也显示着一大堆英文的资料,目不转睛的看着显示器,头向前伸着。我的余光看到潘新也在偷看他,脸上带着温柔的笑容。
看到他们兄弟这样的亲近,我也不免高兴起来。每当他们两个在争吵,我就会很难过,看起来,今天会是个好日子。潘新走到潘闻的旁边,问他弟弟在看什么?潘闻回答道:“在看一些Java的设计规范,也许我能改进一些。”听到弟弟这么说,潘新的眼睛里发出阵阵光芒,语速越来越快,他一股脑的把他所知道的知识全都倒给他的弟弟,末了,转过头对我说:“我今天出去有点事,你和潘闻来聊聊,看看他想如何改进Java。”说完,便一阵风似的出门了。
就在关门的同时,我看到潘闻的身子突然松驰了下来,开始端着茶杯一边喝茶一边上网。我试探的问潘闻:“你真打算改进Java?”
“看来你还是不了解情况。”潘闻说,他吹了吹茶杯的热气,笑得露出一口发亮的白牙,“我昨天在看Java的方法,感觉很简单,但是仔细一想又不简单,我说我想改进,只是为了让我哥高兴一下,不过我心里确实有几个疑问,我们来商量一下吧。”
潘闻说道:“你有没有觉得我们的代码写的太复杂了?”
“是啊,无论你做什么,用户的需求都会变的,所以软件自然就越做越复杂了。”我回答说。
“确实如此,前些天客户想找出所有带宽占用不超过30%的路由器。昨天又来问我能不能找出周末带宽占用不超过30%的路由器,这种需求真是让人头疼。有没有什么方法可以处理咱们这种情况呢?我倒是挺想改进点什么,比如,Java语言什么的。”
我听了以后,微微一笑,每个程序员都会碰到这种情况,其实,每个程序员碰到的新问题早就被先前的程序员碰到过,并且提出了解决方案。我问小潘说:“你可曾听说过有个叫行为参数化的技术?”
“没有,你解释一下吧。”
“打个比方来说吧,我们上了这么多年学,已经习惯了三点一线,知道怎么去学校,去食堂,回家。我们知道怎么去学校,怎么学英语,数学等。这相当于调用了一个go_and_learn()的方法。学校里的培养,总归是为了去社会上当个螺丝钉。于是,你毕业后,去公司打工,要做的事情其实和学校里没太大区别。老板让你去某个地方,拿些文件,学习这份文件。这还是相当于调用了go_and_lean()的方法。两者的区别可以通过不同的参数来体现,这里不同的参数是行为。”
“我有点明白你的意思了,我就是想要把用户的行为当作一个参数传进去,这样,我就不用再频繁的修改代码了。Java有这样的机制?”
“当然有这样的机制了,而且还不止一种这样的机制。”
“那讲一讲吧。”
“在Java中,你可以使用匿名类的方式来把行为当作参数传递到方法里,也可以使用Lambda方法来实现更简洁的代码形式。”
“我听说过Lambda方法,只是觉得它比较难,好像也没看到很多人用Lambda方法。是不是使用了Lambda方法,能让Java的功能变得更强?”
“Lambda方法是Java 8引入的,现在很多年过去了,接受程度已经比较高了。原则上,Lambda方法最主要的功能是让原来繁琐的代码变的简洁。原来做行为参数化的时候,一般是采用匿名类来表示多种行为,那样做的方式让人十分不满意:代码非常啰唆。啰嗦的代码会直接影响程序员在实践中使用行为参数化的积极性。”
小潘说道:“原来Java还有这么多没有大规模应用的特性啊?”
“是的,Java一直在不停的进化,甚至进化的有点太快了,新的特性层出不穷,以至于根本没有推广,下一个新特性就出来了。”
“推出这么多新的特性,如果没什么用,那干嘛还要不停的推出呢?”
我说道:“我推荐你读一篇论文吧,是1966年的一篇论文,作者是著名的计算机科学家Peter Landin,他写了一篇名为《The Next 700 Programming Languages》的论文 ,预测了接下来的700种编程语言是什么样子,其中就有Lambda。”
“竟然预测了700种编程语言,看来我想改进Java语言的想法还是太幼稚了。”
“当然不算幼稚了,以后还会出现越来越多的语言,哪个程序员不希望自己创造一种编程语言呢?编程语言就像生态一样,新的语言会出现,旧的语言会消亡。每个人都希望会出现一种语言能一统江湖,可是现实中不是这样。每种语言都有自己擅长的领域,C与C++在操作系统和嵌入式领域有很大的份额,因为它们运行的效率很高。Java和C#则的企业领域站稳了脚跟。只要你有心去做,一切都是有可能的。”
“那好吧,我还是先去找你说的论文来读一下,看看50多年前的人是如何预测的吧。”
9. 测试员阿轴
自从潘闻来到了公司,他哥哥把所有的杂事都推给了他,写代码,部署,客服,当然,还有软件的测试。这让潘闻十分的不满,但是又不能表现出来。
今天有点特别,哥哥潘新来到公司的时候,脸上挂着和蔼的笑容。我就知道,今天会是愉快的一天。他对我和他弟弟潘闻说:“今天有个好消息告诉你们。”
“快说吧,别卖关子了。”我回答。
潘新笑着看了看了,又笑着看了看他弟弟,这可是铁树开花的事情,他竟然在对着他弟弟笑。他说:“你们还记得上次修改代码,为了兼容不同的设备,把代码搞乱了的事情么?”
潘闻听到这句话,赶紧把头转向自己的计算机屏幕,手中鼠标的滚动速度增加了不少。但是潘新并没有责怪他,反而走过去用手拍了拍他弟弟的肩膀,说:“你不要紧张,我们就要有一位测试员了。以后的测试工作,你就不用干了。”
潘闻抬头瞪着他,我也抬头瞪着他,潘新很得意的说:“这个人是我亲自选的,她在日本一家公司里做测试,工作特别仔细,特别认真。”
“那她到底是个什么样的人呢?”潘闻问道。
潘新神秘的笑了一下,说:“这个很难说,但是一定很符合我们公司的气质。我可不想像有些公司,请一些美女做公司的门面,整天化着浓妆什么事情也不干,还美其名曰什么程序员鼓励师。我们公司可不需要那样的花瓶。”
潘闻脸部表情越来越疑惑,插嘴问道:“什么,我们公司不需要么?”
“当然不要!这样的人,每天在公司里走来走去,什么工作也不会做,还鼓励师,我看就是会打扰程序员的工作。还有一件事,公司有你在这里,我怎么会请一位鼓励师过来,你能放过她?”
“那你呢?”潘闻涨红了脸反问。
“好了,好了,现在说你。”潘新嚷道:“下午一点钟,她会来公司,到时候大家就知道了。”
正好下午一点钟,一秒不多,一秒也不少,公司敲门进来了一位女士。潘新急忙跑过去,对我们说:“我来给大家介绍一下,这位是何小轴女士。这位叫刘栋梁,这位叫潘闻。”
她身材高挑,胸部臃肿,瓜子脸,披肩长发。我和潘闻对视了一眼,认为潘新完全不懂审美,这完全就是个“程序员鼓励师”啊。
“叫我阿轴吧,我已经工作了五年,都是做测试的工作,很高兴与大家见面,以后可能会挑大家的毛病哦。”
这时,潘闻已经抢先一步说要带阿轴熟悉一下公司的项目,潘新只好答应。
目前,阿轴已经在公司工作了一年多了。测试员和程序员之间发生的故事,阿轴与我们之间每天都在上演着。
与她的名字一样,阿轴真的是特别的轴。她纠结于每一个不完美的地方,每个行为不符合预期的功能,以至于我们都有点怕她了。她有一个位置绝佳的办公桌,那个办公桌位于玻璃墙的一角。从那个位置,他向外能看到走廊和大厅,向内能看到老板的办公室。她工作细致入微,在短短半年内,就熟悉了公司的软件,还按照她在日本公司里的工作流程,做了详细的笔记和标签。只要有一个地方出现问题,她就能迅速的找到谁写的这段代码。
“潘闻,你过来一下,你的代码有点问题。”
这时候,潘闻生无可恋的从他的座位上站起来,拖着沉重的步伐走到阿轴的座位前。阿轴坐在她的计算机后面,一闪身,随手拉过一把椅子来让潘闻坐下。
“阿轴,有什么问题么?”
“当然有,要不我喊你过来做什么。”阿轴拿出做好的记录,开始一条一条的与潘闻确认。
起初,测试员阿轴刚来公司的时候,还是占据下风,毕竟我们早来一步。但是阿轴是一位勇敢且心细如麻的测试员,她有许多的技术来对软件进行残酷的测试,使你不得不佩服她的创意。每一次她喊我们的名字,总是会使人的血压突然升高。
今天也是如此,时间一分一秒的过去,我看着潘闻的脸越来越红,声音也越来越激动。但是阿轴依旧保持着相同的表情,相同的语速,一条一条的询问着。
最后,潘闻终于出来了,一句话也没说,自己坐在椅子上发呆。吃午饭的时候,阿轴又熟练的玩起了她那套打一巴掌给颗枣的把戏,给潘闻带回来一瓶可乐。潘闻对着可乐直摇头。
不可否认的是,我们的软件,真的是越来越稳定了。
老板都在考虑要不要在公司里推行TDD(Test-Driven Development,测试驱动型开发)。如果一旦推行了TDD,虽然不知道会发生什么事情,但是阿轴应该可以主导公司的软件开发了。
当老板问能不能用TDD开发模式的时候,我们陷入了沉思。
延申阅读:TDD开法模式
TDD开发模式是英文词组Test-Driven Development首字母的缩写,翻译为中文叫测试驱动型开发。
在这种方法之前,写代码的流程是先进行详细的设计,然后再进行编码,编码以后再进行测试。
TDD方式把写代码的流程反了过来,先编写测试代码,然后写代码让测试用例通过。如果出现错误,就再编写代码,直到所有错误消失,使测试成功。最后再改善代码,使其变得整洁。
习惯了传统的编码方式的程序员,可能会觉得编写测试代码是一件又枯燥又麻烦的事情。实际上,使用TDD这种先写测试后写代码的方式,目前越来越流行,最大的优点是能得到及时的反馈。
如果用传统方式来写代码,有可能在设计阶段就搞错了,等到了测试阶段才能暴露这个错误(如果运气好的话)。那么期间要经历很长的时间,至少跨越详细设计和编码这两个阶段,做很多的无用功。如果使用TDD的方式,先有测试代码,那么在设计和编码阶段肯定会发现错误,如果发现不了,那测试代码无法顺利通过。这个巨大的优点,也使得TDD被引入了敏捷开发之中,得到了广泛的应用。
除了编写新的功能,修改软件功能也可以使用TDD开发模式。在修改软件功能的时候,先准备好测试代码,就可以随时检验代码是否可以正常运行。
还有一点,因为测试用例会有很多,为了能确保每个测试用例都能通过,我们会有意识的对所编写的代码进行功能上的分拆,使一个功能对应一个测试用例,这样,会使代码更加的模块化。
难点也有,就是测试代码一定要写的通俗易懂,最好是可以用以描述设计文档。这并不容易,需要很多锻炼。
可能大家会有疑问,这个TDD开发模式和Java有关系么?
实际上,关系并不是很大,但是又有千丝万缕的联系。TDD开发严重依赖xUnit单元测试框架(其中的x在不同的语言中代表不同的字符或单词)。
推广TDD、敏捷开发和Java的人很多都是相同的一群人和公司,比如Rational Software公司。后来这个公司被IBM收购,该公司提出了UML、还对面向对象编程提出一些开发方法,同时,该公司有大量Java语言的先驱程序员。笔者所在的公司就在使用IBM的系列产品, 从那些产品中,可以看到Java与各种新开发方法(敏捷开发、TDD、重构等)有极深的关系。
10. 软件园冷暖
从地铁站到软件园的这条路,是我每天上下班都要走的路。初冬季节,天亮的晚了,我比平日要晚去一点。
有人地面推广工作人员沿街让人扫二维码下载软件,穿着一件卡通唐老鸭的衣服,头大大的,胸前挂着二维码。因为全身大部分都包裹在那件衣服下面,看不出性别,更看不出年龄。唯一没有包裹住的地方就是一双鞋子,从鞋子的粉红颜色上来看,大概也许是个年纪轻轻的姑娘。
她左手斜挎着一个印有公司logo的篮子,篮子里有一些类似钥匙扣、手环等一些小挂件。右手拿着一个捏一下,就会发出唐老鸭叫声的橡皮玩具。走一步,捏一下,响一声,像“秒针”一样记录着她的时间,仿佛那就是她生命的钟摆。行色匆匆的人们,从她身边闪过,甚至连头都没有转一下。在软件园这个寸土寸金的地段,我的脑海中闪现“一寸光阴一寸金,寸金难买寸光阴”的古老诗句。时间和土地,都标上了它的价格,有寸土寸金的地段,也有大片的荒芜。不要再说“寸金难买寸光阴”了,多少人为了一口饭吃想把自己的一生的光阴便宜的卖掉,还没人买呢。
唐老鸭对路过的行人点头鞠躬,希望能扫她胸前的二维码。在她鞠躬的那一刻,卡通头和卡通上衣之间的缝隙露了出来,一束黑色的长发铺在蓝色的外套上。看着她,也不知是黑色的头发,还是蓝色的忧郁,让我觉得很震动。仿佛一切成了慢动作,她鞠躬,她抬头,她又鞠躬,她又抬头,当然,并没有人停下脚步,她也目中无人似的,继续下一次鞠躬。再一想,总是这样跟着她后面看,万一她要我扫二维码了,这才三脚两步的走开了。
再走过去是一家店面,卖的是早餐,别家早餐店门口的音箱都是放着自家店的卖的吃食,“稀饭、包子、豆浆、油条、牛杂汤、牛肉面”,这家店的老板也许有些故事,他一年四季放着同一首英文歌曲《The Sound of Silence》,仿佛这高速的大城市,这缤纷的广告牌,这嘟嘟响的汽车喇叭,这吸溜吸溜吃牛肉面的食客,都无法耽误他听这首歌。我也喜欢听这首歌,耳朵如鱼得水,尤其是听到“The words of the prophets are written on the subway walls And tenement halls”心中总是泛起一些涟漪。听着这句音乐,转角就碰到了一堵铁栏杆做的墙,栏杆上还有微枯的藤曼叶,枯叶虚掩着巨大的一排字,是一个小学。
小学门口变得拥挤起来,家长开着私家车把小孩送到学校,车尚未停稳,车门便打开了,小孩从车上下来,随手把车门重重的关上,车便开走了。早餐店的英文歌还在唱着,可是歌词已经听不清了。小心躲避着急于奔向学校的学生,留意着店家橱窗又变了什么花样,店家的橱窗,和我们做的软件一样,不管代码写的如何的混乱,也要把最好的一面展示给用户,勾引起他们的购买欲。只有购买欲过度膨胀以后,为了买不必要的东西,便会想赚非分的钱,不惜说弥天的谎,甚至为非作歹。
快到软件园门口的时候,我掏出工牌,套在脖子上。有一次忘记戴工牌,被门口的保安拦在外面,工位就在几十米远的地方,却咫尺天涯,可望而不可及。我激动的和保安吵了两句,没想到惹怒了这位保安大人,他可能觉得只身一人和我争吵太过平淡,用手里的对讲机喊来了十来名保安来绷紧场面,目光四射,制服笔挺,非要吵到我司的领导亲自来领人才算结束。事后,还在门口贴了一张告示,凡不带工牌者,一律不得入内。自此,这个保安每次看到我,都要斜着眼看我的脖子上有没有套上工牌。最初,他并不斜着眼看我,但是他经不起我和他对视,只要他看我,我就微笑的从头到脚,从脚到头的打量他几次,这让他恼火,自此,他只斜着眼看我了。
进了软件园,一切所见的就都是我的日常工作了。在软件园中,无非就是三种人:老板、项目经理和程序员。当然也有美术人员,测试人员,这些干活的,都可以归为程序员这一类。要区分这几种人一点也不能。前几天,我就看到两个人谈话,没人抬举程序员,一旦受抬举,连程序员本人都会窘迫。老板翘着二郎腿指手画脚地在说,另一个人则坐在对面,只有猴子没进化成人之前长尾巴的地方坐在椅子上,双手放在膝盖上端端正正的坐着。像刘姥姥进大观园,张开嘴笑着,笑得舌头都发了凉。
程序员之间的谈话,则要激烈的多,也真诚的多。有bug就有bug,并没有程序员会可以隐瞒自己的bug,这能有什么关系呢?打个补丁就可以了,这是中国,中国的天都是女娲打了补丁补过的呢。
10. 潘新“试车”
离城市越来越远,路边开始没有护栏了。这条公路穿过城市的喧嚣,穿过拥挤的街道,穿过一片片树林,沿着河岸蜿蜒展开。我的车轮可以轻易的从柏油路滚到路边的草地上,我跟老板潘新说:“时间还早,要不要先下车看看风景。”
潘新简短的回答:“好。”
我把车子停在路边的野草上,脚下的绿草沿着河岸无际的展开。河里有几只不知名的鸟在游泳,岸边有放羊的牧人赶着吃草的羊,一切都像是我小时候在农村的样子,除了我能看到那个牧人在玩手机,还有一些远足的孩子在用四轴飞行器航拍河边的风景。
我靠在车旁,阵阵凉风吹过我的脸庞。我多么希望以后会住在这样的地方,品尝什么叫恬静,体会什么叫和谐。
仿佛在一夜之间长大了一样,今天我要和潘新去一家高科技公司,做自动驾驶的。这家公司的试车场建在远离城市的地方,今天我们要去谈一些合作的项目。
几年前,我们还在为买车到底是买手动挡还是自动挡争论不休,现在却已经在讨论以后买车要不要自动驾驶了。这个世界上,没有什么永远不变的事情,不止汽车,手机这些高科技领域发生了巨大的变化,畜牧业又何尝没有惊人的进步?老旧的养猪方法已经被科学化的养猪方法逐步取代,老一辈养猪人赖以维生的技术已经被新一代的科技巨头所超越,听说,有些高科技公司已经实现了猪脸识别,进步和变迁正紧锣密鼓的渗透到每一个领域。
谁不进步就要被淘汰,在这样的恐惧下,我们公司也开始布局下一个产业,以防自己像恐龙一样被淘汰。这次要来考察的正是下一个热门的行业:自动驾驶。
我轻轻的叹了一口气,和潘新钻回车里。说实在的,行业的剧烈变化让我们都感到沮丧,只有当我看到小草没变,山川没变时,心里才稍微好受一点。这时候,我总在心里默念陶渊明的诗:“天地长不没,山川无改时。草木得常理,霜露荣悴之。”
车子到了试车场地,接待我们的是一个项目负责人,他简要的给我们介绍了自动驾驶的项目。
“这么多摄像头?”潘新围着实验车转了好几圈,又不停的将脑袋伸到车里观望,一会儿摸摸这个,一会儿动动那个。“车子倒是不错,到底能不能开的比人好啊?”
“潘先生,我们现在的技术,在大部分时候都比人开的要好要安全,虽然不能说是100%,95%的情况下都比人开的要好。”这个项目负责人夸下海口说道:“我们这个车已经开了30万公里,已经达到了L4级别,也就是说你上车以后,基本上可以睡觉了。”他讲完这句话以后,脸上浮现了项目经理特有的自信表情。
“这是试车场吧?”潘新问道。
“是的,这个场地全是我们的,跑下一圈下来有10公里,里面模拟了各种路况。”项目经理回答说。
“你不介意我坐上跑一圈吧?”潘新又问道。
“当然不介意。”项目经理笑着说,“你只要坐在这里,就可以了,开得非常稳。”潘新坐进了副驾驶的时候,项目经理也自信的坐在了后排。我楞住了,我在思考是坐在驾驶位,还是不坐了,毕竟从来没有坐过没有司机的车。
这时候,我的老板扭头对我喊到:“你赶紧上来,坐后面。”我只好无奈的坐在了后排。车子发动以后,我死死的盯着方向盘的位置,感到非常的诡异,像有一个透明人在开车一样,方向盘自动转来转去。幸好车子速度很慢,只有不到50公里/小时。
他们讲了一路的话,我一句也没听进去,就死死盯着方向盘,谢天谢地,终于开完了一圈。
下车以后,项目经理说:“潘先生,我们这个自动驾驶可以模仿车主的驾驶技术,如果你在开的话,自动驾驶就会进入学习模式,你开的越多,自动驾驶就会有你的驾驶风格。”
潘新的眼睛里闪出了一丝光芒,兴奋的问道:“这是真的么?”项目经理回答道:“当然是真的”。这句话还没有传到潘新的耳朵里,他已经坐在了主驾驶的位置上,迫不及待的让我们上车,他要教自动驾驶开车。
我刚坐好,赶紧拉上安全带。伴随项目经理关车门的声音,车子已经咆哮着冲上车道,我听见项目经理一声惨叫,他的头刚好碰在后排头枕上。
车子在赛道上左右旋转,车轮在赛道上摩擦出呜呜的声音,还间歇的抖了几抖。在一条直道上,我右手死死的拉着把手,项目经理在慌乱中竟然握紧了我的左手,把我抓的生疼。我看到潘新兴奋的耸着肩,引擎在他的地板油下吼叫。
可惜赛道太短了,一会儿工夫就要跑完了。潘新说:“我们来试试刹车吧。”他刚说完,就不留余地把刹车踩到底,那部车发出嘶鸣,我觉得车子像螃蟹一样横着走了十几米才终于停下。车窗外的风景才慢慢的显露出本来的面目。
项目经理的脸还是白的,潘新转过头,用手疑虑的托着下巴,眼神中充满疑惑地问道:“怎么样?我这样开车,自动驾驶软件能学会么?”
“你以前不会是开赛车的吧?”项目经理惊魂未定的问道。
“我以前是开卡丁车的,可惜没坚持来下。”潘新回答道,“如果我这样开,自动驾驶还会学习我的风格么?”
项目经理沉默不语,若有所思。
“要不,咱们再开几圈试试?”潘新问道。
这时候,项目经理突然活了过来,眼珠胀大了一圈,急忙回答说:“我一会还有点儿事,这样吧,车你可以随便开,我得先走了,让自动驾驶先学习着,我们还真没有请个专业赛车手来做测试呢……两位先看着,我先走了,一会儿让同事过来,咱们再来研究数据。”
在回去的路上,还是我在开车。“你觉得自动驾驶会取代我们么?”潘新突然问我。我回答说:“会取代我,但是不会取代你。你真的开过卡丁车?”
“开过几年,人总有实现不了的梦想,你说是么?”
一路上,他没有再讲话,我也没有。
11. “外向”的程序员
我喜欢去乡村野外出差,公司里人人都知道了。因此,一旦有这样的机会,公司都愿意让我去,我也很乐意去远离城市的地方度过一段美好的时光。
得益于互联网,现在乡下和城市的关系在有些行业越来越紧密了。牛奶行业就是其中之一,城里的客户想了解奶牛厂的情况,他们想知道牛奶是不是干净无公害的,牛奶公司为了满足这样的需求,安装了监控,供广大的客户随时查看奶牛和牛奶厂的情况。
农场建在远离城市的地方,想拥有速度很快的带宽并不是一件容易的事情。我要去的这个农场就是如此,在群山环绕中,有一大片广袤的草地,我沿着山路开车,沿途看过来,颇有一番“风吹草地现牛羊”的风景。
来之前,我大体了解了这家农场的情况,农场有800多头牛,产奶的有400多头,一天可以产奶6吨多。已经在这里经营了20年,附近的城市都非常认可这个当地的品牌,农场除了养牛,还有其它类似农家乐这样的产业,让我们部署一个可以支持5万客户的监控。如果在城里,这没什么难度,但是这是在山上,奶牛又不上网,因此手机的信号非常弱,也没有光纤。
我到了农场以后,和工作人员说明了来意,结果所有人都很忙,分不出人手来与我接洽这个事情,让我先去屋里坐着等,于是我百无聊赖的等着。
“你是来部署光纤的么?请问尊姓大名?”突然有个姑娘边笑边问边向我走来。
“啊……是的,我是来看看能不能部署光纤的,别人都喊我栋哥。我要先看一下具体情况才知道能不能部署光纤,毕竟拉根光纤到这里,并不容易。”
“好,我带你在这里看看吧。现在工人都很忙,现在正是挤奶的时候,他们都在挤奶。我有个很好记的名字,不许笑哦,我爸妈可能很喜欢用雅芳洗发水吧,他们给我起了个名字叫雅芳。”
雅芳领我到了屋外,笑着对我说:“你是城里来的吧,今天可要爬爬山了,就当锻炼了,这里总共有8个奶牛饲养场,这8个分布在不同的地方,你可以瞧见那几个。”她边说边指了指山腰上几个白色的大房子。
我瞧着眼前这个叫雅芳的女孩说:“我当然不是城里人啊,我是农村长大的,农村做题家,现在在城里打工而已啦。爬这点山,对我一点难度也没有,要不选个最远的过去吧?”
“我们抄一条近路吧,就是有点难走,你还要带什么设备么?”
“好的,不用带设备,今天我只是来看看,大概估算一下距离,回去我写一份报告就可以了。”
她带着我穿过了一条深深的峡谷,这条峡谷一定经过了千百万年的冲刷,坚硬的石头已经被溪水冲成了深深的沟壑。石头缝里,松树坚强的伸了出来,遮天蔽日的松叶让阳光无法直射下来。我们就这样行走在松软的土地上,比地毯还要舒服,多少年的松针一层一层的堆积在脚下。
一路上,我跟她讲我认识的每一种植物,还有哪些植物能吃,哪些植物不能吃,哪些植物好玩,哪些植物味道难闻。看到这些多年不见的植物,就像见到多年前的老朋友一样。我如数家珍的告诉她这种植物叫马齿苋,做熟了很好吃。那种植物叫灰菜,无论怎么洗,怎么做,吃到嘴里总有一种沙子的感觉,所以叫灰菜,洗不完的灰。这种植物叫苘麻,用来做绳子非常结实,种子可以做润滑油。那种植物叫曼陀罗,动物都不会吃这种植物,武侠小说里的蒙汗药就是用这种植物的种子做的,我们小时候不怕死,就用种子冲水喝,太难喝了,像喝油漆,喝完以后天旋地转的……我滔滔不绝的讲个不停,她只是偶尔回应一下。
不得不承认,这些年的城市生活,让我的体力有所下降。我渐渐跟不上她的脚步了。她依然健步如飞,我却只能硬撑着追赶。终于爬上了这个沟壑,来到了一个白色的奶牛棚,走进去一看,才知道与我想象的不同,现在的设备比我想象的要先进多了,挤奶,喂料,甚至奶牛在里面的行走路线都是全机械化来控制的。我高兴的问东问西,而且,不顾她的阻拦,我喝了一小杯没有经过巴氏消毒的牛奶。
很快,她带着我走完了几个牛棚,回来的路上,可能她已经察觉到气喘吁吁的我,就和我在树荫下休息。峡谷里的水声响在耳畔,柔和的风带着花香徐徐吹来,伴随着一些不知名的鸟叫。我陶醉在这优美的风景里,仿佛互联网,会议和程序员都已经离我远去。
“你在这里工作可真是幸福,”我说,“每天都能看到这么好的风景。”
“我非常喜欢这里的生活,我也上过大学,而且,在大学里我也学的是计算机,应该跟你差不多的专业吧。”她停了一下,眺望着远方说:“看得出你确实是农村出来的,因为只有农村土地里长出来的孩子,才知道那么多植物。”
我不禁哈哈大笑:“是啊,做梦都想在农村呆着,光着脚丫在水库边上玩的日子,一去不复返了。”
接下来,我又跟她谈到我的工作,如何写代码,会碰到什么样的问题,然后一路谈到大学的生活,谈到小时候在农村生活的日子,谈到现在的同事,谈到潘新和潘闻,还有我那些一直没实现的梦想与抱负……
我从来不是一个外向的人,但是我今天竟然如此滔滔不绝的高谈阔论,甚至有时候我觉得她已经听烦了。但是她一直坐在那里,双臂抱住自己的膝盖在那里静静的听着,时不时的微笑。
“别人都说程序员都非常不善于交际,显然你有点例外啊,感觉你还是非常外向的。”她笑着说。
“不是有句话叫‘酒逢知己千杯少,话不投机半句多’么。其实,我也是不善于交际的,也许我这种性格属于依赖他人型外向吧,是因为你让我变得外向了。”
在返回的路上,我们又谈了一些,时间过得太快了。
“好了,我回去写一份可行性报告交上去,我会回来拉网线的。”我便侧身去开车门。
她微笑的回答:“谢谢你,最好能快点把网线拉好,让我们这个农村,也能早点用上高科技。”我把车子发动以后,放下车窗,和她挥手再见,她便转身回去了。
回去的路上,我一直在想怎么写这份报告,能让公司快点派我来拉光纤。
很喜欢栋哥之前写的计算机掌故博客,也拜读一下栋哥的作品~
《老人与手机》写得好,写出了乡村的美丽与贫穷、老人的可怜和无助,以及主人公可贵的善意,最后一句更是发人深省
栋哥,给机器买项链,我觉得好有意思啊,多好啊。
有只小蜜蜂想去月亮上,然后和同伴们一起行动起来,多好啊。
书本上的东西是死的,经验是活的。我离开大学不久,去一家电镀厂检修大功率可控硅电镀设备。万用表怎么测可控硅都是好的。解决不了耽误生产,领导从兄弟单位派人过来,只见老师傅只是把巨大的可控硅费力的拆了下来,用砂纸打磨干净接触面。再安装回去故障排除。我深感羞愧,应了栋哥小说中,书本上的东西是死的,经验是活的这句话
这本小说写的非常好,把IT跟实际生活场景结合起来,非常有意思,让人更进一步理解了IT的应用场景,特别是你那个数据与逻辑分离,那段故事很有意思。
栋哥和小潘,离开宇宙公司,自己开公司了
书不是阶梯,是远方的朋友,软件园冷暖,-要区分这几种人一点也不能