程序員該如何學(xué)習(xí)程序知識(shí)
程序員該如何學(xué)習(xí)程序知識(shí)
大家都知道,象牙成為一名合格的程序員必須學(xué)習(xí)大量的程序知識(shí),還要學(xué)會(huì)英語,那么程序員可以如何學(xué)習(xí)這些編程知識(shí)呢?下面是由學(xué)習(xí)啦小編整理的程序員的學(xué)習(xí)程序知識(shí)的方法,希望對(duì)您有用。
程序員的學(xué)習(xí)程序知識(shí)的方法一
1. 扎實(shí)的基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、編譯原理,這些是所有計(jì)算機(jī)科學(xué)的基礎(chǔ),如果不掌握他們,很難寫出高水平的程序。據(jù)我的觀察,學(xué)計(jì)算機(jī)專業(yè)的人比學(xué)其他專業(yè)的人更能寫出高質(zhì)量的軟件。程序人人都會(huì)寫,但當(dāng)你發(fā)現(xiàn)寫到一定程度很難再提高的時(shí)候,就應(yīng)該想想是不是要回過頭來學(xué)學(xué)這些最基本的理論。不要一開始就去學(xué)OOP,即使你再精通OOP,遇到一些基本算法的時(shí)候可能也會(huì)束手無策。
2. 豐富的想象力。不要拘泥于固定的思維方式,遇到問題的時(shí)候要多想幾種解決問題的方案,試試別人從沒想過的方法。豐富的想象力是建立在豐富的知識(shí)的基礎(chǔ)上,除計(jì)算機(jī)以外,多涉獵其他的學(xué)科,比如天文、物理、數(shù)學(xué)等等。另外,多看科幻電影也是一個(gè)很好的途徑。
3. 最簡(jiǎn)單的是最好的。這也許是所有科學(xué)都遵循的一條準(zhǔn)則,如此復(fù)雜的質(zhì)能互換原理在愛因斯坦眼里不過是一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的公式:E=mc2。簡(jiǎn)單的方法更容易被人理解,更容易實(shí)現(xiàn),也更容易維護(hù)。遇到問題時(shí)要優(yōu)先考慮最簡(jiǎn)單的方案,只有簡(jiǎn)單方案不能滿足要求時(shí)再考慮復(fù)雜的方案。
4. 不鉆牛角尖。當(dāng)你遇到障礙的時(shí)候,不妨?xí)簳r(shí)遠(yuǎn)離電腦,看看窗外的風(fēng)景,聽聽輕音樂,和朋友聊聊天。當(dāng)我遇到難題的時(shí)候會(huì)去玩游戲,而且是那種極暴力的打斗類游戲,當(dāng)負(fù)責(zé)游戲的那部分大腦細(xì)胞極度亢奮的時(shí)候,負(fù)責(zé)編程的那部分大腦細(xì)胞就得到了充分的休息。當(dāng)重新開始工作的時(shí)候,我會(huì)發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。
5. 對(duì)答案的渴求。人類自然科學(xué)的發(fā)展史就是一個(gè)渴求得到答案的過程,即使只能知道答案的一小部分也值得我們?nèi)ジ冻?。只要你?jiān)定信念,一定要找到問題的答案,你才會(huì)付出精力去探索,即使最后沒有得到答案,在過程中你也會(huì)學(xué)到很多東西。
6. 多與別人交流。三人行必有我?guī)?,也許在一次和別人不經(jīng)意的談話中,就可以迸出靈感的火花。多上上網(wǎng),看看別人對(duì)同一問題的看法,會(huì)給你很大的啟發(fā)。
7. 良好的編程風(fēng)格。注意養(yǎng)成良好的習(xí)慣,代碼的縮進(jìn)編排,變量的命名規(guī)則要始終保持一致。大家都知道如何排除代碼中錯(cuò)誤,卻往往忽視了對(duì)注釋的排錯(cuò)。注釋是程序的一個(gè)重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經(jīng)清楚地表達(dá)了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。
8. 韌性和毅力。這也許是"高手"和一般程序員最大的區(qū)別。A good programming is 99% sweat and 1% coffee。高手們并不是天才,他們是在無數(shù)個(gè)日日夜夜中磨練出來的。成功能給我們帶來無比的喜悅,但過程卻是無比的枯燥乏味。你不妨做個(gè)測(cè)試,找個(gè)10000以內(nèi)的素?cái)?shù)表,把它們?nèi)汲聛恚缓笤贆z查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。
程序員的學(xué)習(xí)程序知識(shí)的方法二
IT技術(shù)的發(fā)展日新月異,新技術(shù)層出不窮,具有良好的學(xué)習(xí)能力,能及時(shí)獲取新知識(shí)、隨時(shí)補(bǔ)充和豐富自己,已成為程序員職業(yè)發(fā)展的核心競(jìng)爭(zhēng)力。本文中,作者結(jié)合多年的學(xué)習(xí)經(jīng)驗(yàn)總結(jié)出了提高程序員學(xué)習(xí)能力的三個(gè)要點(diǎn)。
眾所周知,現(xiàn)在是一個(gè)知識(shí)爆炸的時(shí)代,知識(shí)更新非常快。據(jù)測(cè)算,一個(gè)大學(xué)畢業(yè)生所學(xué)到的知識(shí),在畢業(yè)之后2年內(nèi),有效的不過剩下5%。對(duì)于軟件行業(yè)而言,這種形勢(shì)更為明顯,我們賴以立足的,不在于我們現(xiàn)在掌握了多少知識(shí),而是我們有多強(qiáng)的學(xué)習(xí)能力。
學(xué)習(xí)人人都會(huì),但不同的人學(xué)習(xí)效果卻千差萬別。一個(gè)善于學(xué)習(xí)的人,首先應(yīng)該是一個(gè)善于讀書的人,懂得如何高效地學(xué)習(xí),并且擁有良好的心態(tài)。唯有如此,才能成為一個(gè)卓有成效的學(xué)習(xí)者,成就卓越的程序人生。
要善于讀書
買書是最劃算的投資
古人云:“書中自有黃金屋,書中自有顏如玉。”這說明先賢們?cè)缯J(rèn)識(shí)到,買書是最劃算的投資。
我剛出道時(shí),拿著非常微薄的工資。有一次向主管抱怨道:“現(xiàn)在的書真貴啊,這點(diǎn)工資連飯都吃不起,更別說買書了!”主管對(duì)我說:“不要吝惜買書的錢,寧可忍著不吃飯,也不要忍著不買書,因?yàn)橘I書是回報(bào)率最高的投資。”
主管的話讓我非常震動(dòng)。后來,我看到喜歡的書時(shí),再也沒有手軟過。通過不斷學(xué)習(xí),我的開發(fā)能力不斷提高,工資水平也大幅提高。一年后,我一個(gè)月工資的漲幅,就足夠買兩年的書了。你說,還有比這更劃算的投資嗎?
一本書,哪怕只有一頁紙是有用的,它所將產(chǎn)生的潛在價(jià)值,也會(huì)遠(yuǎn)遠(yuǎn)超過書本身的價(jià)格。當(dāng)然,書不在多,踏踏實(shí)實(shí)消化掉一本好書,比泛泛而讀10本普通書,要有價(jià)值得多。
多讀經(jīng)典書
現(xiàn)在市面上給程序員讀的書種類非常豐富。人生有涯,我們只能有選擇性地看,要多看好書、多看經(jīng)典書。
軟件開發(fā)方面的圖書大致分為三類。
1. 淺顯的入門類圖書。這類書的標(biāo)題往往是《XX天精通XXX》、《XXX從入門到精通》、《XX開發(fā)實(shí)戰(zhàn)》等,通常從軟件的安裝講起。有人批評(píng)這類書為爛 書、毫無價(jià)值,這并不公平。至少我曾經(jīng)從這些書中學(xué)到了一些東西。即使是21天系列書,也有適合看的人群。只不過,它一般也就只能看21天而已,過后就可 以扔到廢紙堆。這類書只適于還沒有入門的初學(xué)者,從中學(xué)到一些入門招式。在剛起步時(shí)一般買一本就夠了。如果你善于使用搜索引擎,那幾乎沒有買這類書的必 要。
2. 國(guó)內(nèi)外高手寫的實(shí)戰(zhàn)類圖書。這類書實(shí)戰(zhàn)性很強(qiáng),將技術(shù)及原理講得很透徹。比如《Windows環(huán)境下32位匯編語言程序設(shè)計(jì)》、《深入解析MFC》、 《Delphi深度探索》、《深入淺出WPF》、《深入剖析ASP .NET組件設(shè)計(jì)》等。以前這類書都是從國(guó)外翻譯或從臺(tái)灣引進(jìn)的,現(xiàn)在國(guó)內(nèi)高手越來越多,出自國(guó)內(nèi)作者的圖書也越來越多。如果能在學(xué)習(xí)的每個(gè)方向看兩三本 這類圖書,并通過實(shí)踐消化掉,那么毫無疑問,你會(huì)成為一名優(yōu)秀的程序員。
3. 國(guó)外大牛寫的揭露本質(zhì)、有豐富思想的書。這類書就是所謂的經(jīng)典書,例如《代碼大全》、《編程珠璣》、《設(shè)計(jì)模式》、《重構(gòu)》、《代碼整潔之道》等。經(jīng)典書 就像一個(gè)有深度、有思想的朋友,能給你啟發(fā),每次閱讀都會(huì)有新的收獲,這類書具有真正的收藏價(jià)值??唇?jīng)典書永遠(yuǎn)是正確的選擇,它絕不會(huì)浪費(fèi)你的時(shí)間,因?yàn)?經(jīng)典書是無數(shù)人沙里淘金、幫你挑選出的結(jié)果。
然而,閱讀這類書并不是一件容易的事情。讀者需要有豐富的開發(fā)經(jīng)驗(yàn),才能與作者產(chǎn)生共鳴。如果一本經(jīng)典書你看得很辛苦,那么很有可能是因?yàn)槟愎αξ磯?,這種情況下不要著急,慢點(diǎn)來,不妨先將其束之高閣,多看看實(shí)戰(zhàn)類圖書。過一段時(shí)間再回頭來看,也許你會(huì)有新的驚喜。
程序員的學(xué)習(xí)程序知識(shí)的方法三
我始終認(rèn)為,對(duì)一個(gè)初學(xué)者來說,IT 界的技術(shù)風(fēng)潮是不可以追趕的,而且也沒有能力去追趕。我時(shí)??匆娮约旱腄DMM 們把課本扔了,去賣些價(jià)格不菲的諸如C#, VB.Net 這樣的大部頭,這讓我感到非常痛心。而許多搞不清指針是咋回事的BBS 站友眉飛色舞的討論C# 里面可以不用指針等等則讓我覺得好笑。C# 就象當(dāng)年的ASP 一樣,“忽如一夜春風(fēng)來,千樹萬樹梨花開”,結(jié)果許多學(xué)校的信息學(xué)院成了“Web 學(xué)院”96,97 級(jí)的不少大學(xué)生都去做Web 了。當(dāng)然我沒有任何歧視某一行業(yè)的意識(shí)。我只是覺得如果他們把追趕這些時(shí)髦技術(shù)的時(shí)間多花一點(diǎn)在基礎(chǔ)的課程上應(yīng)該是可以走得更遠(yuǎn)的.
幾個(gè)誤區(qū)
初學(xué)者對(duì)C# 風(fēng)潮的追趕其實(shí)也只是學(xué)習(xí)過程中經(jīng)常遇到的幾個(gè)誤區(qū)之一。我將用一些實(shí)際的例子來說明這些現(xiàn)象,你可以按部就班的看看自己是不是屬于其中的一種或者幾種:
1. 認(rèn)為計(jì)算機(jī)技術(shù)等于編程技術(shù):
有些人即使沒有這個(gè)想法,在潛意識(shí)中也有這樣的沖動(dòng)。讓我奇怪的是,許多信息學(xué)院的學(xué)生也有這樣的念頭。認(rèn)為計(jì)算機(jī)專業(yè)就是編程專業(yè),與編程無關(guān)的,或者不太相關(guān)的課程他統(tǒng)統(tǒng)都不管,極端的學(xué)生只要書上沒帶“編程”兩個(gè)字他就不看。
其實(shí)編程只是計(jì)算機(jī)技術(shù)應(yīng)用過程中一種復(fù)雜性最低的勞動(dòng),這就是為什么IT 業(yè)最底層的人是程序員(CODER )。計(jì)算機(jī)技術(shù)包括了多媒體,計(jì)算機(jī)網(wǎng)絡(luò),人工智能,模式識(shí)別,管理信息系統(tǒng)等等這些方面。編程工作只是在這些具體技術(shù)在理論研究或者工程實(shí)踐的過程中表達(dá)算法的過程。編程的人不一定對(duì)計(jì)算機(jī)技術(shù)的了解就一定很高。而一個(gè)有趣的現(xiàn)象是,不少大師級(jí)的計(jì)算機(jī)技術(shù)研究者是不懂編程的。網(wǎng)上的炒作和現(xiàn)實(shí)中良好的工作待遇把編程這種勞動(dòng)神秘化了。其實(shí)每一個(gè)程序員心里都明白,自己這些東西,學(xué)的時(shí)候并不比其它專業(yè)難,所以自然也不會(huì)高檔到哪里去。
2. 咬文嚼字的孔已己作風(fēng):
我見過一本女生的《計(jì)算機(jī)網(wǎng)絡(luò)原理》教材,這個(gè)女生像封學(xué)生一樣在書上劃滿了橫杠杠,筆記做得滿滿的,打印出來一定比教材還厚。我不明白的是,像計(jì)算機(jī)網(wǎng)絡(luò)原理這樣的課程有必要做筆記?我們的應(yīng)試教育的確害了不少學(xué)生,在上《原理》這一類課程的時(shí)候許多學(xué)生像學(xué)《馬列原理》一樣逐字背誦記憶。這乃是我見過的最愚蠢的行為。所謂《原理》,即是需要掌握它為什么這樣做,學(xué)習(xí)why ,而不是how (怎樣做)。極端認(rèn)真的學(xué)生背下以太網(wǎng)的網(wǎng)線最大長(zhǎng)度,數(shù)據(jù)幀的長(zhǎng)度,每個(gè)字段的意義,IP報(bào)頭的格式等等,但是忘了路由的原則,忘了TCP/IP 協(xié)議設(shè)計(jì)的宗旨。總之許多人花了大量的時(shí)間把書背得滾瓜爛熟卻等于什么也沒學(xué)。
在學(xué)習(xí)編程的時(shí)候這些學(xué)生也是這樣,他們確切的記得C++ 語法的各個(gè)細(xì)節(jié)。看完了C++ 教程后看《Thinkingin C++ 》(確實(shí)是好書),《Inside C++ 》,《C++ reference 》,this C++, that C++……,然后是網(wǎng)上各種各樣的關(guān)于C++ 語法的奇聞逸事,然后發(fā)現(xiàn)自己又忘了C++ 的一些語法,最后回頭繼續(xù)惡補(bǔ)…。有個(gè)師弟就跟我說:“C++ 太難了,學(xué)了這里忘了那里,學(xué)了繼承忘了模板。” 我的回答道:“你不去學(xué)就容易了”。我并沒有教壞他,只是告訴他,死摳C++ 的語法就和孔已己炫耀茴香豆的茴字有幾種寫法一樣毫無意義。你根本不需要對(duì)的C++ 語法太關(guān)心,動(dòng)手編程就是了,有不記得的地方一查MSDN 就立馬搞定。我有個(gè)結(jié)論就是,實(shí)際的開發(fā)過程中對(duì)程序語法的了解是最微不足道的瞄識(shí)。這是為什么我在為同學(xué)用
Basic (我以前從沒有學(xué)過它)寫一個(gè)封程序的時(shí)候,只花了半個(gè)封時(shí)看了看語法,然后再用半個(gè)封時(shí)完成了程序,而一個(gè)封時(shí)后我又完全忘記了Basic 的所有關(guān)鍵字。
3. 不顧基礎(chǔ),盲目追趕時(shí)髦技術(shù):
終于點(diǎn)到題目上來了。大多數(shù)的人都希望自己的東西能夠馬上跑起來,變成錢。這種想法對(duì)一個(gè)已經(jīng)進(jìn)入職業(yè)領(lǐng)域的程序員或者項(xiàng)目經(jīng)理來說是合理的,而且IT 技術(shù)進(jìn)步是如此的快,不跟進(jìn)就是失業(yè)。但是對(duì)于初學(xué)者來說(尤其是時(shí)間充裕的大中專在校生),這種想法是另人費(fèi)解的。一個(gè)并未進(jìn)入到行業(yè)競(jìng)爭(zhēng)中來的初學(xué)者最大的資本便是他有足夠的時(shí)間沉下心來學(xué)習(xí)基礎(chǔ)性的東西,學(xué)習(xí)why 而不是how 。時(shí)髦的技術(shù)往往容易掌握,而且越來越容易掌握,這是商業(yè)利益的驅(qū)使,為了最大化的降低軟件開發(fā)的成本。但在IT 領(lǐng)域內(nèi)的現(xiàn)實(shí)就是這樣,越容易掌握的東西,學(xué)習(xí)的人越多,而且淘汰得越快。每一次新的技術(shù)出來,都有許多初學(xué)者跟進(jìn),這些初學(xué)者由于缺乏必要的基礎(chǔ)而使得自己在跟進(jìn)的過程中花費(fèi)大量的時(shí)間,而等他學(xué)會(huì)了,這種技術(shù)也快淘汰了?;A(chǔ)的課程,比方數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng)原理等等雖然不能讓你立馬就實(shí)現(xiàn)一個(gè)linux (這是許多人嘲笑理論課程無用的原因),但它們能夠顯著的減少你在學(xué)習(xí)新技術(shù)時(shí)學(xué)習(xí)曲線的坡度。而且對(duì)于許多關(guān)鍵的技術(shù)(比方Win32 SDK 程序的設(shè)計(jì),DDK 的編程)來說甚至是不可或缺的。