通過這段時(shí)間的看書學(xué)習(xí)和對(duì)編程的思考,結(jié)合自己的親身的學(xué)習(xí)經(jīng)歷置济,今天想和大家聊一聊如何高效學(xué)習(xí)編程技術(shù)解恰。
我們可以把學(xué)習(xí)編程技術(shù)的人分為下面四種情況锋八。
第一種是既懂方法又努力的,學(xué)的又快又好护盈,但大家會(huì)覺得這是他們有天賦挟纱,甚至稱他們是天才,而并沒有看到他們的方法和努力腐宋。
第二種是不懂方法但努力了紊服,這類人學(xué)的不快但愿意花時(shí)間學(xué),不過由于學(xué)習(xí)編程技術(shù)所需的時(shí)間一般比較長(zhǎng)财边,一些人沒有堅(jiān)持下去便放棄了搞动,而一些人則堅(jiān)持了下來不脯,最后學(xué)的很好。
第三種是知道方法但并不是一直都很努力煎饼,這類人學(xué)習(xí)的持續(xù)性比較差,一些技術(shù)學(xué)的比較好剃盾,而另外一些技術(shù)學(xué)的不好腺占。
第四種是既不懂方法又不肯努力的,這類人自然是學(xué)不好編程技術(shù)的痒谴。
注意我這里說的只是對(duì)于學(xué)習(xí)編程技術(shù)的衰伯,并不代表編程學(xué)的不好的,學(xué)習(xí)其他事情也是這樣积蔚,切莫以偏概全意鲸。比如在實(shí)際生活中,一個(gè)編程學(xué)的不好的尽爆,但唱歌唱的卻特別好怎顾。
我公眾號(hào)讀者,大都也是和編程專業(yè)有關(guān)的學(xué)生或者是已經(jīng)工作了的前輩漱贱,群里也經(jīng)常把那些技術(shù)比他們好的人稱為大佬或大神槐雾,除了羨慕外,也能看到他們對(duì)于成為大佬的渴望幅狮。按照上面的情況劃分募强,他們可能是屬于第二種或第三種情況。一個(gè)人的努力是看自己崇摄,這個(gè)別人也教不了擎值,所以我這里和大家聊的是學(xué)習(xí)編程技術(shù)的一些方法,這是對(duì)我學(xué)習(xí)編程技術(shù)的總結(jié)逐抑,這些方法可能并不一定對(duì)你有效鸠儿,所以你大可作為一種參考。
學(xué)習(xí)編程技術(shù)厕氨,最開始都是從某一門編程語言開始學(xué)起的进每,拿我來說汹粤,之前我也不知道學(xué)什么語言好,聽別人說 Java 好品追,才學(xué)的 Java(現(xiàn)在看玄括,覺得 Java 真的很好,至少現(xiàn)在來說肉瓦,在企業(yè)級(jí)的項(xiàng)目開發(fā)中遭京,Java 還是應(yīng)用最廣泛的)。所以往往我們對(duì)于一門語言并不知道他們能干什么的時(shí)候泞莉,或者說是他們的優(yōu)勢(shì)在哪哪雕,就急于開始學(xué)習(xí)了,很可能到最后才發(fā)現(xiàn)原來有更好的語言做這個(gè)鲫趁,當(dāng)時(shí)花了那么大力氣斯嚎,反而效果并不好。對(duì)于語言是這樣挨厚,對(duì)于框架也是這樣堡僻,就像我之前并不知道 Shiro 的優(yōu)勢(shì)是什么,自己手動(dòng)寫權(quán)限控制疫剃,最后發(fā)現(xiàn)還是框架好用(這里先不談該不該自己造輪子的話題)钉疫。
所以學(xué)習(xí)一門語言或者框架時(shí),第一步并不是上來就扎進(jìn)去學(xué)巢价,而是應(yīng)該站在”遠(yuǎn)處“牲阁,用客觀的眼光去看待它,找出它的優(yōu)點(diǎn)和缺點(diǎn)壤躲,看看是不是符合自己的需要城菊。比如說,你要從事人工智能方面的研究碉克,目前來說 Python 是最好的選擇(這里先不談 Python 的性能問題)凌唬。對(duì)于語言的認(rèn)識(shí),對(duì)于新手來說漏麦,并不簡(jiǎn)單法瑟。看網(wǎng)上的文章唁奢,肯定也是各執(zhí)一詞,因?yàn)闆]有哪一種語言是完美的窝剖,沒有缺點(diǎn)的麻掸,知乎上的大牛還是比較多的,你可以去那里看看他們對(duì)該語言的評(píng)價(jià)赐纱,好的壞的都看看脊奋,相信你應(yīng)該可以得出自己要不要學(xué)的結(jié)論熬北。而對(duì)于框架,我覺得認(rèn)識(shí)它的最好方法是去它的官網(wǎng)诚隙,看官方文檔讶隐,因?yàn)檫@是最一手的資料。但這些資料往往是英文的久又,所以英語對(duì)我們學(xué)習(xí)技術(shù)是至關(guān)重要的(老實(shí)講巫延,現(xiàn)在我們用的編程技術(shù) 99% 是來自西方,我們還停留在全面模仿和學(xué)習(xí)西方的階段)地消,所以在很長(zhǎng)一段時(shí)間炉峰,我們都要接受英文文檔,同時(shí)提高自己的英文閱讀能力脉执。實(shí)際上疼阔,文檔中框架介紹的英文并不多,少的也就幾個(gè)關(guān)鍵字就把框架的特點(diǎn)概括了半夷,學(xué)習(xí)過英語的人借助字典翻譯都是可以看懂的婆廊,只是需要你耐著性子看下去罷了。
上面便是學(xué)習(xí)編程技術(shù)的第一步——認(rèn)識(shí)它巫橄,就算你現(xiàn)在用不上淘邻,了解一下也是挺好的。現(xiàn)在每個(gè)人都訂閱了不少的微信公眾號(hào)嗦随,群消息和朋友圈也被公眾號(hào)文章充斥著列荔。我也訂閱了不下幾十個(gè)的公眾號(hào),大多是編程技術(shù)方面的枚尼,也有一些投資理財(cái)?shù)模▊€(gè)人對(duì)這些也比較感興趣)贴浙。而我看的更多的是介紹技術(shù)或者某個(gè)知識(shí)點(diǎn)的背景,除非我對(duì)某個(gè)技術(shù)比較熟悉署恍,不然很少看涉及很多具體細(xì)節(jié)的文章崎溃。我的看法是,公眾號(hào)是一種碎片化學(xué)習(xí)的一種方式盯质,一些作者的實(shí)踐總結(jié)和經(jīng)驗(yàn)之談袁串,一些優(yōu)秀的文章還是值得一看的。但倘若只靠看公眾號(hào)文章學(xué)習(xí)呼巷,知識(shí)是成不了體系的囱修。所以一些公眾號(hào)文章作為認(rèn)識(shí)技術(shù)的一種方式,是個(gè)不錯(cuò)的選擇王悍,當(dāng)然一些優(yōu)秀的博客也可以破镰。認(rèn)識(shí)了技術(shù)之后,即使時(shí)是向別人介紹時(shí),也可以說出來一些鲜漩。你也可以試著介紹自己學(xué)過的一些技術(shù)源譬,看自己能否清晰的說出來你對(duì)它的認(rèn)識(shí),或者只是知道一些技術(shù)細(xì)節(jié)孕似,對(duì)整體的認(rèn)識(shí)并不夠踩娘。
學(xué)習(xí)編程技術(shù)的第二階段就是學(xué)著使用它,如果已經(jīng)有書籍和視頻可以幫你學(xué)習(xí)它喉祭,那么這兩種方式肯定是比較好的养渴。學(xué)習(xí)語言和一些常見的框架,基本上都是有視頻和書籍的臂拓,視頻可以在網(wǎng)上找些培訓(xùn)機(jī)構(gòu)(這里也不談培訓(xùn)結(jié)構(gòu)好不好)厚脉,只要對(duì)你有幫助的資源你就應(yīng)該利用起來學(xué)習(xí),我學(xué)習(xí)使用某項(xiàng)技術(shù)時(shí)胶惰,也是看了不少視頻傻工。如果某個(gè)框架沒有相關(guān)的書籍和視頻,那么只能找些文檔和去官網(wǎng)學(xué)習(xí)了孵滞,對(duì)于前端框架(庫)來說中捆,這是很常見的。學(xué)習(xí)需要一個(gè)過程坊饶,沒有基礎(chǔ)泄伪,看視頻是最好的方式。有了基礎(chǔ)后匿级,我覺得看書是更好的選擇蟋滴,也可以節(jié)省你的時(shí)間,我就是買了很多書痘绎,現(xiàn)在學(xué)習(xí)也基本都是看書來的津函。當(dāng)然沒基礎(chǔ)的時(shí)候還是推薦看視頻,雖然要花很長(zhǎng)時(shí)間孤页,但是后面你就會(huì)發(fā)現(xiàn)自己學(xué)習(xí)其他技術(shù)會(huì)越來越快尔苦。在這個(gè)階段遇到問題,也是很正常的行施,在網(wǎng)上一般都是可以找到答案的,自己解決問題的能力也會(huì)慢慢鍛煉出來蛾号。在一些社區(qū)也可以發(fā)你的問題稠项,CSDN、知乎鲜结、Stack Overflow 都很不錯(cuò)展运。
學(xué)習(xí)編程技術(shù)的第三個(gè)階段是掌握(第二階段和第三階段的分界線其實(shí)并不是很明顯)斩芭,能夠用這個(gè)技術(shù)做出一點(diǎn)東西來,就說明你逐漸掌握它了乐疆,比如你學(xué)完 Java Web,自己可以動(dòng)手做出來一個(gè)簡(jiǎn)單的管理系統(tǒng)網(wǎng)站贬养,這就可以了挤土,并不需要考慮復(fù)雜的業(yè)務(wù)場(chǎng)景,這些在工作時(shí)會(huì)學(xué)到的误算。這個(gè)階段更多的關(guān)注技術(shù)本身的細(xì)節(jié)仰美,比如 Java 中的多線程編程有幾種方式,最好自己動(dòng)手寫寫筆記或者博客儿礼,這些都是很好的學(xué)習(xí)方式咖杂。學(xué)習(xí)框架,也可以看看官方文檔蚊夫,部分技術(shù)文檔也有中文版的诉字,畢竟寫官方文檔的人一般都是這個(gè)技術(shù)的開發(fā)者,他們肯定是最懂這個(gè)的知纷。學(xué)習(xí)編程技術(shù)就像鑄劍一樣壤圃,需要經(jīng)過反復(fù)的淬火,劍才能變得更加鋒刃琅轧,學(xué)習(xí)也是需要不斷地回顧和總結(jié)的過程伍绳,這樣才能強(qiáng)化和鞏固所學(xué)的知識(shí)。每個(gè)人的記憶力都是不一樣的乍桂,根據(jù)自己的情況冲杀,時(shí)不時(shí)的復(fù)習(xí)非常非常有必要的。
學(xué)習(xí)編程技術(shù)的第四個(gè)階段是深入睹酌,對(duì)于語言权谁,可以看看實(shí)現(xiàn)的源碼(這里又要提到 Java 的好處了),在第二個(gè)階段學(xué)著使用它時(shí)忍疾,肯定會(huì)有一些概念和知識(shí)點(diǎn)闯传,比如在 Java 中,ArrayList 對(duì)象中的數(shù)組是可以動(dòng)態(tài)擴(kuò)容的卤妒,但是你是否知道在 Java 中具體是怎么實(shí)現(xiàn)自動(dòng)擴(kuò)容的呢甥绿?如果你回答不了這個(gè)問題,那只能說明你還需要進(jìn)一步的學(xué)習(xí) Java则披,大部分的 Java 源碼你都可以直接反編譯查看共缕,這里推薦 Intellij IDEA IDE,查看 Java 源碼非常的方便(但 Java 也有一些本地化的方法士复,和操作系統(tǒng)關(guān)系密切图谷,并不是 Java 寫的翩活,不能直接查看),而 Eclipse 還需要手動(dòng)導(dǎo)入源碼便贵,不是很方便菠镇。學(xué)習(xí)框架,這個(gè)階段要關(guān)注框架的設(shè)計(jì)思想和實(shí)現(xiàn)承璃,也需要看源碼利耍,一些熱門的框架,找?guī)妆窘?jīng)典的書籍來看也是不錯(cuò)的盔粹。還是推薦國外的書籍隘梨,畢竟很多框架都是從國外傳入國內(nèi)的,國外優(yōu)秀的書籍會(huì)比較多些舷嗡,當(dāng)然我們國內(nèi)也有一些轴猎,但總體還是國外多些。如果沒有相關(guān)的書籍进萄,那么就只能去相關(guān)的技術(shù)社區(qū)和看源碼了捻脖。如果是開源的技術(shù),一般都會(huì)推管到 GitHub 上垮斯,可以去 GitHub 上看看郎仆,不懂的可以提個(gè) Issue,甚至學(xué)到一定程度也可以貢獻(xiàn)你的智慧兜蠕,到這個(gè)階段扰肌,不用我說,你都知道該怎么做了熊杨。
如果身邊有和自己學(xué)習(xí)同一種編程技術(shù)的曙旭,可以多多交流,肯定可以碰撞出思維火花的晶府。沒有的話桂躏,也可以加一些群,比如公眾號(hào)的這個(gè)群(后臺(tái)回復(fù) ”交流群“ 獲取加群方式)川陆,大家可以一起交流剂习。或者看一些優(yōu)秀作者的書籍较沪,我讀了楊冠寶大牛(孤盡鳞绕,也就是《阿里巴巴Java開發(fā)手冊(cè)》的作者,下面稱之為楊老師)的《碼出高效——Java開發(fā)手冊(cè)》尸曼,當(dāng)一些觀點(diǎn)和作者不謀而合時(shí)们何,那種感覺非常爽。比如在談到面向?qū)ο髸r(shí)控轿,楊老師說可以從哲學(xué)的角度看 Object 類中的方法冤竹,我是誰(getClass 方法拂封、toString 方法),從哪里來(Object 構(gòu)造方法鹦蠕、clone 方法)冒签,到哪里去(finalize 方法),之前我也這樣想過钟病,但是沒楊老師總結(jié)的好镣衡。有時(shí),你也可以從書中發(fā)現(xiàn)一些錯(cuò)誤和不恰當(dāng)?shù)牡胤降涤疲热鐒⑿览蠋熢凇洞a農(nóng)翻身》一書中,舉 Maven 和 Ant 對(duì)比的例子時(shí)說這是 ”約定重于配置“望浩,而 ”約定重于配置“ 是在對(duì)比注解和配置時(shí)才會(huì)說的辖所,是明顯地舉例不當(dāng),但這些都是很正常的磨德,每個(gè)人都難免會(huì)有出錯(cuò)的時(shí)候缘回。有時(shí)候讀書發(fā)現(xiàn)這些,也是很有趣的典挑。在讀吳軍博士的《態(tài)度》一書時(shí)酥宴,他給二女兒講為什么要讀非小說類的名著時(shí),說閱讀不能只看一些期刊和雜志您觉,即使嚴(yán)肅雜志上的文章質(zhì)量非常高拙寡,但作者觀點(diǎn)的前因后果由于篇幅都被省略掉了。零星的觀點(diǎn)也是形不成知識(shí)體系的琳水,而書的知識(shí)完整性是比較高的肆糕。所以在學(xué)習(xí)編程技術(shù)時(shí),讀書是很有必要的在孝。但是也不要因?yàn)閷W(xué)習(xí)編程技術(shù)诚啃,而只看相關(guān)的書籍,這樣你的視野會(huì)受限制私沮,這點(diǎn)我這段時(shí)間才感受到始赎,也是最近才開始看些編程無關(guān)的書籍,包括金融和經(jīng)濟(jì)學(xué)相關(guān)的仔燕。讀這些看似與編程無關(guān)的書造垛,能開闊人的眼界,增長(zhǎng)人的見識(shí)涨享,碼農(nóng)只是程序員的下限筋搏,優(yōu)秀的程序員絕對(duì)不只會(huì)寫程序。上面提到的的書籍厕隧,如果你感興趣也可以看一看奔脐,相信你會(huì)從中受益的俄周。
考慮到這篇文章的受眾,所以寫的是比較基礎(chǔ)的髓迎,我這段時(shí)間也在思考如何寫好公眾號(hào)文章峦朗。我算是比身邊的人多學(xué)習(xí)了點(diǎn)東西,不能保證這篇文章就是很好的高效學(xué)習(xí)編程技術(shù)的方式排龄。所以這里談?wù)劦降囊恍┳龇úㄊ疲幢貙?duì)你來說就是有效的。這段時(shí)間看劉欣老師的《碼農(nóng)翻身》橄维,很佩服他能夠?qū)⒁恍┘夹g(shù)由來和關(guān)鍵點(diǎn)融入到故事中尺铣,并且還能講的那么有趣。如何寫好文章也是我今后的學(xué)習(xí)方向争舞,也歡迎你在后臺(tái)留言凛忿,提出你的建議和觀點(diǎn)。
本文轉(zhuǎn)自我的微信公眾號(hào)《編程心路》竞川。