–專訪雷果國:從1.5K到18K一個程式設計師的5年成長之路–

翡青發表於2013-10-25

導語:今年三月份,在CSDN部落格和新浪微博上有一篇《從1.5K18K,一個程式設計師的5年成長之路》被眾人分享和傳閱,這篇博文首先介紹了作者自學之初薄弱的基礎,然後通過流水賬形式分享了那個從當初“一竅不通”各種倒數且對前途迷茫的“我”,轉變成如今好學上進月薪達18K的昇華過程。雖然和眾多大牛相比,他的事業並非最成功,但他的事蹟卻是最典型、經歷最勵志,通過這篇貫穿他整個學習過程以及心態、技術和認識上的分享,希望能給那些待畢業或已畢業但仍迷茫的朋友予以勉勵、新的思考和指明前行的方向。

雷果國(goosman.lei),2009年畢業於蘭州商學院電腦科學專業,目前在百度任職PHP高階研發工程師。翻譯有《extending and embedding php》一書,以及JQuery-UI-1.7.2官方文件、PcntlPcreMemcacheMemcachedPHP擴充套件的官方文件。錄有《lets python》視訊教程。熱衷分享,希望可以通過自己的努力,讓國內的程式設計師入門及提升成本變低。

寫在採訪之前

在開始專訪前,先和大家回顧下雷果國的《從1.5k18k, 一個程式設計師的5年成長之路》博文內容

背景:

· 20083月開始學習程式設計目前20133月。

· 20096月計算機專業本科畢業。

· 大學期間基本穩拿班級倒數第一高考英語49大學英語除了補考沒及格過。

總結:

· 5年間60%以上的時間每天凌晨2-4點睡覺。

· 為學習程式設計花費的總時間超過6000小時。

· 手寫了超過50萬行程式碼。

· 記錄了超過100萬字學習筆記。

· 錄製了兩份視訊教程。

· 翻譯了小型技術文件5份以上, 5php擴充套件的官方文件, jqueryui官方文件一份書籍《PHP擴充套件和嵌入式》。

· 獲得兩次優秀員工。

雷果國先從2008年開始,講述了自己在學校的生活狀態和當時學習觀念,他指出不要怕英文、出錯資訊和文件,它們都是學習英文的機會,同時也不要怕出錯出錯就是學習的機會。在隨後做專案和找工作的小插曲中,雷果國認識到剛開始不要期望什麼,放低身段,去做自己的積累就好。

畢業之後,雷果國的面試並非一帆風順,在他人生的第一家公司中雷果國的工資也只有1千五,他和在學校學習時一樣,依舊吃著泡麵每天加班到9點,回家後繼續學習到2點。而在這個屋裡,冬天雖然有小電暖但屋裡水龍頭卻已結冰,不過這並不妨礙他的學習和生活,因為他始終堅信:只要依然堅持學習,未來有一天他將不再這樣。

20103月雷果國到了北京工作,他這一年始終為公司付出,從JavaScript進入,到後來頁面製作、PHP和伺服器等等,他沒有覺得有多辛苦,相反認為這是種鍛鍊,是他最大的收穫。在2011年到現在的時間裡,他學會了團隊協作、同事關係處理等等,並且仍然在繼續學習著,繼續每天學到凌晨2-3點才睡覺,完成了Unix環境高階程式設計、Unix網路程式設計和PHP核心等重要積累。

通過這五年的努力,雷果國如今已進入自己心儀的公司。此外還值得一提的是他此前網名是selfimpr,含義是自強不息,是從self-improvement簡寫而來,而如今他的新網名是goosman,是從Swan Goose演化而來,他期待自己五年的積累,能夠在新環境中一展自己的鴻鵠之志。

以下為本次專訪內容:

從開始到現在:我的學習歷程

CSDN:為什麼會寫《從1.5k18k,一個程式設計師的5年成長之路》博文分享這段成長經歷?另外博文開頭介紹了自己成績倒數和英語不及格的背景,想給讀者傳遞什麼?

雷果國:我其實一直想寫這樣一篇文章,因為我看到身邊多數人都不是很努力,我覺得如果寫這樣一篇文章做分享,哪怕能有一個人能夠有跟我一樣的變化,那也是非常值得的。

