“溫趙輪”三大軟狗,你聽說過嗎?今天的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:一是不能單靠收入來衡量一個人。二是,其實大家薪資都是保密的啦其實誰比誰高應該互相都是瞎猜的好么……
?