“轮子哥”,号称知乎三大程序员(与 @赵劼 @winter 并称“温赵轮”,概因其皆在微软工作,人称三大软狗。另据“路边社”报道,三人年薪皆过百万,于是另有号曰 “软狗三百万”。)江湖代号Vczh。本名陈梓瀚,因知乎的个人信息介绍上写有 “专业造轮子”,所以江湖人称 “轮子哥”。
“造轮子”的典故
软件行业有一个名言:不要重复发明轮子。意思是已经有的东西就不要浪费时间重新发明一个类似的东西。而轮子哥的意思是,即使已经有轮子了,虽然不必重新发明轮子,但是也要学会制作轮子,这样在造轮子的过程中才能了解有哪些坑并且能够把坑解决到,这样才能磨练技能。
Vczh 在他大学时代就在微软实习,毕业后即加入微软。开始时是在微软上海,后来进入北京的微软亚洲研究院。现已移居美国西雅图,在 Office 组做工程师。
因他每天无所事事(恩?),且逛知乎乃其一大爱好。其多于美女爆照问题之下点赞回答,只要时间线上出现轮子哥身影,必定很大概率有美图,日久年深,便形成一股风气,江湖人称”轮子哥带你逛知乎”,简称 “轮带逛”。关于「造轮子」,他本人在知乎上调侃道:这是一种开源社区的新项目的建立方法,主要内容是:卧槽这玩意儿写的这么烂,我写一个更烂的来恶心作者。(哇哦~)
轮子哥的个人简介
所谓 Vczh 者,岭南人也,诞于 1987。学于华南皇家理工。其母精于外文,喜爱雅乐,尤善教学,方三十许闻名岭南。其父亦爱雅乐,然运途数转,以其明是非善赏罚,虽中道失意,终得重任,其酬尝高于 Vczh。Vczh 其家学渊源,天赋异禀,尚在襁褓即闻乐止泣,稍长,能识音律,虽不能言,然随乐哼唱,亦有章法,父母甚异。
介绍这么多,那“轮子哥”为啥叫 Vczh 呢?
一说:
vc=visual c++ | zh为字符集,合起来是中华微软好儿郎~
另说:
V即Victor 英文名 + czh中文名首字母,说来说去都是他寄几!
另附上一个网上对他的往期专访,我们一起来看看他的代码传奇经历~
回顾走过的编程之路
我有幸从初二开始就学习编程。那个时候正值购买电脑半年,处于看见什么东西都感到十分好奇的时候,再加上父亲那个时候不太同意我玩游戏,所以我就在想什么时候也自己做几个游戏,就可以光明正大的玩了。所以在听到汕头华侨中学开 Visual Basic 5.0 的课的时候,感到比较兴奋。但是其兴奋程度比起初一为了上第一节电脑课兴奋过度,骑自行车超速以至于留了一大堆血没了几颗牙的那一天,已经可以忽略了。
那个时候还是 21 世纪的第一年,正处于上网费用巨贵无比、Google 还刚起来没多久基本没人知道的时候,学习编程要比现在困难很多。当时想寻找什么知识,因特网基本上是没什么指望的,所以我就有了一个没事去书店的爱好。
没过多久我就找到了一本《Visual Studio 高级图形程序设计教程》。这本书我很喜欢,插图十分漂亮,而且还是使用 Visual Basic 编程绘制的,更是爱不释手。可惜内容过于高深,所以后来就有了初三的时候自学学会初步的立体解析几何,以及高三上课不听讲仅凭自己看数学分析后来还被我看明白了的故事。
从此以后我对符号运算就十分拿手。而且做数学物理作业也好,为了编程推导公式也好,需要计算的东西太多懒得到处寻找废纸,从而便获得了心算复杂过程的本领(可惜现在已经丧失了)。这顺带还给我带来了一个好处,就是高考数学选择题在发卷后不许动笔的 10 分钟内就被我全部心算出答案,而且全对了。
图形编程做久了,就想起了当初的理想,于是就搞游戏去了。那会儿看到了成都金点工作组开发的《圣剑英雄传》,点燃了我开发 RPG 的热情。
在经历了几次失败之后,我终于在高二的正月初一那一天完成了《天地传》的所有编码工作,没过多久就上传到了 GameRes 的网站上。
这是我第一个行数过万的程序。为了顺利完成它,我悟到了很多道理,包括为什么要面向对象,为什么要划分模块减少互相依赖。这也成为我后来开发自绘图形界面和脚本引擎的契机。后来我试图用 OpenGL 做 3D 游戏,但是由于很难找到有共同爱好的美工跟我一起做,便作罢了。但是这却让我获得了很多时间,可以投入到图形界面和脚本引擎之中去。
后来我就萌发了解释高级语言的想法。这是我整个编程历史上的第一个转折点。那个时候去解释高级语言自然是比较困难的。因此我经过很多天的苦思冥想自己想出了一个如今称之为一遍编译(也就是很烂)的方法来把一个简单的高级语言重新处理成一个简单的指令集语言,就跟汇编长得差不多。
那个时候已经高三了,所以其实也没多少时间可以投入在编程上面,因此做出来的第一个原型是一个简化后的 Pascal 的解释器,用 Delphi 开发的。现在想起来,里面肯定有巨多内存泄露和性能问题,不过当时根本不知道这些东西是什么。在高中毕业之后的三个月无所事事的日子里,我就重新把这个东西设计了一遍,得到了一个几十页的计划。由于后来没来得及做完,就打印出来带去了华南理工大学。
后来我陆陆续续写了很多脚本引擎。大一的时候做的 JoveScript 是第一个我觉得还能见人的脚本引擎。第二个就是大二失败了一整年吸取了很多教训之后,于大三开发出的动态语言,名字叫 FreeScript(可以在我的博客 http://www.cppblog.com/vczh 上找到)。
毕业后我又雄心勃勃地做了 NativeX,是一个带泛型以及 concept mapping 的 C 语言。前几个月我又试图山寨 C#,但是无奈 C# 实在是太复杂,所以转而去做 GacUI。图形界面(GUI)类库我也写了不少。继高中的时候为 RPG 而开发的两个控件类库之后,在上大学的过程中使用 OpenGL 开发的两次 GUI 类库均告失败。后来还封装了一次 Windows 的 API(Vczh GUI),试图让其易用性接近 VCL 或 WinForm。
回顾一下自己的编程之路,学生时期大概就是从一开始写游戏,到写游戏引擎,到专门搞游戏引擎需要的图形、GUI 库和脚本引擎,最终由于精力的关系生下了 GUI 库和编译器。
我从一开始设计脚本引擎的时候就很注意脚本如何暂停的问题——其实基本就是源自于游戏的需要——于是人肉做了 coroutine 的各种奇怪的实现方式。到了最后终于学习到了正统的方法,于是本来可以很简单的完成的问题,由于后来需求就是复杂了那么一丁点(说白了就是要让脚本也可以 customize(或者说 hack)coroutine 相关的类型系统的一部分内容),导致了需要用无限复杂的方法来实现 coroutine。人类为什么要互相伤害?
到了工作,终于还是干起了老本行——给 Office 的程序员开发内部的编译器了。
至于轮子哥的水平到底有多高?我们一起看看他身边好友是怎么爆料的:
1. 当时我还在微软 office 组实习,身边一水的大牛,其中不乏 c++标准委员会的神级人物,有一次碰到了一个问题需要跟轮子哥对接,轮子哥顺手发给了我一个文件,告诉我这是他负责板块的文档,可是我发现里面全是 c++代码,虽然每个关键字我都认识,但是高深莫测的组合与编程思想让我一头雾水,而且并没有什么注释,轮子哥却告诉我这 c++代码就是注释,他平时是用机器码编程的,理由是编译器太慢了。
2. 有一次路过轮子哥的工位,看到轮子哥在看满屏幕的二进制码,我问轮子哥这是在写什么项目,轮子哥告诉我他在看一部叫《李狗嗨》的日剧,我很疑惑,明明一堆二进制的数据而已,轮子哥告诉我他读取二进制文件直接在大脑里转化成视频就行了,原因是播放器太慢。
3. 有一次我忘记了电脑一个被 sha256 多次加密过的一个文件的密码,急的焦头烂额,恰好轮子哥路过,用半分钟写了一个时间复杂度为 n/∞的一个解密算法,瞬间帮我破解了密码,事后轮子哥说这次比上次慢了 1000 倍。
4. 一次我的操作系统一直出现异常,好久都无法彻底解决,需要花两个小时重装一下操作系统,轮子哥巧合路过,用 20 分钟通过机器码帮我重写了个操作系统,顺便做了个优化,从此以后我的电脑编译一个 100w 行的 c++工程只需要 3 秒钟。
5. 有一次跟轮子哥一起玩《绝地求生》,轮子哥 90 杀带我吃鸡,但是轮子哥玩这个游戏从不用鼠标,只是通过命令行不断向服务器丢数据包,不一会身边的人全死光了。
6. 跟轮子哥共事很久,但是从来没见过轮子哥刷过知乎,有一次问到轮子哥都是什么时间刷的知乎,轮子哥说他从没用过知乎,可能是几年前在服务器上写了一个以自己命名的 ai,大概 500 行代码只有基本的思考能力。后来又说到了陈萌萌,轮子哥说可能是那个 ai 给自己造了个夏娃吧。
(轮子哥是一个翻译器都认识的男人!)
到这里,小编不禁感慨:哈,真是个可怕的男人……
这还完全没有结束,据坊间传闻,有这样一个疑惑:
emm……
轮子哥干货直达链接:
博客:http://www.cppblog.com/vczh
知乎专栏:https://zhuanlan.zhihu.com/vczh-nichijou
你还知道轮子哥的哪些小事?留言爆料吧~;)
- THE END -
下期代码传奇的主人公:
他被称为“中国第一程序员”,25岁就凭一己之力击溃“英美联军” 。20年前,在中关村随便招呼一声,立马会围过来千余粉丝,可谓比盖茨还火。他曾果断拒绝微软75万美元年薪,只为打造独一无二的民族品牌……
猜猜看
欢迎留言评论~
点击图片get更多精彩
14个你可能不知道的JavaScript调试技巧
爬了知乎200万数据,图说程序员都喜欢去哪儿工作~
前方高能 | 你写过什么有趣的程序?最后一个笑出猪叫