正好最近得到了百度的工作機會,我覺得這算是自己這幾年一個比較大的收穫,所以藉此機會寫了這篇文章。

至於我介紹的成績倒數,英語不及格,有兩方面的原因:

我希望那些看到這篇文章並且想要改變的人,不要因為自己沒有基礎而打退堂鼓。

如果我的背景不是這麼差,現在取得的成績就不值一提了。

CSDN:當初為什麼會選擇計算機專業?在大學起初幾年,你都在幹什麼?為什麼突然意識到要努力學習?有什麼事情影響或起到決定作用嗎?

雷果國:我當時第一志願是物理學,對物理課本上關於愛因斯坦相對論的介紹很感興趣,可是自己學習成績不行,不能如願。當時自己很愛玩遊戲,調配志願就寫了計算機,結果就被這個專業錄取了。

大學前2.5年就是整天玩遊戲,通宵玩,玩到差不多被勸退的程度。

能夠有所轉變努力學習,是我老婆的功勞,有一次和老婆約會,聊我們的未來,我發現自己能給她的未來就是回家一起種地。所以我就開始學習,剛開始的半年也沒有方向,去學習老師以前講過的課本知識,沒有效果,後來是當時尚學堂的免費視訊教程,讓我找到了方向,大概一週時間,我就進入了狀態。

CSDN:開始學習後,對自己有信心嗎?身邊的人又是如何看你的?你又是如何調整心態,無視這一切?這中間有沒有發生什麼特別的故事?

雷果國:剛開始學習的時候,信心是十足的,問題出現在大概半年後,那些以前整天一起玩,一起瘋的同學,就換了一種眼光看你,貌似在說“就你這樣的,還學程式設計”。這段時間是很糾結的。

當時,我只是花更多的時間去學習,可能有一種要證明自己的心態。直到第二年學校Java課我基本沒上,但考試得了90多分的時候,同學們的看法才逐漸轉變。

CSDN:確定目標後,你是怎麼開始學習的?比如確定學什麼?從哪方面入手?都用哪些書或教程?按照什麼步驟進行?等等……

雷果國:如前面所說,我前半年學課本知識沒有效果。這並不是說課本知識沒用,而是作為我當時的狀態,我沒有對整體知識脈絡的瞭解,無從找到突破口,入不了門,建立不了興趣。

後來是尚學堂的視訊教程,給出了詳細的學習路線,從Java的基本語法、到I/OGUI、多執行緒、網路程式設計、網頁程式設計和框架,到臨畢業自己又看書學習了基本的資料結構與演算法。至此,建立了在程式設計方面一個基本的知識體系,為以後獨立自學打下了基礎。

CSDN:在學習過程中,你還翻譯了不少技術文件,為什麼去翻譯官方文件?這對你有什麼作用?另外,大約是什麼時候開始找到感覺和自信的?

雷果國:我自己是靠別人的免費分享找到方向的,包括剛開始的時候,在CSDN論壇裡提各種問題,得到很多無私的幫助,所以我願意把自己知道的東西分享出去。

翻譯官方文件,其實只是我在學習過程中的副產品,並且這個副產品對我的學習本身也有促進作用(翻譯時看不懂英文的,就得去看原始碼幫助理解),所以只要時間不緊張,我就願意做這種事情。

感覺是在接觸到視訊教程大概一週找到的,自信是在學完資料結構和演算法後才找到。

CSDN:你錄製了多套視訊教程,有人覺得這是比較浪費時間的事情,為什麼要錄製視訊?它有沒有影響到你學習進度,同時對你有沒有起到什麼幫助?另外,你稱樂於分享是促程式序員進步非常重要的一個關鍵點,為什麼會這麼認為?

雷果國:最初錄製視訊教程,是因為我當時要學python,但沒找到python的視訊教程,只能看書,而在之前我一直是看視訊教程學習,所以只看書沒視訊很不習慣,這樣學了3個月後,我突發奇想覺得自己也可以嘗試錄製一份教程。

想了後我就錄了,我是邊學邊錄製,大概是自己學第10章的時候,開始錄製第一章內容,這份視訊教程不僅沒有浪費時間,反而對我的學習有促進作用,因為你一旦要把自己學到的東西,講給別人的時候,你會發現很多自己學的時候根本沒有發現的問題就出現了,所以這份視訊的錄製,讓我對python的學習更加深入和全面。

