近40年码龄,从通宵写代码到三思而后行——专访云风
小學(xué)時(shí)跟隨母親去成人大學(xué)學(xué)習(xí)編程,初中開始參加信息學(xué)奧賽,高中寫出人生中第一個(gè)成熟軟件——Cview,大學(xué)發(fā)布開源軟件風(fēng)魂系列,后用于網(wǎng)易開發(fā)的《大話西游》《夢(mèng)幻西游》等熱門游戲,離開網(wǎng)易創(chuàng)立簡(jiǎn)悅科技……隨著云風(fēng)在游戲與編程領(lǐng)域的不斷深入,他的聲名也愈發(fā)廣為人知,成為大家口中的技術(shù)大神。“游戲做得好”“博客寫得好”“很極客的一個(gè)人”是大家對(duì)他的印象,“云風(fēng)大佬”“云風(fēng)大神”“云大”是大家對(duì)他的稱呼。
《新程序員》專訪了這位集游戲、編程、開源、創(chuàng)業(yè)、攀巖等標(biāo)簽于一身的極客,深入了解其三十多年編程生涯與人生感悟。
作者 | 田瑋靖
出品 | 《新程序員》編輯部
一位43歲的中年人,已有三十多年時(shí)光與游戲和編程為伴,恐怕全球都難找?guī)兹恕?/p>
生于1979年的云風(fēng),在電腦還是稀罕玩意兒的20世紀(jì)80年代初,便成為了他的玩具。電腦沒有顯示器,用黑白電視接,將《兒童計(jì)算機(jī)世界》中的程序按步驟寫入、運(yùn)行,就是最好玩的事情。
因?yàn)橛螒驉凵暇幊?#xff0c;又因編程做好游戲,云風(fēng)至今都在游戲與編程的世界中感受樂趣。如果讓一個(gè)超過30年碼齡的程序員對(duì)年輕人說點(diǎn)什么,他的建議是:想清楚再去做、多聽別人的聲音、抓住問題的本質(zhì)、把復(fù)雜的問題簡(jiǎn)單化、看清事物也認(rèn)清自己、做事情要專注、信任和你共事的人。
云風(fēng)。原網(wǎng)易游戲核心成員、杭州研究中心總監(jiān);后聯(lián)合創(chuàng)辦的簡(jiǎn)悅科技為現(xiàn)阿里游戲的前身。具有豐富的程序開發(fā)經(jīng)驗(yàn)。硬核游戲玩家。早期在 cfido 和水木清華 BBS 發(fā)表了多篇關(guān)于游戲制作的文章。1997 年開始維護(hù)的個(gè)人網(wǎng)站是最早用簡(jiǎn)體中文介紹游戲制作的網(wǎng)站之一,收錄個(gè)人文章超過百萬字,在游戲界頗有名氣。
談兒時(shí)與玩具
《新程序員》:你從小接觸游戲和電腦,大概幾歲萌生了對(duì)編程的興趣?
云風(fēng): 我在絢麗的街機(jī)廳看到電子游戲,是在八、九歲的時(shí)候,那時(shí)就想自己做游戲。小學(xué)時(shí)也寫過程序,但不成系統(tǒng)。
在我五歲的時(shí)候,家里買了一臺(tái)電腦,那是我爸的玩具。他給我寫了一些比較簡(jiǎn)單的游戲,也教我編程,但他覺得教不會(huì)。大概在我四、五年級(jí)的時(shí)候,課業(yè)較松,有很多自由時(shí)間可以支配,我就跟著母親去成人大學(xué)上一門Basic語(yǔ)言的課程,我每堂課都聽,并且認(rèn)真完成老師留的作業(yè)。課堂上基本都是四十多歲的中年人,只有我一個(gè)小孩,老師自然也就認(rèn)識(shí)我了。學(xué)完這門課程后,我做了一些小游戲,但當(dāng)時(shí)的能力還不能把東西完全做好。真正有把握寫程序,以及正式學(xué)習(xí)編程,是上初中后,1990年左右。
當(dāng)時(shí)我所在的中學(xué),素有奧賽傳統(tǒng),包括數(shù)、理、化與信息學(xué)。奧賽老師是我爸的大學(xué)同學(xué),由于在當(dāng)時(shí)想找一個(gè)會(huì)寫程序的人比較難,他就讓我爸去代課,我也順理成章地成為了我爸的正式學(xué)生。
初中幾年的奧賽經(jīng)歷,讓我對(duì)自己的編程能力充滿信心,覺得自己什么都能做。初三時(shí)還進(jìn)了奧賽省隊(duì),作為高中生的后備力量。那時(shí),初中生參加高中奧賽就算拿不到好成績(jī),也可以到上高中后繼續(xù)比賽,所以我在這方面非常積極。每逢暑假就去大學(xué),帶隊(duì)老師按本科課程教我們計(jì)算機(jī)知識(shí),算法、數(shù)據(jù)結(jié)構(gòu)、編譯原理等。
《新程序員》:那時(shí)的電腦有顯示器嗎?用這樣的電腦編程,是什么樣的感受?
云風(fēng): 很有意思,它對(duì)小孩來說就是玩具。我最早使用的電腦是Z80 CPU的港產(chǎn)機(jī)器——Laser310,這是一臺(tái)只有16K內(nèi)存的電腦。為了接顯示器,在電視還沒有普及的年代,我爸就買了一臺(tái)舊的9寸黑白電視。后來在初中參加奧賽基本都是用Apple II兼容機(jī)。學(xué)校機(jī)房使用的是中華學(xué)習(xí)機(jī),由于我爸在學(xué)校代課,就從學(xué)校機(jī)房借了一臺(tái)放在家里用。中華學(xué)習(xí)機(jī)比較簡(jiǎn)單,它有幾本配套書,講解硬件、軟件系統(tǒng),對(duì)于當(dāng)時(shí)的我來說,這是特別好玩的玩具,玩了好幾年。
《新程序員》:喜歡編程是覺得有趣,還是因?yàn)樵谟?jì)算機(jī)稀有的年代,會(huì)比其他小朋友厲害?
云風(fēng): 我從小到大身邊總有各方面比我厲害的人。我的父母屬于工薪階層, 經(jīng)濟(jì)條件不是很好,沒有給我買很多玩具。家里有一臺(tái)電腦,就覺得很有意思了,但早期沒辦法跟別人交流其中的樂趣。當(dāng)時(shí)《兒童計(jì)算機(jī)世界》創(chuàng)刊(1984年),刊登一些有趣的程序,我拿到以后,打開電腦。花兩、三個(gè)小時(shí)把程序敲進(jìn)去,運(yùn)行一下,覺得非常好玩。
上中學(xué)以后參加奧賽,并不是因?yàn)閷?duì)比賽多么有興致,而是因?yàn)槟玫胶玫谋荣惓煽?jī)可以被保送,保送就意味著不用參加高考。當(dāng)然,后來沒有保送成功,高考前雖然沒怎么復(fù)習(xí),但成績(jī)也不算太糟糕。
《新程序員》:高中時(shí)為什么會(huì)想做一個(gè)看書的軟件——C-View?
云風(fēng): 讀高三時(shí)玩撥號(hào)的BBS網(wǎng)絡(luò)(中國(guó)惠多網(wǎng)),大家用電話撥到一個(gè)固定的位置,傳送信件、下載資源。其中最多的就是電子書。在互聯(lián)網(wǎng)普及之前,BBS網(wǎng)絡(luò)在國(guó)內(nèi)流行了好幾年,求伯君、雷軍、馬化騰等人都玩過很長(zhǎng)時(shí)間。
我從小到大都喜歡看書,但沒那么多錢買書。我發(fā)現(xiàn)在電腦上看書可以省很多錢。在Windows還沒誕生的年代,DOS系統(tǒng)是使用最廣泛的,很多電腦甚至連硬盤都沒有。因此,我想做一個(gè)在軟盤上快速打開的電子書軟件,并自帶中文環(huán)境。初期發(fā)布在BBS網(wǎng)絡(luò),按照很多共享軟件的注冊(cè)頁(yè)面,照貓畫虎也做了注冊(cè)框,注冊(cè)費(fèi)10塊錢,并留了收費(fèi)地址。直到大學(xué)時(shí)間,都一直有人給我郵寄軟件注冊(cè)費(fèi)。也正因?yàn)檫@個(gè)軟件積累了一些用戶,所以上大學(xué)后又更新了一個(gè)版本,后來被《電腦報(bào)》的光盤收錄,在全國(guó)發(fā)行。
談?dòng)螒蚺c產(chǎn)品
《新程序員》:最近在忙什么?
云風(fēng): 最近兩、三年,由于簡(jiǎn)悅科技被阿里巴巴(以下簡(jiǎn)稱阿里)收購(gòu),我就脫離了管理工作。然后,興趣使然,我做了一個(gè)3D游戲引擎。原本計(jì)劃開源,但我覺得游戲引擎需要完整成熟,才能培養(yǎng)出好的開發(fā)社區(qū),因此在完善之前,還是閉源開發(fā)。因此,從2021年下半年開始,帶了五、六個(gè)人的小團(tuán)隊(duì),基于這個(gè)自研游戲引擎開發(fā)游戲。在做游戲的過程中,能夠發(fā)現(xiàn)游戲引擎的不足,逐漸完善它。目前是圍繞游戲來完善游戲引擎,等我們做下一款游戲的時(shí)候,就可以逐步把游戲引擎中通用的部分抽象出來。本質(zhì)上,做游戲引擎還是為了做游戲,游戲引擎只是其中的一部分。所以,我定義自己目前在做的事情,并不是游戲引擎,還是游戲。
目前在做的這款游戲,是手機(jī)端的單機(jī)游戲。定位于城市建設(shè)和自動(dòng)化,基調(diào)和我近兩年喜歡玩的一款游戲——異星工廠很相似。在2022年春節(jié),我們剛完成游戲的雛形。
現(xiàn)在的狀態(tài)也很舒服,不負(fù)責(zé)簡(jiǎn)悅大團(tuán)隊(duì)的事項(xiàng),又做著自己感興趣的事情,按現(xiàn)在流行的話說,我已經(jīng)財(cái)務(wù)自由了,不會(huì)為了賺錢去做什么事,也就沒有太大的業(yè)績(jī)壓力。
《新程序員》:果然自由的基礎(chǔ)還是財(cái)務(wù)自由。
云風(fēng): 財(cái)務(wù)自由只是一種流行的說法,其實(shí),自由不自由不在于有多少積蓄,還是看自身的個(gè)人需求。我沒有太大的需求,自然就感覺財(cái)務(wù)自由了。當(dāng)經(jīng)濟(jì)比較獨(dú)立后,來自外界的壓力會(huì)小得多。但我自己還是有壓力的,因?yàn)槲蚁Mo一起工作的團(tuán)隊(duì)一個(gè)交代,讓同事覺得工作有意義,生活也能過得比較好。
《新程序員》:你們現(xiàn)在忙嗎?
云風(fēng): 還算有點(diǎn)忙,但至少我負(fù)責(zé)的團(tuán)隊(duì),從不鼓勵(lì)加班。我們?cè)谕砩狭⑵唿c(diǎn)鐘就下班,下班后也不談工作。在我看來,做開發(fā)這項(xiàng)工作,最主要的是把事情想清楚,再按照計(jì)劃好的工作時(shí)間做事。比如一件事你做了兩年,回頭看有多少時(shí)間在做有效工作?可能你做了很多無謂的事情,占用了太多時(shí)間。你會(huì)發(fā)現(xiàn),最終有效工作花掉的時(shí)間并不多。因此,要少犯錯(cuò)誤、少走彎路,減少返工,這樣就會(huì)有很多時(shí)間被節(jié)省下來。如果事情沒有做好,我作為團(tuán)隊(duì)領(lǐng)導(dǎo)者責(zé)任最大,是我?guī)е蠹易吡藦澛贰?/p>
《新程序員》:你認(rèn)為做產(chǎn)品最重要的因素是什么,怎樣才能做一款被大家認(rèn)可并追捧的產(chǎn)品?
云風(fēng): 其實(shí)我不太做面向最終用戶的東西,而是更偏底層,是給其他程序員用的。不過我認(rèn)為,作為產(chǎn)品的首批用戶,首先自己要喜歡它,讓自己滿意。我不太贊成僅為迎合市場(chǎng)調(diào)研結(jié)果或別人的想法去做產(chǎn)品。自己喜歡的東西,總有人也會(huì)喜歡。如果自己不喜歡,就不應(yīng)該參與這件事。
《新程序員》:相比其他領(lǐng)域,做游戲開發(fā)的難點(diǎn)是什么?
云風(fēng): 游戲的前端開發(fā)決定著一款游戲給用戶呈現(xiàn)怎樣的畫面質(zhì)量和交互效果,一個(gè)永恒的話題是把圖形技術(shù)做好,而圖形技術(shù)的發(fā)展速度非常快,也比較復(fù)雜,需要投入大量的時(shí)間學(xué)習(xí),更新知識(shí)儲(chǔ)備。可能有些游戲不在乎畫面,但在國(guó)內(nèi)目前的大環(huán)境下,必須考慮這方面。而游戲的后端開發(fā),關(guān)系著游戲系統(tǒng)的穩(wěn)定性,系統(tǒng)不能出故障,即使出現(xiàn)問題也必須盡快修復(fù)。如果是單機(jī)游戲,就不涉及后端開發(fā)。
另外,游戲軟件和其他領(lǐng)域軟件,最大的不同在于時(shí)效性。通常,軟件開發(fā)關(guān)注輸入和輸出,輸入正確,輸出也正確,中間的過程無誤,程序員的事情就做完了。可能會(huì)去優(yōu)化代碼,讓它運(yùn)行得更快。但在游戲領(lǐng)域,如果不能在10毫秒內(nèi)把任務(wù)運(yùn)行完,拖延到20毫秒,就是不及格的,而這在很多其他領(lǐng)域,其實(shí)不是個(gè)事兒。游戲領(lǐng)域之所以特別強(qiáng)調(diào)代碼的優(yōu)化,是因?yàn)椤叭恕笔钦麄€(gè)系統(tǒng)的一部分。“人”的感受是決定了系統(tǒng)運(yùn)作是否合格。10毫秒運(yùn)行一個(gè)任務(wù)對(duì)用戶來說是“很流暢”,但20毫秒就意味著“卡”,損害了系統(tǒng)中“人”的感覺。因此,游戲系統(tǒng)中的許多事務(wù)必需在限定時(shí)間內(nèi)處理完,而這一點(diǎn)卻非常難以衡量。不同的硬件會(huì)有不同的環(huán)境,很難確定事務(wù)能否正確按時(shí)處理。
《新程序員》:很多偉大的項(xiàng)目往往由一個(gè)人或者一個(gè)極小數(shù)量的群體發(fā)起并成長(zhǎng)起來的,但在企業(yè)里,作為開發(fā)者缺乏高層決策能力,項(xiàng)目的開展也講求完美的計(jì)劃,多人頭腦風(fēng)暴,你認(rèn)為這兩者之間是否存在“矛盾”?
云風(fēng): 我個(gè)人不太喜歡多人頭腦風(fēng)暴,大部分時(shí)候都是在浪費(fèi)時(shí)間,只有極少數(shù)頭腦風(fēng)暴能帶來一點(diǎn)靈感。我們啟動(dòng)新項(xiàng)目時(shí),通常只在吃飯的時(shí)候,大家湊在一起聊一聊,很少在工作時(shí)間開大會(huì)。
首先,我個(gè)人比較反感開會(huì)這件事,我認(rèn)為做好工作計(jì)劃,大家各自執(zhí)行就好了,然后團(tuán)隊(duì)負(fù)責(zé)人盡量了解其他人在做什么事,做好溝通工作。一堆人為了溝通專門坐在一起開會(huì),是非常沒有效率的。
其次,項(xiàng)目做得好不好,最為關(guān)鍵的往往只在一兩個(gè)人。
談開源與貢獻(xiàn)
《新程序員》:你是什么時(shí)候關(guān)注開源的?
云風(fēng): 在讀大學(xué)的時(shí)候,1997年左右,彼時(shí)互聯(lián)網(wǎng)剛剛興起,大家使用的大部分軟件來自盜版。有一次我買到一張光碟,里面是各種各樣的非商業(yè)開源軟件。還買到過一套Linux的光碟。這給我?guī)砹撕艽蟮臎_擊,居然有光碟中不是盜版軟件,而可以合法免費(fèi)使用。我發(fā)現(xiàn),其實(shí)這個(gè)世界上有很多軟件并不是商業(yè)模式的運(yùn)作方式。后來,在學(xué)校機(jī)房下載到很多開源的開發(fā)工具,也做了一些開源的軟件,當(dāng)時(shí)只覺得做開源軟件供大家使用是件很有意思的事,而且在這個(gè)過程中可以認(rèn)識(shí)很多有趣的人,
當(dāng)時(shí)大部分軟件是英文文檔,沒有中文說明書,而我又很喜歡游戲引擎。機(jī)緣巧合,我接觸到了Allegro ,我就加了他們的郵件列表,寫郵件討論問題或回答別人的問題。當(dāng)時(shí)翻譯了這個(gè)游戲引擎的中文文檔,大概用了一個(gè)多學(xué)期的時(shí)間。因此還收獲了一個(gè)意外驚喜,我此前的的英文水平非常差,高考英文分?jǐn)?shù)很低,大學(xué)第一次考英語(yǔ)4級(jí)也沒過。我從來沒想到翻譯文檔能加強(qiáng)了我的英語(yǔ)應(yīng)試能力。第二次報(bào)考英語(yǔ)4級(jí),沒有備考卻竟然及格了。更巧合的是,我最近發(fā)現(xiàn)Allegro居然還在發(fā)展,而我最喜歡的異星工廠一開始就是用它開發(fā)的。
再后來我去網(wǎng)易工作,也是源于開源。當(dāng)時(shí)網(wǎng)易做《大話西游》的團(tuán)隊(duì),使用了我在網(wǎng)上開源的底層系統(tǒng)——風(fēng)魂,網(wǎng)易希望我兼職做底層渲染的開發(fā)。遠(yuǎn)程工作一個(gè)多月后,為了便于團(tuán)隊(duì)間的溝通,才正式入職網(wǎng)易。因此,從機(jī)緣角度來說,是我先做了開源軟件,才進(jìn)入網(wǎng)易做《大話西游》系列,并且一待就是十年。在網(wǎng)易期間還開源過一些小項(xiàng)目,用戶比較多的一個(gè)項(xiàng)目是Google Protobuf(通訊協(xié)議),很多年都是國(guó)內(nèi)游戲領(lǐng)域的一個(gè)事實(shí)標(biāo)準(zhǔn)。
創(chuàng)立簡(jiǎn)悅后,做了Skynet,它一誕生就用開源的方式,發(fā)布在GitHub上。因?yàn)槲耶?dāng)時(shí)在業(yè)界有點(diǎn)名氣,所以Skynet一經(jīng)發(fā)布就吸引了很多用戶。這個(gè)項(xiàng)目從產(chǎn)生想法到衍生出第一個(gè)可用版本,不到一個(gè)月的時(shí)間,發(fā)展至今,一直有很多用戶在維護(hù)它、完善它。
這也是我第一個(gè)擁有很多用戶并一直維護(hù)的開源項(xiàng)目。早在大學(xué)期間的開源項(xiàng)目,都是自己把項(xiàng)目完善后才發(fā)到網(wǎng)上。之所以在 Skynet 雛形時(shí)就開源,是受 Linus Benedict Torvalds(操作系統(tǒng)Linux之父、Git的開發(fā)者,以下簡(jiǎn)稱Linus)影響。2007年,Linux團(tuán)隊(duì)與BitKeeper(彼時(shí)是非開源但有條件免費(fèi)的版本控制工具)產(chǎn)生合作糾紛,Linus決定不再使用BitKeeper,大約三天后,Git(開源版本控制系統(tǒng))橫空出世。可能最初連1000行代碼都不到的Git雛形,一直發(fā)展到現(xiàn)在。很多開源的大項(xiàng)目都是從一開始就在眾人眼皮下生長(zhǎng)起來的。
除了上述事件外,我更多的是參與一些開源項(xiàng)目的開發(fā)。我們正在開發(fā)的游戲引擎使用了很多開源的庫(kù),基本每個(gè)使用過的開源項(xiàng)目,我們都參與了開發(fā),包括提修改、修補(bǔ)丁以及與主要開發(fā)者交流等。另外,我覺得作為一個(gè)開源愛好者,甄選合適的庫(kù)也是很重要的能力,非常考驗(yàn)一個(gè)人的眼光和讀代碼的能力。
《新程序員》:您如何看待開源的發(fā)展及它對(duì)世界的影響?未來開源還會(huì)向哪些方向發(fā)展?
云風(fēng): 世界上要解決的問題是非常多的,尤其是一些根源問題,但每個(gè)問題都只能找到極少的幾個(gè)人去解決。因?yàn)閷?duì)于程序員而言,做得好的人和做得不那么好的人,會(huì)相差幾個(gè)數(shù)量級(jí)。如果你需要解決的問題非常需要人去做的話,那么可能你在世界上只能找到那么幾個(gè)人可以把這個(gè)事情做好,不是說其他人做不好,其他人可能不關(guān)心這個(gè)問題,或者不是他的領(lǐng)域。如果這個(gè)前提正確,你就會(huì)發(fā)現(xiàn)很多基礎(chǔ)設(shè)施的問題和一些很專注的問題,若限定在一個(gè)公司里邊,根本找不到合適的人。只有群體足夠大,大到世界范圍,才可以找到對(duì)的人把事情做好或把問題很好的解決,我覺得這是開源最大的意義:把特定的事情和擅長(zhǎng)做這些事的人連接、聚集在一起。
正因此,不是所有的代碼都應(yīng)該開源,比如一項(xiàng)特別專注于某個(gè)領(lǐng)域或某項(xiàng)技術(shù)的業(yè)務(wù)代碼,開源沒有意義,因?yàn)椴恍枰泻芏嗳藚⑴c。反之,越是能被大眾廣泛使用的項(xiàng)目,越值得開源。游戲引擎同理,大家不需要把精力都浪費(fèi)在同樣的事情上。
當(dāng)然,開源的發(fā)展與互聯(lián)網(wǎng)的發(fā)展相互關(guān)聯(lián),如果互聯(lián)網(wǎng)不那么發(fā)達(dá),就沒辦法把世界各地、各種各樣的人連接在一起。舉個(gè)例子,為什么在早年間美國(guó)的大學(xué)之間會(huì)流行開源、黑客文化等?因?yàn)樗麄冇凶约旱木W(wǎng)絡(luò)。當(dāng)人和人不能順暢溝通的時(shí)候,就談不上做開源這件事,而開源又會(huì)極大地促進(jìn)互聯(lián)網(wǎng)行業(yè)的發(fā)展,因此我認(rèn)為,至少對(duì)于通用的、底層的設(shè)施,必然會(huì)走向開源,不應(yīng)該有第二條路。
《新程序員》:你對(duì)中國(guó)的開發(fā)者在開源領(lǐng)域,有哪些期待或倡導(dǎo)?
云風(fēng): 當(dāng)我們作為開源領(lǐng)域的參與者或貢獻(xiàn)者時(shí),最重要的能力不是代碼寫得比別人好多少,而當(dāng)我們作為一個(gè)開源項(xiàng)目的主導(dǎo)者,最重要的能力是與人溝通的能力,聽更多人的意見,求同存異。這和我們?cè)诠井?dāng)差不一樣,在公司里,大家都拿工資,下級(jí)需要聽從上級(jí)的安排,但在開源領(lǐng)域,大家可能都是“為愛發(fā)電”,只有信任才能讓彼此更好地協(xié)作,把事情做好,因此,通過網(wǎng)絡(luò)語(yǔ)言讓別人相信你的想法,愿意跟你共事,是相當(dāng)重要的。
另外,怎么讓你的項(xiàng)目吸引更多人,一起把你的項(xiàng)目做好,也非常重要。拿到一個(gè)開源項(xiàng)目,私下做一個(gè)分支,我不喜歡這樣的開發(fā)方式,我覺得對(duì)于開源項(xiàng)目,如果它是一個(gè)基礎(chǔ)設(shè)施,所有參與貢獻(xiàn)的開發(fā)者就應(yīng)該抱緊了朝一個(gè)方向走下去,即使這個(gè)方向有人并不喜歡,但可以先參與進(jìn)去,慢慢將其修正為自己喜歡的方向,或逐漸改變自己的想法,盡量減少分叉。對(duì)于這種情況,你需要花費(fèi)很多時(shí)間與參與者或用戶,也可以稱其為潛在的開發(fā)者,保持良好的關(guān)系。
談人生與感悟
《新程序員》:如今,你已經(jīng)有三十多年碼齡了,在你的編程生涯中,從前和現(xiàn)在的做事方式或觀念有沒有一些變化?
云風(fēng): 改變都是漸進(jìn)的,從趨勢(shì)上來看,我越來越趨向于寫更簡(jiǎn)單的程序,而不追求性能更好。但我想說,把程序?qū)懞?jiǎn)單,不論是空間性能還是時(shí)間性能都更容易變好。性能是一種自然而然的結(jié)果,不必刻意追求。
現(xiàn)在做事情也更有規(guī)律。二十幾歲時(shí),我經(jīng)常通宵寫代碼,一旦進(jìn)入狀態(tài)能寫到第二天早上七、八點(diǎn),還不覺得累,覺得一天能做很多事,非常有滿足感。而現(xiàn)在,我會(huì)在每天早上或頭天晚上臨睡前想好接下來要做什么事、幾個(gè)小時(shí)完成、大概怎么做,以及在每天下午四、五點(diǎn)鐘思考下一步的計(jì)劃。即使這個(gè)時(shí)間段我有很好的工作狀態(tài),也會(huì)去想下一步該怎么做、應(yīng)該在哪里停下來。在下班之前,我會(huì)把工作告一段落,并想好第二天怎么接著啟動(dòng)更好。如果是周五,就告一個(gè)大的段落,如果這件事比較重要,我在周末兩天也會(huì)思考,但不會(huì)動(dòng)手做。把事情分階段完成,講究節(jié)奏,不傾向于突擊,是我在做事方面比較大的改變,三思而后行。
《新程序員》:以你多年的從業(yè)經(jīng)歷來看,優(yōu)秀的研發(fā)人員具有哪些品質(zhì)和能力?
云風(fēng): 很多能力都重要,近兩年我認(rèn)為,比較重要的能力是抓住問題的本質(zhì)。就是可以用足夠簡(jiǎn)單的方法去解決根源問題,拋開中間的一些枝節(jié)干擾。
為什么我會(huì)強(qiáng)調(diào)用簡(jiǎn)單的方法?Keep it Simple and Stupid,即KISS原則。在20年前,我不完全理解這個(gè)道理,比如,我在大學(xué)期間以及剛畢業(yè)的時(shí)候,比較喜歡做程序的優(yōu)化,讓自己寫的代碼比別人寫的代碼跑得快。很多年輕程序員和我一樣,都喜歡炫技。但我現(xiàn)在看來,這些事不是解決問題的本質(zhì)。這與把事情做簡(jiǎn)單有什么關(guān)系?以前我認(rèn)為寫出復(fù)雜的程序并且不出錯(cuò)是一種出色的能力,可隨著時(shí)間的推移,我的代碼需要被別人維護(hù),可能還要和其他人合作,這時(shí)我們需要在這群人之間找到一個(gè)共同的基點(diǎn),讓代碼更容易理解。所以我們需要讓代碼足夠簡(jiǎn)單,讓別人一看就明白。什么樣的代碼是好代碼?并不是看上去好像沒有問題的代碼,而是看上去所有東西都清清楚楚,斷定它肯定不會(huì)出問題的代碼。
最近幾年,我寫程序很少炫技。炫技在短時(shí)間內(nèi)看,是用一個(gè)很巧妙的方法把問題解決掉了,但經(jīng)不起時(shí)間的檢驗(yàn)。把復(fù)雜的問題簡(jiǎn)單化,對(duì)程序員而言是一項(xiàng)非常重要的能力。
另一項(xiàng)重要能力是評(píng)估事物的能力,知道一件事情大概是怎么回事,需要多長(zhǎng)時(shí)間完成,需要什么條件完成,這是靠經(jīng)驗(yàn)堆出來的。也要對(duì)自身有清晰的認(rèn)知,這樣你才能規(guī)劃好你做整件事情的流程和時(shí)間,減少返工。通常一件事誰都能做,比如,同樣是2000行代碼,有人只需要兩天,有人卻需要兩周、兩月,為什么?當(dāng)一個(gè)程序員經(jīng)驗(yàn)不足時(shí),他評(píng)估一件事可以用兩天搞定,但他可能又花費(fèi)兩周甚至兩月來解決他做事過程中發(fā)現(xiàn)的問題,改錯(cuò)、返工,導(dǎo)致和預(yù)期完成時(shí)間出入很大。這就是能力的差異,否則程序員的能力差異體現(xiàn)在哪里?別人會(huì)的東西,你學(xué)習(xí)后也能掌握,所以真正在做事時(shí),能力的差異就在于一個(gè)人的評(píng)估能力。
《新程序員》:那么,有哪些人生感悟、研發(fā)感悟可以分享給大家嗎?
云風(fēng): 第一,做事情要專注。想好一件事情就去做,只要花的時(shí)間和精力足夠多,不三心二意,這件事終究會(huì)給你回報(bào)。每個(gè)人的生命都幾乎一樣長(zhǎng),你不可能比別人多出很多時(shí)間和精力,你也不會(huì)比別人差在哪或好多少,那么,一件事情做得好不好,就看你投入的時(shí)間多不多。但過程中是有方法的,不能蠻干,時(shí)常回顧自己怎么才能把這件事學(xué)好、做好,發(fā)現(xiàn)錯(cuò)誤或更好的方向,及時(shí)修正。
我現(xiàn)在40多歲,每個(gè)人從十幾歲開始明白這個(gè)世界的道理,到了40多歲,也就30年的時(shí)間,每個(gè)人都是30年。如果這30年間你都做一件事,那你會(huì)超越大部分人。對(duì)于任何事情,如果你處于金字塔上層的位置,就會(huì)覺得自己是個(gè)很有用的人。很多事情必需你來做才能做好的時(shí)候,自然而然,這個(gè)世界就會(huì)給你回報(bào)。
第二,信任和你共事的人,接受他們做得不好的方面。以把整件事情做好為主。每個(gè)模塊都按照你的想法做,通常是行不通的。你可以找準(zhǔn)你真正想要的那件事,圍繞那件事情,把它做好,其他事情放心交給你的伙伴。我反復(fù)講,人不會(huì)比其他人強(qiáng)多少,也不會(huì)差多少,你找對(duì)人一起做事,接納其他人的不同想法,求同存異,把整件事做好就可以了。
談興趣與偶像
《新程序員》:你是很多開發(fā)者的偶像,你知道嗎?
云風(fēng): 可能有感覺,但我很少談偶像這件事。
《新程序員》:你有自己的偶像嗎?
云風(fēng): 我可能會(huì)欽佩某些人,但談不上“偶像”,我會(huì)覺得他有些事情做得很好,而已。比如,我覺得Linus做了兩件非常厲害的事情。一件是開發(fā)了Linux操作系統(tǒng),另一件是開發(fā)了Git版本控制系統(tǒng)。這兩件中的任何一件都足以改變世界,但他做了兩件,我覺得他很了不起。而且他平常發(fā)表的一些觀點(diǎn),我也比較認(rèn)同。
《新程序員》:你的一位粉絲想問你什么時(shí)候再出書?
云風(fēng): 隨著閱歷的增加,知道的事情越多,感到自己不知道的事情越多,而且覺得自己的想法不夠成熟。寫《游戲之旅》這本書是二十來歲,當(dāng)時(shí)覺得自己很多東西都懂,如今覺得自己不懂的更多了,所以就不太敢寫。但我覺得翻譯書籍也挺好的,翻譯《程序員修煉之道》(第2版)花費(fèi)了我大半年的時(shí)間。做翻譯也是一種創(chuàng)作,并不是把英文一字一句翻譯成中文,而是按照自己的理解,把作者原本想表達(dá)的內(nèi)容以準(zhǔn)確、可讀的文字重新表達(dá)。
《新程序員》:你現(xiàn)在業(yè)余時(shí)間還會(huì)攀巖嗎,攀巖的時(shí)候會(huì)想些什么?
云風(fēng): 比較少,一周會(huì)去一次。當(dāng)你真的爬上墻,你不會(huì)想什么,你會(huì)聚精會(huì)神地思考這條線路怎么完成。
《新程序員》:喜歡這項(xiàng)運(yùn)動(dòng)是因?yàn)檫^程比較專注嗎?
云風(fēng): 我覺得攀巖是個(gè)很有意思的事情,因?yàn)槲沂且粋€(gè)不太喜歡社交的人,自己玩自己的。過程中就想著面前的問題該怎么解決,如果能力不足,再提高自己的能力,完成線路后非常有快感和成就感。
《新程序員》:攀巖和研發(fā)有沒有什么共同點(diǎn)?
云風(fēng): 所有事情都能找到一些共同點(diǎn)。攀巖時(shí)要去思考線路的每一步怎么完成,每個(gè)人的身體狀況和攀爬能力不同,方法也不同。所以攀巖之前,需要根據(jù)自己的條件,預(yù)想一套完整的計(jì)劃,攀爬就是兌現(xiàn)這個(gè)計(jì)劃。研發(fā)也是這樣,不能想到哪做到哪,否則中間錯(cuò)了一步,退回來的代價(jià)很大。
本文為《新程序員004》內(nèi)容,二十年前,《程序員》創(chuàng)刊時(shí),我們要全面關(guān)注軟件人的成長(zhǎng)。今天,我們依然初心不變:在一行行代碼的背后,是一顆顆鮮活的開發(fā)者想要改變世界的雄心壯志。
因此,《新程序員》從潘愛民到MySQL 之父、MariaDB 創(chuàng)始人 Michael “Monty” Widenius,PostgreSQL 全球開發(fā)組聯(lián)合創(chuàng)始人Bruce Momjian,阿里巴巴副總裁賈揚(yáng)清,著名科技作者吳軍,Vue.js作者尤雨溪……共談我們的程序人生,我們的技術(shù)時(shí)代。《新程序員》即將上市,敬請(qǐng)期待。
【第一期】描繪開發(fā)者黃金十年全景圖,戳此👉了解更多
【第二期】帶你了解軟件如何定義汽車,戳此👉了解更多
【第三期】一站了解云原生技術(shù),戳此👉了解更多
???
總結(jié)
以上是生活随笔為你收集整理的近40年码龄,从通宵写代码到三思而后行——专访云风的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解Vue中的自定义指令
- 下一篇: 西威变频器avo下载调试资料_变频器设置