聊聊自學(xué)編程

背景

經(jīng)常某乎都會推送如何學(xué)習(xí)編程?如何零基礎(chǔ)學(xué)習(xí)Java?等之類的問題,雖然我是科班出生,本科學(xué)習(xí)的是網(wǎng)絡(luò)工程,碩士讀的是軟件工程,但是大部分內(nèi)容都是自學(xué)的,面對大學(xué)老師有口無心的念著PPT和超大300人的教室,很早就醒悟過來自學(xué)才是王道,而且就算在古代老師也就是起到一個引導(dǎo)作用,更多還是要靠自己領(lǐng)悟,所謂師傅領(lǐng)進(jìn)門,修行在個人大抵就是如此,這可能就是高中和大學(xué)最大的不同了吧,不會再有人追著你學(xué)習(xí)了。這一路走來磕磕絆絆,馬上就要入職某廠了,也算不負(fù)當(dāng)初,就此機(jī)會回望來路,聊一聊我對編程的看法,希望曾經(jīng)迷茫的我走過的路可以幫助到正在迷茫的你。

編程是一棵樹

現(xiàn)在的我看來編程的世界是一棵樹,它包含了根和主干、分支和樹葉。絕大多數(shù)人進(jìn)入編程的世界是從一個個分枝開始的,這里的分支就是各種編程語言,每種語言就如同不同的分支一樣有著各自適用的領(lǐng)域,例如Python適合于爬蟲、數(shù)據(jù)分析等領(lǐng)域,C++/C則是用于一些高性能編程的場景,JAVA則在服務(wù)端開發(fā)和Android客戶端開發(fā)領(lǐng)域扮演著重要角色。對于第一個編程語言的選擇根據(jù)實(shí)際的情況也不相同,自學(xué)編程大多可以分為兩類,一類是畢業(yè)沒多久想轉(zhuǎn)行或者即將畢業(yè),這種情況會面對較大的就業(yè)壓力,時間比較短,但是目標(biāo)明確。這一類推薦Java就業(yè)面廣,崗位多,從客戶端到后端,再到大數(shù)據(jù)分析都有用武之地。另一類是剛高中畢業(yè)還沒上大學(xué),或者剛上大學(xué),有很充裕的時間去打基礎(chǔ)。這一類推薦C或C++,為什么推薦C/C++呢?那是因?yàn)槲矣X得在C/C++身上最能體現(xiàn)出編程的魅力和思想,初代程序員智慧的結(jié)晶,歷經(jīng)四十年經(jīng)久不衰,那它身上可以感覺到歲月的質(zhì)感,以及后來這些語言或多或少都可以找到C語言的影子。


其實(shí)對于語言的學(xué)習(xí)都差不多,尤其當(dāng)你學(xué)會一門語言之后再去學(xué)習(xí)一門新的語言可以很快入門。這是因?yàn)榻^大多數(shù)編程語言的內(nèi)容都大同小異,比如基本數(shù)據(jù)類型、控制結(jié)構(gòu)和函數(shù)等基本變化不大。只有很小一部分是該語言所特有,可能也正是這一小部分的差異決定了它的應(yīng)用場景。

第一門編程語言

對于自己第一門編程語言的學(xué)習(xí)推薦結(jié)合視頻和書一起看,視頻可能會講得更仔細(xì)和形象,只看書會很枯燥容易放棄,至于視頻B站上就有很多編程語言的入門視頻,有些從環(huán)境配置到IDE的下載都介紹的很仔細(xì),可以輕松入門。這一階段沒有什么技巧,唯一需要做的就是堅(jiān)持,然后就是享受編程的快樂,這一點(diǎn)很重要,不然以后你會很痛苦到最后堅(jiān)持不下去。雖然可能有些人會說這話說的太假太空,但是我還是要說少一點(diǎn)功利,多一點(diǎn)熱愛,因?yàn)闊釔鬯詧?jiān)持,這才能讓你在編程的路上走的更遠(yuǎn),這也是最最最重要的,可是卻被很多人忽略。等你跟著視頻學(xué)完第一門編程語言,可以說你已經(jīng)一只腳走進(jìn)了編程的世界,那么接下來又該如何呢?

王道or霸道

當(dāng)你學(xué)完第一門編程語言將會有兩條路,不同的人將會選擇不同的道路,第一條路為霸道,何謂霸道?霸者,橫掃六合,睥睨天下。如果說編程是一棵樹,那么霸道就是從分支走向樹葉之路,樹葉是什么?樹葉就是各種實(shí)際場景下的各種框架,與實(shí)際工作緊密聯(lián)系。如果你是學(xué)JAVA這時候你就要選擇未來的工作方向了,如果你想寫后端就去學(xué)Spring、Spring Boot等各種后端框架,如果是想寫客戶端,就去看Android,如果想去做大數(shù)據(jù)開發(fā)就去看Hadoop等。這時候你會非常的需要全球最大的同性交友平臺Github,從這上面會有很多開源的項(xiàng)目,找一個你所學(xué)內(nèi)容的項(xiàng)目,下載下來好好看別人的源碼,從別人的源碼中可以學(xué)到很多的東西,比如良好的編程習(xí)慣,好的設(shè)計(jì)提升自己的基本素養(yǎng)。這時候的你可能已經(jīng)具備了一定的項(xiàng)目能力,這時候就是要準(zhǔn)備面試了,??途W(wǎng)等這些網(wǎng)站看別人的面經(jīng),我之前寫過一篇實(shí)習(xí)面試的總結(jié)可以參考下。入職過后則就是在項(xiàng)目中學(xué)習(xí),在和同事的交流中學(xué)習(xí),看一些進(jìn)階視頻學(xué)習(xí),看框架源碼學(xué)習(xí)。