我們知道完成功能的軟體和可交付的軟體是有差距的,分享也是這個道理,你學習完一個知識,只是完成了功能,當你要把這些知識打包分享出去的時候,就是交付。從完成功能,到可交付,你會發現有很多不足需要改進。此外,如果這個分享是被分享者和分享者可以互動的,那就更有意思了,被分享者就是分享者的QA,分享過程中會暴露更多的問題。因此,我說“樂於分享是促程式序員進步非常重要的一個關鍵點”。

CSDN:從你霸王面試開始,到進入心儀公司,能不能從你求職經歷中分享一些面試經驗?另外在面試中,你都有過什麼挫折?如何面對的?

雷果國:關於面試,我主要是放低自己的心態,這有好處也有壞處,壞處是薪資通常比實際能力要低一些,好處是放低心態,可以讓自己在技術這條路上走的更遠。

面試過程中的挫折就是第一次到北京的時候,去用友面試一敗塗地,會的不會的都說不出來。所幸還有一家創業遊戲公司收了我,我就沉下心來繼續修煉,後來基本就沒有在面試上被PK的太慘。

這一切都來自於心態

CSDN:從開始學習,到學有所成和找工作,再到工作中遇到各種困難,然後獲得突破,在整個過程中,能總結下你心態都有哪些變化?是用運用什麼方法或方式進行調整?

雷果國:

· 學習之前,我是破罐子破摔,愛怎樣就怎樣。

· 開始學習後,是因為找到了興趣,開始有了目標,有了追求。

· 學習了一段時間之後,我開始認為自己不是破罐子,所以不再破摔,而是修補缺口。

· 能夠給別人分享知識後,我覺得人的價值不在於自己掙多少錢,而是為這個社會創造多少價值。

· 目前,我覺得團隊的價值大於個人的價值。

關於心態調整方法,我覺得是就是塞翁失馬焉知非福,好的時候,想想未來的不好,不好的時候,想想未來的好,總之及時做好自己的心理平衡就好。

CSDN:你提到只有會管理自己情緒,才利於朝著目標達成的方向發展,你都是如何管理和培養自己的情緒?另外如何才能激發自己潛能,讓自己對學習很興奮?

雷果國:情緒這方面,我們知道做技術的需要一顆平靜的心,所以我會在平時就給自己心理暗示,告訴自己遇事要心平氣和,然後當我急躁了之後,比如給人發火了,或者論壇裡和人對罵了,在自己氣消了之後,檢討自己,有可能的話還要拉下臉來給對方道歉,這樣時間久了,就能慢慢做到遇事不驚。還有一點,就是勞動報酬方面(薪資等),我會盡可能的不去關心這一點,因為我覺得慾望是造成浮躁一個很重要的原因。

激發潛能方面,舉一個例子:高中的時候,我經常去網咖通宵達旦的打遊戲,那個時候,我喜歡聽《2002年的第一場雪》,後來學程式設計之後,我已經基本不玩遊戲了,但是到現在為止,每次帶起耳機聽這首歌的時候,我都彷彿置身當時網咖的環境,非常向往當時遊戲的狀態。

所以我在家寫程式碼的時候,會喝點小酒,哼個小曲兒,讓自己寫程式碼的時候非常興奮,長此以往,對這種環境形成一些心理上的依賴,這樣就培養了對程式設計的興趣。

CSDN:你的成長經歷讓很多人佩服,從當初的那個“我”到如今的“我”,很多人都很好奇你是如何尋找到發展方向,一步一步走到今天?

雷果國:在我發表了那篇博文後,從評論中看到很多人說,這篇博文能夠激勵到自己,但能不能堅持不一定。我覺得問題的關鍵在於興趣,很多人是不得已才從事這行。

如果有正在上大學的同學能夠看到這份採訪,應該趁還沒有走出校門,趕快尋找自己的興趣和工作的結合點,不要等到臨出校門被現實逼著去做一份工作。做工作很簡單,但把工作要做成事業,沒有興趣的支撐,真的很難做到,工作4年,我目前沒有見到過一個沒有興趣卻能寫好程式碼的人,哪怕是曾經在百度、阿里巴巴和騰訊這樣公司工作的員工,也不例外。

