“温赵轮”三大软狗,你听说过吗?今天的1024访谈录给大家介绍的就是程序员中当之无愧的偶像组合——温赵轮。
- Winter寒冬。阿里P8,正在向P9的道路上奔跑。传说中的他有钱、出身好,可不是搞互联网的屌丝程序员。
- 老赵,又名赵姐夫。小姨子遍天下。近几年奔波不断,从深圳到香港再到休斯敦,目前就职于美国最大银行摩根大通投行部,开发公司内部的交易程序。
- 轮子哥Vczh,@GeniusVczh。曾在微软亚洲研究院工作,现在在微软西雅图总部。是个对知乎潜在威胁很大的人,很多人取消对轮子哥的关注后反映没什么可看的了。
他们三个都很高调,擅长炫富、炫技术,搜狗拼音输入法已经把“轮带逛“收录到了搜狗联想词中……
曾几何时,程序员的形象就是熬夜搬砖的苦力,现在,人们心中的程序员形象已经逐渐发生了改变。他们有知识、有态度、多金,而且是时代的弄潮儿。今天我们的采访对象“温赵轮”就是三位具有代表性的程序员。生于80年代的他们,如今已经走上了事业的巅峰,而IT行业也迎来了前所未有的黄金时期。他们是如何掌握这个时代最被重视的知识和技术的?在这个美丽新世界里,拥有选择权的他们又会作出什么样的抉择?让我们来一探究竟吧。
你是如何学习计算机编程的?
老赵:我是大约初中的时候家里买了一台586电脑,看着似乎不算晚,但跟绝大部分小伙伴比起来都不算早了。当时虽然已经有Win 3.1了,但主要用的还是DOS
6.22。因为我要玩游戏,又嫌DOS命令太麻烦,于是就靠一本中文的DOS 6.0手册写了一个BAT文件,在启动时自动执行。这个BAT会绘制展示一个菜单,可以通过键盘来上下翻页或进入一个游戏,并在游戏退出时回到该菜单。说实话,这应该是我这辈子写过的第一个也是最复杂的一个脚本了(包括PowerShell及*nix Shell在内,现在偶尔也会用Node.js写)。当然,这也可能是因为我不太写脚本的缘故,假如是干运维的同学应该更有机会用脚本编写一些复杂的东西。随着游戏愈发复杂,我逐渐了解到自己是多么缺乏游戏天赋,于是逐渐就不玩游戏,只写代码了。随后的学习主要是看书和自己实践,想起来我当年看过的书平均来说真要比现在厚不少。当时主要使用VB和Delphi,除了自己写着玩以外也会和数学老师一起开发一些课件等等,同时也参加过一些NOI之类的编程竞赛。
学校的作用主要就是用来打基础了,现在想来学校教的东西那可都是个宝,可惜当时没学好,后来再补也不容易了,可能至今还比不过当时学的好的同学(除非他们已经忘光了)。我建议假如不知道学什么的同学,都可以把过去的课程都翻出来,然后找出国外优秀大学所使用的课本,好好读一下。当然,现在还有Coursera等网络课程,都可以利用起来。
Vczh:在我学习编程还没有走上正轨的时候,遇到的主要障碍是如何获取材料的问题。在那个拨号上网的年代,上网又贵又慢,所以只好刷论坛逛书店。记得那还是一个搜狐号称做出了一个搜索引擎天下无敌的年代,所以根本就不存在什么靠谱的搜索引擎。于是在持续的努力下,我终于学会了如何不使用网络来获取材料。
当然这种方法也是有局限性的,毕竟书店、朋友和老师的东西就那么一点。幸好在我的水平超过了这些来源所能提供的东西之后,搜索引擎和网络开始靠谱了,后面学起来也就越来越容易了。
Winter:我高中的时候玩文曲星,被朋友安利说里面有GVBasic,然后就用来做什么大炮对射(不是你们想的那样)之类的游戏。学校里参加ACM/ICPC,虽然成绩一般,但是过程中锻炼了编程能力,也结识了一批志同道合的小伙伴,这样的机会工作以后再没遇到过了。
你认为每个程序员需要掌握的最重要的技能是什么?
老赵:最重要的技能,可能是分析问题,思考问题,解决问题的能力。现在很多人都有点“书读得太少而想的太多”的意思,还没想清楚就开始做事情了,这是个坏习惯。把这方面的能力锻炼好了以后,无论是学习还是工作都可以事半功倍。
Vczh:数据结构、算法、设计模式、编译原理、数据库(主要是query plan是如何优化的、以及index、primary
key和foreign key为什么不会降低性能的那部分)、抽象代数。
Winter:(对于前端工程师来说)不同的级别需要的不一样,但总体来看,我觉得知识方面是各种Web标准、JavaScript语言标准的熟悉,和编程能力、架构能力、工程能力三者。
你认为数学能力对于程序员来说重要吗?为什么?
老赵:重要。事实上我认为,数学水平几乎就等于我上面提到的分析思考能力。这几乎直接决定了你所能解决的问题的深度,进一步决定了你的不可替代性。
Vczh:当然重要,我觉得至少数学分析和抽象代数应该学会,这对于程序架构的处理非常有用。
Winter:重要,对越高级别的程序员来说,数学越重要,极限场景的性能优化几乎都是靠数学来支撑的。但我并不赞同先学数学再学编程,现在的数学教学并不适合软件工程师,组合数学和离散数学可以重点学习,其他的用到再补就好。
你最喜欢的工具(操作系统,编程/脚本语言,文本编辑器,版本控制系统,shell,数据库引擎,其他你无法离开的工具)是什么?为什么更喜欢这个工具?
老赵:最喜欢的操作系统是Windows 10,不过这是站在一个普通用户角度的喜好,我现在连电视上接的都是一个联想的电脑棒,然后用一个配触摸板的无线键盘进行操作。作为开发人员来说我无所谓什么操作系统。
最喜欢的编程语言F#和Scala,脚本则是*nix Shell。我几乎不写PowerShell(一般是调用别人写好的脚本),就算是Windows下面我也靠BAT和*nix Shell解决大部分问题,这可能也是因为我也会使用OSX的缘故吧,既然自带*nix Shell,我也就不去点PowerShell技能了。
文本编辑器主要用三种,VS,VS Code以及Notepad++。VS自不必说,VS Code主要用来编辑一些如HTML,XML,JS以及Shell脚本等不太需要(或没法提供)强大智能提示的内容。Notepad++目前则主要是用来看log文件了,在VS Code出现之前也会用来编辑之前提到的那些。
其他都没有什么特别的喜好。
Vczh: Windows、C++、C#、Visual Studio、Git(hub)。为什么选择这些?当然是因为我可以只会编程,不需要懂其他任何东西(譬如如何救一个滚坏的系统),也可以写出专业的程序。
Winter:我比较喜欢的是windows+visual studio,但是命令行还是unix系比较好。然而不论如何,我并没有离不开的。网传我用记事本写代码,就是因为我真的是不怎么挑剔工具。究其原因,我觉得是因为我写代码速度是非常慢的,这导致我非常注重软件设计和可调试性,久而久之我认为其实我的大部分时间其实花在思考而不是敲代码上,所以自动补全什么的功能对我毫无用处,对工具也就没什么依赖了。
你最喜欢的和计算机编程相关的书是什么?和计算机编程无关的书是什么?
老赵:计算机编程相关的书有SICP,CSAPP,Algorithms
4th Edition,Code Complete,Java Puzzlers,以上是些马上想得到的书。忽然又想到一本书,叫Working
Effectively with Legacy Code,是教你怎么给烂代码擦屁股了,在实际工作中很有用。
编程无关的书我看的很少啊,有时间我都去看电视了,现在有了Amazon Prime后电视都看不过来了,哪儿还有时间看编程无关的书。以前看过的书里目前印象最深的大概就是《集异壁》和《三体》,但说特别喜欢也谈不上。
Vczh:对我起到重要作用的书有很多(参考:http://www.cppblog.com/vczh/archive/2013/03/24/198769.html ),但是一定要拿出最喜欢的基本的话,我认为是我出生那年写的 The
Implementation of Functional Programming Language,Foundations for Programming Languages 和 Types
and Programming Languages。和计算机编程无关的首推“第一推动丛书”系列。
Winter:最喜欢的书是《程序设计实践》,其中一位作者也是C语言作者,这本书特别薄,它讲的内容也恰好是市场上多数软件工程师缺失的技能。和计算机编程无关的,推荐《罗罗娜的异世之旅》,我最喜欢的小说,虽然是穿越,而且是男穿女,但是真的很可爱啊!
如果你有三个月的时间去学习一个相对较新的技术,你会选择什么?
老赵:目前ML很火的样子,那就学点ML吧。
Winter:最近比较想搞点3D,不然AR/VR时代一来,我这前端可能要没工作了呢。不过工作以后肯定没有三个月那么奢侈的时间啦。
你工作日的一天是怎么样度过的?
老赵:一般是早上八点半至九点起床,九点半左右出发去公司,公司不远大约15分钟公交车便到。偶尔也可以在家工作,主要看是否有需要和同事合作的内容,以及看心情如何。
然后便是普通的开发工作,例如写代码,擦屁股,解决各种问题等等。一般四点便会下班,这样我就可以有足够的时间用来备菜做饭,就算烤个鸡或肋排也足够,烤上去后还可以去跑个步。然后算准老婆到家时间开始做菜,等她到家时就可以吃饭了。
饭后则会继续工作一段时间,因为我的主要工作产出是一个核心框架,需要辅助北美伦敦以及香港三个地方的工作。有时候晚上还需要做点什么当作第二天的午饭。
Winter:我的工作日不是很有规律的,总的来说,无非是人和事。人的方面,一个团队人的选用育留,每年两次绩效。事的方面,救火、做需求、思考技术方案。这些事大约是随机出现的。
请问轮子,微软对你来说是否有哪些不可抗拒的吸引力?
Vczh:因为在微软,我就可以使用Windows、C++、C#、Visual Studio、Git(hub)来轻松搞定工作了。
Gaclib用的人很多,为什么贡献的人只有轮子你一个?
Vczh:其实有三个的,我主要负责几乎所有的事情,剩下两个负责给GacUI写OSX和Linux的Windowing Provider部分。我们的分工就像做一个操作系统,他们做驱动,我写系统,这样就可以很容易地弄出一个跨平台的C++GUI库了。我做这个库的原因是,根本找不到任何其他C++GUI库支持MVVM和Data
binding,让我可以做我自己的语言的IDE。虽然这是最初的想法,但是由于GacUI越来越成熟,现在中心已经变成GUI本身了。
能不能给大家分享一个关于机遇、能力、级别的故事?
Winter:那我就讲讲我在某公司做某框架的C++版本某已经有C#版本的组件的故事吧。因为我是刚毕业的新人,又是在中国团队,在做这个东西的时候,被要求follow它的C#版本的design,我当时没有意识到,这到底意味着什么。然而我发现,这个设计真的是太过于可怕,你能想到一个把循环链表代码硬生生展开在业务逻辑里是怎样一种执着么……所以整个项目的时间和质量完全超出了我的预期。结果最后很开心地背锅走人啦。
所以呀,我学会了两件事:1,不要相信级别,要相信代码;2,不要因为级别低,就不敢骂别人傻哔~。骂了让你滚蛋,你是英雄,没骂结果背锅,你也是傻哔~
关于个人职业发展,老赵你现在经常会说一句话;“这是命,得认。”能否仔细讲一讲这是一种什么样的生活态度?
老赵:这是一种积极的生活态度。认命,代表了承认世界上有一些东西是你无论如何也改变不了的,而且它们可能会对你的生活和发展起到决定性的作用。这样,当你成功的时候,你就会觉得这没什么值得骄傲的,不过是命好一点罢了,继续努力吧。当你失败的时候,你也会觉得这没什么好悔恨的,不过是命差一点,继续努力吧。
对轮子来说,“造轮子”最大的魅力是什么?
Vczh:造轮子指的是reengineering而不是reinventing。reinvent是不好的,reengineering是好的。这句话的意思是,少看代码多看书,而不是闭门造车。现在很多人都强行把造轮子翻译成reinventing,别有用心!
写代码对你来说意味着什么?
老赵:我曾经说过:“我不想当老板,我就想当码农,快乐地编码。”我现在想法没有变,我也是这么做的,感觉还不错。编码对我来说就是一个能够让我吃饱饭甚至过上还算不错的生活,外加我并不讨厌甚至还能带来成就感的工具。
Vczh:写代码对于我,就像别人打篮球玩游戏一样,是放松身心娱乐自己的一个重要活动。
对于考虑想要肉身FQ的程序员,有哪些忠告和建议?
老赵:我的建议就是,想清楚你到底要的是什么。
其实等你到了有能力肉身FQ的级别(外国公司不会千里迢迢招个小白过去),你会发现国内的收入并不会比FQ后差太多。比如我知道轮子主要是嫌北京空气太差而翻的墙,而我则是因为香港变成了一个暴乱都市,而公司又没在国内有分部因此才申请调出去。
我老板当时对我说:“要做好心理准备,美国不是天堂”。所以,假如你因为美帝空气好,食品安全,上网自由去美帝,没问题。但是,假如你轻信国内某些很奇怪的人的说法,例如美国福利好,看病便宜,税低等等,那么到时候生活会分分钟教你做人。
至于如何出国,现在我真觉得实在是太容易了。基本你只要像我前面说的,好好学习下大学课程,再努力提高一下编程水平(例如刷一下LeetCode),直接面试一个湾区大厂可谓轻而易举。真羡慕如今的年轻人。
另外,进一个跨国企业呆一年后申请出国也是个办法,甚至更稳妥。首先,你可以有充足的时间来思考要不要肉身FQ甚至实地考察一番。其次,等你真要翻了可以使用L1签证出去(我跟轮子就是这种),这种签证无需像H1B那样抽签,抽不到的话只能感叹“这是命,得认”。当然,L1有个缺点就是不能跳槽,而H1B跳槽容易。
Vczh:好好学习数据结构、算法、设计模式、编译原理、数据库(主要是query
plan是如何优化的、以及index、primary key和foreign key为什么不会降低性能的那部分)、抽象代数。一定要先娶老婆然后再过来美帝发展。
老赵和轮子都已经在美国了,你是否有出国的打算?为什么?
Winter:其实我是个前端,轮子是个写C++ GUI的(最近似乎转C#了?),老赵是个搞.net的,大家各有不同的职业发展规划。他们都在美国,我觉得实在并没什么共通之处。总之我觉得一切皆有可能啦。
你认为让“轮带逛”火起来的根本原因是什么?
Vczh:因为想让我带逛的外围女实在太多了,不过我都努力的不去带逛她们。
为什么曾经Winter在知乎上对关于“备胎”的问题那么感兴趣?
Winter:有人因为擅长而感兴趣,有人因为感兴趣而擅长。时间久了以后,理由已经不再重要,它变成你身上的一个符号,你也不记得当初是为什么走上这条路。
网上传言在“温兆伦”里面,Winter的收入是最高的,但是却没有比其他两个人更辛苦,这是真的吗?
Winter:一是不能单靠收入来衡量一个人。二是,其实大家薪资都是保密的啦其实谁比谁高应该互相都是瞎猜的好么……