昨晚我夢見自己在演奏廳演奏,臺下很多人,當(dāng)我敲下第一個音符的時候發(fā)現(xiàn)這鋼琴并不會發(fā)出聲音。奇怪的是這時候響起了澎湃的音樂,我作勢在賣力演奏,我沒能裝完這場戲就醒了,畢竟我只會在很窄的音域看著音符像鍵盤一樣敲擊白鍵,對于我來說這更像場噩夢。
醒來后,想起這場夢的起因。
記得妹妹學(xué)鋼琴的時候,偶爾會陪她一起上課,知道會經(jīng)歷手型、坐姿、識譜、節(jié)奏、技巧的學(xué)習(xí),以及什么如何連音、跳音、和弦、爬音、八度的彈奏,還有她正在學(xué)的樂理。這不是一天半個月的事情,剛剛開始我好奇為什么就88個琴鍵,而完整的鋼琴學(xué)習(xí)過程,需要十年或者更久?當(dāng)時我叫小妹教我彈鋼琴的時候,手型、坐姿、識譜、節(jié)奏幾分鐘就上手了,然后每天一小時,過幾天,學(xué)會了彈《月亮代表我的心》,自認(rèn)為還不錯。天真的以為只要給我樂譜就能彈出來了,可惜當(dāng)我百度到《不能說的秘密》樂譜的時候,看著音符我就懵逼了,才領(lǐng)悟到原來蝌蚪文還有四六級,節(jié)奏怎么都不對。
直到有天我知道有門課叫做樂理,樂譜不是1234567這樣就完了,《不能說的秘密》是我看不懂樂譜,理解錯誤,更不要說彈奏出來了。再到后來我還知道了視唱練耳,也終于知道,有門課程叫做“內(nèi)功”,十幾年的事情原來是在修煉“內(nèi)功”。
學(xué)鋼琴的故事說完了,然而新的篇章從昨晚的夢說起,為什么我不能在臺上演奏像樣的曲子,細(xì)思極恐,原來我把鋼琴琴鍵看成是API,看一遍“文檔”就開始彈了。
API: 計算機編程領(lǐng)域術(shù)語:應(yīng)用編程接口,其主要目的是讓軟件開發(fā)人員得以調(diào)用一組功能,而無須考慮其底層的源代碼為何、或理解其內(nèi)部工作機制的細(xì)節(jié)。
想回我現(xiàn)在作為大三軟件工程學(xué)生,掙扎著,止步不前的編程能力,到現(xiàn)在會用JAVA API做個動態(tài)網(wǎng)頁,拼裝機器人,以為JAVA jdk可以解決一切,當(dāng)我遇到新型框架,我甚至看不明白大師的代碼原理,為什么要這樣設(shè)置,到我和別人說我學(xué)完AOP之后,別人問我這樣有什么好處,舉個例子,我沒答道他認(rèn)為滿意的答案,現(xiàn)在到處亂撞,越學(xué)越?jīng)]信心。之前還寫了《外面的世界期望我們軟件系的應(yīng)屆生能做什么》,寫著寫著我自己都不明白,刪稿,請讀者留言他們的看法。
現(xiàn)在有點明白了,一門語言要了解它的語法然后干增刪改查的活需要很久嗎?但是大廠并不需要這樣的,培訓(xùn)班一大堆,為什么要到大學(xué)里面高價找呢,他們招人要求對應(yīng)方面基礎(chǔ)扎實,計算機基礎(chǔ)不扎實,遇到編譯器級別問題就會束手無策,做不出千萬用戶級別的應(yīng)用。就像學(xué)鋼琴那樣,識譜到彈奏才兩三天,然而沒有扎實的基礎(chǔ),是上不了臺面的。
那么,基礎(chǔ)是什么?怎么定義?需要會什么?
- 這里要放三本書出來
- 《CSAPP》 推薦書評
- 《CLRS》
- 《SICP》
引用知乎孫天齊作者:孫天齊的答案
鏈接:https://www.zhihu.com/question/26157282/answer/32455092
CSAPP 《深入理解計算機系統(tǒng)》
這是 CMU 的“計算機科學(xué)導(dǎo)論”的教材。是計算機系統(tǒng)和操作系統(tǒng)入門。(這門課要求有編程基礎(chǔ))
SICP 《計算機程序的構(gòu)造和解釋》
這是 MIT 的6.001課程的教材。是編程語言入門。(這門課在好幾年前就改成Python了)
CLRS 《算法導(dǎo)論》
這是 MIT 的6.006課程的教材。是算法分析入門。
CSAPP 《深入理解計算機系統(tǒng)》
這是 CMU 的“計算機科學(xué)導(dǎo)論”的教材。是計算機系統(tǒng)和操作系統(tǒng)入門。(這門課要求有編程基礎(chǔ))
其中的《CSAPP》,這里說的是第二版,在大二,我被多人提醒要認(rèn)真看去領(lǐng)悟這本書,如何的重要,但是鑒于這么書有A4紙那么大,一共700頁,買回來,寫了: 2015.10.31,放在書架上擺著,一直沒翻過。
直到大三開始學(xué)習(xí)并發(fā),學(xué)習(xí)優(yōu)化程序,發(fā)現(xiàn)自己無從下手,才明白自己離大廠的“需求”越來越遠(yuǎn)了,連快速排序都要去百度才能寫出來,驚駭當(dāng)年算法學(xué)的是什么鬼,都送回去給老師了。我在學(xué)計算機一直懷著使用主義,但是卻發(fā)現(xiàn)自己是急于求成,一直抱著碰到了再去仔細(xì)研究好了的態(tài)度,能做個像樣的Demo就好了。然而周四做計算機組成原理作業(yè)的時候,有關(guān)于VM局部性的問題,打開老師的課件,又翻閱了一下教材,直呼“計組難,難于上青天”。想起我書架上有本CSAPP,看了一下目錄,試著打開第六章《存儲器層次結(jié)構(gòu)》,里面圍繞著局部性,用編程的角度,主要詳細(xì)解釋了高速緩存(cache)的工作方式,以及利用局部性使得cache達(dá)到最好效果的方法。不僅使我明白VM,還上升到操作系統(tǒng)層面,更重要的是,我找到優(yōu)化程序性能的方法,雖然只是皮毛。做完作業(yè)的晚上,我通宵看這本書,看得欲罷不能。三點多鐘,爬上床,還在思辨,我感覺伸手就能碰到Linux內(nèi)核,再過一晚上,我看到第三章,一學(xué)期沒想學(xué)的匯編,這本書僅僅100多頁,對匯編語言語法和使用,結(jié)合大量例子來解讀產(chǎn)生的匯編代碼,通讀完,我寫下第一個匯編程序。再看到第五章,優(yōu)化程序性能,這章把能夠用到的所有技巧的原理全部講解得清清楚楚,這不是我一直找的內(nèi)功嗎?
我開始回想起某位在支付寶國際事業(yè)部實習(xí),參與海外直購項目開發(fā)大神的話,他在面試支付寶、大眾點評等大廠時,涉及比較難的問題,基本都可以在CSAPP找到。以前覺得這句話很玄,現(xiàn)在我覺得這本書很玄。我明白那些大廠為什么注重底層的東西,明明一般開發(fā)都用不到,還狠狠的抓住面試者不放,這就相當(dāng)于鋼琴中的樂理,要想即興伴奏和演奏,最重要的是要具有較高的樂理知識和視唱練耳水平,要能真正搞懂自己在彈的是什么東西。同樣,要做出真正可用的工具,成為真正的PPT,最重要需要深入理解計算機底層以及算法,明白自己的代碼怎樣操控CPU,怎樣利用系統(tǒng)資源。這里引用前輩的訓(xùn)話,等你學(xué)完了上述幾本書后,學(xué)什么框架都會很快的了,框架的學(xué)習(xí)要點不在于用,在于明白作者的思想,為什么要這樣設(shè)計,然后你就可以用框架解決很多問題,以及會知道哪些問題框架解決不了要自己上。的確,這才是大廠需要的人才。
現(xiàn)在明白了大廠到底需要怎樣的人,也明白如何去做。
編程不能飲鴆止渴,成為PPT需要很長的路。
- 現(xiàn)在想起,還好那天我彈奏的是一架沒有聲音的鋼琴,還好那天我做的數(shù)據(jù)庫優(yōu)化還沒到百萬級別,還好沒上線,我,還有一年時間去練習(xí)、實踐。