CSDN:很多人都知道堅持就是成功,但很多人都堅持不了,這五年你是如何堅持下來的?都是如何激烈自己?有哪些方式或手段?

雷果國:堅持就是成功,但不堅持不代表失敗。有的人堅韌,有的人果斷,有的人善言,每一種性格特點的人都有適合從事的工作,我覺得我能堅持下來,是所做的工作和興趣、性格契合。條條大路通羅馬,每個人要找到自己的路。

激勵自己的手段,除了培養興趣外,產出是很重要的一點,在工作學習的過程中,對自己的產出做評估,比如我的博文列出的資料,我每隔一段時間都會去統計這些資料,當你看到自己一直在進步的時候,就會更加有信心向前走。

CSDN:部落格下面不少人都很關心一個問題:刻苦學習長期熬夜,你身體狀態是否一直都很好?這樣健康的身體你是如何保持的?

雷果國:我一般晚上回家吃完飯會先陪家人1-2小時,然後學習到2-3點睡覺,8-9點起床,多數時候是能保證6個小時睡眠時間。此外,就是週末睡個懶覺,陪家人出去郊遊調整一下,總體算下來,比別人沒少睡多少覺。所以,健康不會是太大的問題。

我的認識和感悟

CSDN:錯過基礎課讓你面臨技術上很多瓶勁,在這裡能談談基礎課的重要性嗎?在眾多基礎課中,您認為哪些基礎課比較重要?

雷果國:雖然我是從應用開始學習,但是基礎理論知識真的非常重要。我覺得應用是腿,決定你能不能走路,理論是乾糧,決定你能走多遠。

我做linux-web方向,所以就說說我認為對於linux-web方向研發比較重要的基礎理論知識(不見得是大學的課程):計算機網路、網路程式設計(套接字,TCP/IP)、Unix環境程式設計(程式,執行緒,記憶體管理,I/O系統)、資料結構與演算法、HTTP協議、字串處理(編譯,正則,模板引擎)和C語言(學習C對理解底層環境有幫助)。

CSDN:自學成功你最大的收穫和感悟是什麼?對於那些在程式設計學習道路上仍在努力的初學者,有什麼建議送給他們?

雷果國:最大的收穫:寫程式時我很開心,我很開心我全家都很開心,我全家開心我就更開心……無限迴圈。最大的感悟:無私必能成其私。

對於初學者,我想說:如果你不是發自內心的喜歡寫程式,趁著還沒陷入泥潭,趕緊找到自己的興趣所在吧,如果你是發自內心的喜歡寫程式,跟隨你的內心,愜意的發揮吧。

CSDN:你的成功可以複製嗎?如果別人也這麼去做,作為過來人你覺得應該注意哪些問題?另外,有人在欽佩之餘還指出,這樣學習會失去生活的意義,你是如何看待這個觀點?

雷果國:我倒也算不上成功,但這份經歷如果要複製,也是有前提的。我覺得,在走這條路之前,一定要在開始之前想清楚兩個問題:這個職業是否真的有興趣,這個職業特點是否真的符合自己性格特點。如果想清楚這兩個問題,我覺得過程是多彩的,每個人都有自己的精彩。

起初看到有人評論說這樣學習會失去生活的意義,我困惑過幾天。不過我想開了,每個人對生活的定義是不一樣的,現在如果不讓我這樣學習,那生活的意義是什麼?

PHP是最易學的語言,但難點也是這——簡單易學難精通

CSDN:一開始學Java為什麼會轉到前端?後來又為什麼從前端跑去做PHP?另外,在JavaPHP間,為何最終選擇了PHP?你在這個轉變過程中有沒有遇到什麼坎?

雷果國:Java到前端,以及前端到PHP的轉型,都是工作的需要。

在我剛開始學習程式設計的時候,有一個長期目標是做程式設計師,有一個短期目標是做好Java程式設計,當我第一次換工作時,請假來北京找工作,3天時間並沒有找到願意接納我的公司,所以我退而求其次,以前端開發工程師的身份進入到了一家創業遊戲公司。在這裡,我修正了短期目標做好前端開發。後來,我接觸到了PHP,而此時已經做了一段時間前端,我覺得做前端沒有一些藝術細胞很難做到很好,而我是理性思維更多的人,所以我開始學習PHP。這次,我又修正了短期目標做好php程式設計。

