熟悉我的讀者朋友知道,我給好多技術(shù)文章的標(biāo)題,都加上了 破玩意 這三個字。一開始我只是覺得好玩,直到有一次,一位讀者朋友留言:這讓我有了更深入的思考,于是有了這篇文章,和大家聊聊我對學(xué)習(xí)技術(shù)的兩點思想上的感悟。1
很多同學(xué)在戰(zhàn)略上過于重視技術(shù)。具體體現(xiàn)為,在你還完全不了解一門技術(shù)的時候,就不自覺地認(rèn)為它高不可攀,不是我等凡人可以搞明白的。比如 linux 內(nèi)核、jvm 虛擬機實現(xiàn)、native 方法的底層原理...有多少同學(xué)從來沒嘗試接觸他們,就認(rèn)為很多事情,不僅僅是技術(shù),當(dāng)你真正開始接觸它、熟悉它、了解它之后,就會覺得,它和你的距離,并沒有你想象得那么遙遠(yuǎn)。甚至你可能會覺得,它比你現(xiàn)在所熟悉的東西,還要簡單,只是當(dāng)時不知道而已。比如 linux 內(nèi)核,在很多 Java 程序員眼中可能是個高不可攀的存在,我曾經(jīng)也是這樣的感覺。但有多少同學(xué)是連一行 linux 源碼都沒看過,就開始覺得它高不可攀呢?當(dāng)我開始看 linux 源碼之后,我便發(fā)現(xiàn)它不過如此,在全局上我已經(jīng)不懼怕它了,需要的只是時間,把一個個的具體問題想明白。再者,很多時候也不能怪我們自己的,很多原本簡單的名詞,會被別有用心的人包裝成晦澀難懂的概念,使我們敬而遠(yuǎn)之。我們看百度百科關(guān)于 內(nèi)核 這個詞的解釋:內(nèi)核是操作系統(tǒng)最基本的部分。它是為眾多應(yīng)用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內(nèi)核決定一個程序在什么時候?qū)δ巢糠钟布僮鞫嚅L時間。內(nèi)核的分類可分為單內(nèi)核和雙內(nèi)核以及微內(nèi)核。嚴(yán)格地說,內(nèi)核并不是計算機系統(tǒng)中必要的組成部分。
我覺得這段話沒有提供任何有價值的信息量,且提供的信息組織得十分混亂。百科亦是如此,更何況現(xiàn)在人人都可以寫的博客和書籍呢?所以,不要懼怕它們,很多事情,并沒有那么復(fù)雜。2
不知道有多少同學(xué)看過同步異步、阻塞非阻塞的這段解釋,網(wǎng)上應(yīng)該很多。1. 老張把水壺放到火上,立等水開。(同步阻塞)
2. 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)
3. 老張把響水壺放到火上,立等水開。(異步阻塞)
4. 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(異步非阻塞)
這就是他們的區(qū)別,沒那么高深,一個例子就能解釋透徹!
在我看來呢,這個就屬于典型的在戰(zhàn)略上做到了藐視了技術(shù),但在戰(zhàn)術(shù)上卻沒有重視技術(shù)。這要比在戰(zhàn)略上過于重視技術(shù)還要可怕。同步異步、阻塞非阻塞的本質(zhì)其實很簡單,完全沒必要用擬人化的例子去解讀。這個例子本身也是極其不準(zhǔn)確的,說它錯誤也不為過。再加上不同人的不同理解,就更加具有誤導(dǎo)性了。且這個例子丟失了理解這些概念的幾乎全部的信息量:IO、線程掛起、立即返回未就緒狀態(tài)碼、回調(diào)函數(shù) 等。并且后面還加了一句話,說這個例子能把這個問題解釋得很透徹。本來,這種形象化解讀一手資料而生產(chǎn)出來的二手資料,就已經(jīng)丟失了大部分信息量。那么,那些以二手資料為參考,繼續(xù)形象化解讀而形成的三手資料,又會怎樣?比如這個燒水壺的例子,是一個人讀了打電話的例子后,寫出的,自始至終都沒有研究過這些概念的本質(zhì)。
給讀者造成的影響就是,讀者以為自己花了幾分鐘就理解了之前幾小時都沒明白的問題,大贊筆者,于是再也不去看之前花了幾個小時看的資料了。直到某一天遇到另一個問題,才恍然大悟自己當(dāng)初并沒有搞懂,而且當(dāng)初的理解也被這種擬人化的方式誤導(dǎo)了。當(dāng)然,有些技術(shù)點,通過擬人化的方式還是十分貼切的,因為當(dāng)初設(shè)計這些技術(shù)時的思路,就是通過生活中的事情而產(chǎn)生的靈感。所以,錯不是錯在擬人化,而是在于對技術(shù)細(xì)節(jié)的不重視。
所以,無論是寫文章,還是學(xué)習(xí),不但要在戰(zhàn)略上藐視技術(shù),更要在戰(zhàn)術(shù)上重視技術(shù)。遇到具體的問題,細(xì)化到每一個字節(jié),每一個位,都要重視起來。但我后面更多的時間,是一個字節(jié)一個字節(jié)地分析 ext2 文件系統(tǒng)的鏡像文件,將其每個字節(jié)的含義和 linux 中 ext2 實現(xiàn)的源碼,以及 ext2 官方文檔的說明,對應(yīng)起來。通過添加、修改、刪除文件,來觀察在硬盤鏡像文件哪個字節(jié)發(fā)生了變化。通過對比 ext2、ext3、ext4 來看哪些是后續(xù)版本增加的功能,有什么作用。這樣才能分析出什么是構(gòu)建起一個文件系統(tǒng)的核心設(shè)計,哪些是不影響核心功能的錦上添花的設(shè)計。在文風(fēng)上,我從來都是帶著藐視技術(shù)的態(tài)度講給讀者,但在資料的收集和細(xì)節(jié)的打磨上,我會保持對技術(shù)的敬畏,重視技術(shù),重視細(xì)節(jié)。戰(zhàn)略上藐視技術(shù),戰(zhàn)術(shù)上重視技術(shù),做到這兩點,學(xué)習(xí)技術(shù)方式你就掌握一半了,剩下的都是細(xì)節(jié)問題,我覺得都無所謂。
比如很多人會出學(xué)習(xí)順序呀、學(xué)習(xí)攻略之類的,其實我覺得條條大路通羅馬,你是先學(xué)底層還是先學(xué)上層,學(xué)網(wǎng)絡(luò)時是自底向上還是自頂向下,學(xué)習(xí)一門新技術(shù)時是先寫 demo 還是先學(xué)原理,我覺得這些都因人而異,沒有絕對的所謂的正確順序。
有的時候,這些細(xì)節(jié)反而需要通過你自己不斷學(xué)習(xí)和摸索,總結(jié)出一套適合自己的規(guī)律。
最后希望大家好好學(xué)習(xí),天天向上,少看今天這種教你學(xué)習(xí)方法的文章,多學(xué)學(xué)實際的技術(shù),比啥方法都強。
完~