記得LZ的第一篇博客發於2013-01-27 16:10,是LZ有一次上班閑下來的時候寫的一篇文章,關於Jquery源碼的研究成果。至今為止,斷斷續續也寫了大半年博客,自從寫博客以來,LZ間斷性的收到過不少猿友的提問,這些提問中有很大一部分,是問LZ這樣的問題,有很大的重復性與近似性。
“LZ,你不是學計算機的,你是怎么學習的?”
“LZ,你是怎么看書的,為什么我看着看着就玩游戲看電視去了?”
“LZ,你都看些什么書啊,能不能給點建議。”
“LZ,你平時下班回去都是如何學習的?”
“LZ,我天天加班,沒時間學習,怎么辦啊?”
“LZ,我工作好幾年了,可是感覺技術沒什么提升,怎么補救呢?應該看點什么書呢?”
“LZ,你覺得Java Web和android哪個更好呢?”(這個問題,真的是難住LZ了,0.0)
這些問題總結起來主要有兩種,第一種是不知道要看什么,第二種是看書看不進去怎么辦。
針對不知道看什么這種問題,說真的,LZ很多時候無法回答,因為我們從事的工作內容可能不同,比如LZ是JAVA,你是.NET,LZ是web,你是移動。就算恰巧我們做的領域幾乎都一樣,應該看那些書也是不能一概而論的。比如可能LZ想做架構師,而你想做技術總監,可能LZ想做研發經理,而你想做項目經理。
因此LZ覺得不能把自己看過的或者准備看的書名嘩啦嘩啦往那一堆,然后說,“喏,我都看這些,你也跟着看吧!”
不過盡管我們的領域可能不同,但是既然都是程序猿起家,肯定還是有一定的共性的,本次就以LZ的見解來簡單說一下,程序猿必須了解的知識是哪些,之所以LZ沒有說必須看的書有哪些,還是因為那句話,知識有共性,書沒有共性,找到適合自己的就行。
【這些話是后來LZ加上來的,沒想到不知不覺寫一個算法寫了這么長,我去,善了個哉的,由於時間關系,本次LZ就將本文又拾掇拾掇,寫成(算法篇)了,后面再補上其它的內容。】
算法
有的猿友可能要說了,LZ你這不是廢話嗎?程序猿懂點算法最好,這事誰不知道?還用你來教啊?
猿友們莫要激動,要蛋定,請耐心看下去。
首先LZ不得不承認,我們很多時候幾乎用不到算法。其它不說,就說LZ現在的工作,是針對企業IT建設的開發工作,大多數情況下都是以業務為主的工作,猴年馬月能讓你用到算法,哪怕是一個冒泡排序。
但是,but!
LZ想說的是,首先,我們說要掌握算法,並不是說你要把《算法導論》仔仔細細的來一遍,到時候LZ給你隨便出個算法,你都能在一分鍾內輕松搞定。
不是這樣的,no!
那到底要如何?
我們先不忙說到底是怎樣的,我們先把文章的對象范圍限制一下。
對象范圍
這里首先限定下對象范圍,是為了避免引起不必要的爭議,更是為了避免給不適合的人帶來不好的建議。因此如果你尚且是一位學生,LZ沒什么好說的,如果有算法這門課,那么你只管好好學習就好了,以下內容與你無關。
LZ這里所說的對象范圍,首先得是已經畢業參加工作的,而且主要是指那些大學是非計算機專業,沒有算法課程,或者大學雖然是計算機專業,但是壓根就沒怎么認真學過算法,或是一畢業就將算法全部還給了老師們的這部分人。
總而言之,言而總之,這里的對象范圍主要是指已經工作,但是算法不怎么地的這部分人,倘若你的算法原本已經高深莫測,那么請參看“如果你尚且是一位學生”。
算法與工作
說真的,真正工作了以后,哪有時間讓你研究那幾百上千的算法?
更重要的是,我們研究這些算法,就算全部研究透了又能怎么樣呢?
或許有的猿友可能會說,研究透了,BAT隨我挑啊。
LZ不得不承認,全部掌握了當然是有好處的,那我們把排名前十的語言全部學會進去的概率就更大了,難道要去學嗎。我們參加了工作以后,畢竟時間有限,相信大部分已經工作了的人都深有感觸,隨便學點什么東西,時間都是擠出來的。
這就牽扯到一個取舍問題了,我們費盡心思的去學習這么多算法,有這個必要嗎?
如果你不能在研究完所有的算法以后,創造出新的算法,或者說在算法領域有所成,說真的,就算是BAT,也不一定就僅僅因為你懂幾十幾百個算法就要你的,而且他們也肯定沒時間去考試你那么多算法。因此,瘋狂的學習算法顯然是沒有必要的。當然了,如果你每天的工作本身就是與各種稀奇古怪的算法打交道的話,那LZ就不說什么了。
那為什么LZ還支持猿友們學習算法呢?
這里LZ先給各位講一個LZ的小故事,本故事幾乎是真實的。
小故事
LZ非常清楚的記得大學里教LZ高等代數的老師,那是一位非常值得尊敬的老師。
有一次上課,同學們都在各自忙着自己的任務,比如偷菜的,發短信的,補覺的,更有甚者,是跟身邊的女朋友親熱的。
老師看到這種情況,就不慌不忙的說,“你們是不是覺得學數學出去沒用?”
異口同聲的,絕對沒有商量的,同學們答:“是!”
老師聽到后沒有露出任何尷尬的神色,而是自然的笑了笑說,“或許你們搞了四年的證明題,等你們出了校門,你們一道證明題也不會做了,而且工作中也很可能用不上,但是它給你的是四年的邏輯思維鍛煉,是你潛意識里邏輯思維能力的提高,這,就是學了四年證明題給你最大的禮物,出了校門以后你絕對再收不到這樣的禮物。”
說真的,當時LZ聽到這句話,直接就和LZ的小同學們震驚了,但是不出意外,幾乎所有同學,包括LZ,依然都是異口同聲的,沒有商量的,說:“切...!”
但是LZ卻將這句話深深的記在了心里。
小算即可
小故事告訴我們,我們工作中確實不可能讓我們去證明為什么兩點決定一條直線,但是不得不承認這些證明的過程,會讓你的邏輯思維能力得到鍛煉。
對於證明題是如此,對於算法亦是如此。
因此LZ一直都說,小算怡情,大算傷身,強算灰飛煙滅(一位猿友在評論里補上的,0.0)。
小算就是為了時常鍛煉我們的邏輯思維能力,讓我們不至於在出了校門以后,看到一大堆的數學符號就想撞山丘。因此我們平時看些算法,還是有好處的,但是不可貪多,否則很容易得不償失。
不可貪多主要有兩個原因,一個是學習算法很容易枯燥,沒有設計模式等這類內容看起來有意思。另外一個是,算法的迅速提高,很多時候對我們的工作沒有太大幫助,我們浪費大量的時間在這上面有點虧。
因此,LZ還是覺得小算即可。
LZ的小建議
具體如何學習算法,LZ的建議如下,覺得適合自己的猿友不妨嘗試一下。
1、買一本你喜歡的算法書,可以是任何書,LZ對這個不做建議。
2、制定一個周期,每到一個周期學習一個算法,比如一個月,不宜太長,也不宜太短。
3、堅持,凡事不堅持,說什么都白說。一旦定好了時間,一定要雷打不動。
這樣學習算法的好處是,一個月一次或者某個周期一次,不會因為每天看一堆算法而覺得枯燥,而且長此以往的堅持,兩三年就足夠你掌握數十種算法,就算你想跳槽去BAT,算法上也差不多足夠你去應付了。
更重要的是,這相當於每一個月都給了你一次邏輯思維能力的鍛煉,這就跟鍛煉身體似的,定期的鍛煉身體對身體是有好處的,那么定期的鍛煉邏輯思維能力,其實對邏輯思維能力的提高也是有好處的。
這樣看來,那厚厚的算法書不應該再是你恐懼的東西,而應該是你犒勞自己的獎賞,你應該慢慢的去享受它,定期的享受一次邏輯思維能力的鍛煉和挑戰,而不是痛苦的快速把它干掉。