(直到讀研的時(shí)候看了大學(xué)計(jì)算機(jī)組成原理教材我才明白指針背后的含義)
https://m.toutiao.com/is/JbebjsJ/
這是知乎上一個(gè)很火熱的話題,它讓我的思緒回到了多年前,那個(gè)瘋狂玩游戲住網(wǎng)吧的少年,那個(gè)洗心革面之后瘋狂看技術(shù)書、瘋狂編碼的少年,彼時(shí)的他絕沒有想到能在程序的世界走這么遠(yuǎn)。
窘迫的困局
十多年前的一個(gè)夏天,一個(gè)少年焦慮的在校園行走。他剛接到學(xué)校最后通牒:勒令在半年內(nèi)補(bǔ)休完缺失的學(xué)分,否則按退學(xué)處理。
看著這張死緩?fù)ㄖ獣?,這個(gè)結(jié)局他并不意外,他從大一開始就沉迷于網(wǎng)游無法自拔。幾乎沒有上過任何課程,掛科無數(shù)。所有清醒的時(shí)光基本上都在網(wǎng)吧度過。
這個(gè)少年就是曾經(jīng)的我,那時(shí)候水到計(jì)算機(jī)專業(yè)大三了,連一個(gè)HelloWorld都不會(huì)寫。
本科就讀的大學(xué)坐落在一座山中,那一天上山再下山,不斷往返,完全感知不到時(shí)間的流逝。整整走了一個(gè)白晝,累得精疲力盡,癱坐在草叢之中,看著深邃的天空和地上的花朵,那一瞬間我突然做了一個(gè)改變自己一生的決定。
那一刻定了一個(gè)瘋狂的計(jì)劃:大半年內(nèi)完成補(bǔ)考修完學(xué)分、通過英語四六級(jí)、拿到高級(jí)程序員證件、考上華科研究生。要通過努力來逆襲這一切,要改變自己的命運(yùn)。
回頭看當(dāng)年的那一瞬間,所謂的頓悟,恐怕就是這種狀態(tài)吧。
艱難的爬坡
那一整天的校園漫步,是我逆襲的起點(diǎn),這之后我告別行尸走肉般的狀態(tài),變成一臺(tái)徹頭徹尾的學(xué)習(xí)機(jī)器。
編碼的世界,日新月異,發(fā)展非???,但C語言永不過時(shí)。那時(shí)候我也是從C語言開始學(xué)起。
沒有了老師,只能自己開始一點(diǎn)點(diǎn)啃,譚浩強(qiáng)的《C語言程序設(shè)計(jì)》反復(fù)看,然后一行行在電腦上敲出來。
當(dāng)時(shí)對(duì)計(jì)算機(jī)缺乏系統(tǒng)認(rèn)識(shí),最難理解的就是指針,書上說它是個(gè)變量地址,那么問題來了,什么是地址?一不小心,指針就讓程序Crash了。直到讀研的時(shí)候,看了大學(xué)教材:《計(jì)算機(jī)組成原理》這本書,我才明白指針背后的含義。
因?yàn)橐佳?,沒有時(shí)間和C語言纏斗,主要目標(biāo)是專業(yè)課,數(shù)據(jù)結(jié)構(gòu)才是真正要攻克的重點(diǎn)。
從數(shù)組到鏈表再到堆棧、二叉樹、平衡二叉樹、紅黑樹、B+/B-樹,簡(jiǎn)直就像看天書。
還記得二叉樹的先序,中序,后序遍歷就把我弄暈乎了。更別提后面的AVL樹的刪除以及B-樹。
我應(yīng)付看不懂的方式也很粗暴:做筆記,勾選出沒看懂的部分,反復(fù)看。一遍不行看兩遍三遍四遍,直到所有內(nèi)容看懂為止,數(shù)據(jù)結(jié)構(gòu)這本書,記得來來回回看了10多遍。
這個(gè)時(shí)期學(xué)習(xí)編程是為了準(zhǔn)備高級(jí)程序員考試和考研,離實(shí)戰(zhàn)還非常遠(yuǎn),但打下了編程的深厚理論基礎(chǔ)。
成長(zhǎng)期
瘋狂學(xué)習(xí)大半年后,拿下高級(jí)程序員考試,也考上了華科研究生。定下的目標(biāo)一一實(shí)現(xiàn)之際,居然沒有一點(diǎn)點(diǎn)喜悅。
對(duì)浪費(fèi)時(shí)光的扼腕嘆息和對(duì)編程的渴望完全壓制了喜悅。
考研專業(yè)課最后兩個(gè)大題,居然連Include都沒寫(上機(jī)太少),但憑借啃書的那股勁,拿到了140多分。
這種水平如果進(jìn)入社會(huì),會(huì)被毒打到什么程度?這點(diǎn)自知之明還是有的。
只知道自己要跟時(shí)光賽跑了。不再需要復(fù)習(xí)專業(yè)知識(shí),我開始瘋狂的在機(jī)房敲代碼。
這期間認(rèn)識(shí)了學(xué)校的幾個(gè)同學(xué),他們長(zhǎng)期通宵在機(jī)房Coding,且伴隨著激烈的討論爭(zhēng)吵,有時(shí)候一天都不怎么吃東西,他們?cè)谧鍪裁匆l(fā)了我的好奇。
問了問,他們是ACM校隊(duì)的成員,正在參加集訓(xùn)。ACM全名是國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽,學(xué)校里參加這個(gè)競(jìng)賽的,基本都是高中就開始編碼。而我這個(gè)菜雞,開始硬湊著要和他們一起玩。
遭遇嫌棄是必須的,但沒關(guān)系我臉皮厚,天天請(qǐng)他們吃飯,幫他們端茶送水。
還記得為了解一個(gè)DP問題,苦思冥想三天三夜,找到解法的那一刻如釋重負(fù)。
刷題的過程是枯燥且伴隨痛苦的,提交器報(bào)各種不通過的時(shí)候讓人無比抓狂。
這期間,同時(shí)開始系統(tǒng)的學(xué)習(xí)算法,《算法導(dǎo)論》這本書重復(fù)看了N遍之后,終于有了一些心得。
自認(rèn)為能力不錯(cuò)之際,提出加入校隊(duì),但被隊(duì)長(zhǎng)無情拒絕。這讓我傷心了很久。
成長(zhǎng)的過程,潤(rùn)物細(xì)無聲,極難察覺。但那段枯燥痛苦的刷題歲月讓我未來的道路受益匪淺。
跨越期
很快,到了讀研的時(shí)光,幾乎是兩點(diǎn)一線:實(shí)驗(yàn)室到宿舍。期間,參加了ACM校隊(duì)三隊(duì),最后鎩羽而歸,并沒有拿到獎(jiǎng)牌。
這之后開始系統(tǒng)的學(xué)習(xí)網(wǎng)絡(luò)、C++、VC,還記得有一本非常厚的書:《C++ Primer》,可以說上面的每一個(gè)例子,都上機(jī)造過輪子。
隨后開始啃《Effective C++》、《More Effective C++》、《C++程序設(shè)計(jì)原理》、《深度探索C++對(duì)象模型》、《STL源碼剖析》、《計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)方法》、《TCP/IP詳解》。
除了瘋狂自學(xué),專業(yè)課和實(shí)驗(yàn)室的項(xiàng)目壓力也很重,但掌握的東西越多,你對(duì)未來就越篤定。
校園漫步的那次頓悟還給自己定了一個(gè)目標(biāo):畢業(yè)以后做游戲的創(chuàng)造者。
所以,主攻的三大方向很明確:Window C++開發(fā)、算法、網(wǎng)絡(luò)編程,這些都是游戲編程所需要掌握的硬核技能。
畢業(yè)后,如愿拿到騰訊游戲的Offer,開啟了工作生涯。
突破期
工作第二年,加入360擔(dān)任高級(jí)工程師,入職不久直屬Leader就被調(diào)整,我開始帶團(tuán)隊(duì)。
面對(duì)前任Leader留下來的數(shù)十萬行耦合嚴(yán)重的代碼和框架,壓力巨大。
360素來以打仗兇猛著稱,發(fā)版以天計(jì),甚至有時(shí)候一天好幾個(gè)版本。面臨的最大困境是:如何在高速迭代的過程中重構(gòu)整個(gè)舊的框架。
至今還記得,面對(duì)一個(gè)兩萬行的主類的心情,那是崩潰和無力的。但越大的壓力,你扛下來往往是更高的成長(zhǎng)速度。
一瞬間,又回到了大三的那種瘋狂狀態(tài),每天極限Coding,甚至接近入定的狀態(tài),上班往那一坐基本不動(dòng)彈,就靠幾瓶水幾個(gè)面包,一天的三餐就對(duì)付了。
我們將代碼組件化、模塊化,實(shí)現(xiàn)了一邊飛奔一邊換輪子。就帶了兩個(gè)實(shí)習(xí)生,花了3個(gè)月搞定了這一堆恐怖的代碼。
當(dāng)系統(tǒng)徹底被改造完畢之際,那種興奮難以言表。
這段時(shí)間,我的架構(gòu)思維開始突飛猛進(jìn),我們?cè)诿恳淮蔚闹貥?gòu)之前,都會(huì)先畫出業(yè)務(wù)時(shí)序圖、類結(jié)構(gòu)圖、工程關(guān)系圖,然后按圖索驥,每每在實(shí)現(xiàn)的那一刻,不由得驚嘆:程序世界,太奇妙了。
這期間,還開始大量閱讀優(yōu)秀的開源代碼,比如Google chrome的源碼,初看時(shí),真是有一種始驚、次醉、終狂的感覺。
深刻認(rèn)知到編碼差距之后的刻意練習(xí),會(huì)讓你開啟高速進(jìn)化之路。
說一個(gè)訣竅:源碼不要只看不上手,編譯起來運(yùn)行起來,多改改看看會(huì)發(fā)生什么。這個(gè)過程即好玩又能加深你對(duì)源碼的理解。
看完Google Chrome源碼之后,開始大量學(xué)習(xí)游戲開源代碼。
2012年動(dòng)手做了一個(gè)Iphone2d游戲引擎,用這個(gè)引擎做了一款小游戲上線到AppStore體驗(yàn)了一下獨(dú)立開發(fā)者的炫酷。
寫在最后
2014年,基本算是編碼能力的頂峰。這以后開始擔(dān)任部門的產(chǎn)品技術(shù)負(fù)責(zé)人,用于編碼的時(shí)間越來越少。2015年出來創(chuàng)業(yè),經(jīng)歷各種社會(huì)的毒打和失敗的辛酸。
現(xiàn)在,嘗試在大廠能做成一個(gè)業(yè)務(wù),前段時(shí)間發(fā)過一個(gè)朋友圈:人生最大的愿望是:做成一件中國(guó)第一的事業(yè),游遍中國(guó)所有的名山大川。
但內(nèi)心深處,依然是一個(gè)堅(jiān)韌、專注的程序員,更愿意跟人介紹:我是一個(gè)懂產(chǎn)品運(yùn)營(yíng)商業(yè)的程序員。
回到最初這個(gè)問題:我的編碼能力是什么時(shí)候開始突飛猛進(jìn)的?
其實(shí),并沒有一個(gè)特定的時(shí)刻,你能感知到突飛猛進(jìn)。
成長(zhǎng)發(fā)生在每一天、每一小時(shí)、每一刻和自己做斗爭(zhēng)的時(shí)候,成長(zhǎng)發(fā)生在無數(shù)次焦慮、痛苦之后的反思和突破,成長(zhǎng)發(fā)生在咬牙不放棄的每一份努力中。
只有經(jīng)歷了時(shí)光的磨礪、痛苦的掙扎、非凡的努力,再回首發(fā)現(xiàn):原來你已經(jīng)在這里了。
不光是編程,這世間任何一件事,要想取得一點(diǎn)點(diǎn)成績(jī),必須付出非凡努力。
與君共勉~
https://m.toutiao.com/is/JbebjsJ/
聯(lián)系客服