PHPJava之間的選擇,是因為PHP的完全開源,有任何問題,我都能以比較透明的技術手段追蹤到根源。

其實這也是一個職業規劃的問題,我們無法預估十年乃至二十年後自己的興趣和能力,只能按照自己當前的興趣和喜好程度,定出長期規劃和短期規劃,並根據發展的情況做出調整,應該說,只要你把職業規劃當做一件事情來做,那目標肯定會越來越穩定。

轉到前端時,困難比較明顯,我是計算機專業,程式寫的再好,做前端沒有藝術感還是比較困難。而到PHP的轉型,比較困難的就是java語法比較嚴格,到了一個鬆散的語法環境中略有不適,不過這一點相對比較好克服,嚴格要求自己就好。

CSDN:在百度做PHP方面的開發,新公司在技術或文化上哪裡讓你感觸最深?另外工作這麼長時間,你現在如何看待實踐和理論這兩者關係?

雷果國:到百度之後,同事平均素質明顯高於以前的公司,而且百度的文化執行的很好,在一個這麼大的公司,卻明顯能感覺到身邊的人都在執行“簡單可依賴,具有狼性”的文化。

技術方面的感觸,我就說說敏捷開發吧:我是在進入百度後才接觸到敏捷開發的,滿打滿算,才40天時間,但這種開發模式真的對我衝擊很大,它改變了我一個固有的看法——大公司專人做專事、流程化安全而緩慢。

在敏捷的團隊中,大家更多的是強調團隊的產出,弱化個人能力對團隊的影響力,讓團隊成為一個原子性的整體。對工作量,進度的估算都不再按照個人進行,而是按照團隊為單位估算,同時強調弱化角色分工,減小團隊對個人的依賴性。

我覺得,站在專案的角度,這一切簡直太美妙了:

進度預估的風險:過去以成員為單位預估,問題是難於估算,並且準確度低,現在以團隊為單位估算,成員間的誤差是有互補性的,提高了準確度。

人力風險:角色的弱化,大家都可以根據興趣或團隊需要做一些其他方面的工作,這使得每個團隊成員都能放寬眼界,提升綜合能力,另一方面,單個成員請假等特殊狀況的風險也可有其他成員互補,降低產生團隊人力瓶頸的風險。

質量風險:持續整合,持續測試,這使得每一次釋出都是經過整合後測試的,降低了產品質量方面的風險。

需求變更風險:敏捷要求快速迭代,這就使得我們在迭代計劃的時候,只安排少量高優先順序的開發任務,因此,對低優先順序的開發任務我們不會花過多時間關注,當需求變更時,多數情況都只是從需求池中將尚未細化的需求拿走,而很少會影響我們已經詳細規劃並進入迭代計劃的需求。

當然,站在個人的角度,這其實提出了更大的挑戰,每個團隊成員需要對專案整體負責,需要掌握更多的技能。雖然只接觸了40天,但敏捷開發帶給我的感想是很深刻的,我覺得網際網路公司特別需要敏捷開發,因為它的目標是快速釋出、擁抱變化和降低風險,這非常切合網際網路產品的特點。

如果沒有實踐,就不會有產出(專門搞理論的科學家,也是要經過實驗驗證理論的),但是如果沒有理論,就只能重複性的實踐,很難提升產出價值。所以,我認為實踐和理論並沒有孰輕孰重的關係,兩者相輔相成,缺一不可。

CSDN:你比較擅長PHP,能不能就你學習和工作經驗與大家分享下PHP學習如何開始和深入?有沒有什麼竅門?另外,PHP學習有什麼難點?如何解決這些難點?

雷果國:關於語言的學習,每個人有不同的方法,我就說說自己的學習過程:

在學習PHP之前,我有3種語言的經驗,所以就隨便找了本入門書籍,花一週時間,看看語法和函式庫就上手做事情了。對PHP瞭解的第一次進階,是閱讀PHP手冊,PHP的手冊非常棒,組織結構清晰,講解詳細,內容涵蓋面非常廣,認真讀一遍,收穫非常大。

