包裹是从东莞寄来的。纸箱外面缠了三圈胶带,胶带上有快递公司的红字——"顺丰速运"。拆开——泡沫颗粒撒了一桌子,白色的,很轻,手指一碰就飘起来了。泡沫里面是一个小金属齿轮。齿轮比拇指肚大一点,银灰色的,表面有极细的纹路——不是车削的纹路,车削的纹路是螺旋形的,和螺纹一样;这个纹路是一圈一圈的,像年轮。年轮是树生长的痕迹——一年一圈。这个纹路是层堆积的痕迹——一层一圈。
齿尖很锐。用指肚摸了一下——不割手,但能感觉到每颗齿的轮廓。精密的。比我在设计院见过的任何铸铁管件都精密。铸铁管的管壁粗糙度系数是0.013——PVC管是0.009。陈默这个齿轮的粗糙度——估计不到0.001。人眼分辨不出来的精度。
箱子里还有一张纸条,陈默的字——字还是那样,横平竖直,像铁件上的刻线。刻线用刀划的,他写信用钢笔——字和刻线一样,不用力,但清楚。纸条上写着:
"样品。钛合金。3D打印。"
三月的北京还没暖和,窗外刮风。风把窗户吹得嗡嗡响——出租屋的窗户是铝合金的,密封不如百度的玻璃幕墙,风从缝隙里钻进来,带着沙。把齿轮放在桌上——笔记本旁边,笔记本电脑旁边。三个东西排成一排:棕色的笔记本、银灰色的齿轮、银灰的笔记本电脑。三种灰——棕灰、银灰、亮灰。三种质地——纸、金属、塑料。三种来源——广西、东莞、北京。
陈默打电话来。
"收到了?"
"收到了。"
"钛合金的。SLM工艺——选择性激光熔融。激光把金属粉末一层一层烧融,叠起来就是零件。"
他的声音比以前高了——不是激动,是另一种东西。自信?不完全是。是踏实——像一个人在说自己的手艺,手艺不用吹,摆出来就行了。和他在信里说"手上没新伤"的语气不一样——那时候是汇报,现在是展示。汇报是往上看的,展示是平着看的。
"一层一层?"
"对。每层二十微米——头发丝的三分之一。一层烧完,铺粉平台降二十微米,再铺一层粉,再烧。一层一层加上去。"他说"加上去"的时候语速快了一点——三个字挤在一起,像齿轮啮合那一下。
我在脑子里画了一下——和CAD的层一样。CAD里的三维模型也是一层一层切的——把管道的纵断面图切成横断面,一个断面一个断面地看。CAD的层是虚的——切完就没了,只是在屏幕上。3D打印是把数字的层变成实物的层。从虚到实。从0到1。
"以前做模具是减法——一块钢料,用车床、铣床把多余的切掉,切出来的就是零件。"他说。减法——我知道。他在东莞做模具学徒的时候做的就是减法——钢料夹在车床上,车刀一刀一刀切,切出形状。切出来的铁屑落在托盘里,一堆一堆的,像碎冰。"现在是加法——一层一层加上去,加上去的就是零件。减法是去掉不需要的,加法是只留需要的。"
减法和加法。两个方向。减法从有到少——切掉多余的,留下需要的。加法从无到有——一层一层加上需要的,不多不少。
"就像你写代码——"他顿了一下,"一行一行加上去。不是从一大块代码里删掉不需要的,是从零开始,一行一行写。"
他说"写代码"的时候语气很平——他不知道代码长什么样,但他知道"加"的意思。加法——一层一层加,一行一行加,一个一个加。他和我的方向不同,但方法一样:从零开始,往上叠。他在东莞做加法——金属粉末叠成齿轮。我在北京做加法——字符叠成程序。
"华光怎么样?"
"华光三维科技。华是华人的华,光是光光的光。"他说名字的时候笑了——很短的笑,像齿轮啮合那一下,咔的一声。"我负责技术。团队十二个人,三台设备——两台SLM,一台SLS。"
"SLS?"
"选择性激光烧结。和SLM差不多,但是不用把粉末完全熔融——烧结就行。烧结的零件力学性能差一点,但成本低,速度快。做原型件用SLS,做最终零件用SLM。"
他说的专业词汇比以前多了——SLM、SLS、烧结、熔融、原型件、最终零件。两年前他还在说CNC、铣削、进给量、主轴转速。词汇换了——从减法换到了加法。词汇就是工具——减法的工具是车刀和铣刀,加法的工具是激光和粉末。换了工具就换了词。
"你名片上写什么?"
他停了两秒。两秒里面电话线里很安静——东莞到北京的信号很好,没有电流声。两秒的沉默像管子里的一段空管——两头有水,中间没有。
"技术总监。"
技术总监。陈默。初中辍学。电子厂流水线→模具学徒→CNC操作→模具设计师→3D打印技术总监。每一步都是手艺——手上越来越干净了,从铁屑到机油到金属粉末,但指甲缝里还是有洗不掉的东西。技术总监的手——不是工人的手,但也不是办公室的手。是手艺人的手。
"听起来——行。"
"行。"他说。就一个字。和以前说"手上没新伤"时候的"嗯"差不多——不多说。能少说就少说。齿轮不需要解释——拿在手里转一圈就知道好不好。手艺也不需要解释——看活儿就行。
齿轮放在桌上。每天上班前看一眼,下班后看一眼。上班的时候齿轮在笔记本电脑左边,下班回来齿轮还在——它不会动。钛合金不会老化——至少不在人类的时间尺度上老化。PVC管二十年老化,铸铁管五十年锈蚀,钛合金——几百年都不会变。齿轮比我活得长。
齿轮的齿数——数了一下,二十四齿。模数很小,齿的间隙用肉眼看不出来,用指甲才能感觉到——指甲在齿面上划过,咯咯咯,像手指在黑胶唱片上划过。黑胶唱片也是一圈一圈的纹路——声纹。齿轮的纹路不是声纹——是层纹。每一层是一次激光扫描留下的痕迹。二十四齿的齿轮,假设齿高五毫米,层厚二十微米——两百五十层。两百五十次激光扫描,两百五十次铺粉,两百五十次熔融。和代码的循环一样——for(i=0; i<250; i++) { scan(); spread(); melt(); }。循环两百五十次,齿轮就出来了。
精度——陈默说的二十微米层厚,意味着齿面的误差不超过二十微米。二十微米。两根头发丝的宽度。
设计院的铸铁管壁厚公差是正负一毫米——一千微米。陈默的齿轮精度是管件的五十倍。
加法做到的精度比减法高——因为加法只加需要的,不多不少。减法是先多后少——先切大块再精修,精修的时候刀具的振动、材料的应力释放都会引入误差。加法没有这些问题——每一层都是精确的,层与层之间的误差不会累积——因为下一层是在上一层的基础上加的,不是从头开始的。
代码也是加法——从第一行#include开始,一行一行加。没有多余的行——写多了就删,删了再加,加到刚好能跑为止。遗传算法的代码从两百行加到三千行——每一行都有用,没有一行是多余的。多余的代码像多余的管子——增加了成本,没有增加流量。
但代码有bug。bug是加法里的错误——加了一行不该加的,或者加的位置不对。和3D打印的缺陷一样——某一层的激光功率偏了0.1瓦,那一层就薄了一点,上面的层在薄的基础上继续加,加到最后齿轮就歪了。歪了一点点——肉眼看不到,但受力的时候会偏。代码的bug也是——运行的时候某个分支走进了不该走的路径,输出就错了。错的不是整个程序——是某一个条件下那一次运行。和3D打印的缺陷一样:不是整个齿轮都废了,是某一个齿面差了一点。差一点——有时够用,有时不够。
陈默的齿轮没有缺陷——至少肉眼看不出来。他的手艺在质量控制上——每一层烧完他检查,检查通过了再铺下一层。和代码审查一样——写完一段代码先自查,查完了再提交。每一行都要过。
翻到笔记本空白页。蓝色钢笔。笔尖在纸上划过,墨水在纸面上留下痕迹——蓝色,和CAD里的标注线一样。
"陈默做的是加法——一层一层加。我做的也是加法——一行一行写。王强做的是修补——一个一个修。赵启明做的是减法——一点一点去掉风险。"
写完看了一遍。四个人。四个方向。四种手艺。
陈默加——把金属粉末加成零件。从粉末到齿轮,从散到聚,从无到有。
我加——把代码行加成程序。从字符到算法,从零到三千行,从空白到运行。
王强修——把坏掉的零件修好。从坏到好,从故障到运转,从停到行。
赵启明减——把风险一点一点减掉。从不确定到确定,从波动到稳定,从多到少。
四种方法,四个方向,四种活法。加法的方向是创造——从无到有。修补的方向是维持——从坏到好。减法的方向是控制——从多到少。
哪种最好?不知道。
王强的修车铺在哈尔滨——车坏了修,修好了继续跑。他的循环是坏→修→好→坏→修。永久的循环。车总会坏——零件磨损、油液老化、电路故障。修不完。但他不焦虑——车坏了是正常的,修好就行。他的哲学在手上——手摸得到的问题,手就能解决。
陈默的齿轮在桌上——钛合金的。银灰色。二十四齿。层厚二十微米。从零开始,一层一层加上去的。
和我写的代码一样。和我优化的管网一样。从零开始,一个节点一个节点加上去的。管网从水源节点J-1开始,一个节点接一个节点,接到了J-12就成了一张网。代码从第一行#include开始,一行接一行,接到了三千行就成了一个程序。
拿起齿轮。轻——钛合金密度低,比钢轻一半。但硬——指甲在齿面上划不出痕迹。轻而硬。这是加法做到的东西——减法做不到这么轻。车削一块钢料,能做出硬的,但做不出这么轻的。轻要从材料本身来——钛合金粉末一层一层烧上去,该有的地方有,不该有的地方没有。不多不少。
放下齿轮。继续写代码。百度的代码——路线优化。四百毫秒。北京的六万多个节点。加法。一行一行加。
窗外北京的风还在刮——三月的风。沙打在窗户上细碎地响。和齿轮的齿啮合的声音差不多——咯咯咯。精密的、规律的、不知疲倦的。