光标在终端屏幕上闪。绿色的。黑底绿字——和高中机房的QBASIC界面一样,和研一实验室的遗传算法一样。十年了,终端还是这个样子。外面的世界变了——手机从诺基亚变成了iPhone,网速从拨号变成了光纤,社交网络从QQ变成了微博——但终端没变。黑色背景,绿色光标,一闪一闪,像心跳。心脏跳的节奏十年没变——每分钟七十次。终端的节奏也没变——每秒闪烁一次。
十二月。北京的十二月比哈尔滨暖和十几度——但风大。西北风从内蒙古刮过来,干,冷,刮在脸上像刀背拍。出门走五分钟嘴唇就裂了——唾液蒸发比分泌快,嘴唇就裂了。玻璃幕墙挡了风,办公室里是暖的。暖气的热从脚下往上走,和设计院一样。
百度的节奏和设计院完全不同。
设计院:需求来了→画图→计算→校对→审核→出图。一个项目三到六个月,图出了就完了。管道埋进土里,一辈子不动。凝固了。
百度:需求来了→写代码→测试→上线→看数据→改代码→再上线。一个迭代周期两周。代码是活的——今天上线,明天发现问题,后天改完再上。改不完。永远改不完。产品经理每周提新需求——"导航里加一个避开收费站的选项""路线推荐要考虑实时路况""用户反馈说转弯提示太晚了"——每个需求都是一根新的支管,从干管分出来,不知道通向哪里,但先接上再说。
刘洋说:"代码不是图纸。图纸画完了就完了。代码永远在变——用户在变,数据在变,需求在变。你得跟着变。"
变。设计院不变的——管径定了就是定了,管子埋了就是埋了。CAD上的线打印成蓝图,蓝图变成钢管,钢管埋进土里——凝固了。凝固的东西安全——不会变就不会出错。代码不凝固。代码像水——今天流这个方向,明天改一个参数就流另一个方向。灵活,但不安全——改了一个参数可能整个系统就崩了。和管网不一样——管网里一个阀门关错了最多一栋楼停水,代码里一个参数改错了可能几百万用户的导航都挂。
白天的代码是百度的。路线规划、导航算法、实时路况、拥堵预测。代码写在C++里——性能要求高,Python太慢。Python一秒算一次查询,C++一秒算一万次。速度差了一万倍——和管径差一样,DN50的支管过水量和DN500的干管过水量差一百倍。
晚上的代码是自己的。
九点下班。回到出租屋——西北旺旁边的一个小区,一室一厅,墙皮有点翘,暖气片响,和哈工大寝室的暖气片一样——水在管子里撞弯头的声音。出租屋比寝室大一点——有独立的厨房和卫生间,但厨房没怎么用过,灶台上落了一层灰。卫生间倒是用——水龙头是手拧的,拧开哗哗响,和设计院的一样。关不紧就滴水。滴、滴、滴——每两秒一滴。百度的感应水龙头不滴水,出租屋的手拧水龙头滴水。两种龙头,两种生活。
打开笔记本电脑。Python环境。不是C++了——C++是百度的项目用的,写地图服务要性能。Python写数据分析快——几行代码就能拉数据、画图、跑统计。性能换速度——运行速度慢了,但开发速度快了。和管径一样——大管径过水量大但成本高,小管径过水量小但成本低。选哪个取决于需求。
Python装好了。从网上下载了股票的历史数据——沪深300成分股,日K线,2005年到2010年。数据存在本地硬盘上,CSV格式,每只股票一个文件。打开一个文件——日期、开盘价、最高价、最低价、收盘价、成交量。六列数字。每行一天。几百行就是几百个交易日。数字密密麻麻的,像计算书上的表格——但计算书上每一行都有公式推导,这里每一行只有结果。没有推导。价格从哪来的?从交易来的。交易从哪来的?从人的买卖决策来的。人的决策从哪来的?不知道。
K线图。赵启明在K线里找钱。我在路网里找最短路径。K线和路网有什么关系?
打开Python。写了几行代码,把CSV数据读进来,画了一张K线图——横轴是时间,纵轴是价格。红色的阳线涨,绿色的阴线跌。线一根一根竖着排,先是看不懂,看久了才慢慢能分出几种形状:长的、短的、带影线的、挤在一起的、突然拉开的。
然后在K线图上叠加了一层均线——五日均线。均线是五天收盘价的平均值连成的线,把每天的价格波动抹平一点,只留下更慢的方向。趋势向上,均线往上走;趋势向下,均线往下走。
节点变成了价格。边变成了时间间隔。权重变成了涨跌幅。
管网。路网。K线。
三个东西摆在一起,还不能说它们一样。但它们都能被拆成点、线、权重和约束。
写了一个最简单的策略:均线交叉——五日均线上穿二十日均线就买入,下穿就卖出。用历史数据回测——从2005年到2010年,沪深300指数。
Python代码只有二十几行。读数据、算均线、判断交叉、记录买卖、计算收益。二十几行——和当年高中写管道流量计算器的代码差不多。那时候代码也是二十几行——输入管径、算过水面积、算流速、算流量。简单的管子二十几行代码就能算。但管网优化不是一根管——管网优化用了三千行代码。
回测结果出来了。年化收益7.8%。同期沪深300指数年化收益12.3%。
跑不赢指数。
7.8%——比银行存款高一点,但比指数低。策略太简单了——均线交叉是量化交易里的入门级策略,人人都会,没有信息优势。赵启明说的"不对称"——这个策略没有任何不对称的地方。所有人都能算出五日均线和二十日均线,所有人都能看到交叉点,所以交叉点没有价值。
有价值的是别人看不到的东西——就像在管网的节点上,普通用户只看到水龙头出不出水,而设计师知道管径、水压、流速。信息不对称在管径里——知道管径的人知道水能流多少。
K线上的管径在哪里?
不知道。但知道方向是对的——用算法找模式,用模式找优势,用优势找收益。和在百度做路线优化一样:用算法找最短路径,最短路径就是优势。别人走拥堵的路你走通畅的路,你就比别人快。
周末。林小月从哈尔滨来北京。
她在哈工大读研究生——不是给排水,是材料科学。我们在一起三年了——从大三到现在。她的研究方向是高分子材料,和我的算法没有交集。她研究的是分子层面的东西——分子链的排列、交联密度、拉伸模量。我研究的是网络层面的东西——节点、边、权重、路径。一个往小处看,一个往大处看。
她到北京西站的时候我去了。穿了件厚的——她怕冷,哈尔滨的冷她习惯了,但北京的风她说"不一样——哈尔滨的冷是干冷,能扛;北京的风往骨头缝里钻。"
带她去了颐和园。十二月的昆明湖结了冰——冰面上有人滑冰,有人在冰上走。她说:"哈尔滨的冰比这厚。"然后去了后海——后海的酒吧街在冬天没那么吵,灯光从窗户里透出来,黄的红的,照在水面上。
"你是不是又想做别的事了?"
她问的时候没看我——看着后海的水面。后海没结冰,水是黑的,路灯照在上面碎成一片一片的光,像碎冰。
"什么意思?"
"你从设计院辞职来百度。现在在百度做了大半年了。我每次打电话你都在写代码——不是百度的代码,是你自己的代码。"
"嗯。"
"你在写什么?"
"数据。"
"什么数据?"
"金融数据。股票的。"
她转过头看我。眼睛里有路灯的反光——两个小点,像传感器上的绿色指示灯。
"你想做金融?"
"不知道。在看。"
"你每次都说不知道。从设计院辞职的时候说不知道。来北京的时候说不知道。现在又说不知道。"
我没有回答。后海的水在动——很慢,看不见方向,但水在动。水往低处流——后海的水往哪流?不知道。但它在流。
"你什么时候能知道?"
"快了。"
她说:"你总说快了。"
从大四她就开始问"你以后做什么"——那时候我说不知道。考研的时候她说"考完研你知道了吗"——我说快了。来百度的时候她说"来百度你知道了吗"——我说差不多。现在她又不问了——不是不想问,是问了也得不到答案。和管网的计算一样——算了一半不能出结果,出了也没用。算完才能出。
王强打了电话来。
"北京怎么样?"
"大。"
"人多不多?"
"多。"
"修车吗?"
"不修。写代码。"
"代码能修车吗?"
"不能。"
"那没用。"
他笑了。我也笑了。他的笑是粗的,从喉咙里出来的,像发动机打火那一下——突突突,三下就着了。
"你在哈尔滨怎么样?"
"能活。"
又是这两个字。能活。和王强说话不需要解释——能活就是能活,不需要说什么理想、方向、规划。车能跑就是能跑,不用问往哪跑。
"修车铺还好?"
"好。来了一辆途观,2.0T的,涡轮增压器坏了。修了三天。"
"修好了?"
"修好了。车主给了两条烟。"
两条烟。他的报酬不是钱——是烟。修车和写代码不一样——修车的报酬是即时的、可见的、实物的。代码的报酬是延时的、不可见的、数字的。他修好一辆车,车主当面给他烟。我优化一个算法,用户看不到我的名字——他们只看到路线比以前快了一点。
挂了电话。出租屋里很安静。暖气片在响——水在管子里撞弯头的声音。
打开笔记本。翻到"管网→算法→路网"那页。蓝色钢笔在"路网→?"的下面又加了一行:
路网→K线?
问号还在。但问号前面多了一个选项。
合上笔记本。钢笔放回口袋。屏幕上的K线还在——红色的阳线、绿色的阴线、黄色的均线。线在走——不是真的在走,是时间的推移让新的一根线长出来。每一天都是一根新的K线。就像管网里每一天都是新的用水量——今天的用水量和昨天不一样,明天的和今天也不一样。但管子在那里——管子不变,水变。K线的管子——还没找到。但在找了。