接下來是兩個方向:工程設計和底層實現。工程設計方面,主要是找一些設計模式、持續整合和開發方法方面的書籍,廣泛的閱讀,並嘗試在實際應用中去領悟書中所講的內容。底層實現方面,主要就是先去了解作業系統和網路等一些底層的知識,掌握C語言,然後去閱讀PHP的原始碼,看看PHP怎麼運轉。

眾所周知,PHP是最易學的語言。但我覺得這就是PHP最大的難點——簡單易學難精通。這方面,我認為要克服的主要還是心理因素,千萬不能有“已經學會PHP”的想法。另外,PHP語法靈活,很難把握到底該怎樣去寫,這方面需要量的積累以及不斷的思考。還有一點,PHP從核心的設計上,比較強調自由的擴充套件,所以對PHP核心的瞭解也很重要,這一點難度也很大,需要大量的基礎知識積累,要克服也只有玩命的學了。

CSDN:你是什麼時候開始接觸CSDN的?它對你學習和工作都帶來哪些影響?另外,你對CSDN有什麼建議和期待嗎?

雷果國:我大概是2008年接觸CSDN的,到現在也5年多時間了,起初它是我求知的主要平臺,後來它是我分享的主要平臺。一直以來,CSDN上的大牛們都是我奮鬥的目標,當我低迷的時候,我就會想,或許有一天我也能成為那樣的大牛。

也許是我最近兩年逐漸轉向部落格,BBS這邊光顧的少,目前對CSDN的感覺是在媒體方面的力度比社群方面大。從技術人員的角度來看,當然是希望CSDN這樣的大平臺更多一些社群特性,能夠刺激國內技術人員的交流和成長。

寫在最後:

在與雷果國的交流中,他還和我分享了一些總結,記者覺得這些分享蠻有價值,雖然有的點或許會與專訪內容重複,但絲毫不影響其中傳遞出來的另外一種心態和觀念,有心的朋友可以看下。

內容摘錄如下:

心態上:我開始學習程式設計的時候,已經大三第二學期了,當時有自己的質疑,有周圍人的質疑,現在學還能來得及嗎?”,對於跟我一樣,在大學的最初幾年已經荒廢的同學來說,這個心態的調整很重要,就是堅信自己能行。

· 期望值:不少同學(包括那時的我),在剛畢業的時候,覺得自己給老師做過專案,就感覺自己找工作會很容易,導致對自己期望過高。其實,就我自己的發展而言,如果不是這幾年惡補基礎理論,肯定不會走進自己夢想的企業。

· 目標定位的問題。我覺得很多大學生甚至畢業一兩年都找不到自己的人生定位。我自己在剛開始學習程式設計的時候,已經有了一個目標定位,就是做程式設計師,這個目標定位非常符合我的興趣,所以我可以5年間絲毫不改變這個目標定位。

· 態度上:分三個方面來講,一方面是要付出很多努力;另一方面是不能認為自己已經付出了很多努力,就要求短期回報,而是向著長遠目標看齊,寧肯放棄一些短期回報;還有一個方面就是持之以恆的堅持前兩點。

· 方法上:堅持讀英文,堅持讀原始碼,碰到問題就死磕,我在剛學了半年的時候,在沒有網路的條件下,碰到一個問題靠跟蹤原始碼,花了78個小時才找到一個異常的根源。

· 情緒培養上:要學會管理自己的情緒。可以刻意找一些讓自己興奮的事情,在寫程式時激發自己的潛能。同時生活中有不順心事情的時候,儘量減少編碼,防止這種心情潛在的影響自己對編碼的看法。

· 熬夜的問題:有不少人表示自己做不到,或身體不行。其實,都是對自己要求不夠(當然,不可避免有些人確實會受身體因素限制)。

· 碼品如人品:我以前是一個邋遢的人,但是自從我刻意的去規範自己的編碼風格後,我自己也變得不那麼邋遢了,同時改變他的程式碼風格,也會潛移默化的改變他處世風格。

· 分享會迎來進步和尊重:樂於分享是非常重要的。因為一次分享過程,收益最大的通常不是聽的人,而是講的人。我翻譯了很多文件,錄製過視訊教程,這背後最大的受益者其實是我自己。並且除了自己知識上的收穫,分享者還能得到更多人的尊重。

· 實踐與理論孰輕孰重:實踐決定你能不能走路,理論決定你能走多遠。

 


相關文章