上面說完了霸道,那么何謂王道?王者,內(nèi)圣外王,就是進(jìn)一步去修煉內(nèi)功,如果說編程是一棵樹,那么王道就是從分支走向主干和樹根之路,那么主干和樹根又是什么呢?主干和樹根就是數(shù)據(jù)結(jié)構(gòu)與算法、操作系統(tǒng)和計(jì)算機(jī)組成原理,所有的語言和框架都是從這些上面生長出來的。春去秋來,嚴(yán)寒酷暑,樹葉落了又長,就如同各種框架橫空出世,最后黯然離場。最后只有數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)和計(jì)算機(jī)組成原理經(jīng)久不衰。那么為什么他們那么重要呢?以數(shù)據(jù)結(jié)構(gòu)為例,數(shù)據(jù)結(jié)構(gòu)是語言無關(guān)的,是前人對于數(shù)據(jù)的一種抽象。計(jì)算機(jī)是用來干什么的?計(jì)算機(jī)是用來計(jì)算的,那么計(jì)算的是什么呢?就算的就是數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)規(guī)定了數(shù)據(jù)在計(jì)算機(jī)中的存儲方式,那為什么衍生出那么多的數(shù)據(jù)結(jié)構(gòu)呢?是為了應(yīng)對復(fù)雜的應(yīng)用場景,盡可能快地完成計(jì)算任務(wù)。例如經(jīng)常查詢數(shù)據(jù)的情況下,線性表相較于鏈表能提供更快的查詢速度,而在需要刪除和增加數(shù)據(jù)的場景下,鏈表則比線性表表現(xiàn)更好。由此也可以看出只有學(xué)好了這些樹根和主干,你才能更好地理解計(jì)算機(jī)的運(yùn)行規(guī)則,在面對復(fù)雜情況時做出最正確的選擇。如果整天沉溺于框架之中,那么當(dāng)框架黯然離場之日,也就是你程序猿35歲職業(yè)危機(jī)之時。

其實(shí)王道也好,霸道也罷,都是學(xué)習(xí)編程,其最后的結(jié)果自然是殊途同歸,當(dāng)時選擇的差別只不過是特定場景下側(cè)重不同而已。選擇霸道的人,之后也要將數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)和計(jì)算機(jī)組成原理補(bǔ)上。而選擇王道的人就業(yè)之前也要很好的學(xué)習(xí)框架,培養(yǎng)自己的開發(fā)能力,才能更好地就業(yè)。

“術(shù)”與“法”

上面一節(jié)我們講述了如何在不同的情況下去走進(jìn)編程世界,然后一步步走下去,這就是“術(shù)”,針對不同的情況“術(shù)”有可能不同。而“法”沒有明確的指示,更像圈定一種范圍,在范圍內(nèi)可以自由發(fā)揮,是一種原則。如果說這種編程技巧是拳腳功夫,那么接下來說的“法”則更像內(nèi)功心法,練地越久內(nèi)功越深厚。

熱愛編程

這是第一條也是最要的一條,還是那句話,因?yàn)闊釔?,所以?jiān)持,如果你已經(jīng)選擇了這樣一條路,何不選擇讓自己開心點(diǎn)。改變不了世界,那就改變自己。而且只要你真的靜下心來試著去了解,你絕對會被編程的魅力所折服。

貴以恒

今天很殘酷,明天很殘酷,后天很美好。如果下定決心就請堅(jiān)持到底,其實(shí)從小到大道理我們都懂,課前預(yù)習(xí),課后復(fù)習(xí),難的是堅(jiān)持。貴以恒,作為成年人你應(yīng)該更懂得堅(jiān)持的意義。

紙上得來終覺淺

書上的,視頻里的每一道程序都盡可能全部敲出來,運(yùn)行一遍。不要覺得那么簡單肯定會,不,其實(shí)你不會,見過太多初學(xué)者因?yàn)橹形淖址胩煺也怀鲥e誤,沒有自己打出來運(yùn)行成功就不叫會,切記眼高手低,切記切記。

輸出和輸入同樣重要

最好的學(xué)習(xí)方式就是教會別人,從開始學(xué)習(xí)就要注重總結(jié)和歸納,可以通過寫博客的方式,一邊寫一邊思考,這樣能更好的理解問題,而且這也是在構(gòu)建自己的知識體系,以后方便回顧,如果還能幫到其他人,這不是一件皆大歡喜的事么。

read fucking source code

閱讀源碼,閱讀源碼、閱讀源碼,重要的事情說三遍,無論是項(xiàng)目源碼還是框架源碼,學(xué)習(xí)良好的編碼習(xí)慣,多想想為什么這么寫,如果是你你會怎么寫,怎么寫比較好,有沒有運(yùn)用什么設(shè)計(jì)模式,閱讀源碼是提升自己編程技術(shù)最快的方式,沒有之一。

多與人交流

現(xiàn)在通信如此發(fā)達(dá),多與其他人交流,尤其是比你厲害的人,不要閉門造車,可能別人的一句話就會讓你茅塞頓開。

營造沉浸式的環(huán)境

其實(shí)這一條與上一條有重合,給自己營造一個學(xué)習(xí)編程的環(huán)境,就像學(xué)英語最好就是在一個說英語的環(huán)境中。多看看別人的技術(shù)博客比如掘金、CSDN等,開始可能看不懂沒關(guān)系,要堅(jiān)持看,有一天你突然發(fā)現(xiàn)你能看懂了,說明你就入門了。有問題就直接提出來,一般有時間都會回答,多交流。

最后

有興趣可以關(guān)注公眾號QStack,會定期發(fā)布一些文章和學(xué)習(xí)資料。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容