初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!
編程并不是說代碼怎么寫,框架怎么用,業(yè)務(wù)怎么轉(zhuǎn)換為代碼邏輯,這些都不是編程的要素(但卻是工作的剛需......)。我認(rèn)為按照下面這個路線來學(xué)習(xí)編程,會使自己在學(xué)習(xí)的路途上少去很多問題(比如為啥會有多線程問題啊,什么是阻塞啊,為啥單線程模型反而更快啊,I/O為啥是阻塞的啊,為什么要報NPL錯誤啊等等等等,可能不太恰當(dāng),打個比方嘛)。
先學(xué)一門程序語言
首先得掌握編程的邏輯。
要學(xué)會把生活中的問題,用程序語言的方式來轉(zhuǎn)換。最簡單的學(xué)習(xí)就是直接學(xué)一門編程語言。可以是C/C++,Python,Go,Java, C#,Kotlin,Swift等等面向?qū)ο笳Z言,隨便選一個喜歡的/以后會用到的都可以。
你會學(xué)習(xí)到變量、循環(huán)、條件判斷、類與對象、基本數(shù)據(jù)結(jié)構(gòu)的一些用法甚至更深一些,獲取文件、控制欄輸入輸出等之類的東西。這是一門程序語言的基礎(chǔ)。
然后最好開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)
因為此時掌握了基本編程語言的你,是完全可以把理論的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為代碼邏輯的。數(shù)據(jù)結(jié)構(gòu)一般不需要了解一些底層復(fù)雜的機制,也暫時無需考慮并發(fā)問題。基本的線性表、樹狀結(jié)構(gòu)、圖型結(jié)構(gòu)、查找/排序算法,高級數(shù)據(jù)結(jié)構(gòu)等等,慢慢學(xué)習(xí)并總結(jié),嘗試用這些數(shù)據(jù)結(jié)構(gòu)與算法去類比生活中的一些事務(wù)。那時你會發(fā)現(xiàn),算法無處不在(就跟數(shù)學(xué)一樣)。
可以上LeetCode看看了
掌握了編程語言與數(shù)據(jù)結(jié)構(gòu),就去刷題吧。魯迅說過,刷題千萬遍寫代碼如有神。大膽地刷吧,不會就看答案,去理解答案,然后思考并總結(jié)其方法,最好是寫文章記錄下來。寫文章不要記流水賬,一定要你完全弄明白了再去寫,保證寫下來的都是自己所領(lǐng)會到的(雖然百分之九十九都是別人寫過的...承認(rèn)吧這就是事實...)。LeetCode社區(qū)還會有一些比賽之類的,雖然我還沒去體驗過。
計算機是如何運作的?
如果你不知道計算機到底是怎么運作的,那你也很難去深刻理解你寫的那些涉及多線程、I/O、文件、網(wǎng)絡(luò)的代碼的原理。《計算機組成原理》《操作系統(tǒng)》《計算機》這兩本書也是計算機系學(xué)生的必修課。為啥要學(xué)這個,這不明擺著嘛。。
一開始挺枯燥的,慢慢看,有耐心一點。其中會有一些東西運用到數(shù)據(jù)結(jié)構(gòu),正好派上用場。
要理解處理器、磁盤、網(wǎng)絡(luò)、內(nèi)存這些東西的基本運作方式,后面才能為你解決一些想不通的問題(比如讀取文件時為啥CPU可以暫時掛起啥都不干)。
看完這些知識后你也基本上理解了你寫的代碼到底是在干嘛了。
做一個網(wǎng)站或者手機App或者桌面App?
此時你應(yīng)該基本掌握你學(xué)的這一門語言了。你想做一點什么,比如你學(xué)了Kotlin想開始做安卓應(yīng)用?上google看開發(fā)文檔或者買本書照著學(xué)就行了。照著步驟一步一步來,不會難倒你的。也許會有一些疑問,為啥這個地方會這么設(shè)計啊,為啥這些東西可以這么用啊,此時去學(xué)一些設(shè)計模式,然后你也許就能理解為啥源代碼里一些東西會這么設(shè)計。
學(xué)網(wǎng)站的話,C#、Java、Python之類的都可以做到。另外由于網(wǎng)頁肯定是瀏覽器打開,所以你還得去學(xué)一學(xué)前端的東西(JS、Html、CSS)。難不到你的,只是做基礎(chǔ)網(wǎng)頁(基本的數(shù)據(jù)展示與輸入)的話用不了太多知識。網(wǎng)上各種資源都有,去照著做就是了。另外學(xué)一學(xué)基本的UI設(shè)計、平面設(shè)計知識會讓你寫出來的網(wǎng)頁更好看一些(起碼得配上自己帥氣的臉吧)。
后端比如Java(目前我只會這個),目前開發(fā)網(wǎng)站最需要的就是spring-boot了,百度去搜,或者掘金站內(nèi)都有很多東西我就不講了,可以基于servlet也可以基于netty來開發(fā),隨便你。甚至你還可以用kotlin來開發(fā)Java后臺項目。Kotlin你就理解為是Java語言的一種方言就好了,百分之百兼容Java,且某些方面更好用。在學(xué)這些框架的過程你也會更加深入地接觸到I/O、網(wǎng)絡(luò)、多線程的知識。學(xué)習(xí)一門語言到越后面就會發(fā)現(xiàn)知識都是相通的,前面學(xué)到的東西都能為你提供幫助。
桌面應(yīng)用的話C#無疑是王者了。畢竟巨硬滿天下。但是也有一些其他方法可以開發(fā)桌面應(yīng)用比如基于JS的Electron、還有基于C++的Qt。很多,我比較推薦C#(如果你沒學(xué)過C#可以去學(xué)一學(xué),此時的你多學(xué)一門語言僅僅是一兩周就搞定的問題,當(dāng)然我指的是能用而不是深入。多學(xué)一門語言也能讓你認(rèn)識到不同的編程語言之間的差異與優(yōu)缺點)。
繼續(xù)深入?服務(wù)器 or 客戶端
服務(wù)器自然就是指Java這類后端方向的領(lǐng)域了,而客戶端則代表了網(wǎng)頁前端、桌面/手機App這類方向。因為二者注重的方向出現(xiàn)了差別。所以深入工作的話,你就要在自己所擅長的領(lǐng)域多下功夫。
后端自然要去研究分布式、緩存、消息、SOA模型之類的東西,這些能讓你的后端網(wǎng)站擁有更健壯的體格,讓它們能夠長久地運行下去;你要多了解一下服務(wù)器Linux系統(tǒng),因為以后會經(jīng)常打交道的。后端的東西很深入,也許發(fā)展到一定程度你要根據(jù)具體的需求去創(chuàng)建輪子或者改造現(xiàn)有的輪子。任重而道遠(yuǎn)吶~
前端則更加注重用戶體驗,界面交互邏輯、性能之類的,因為是用戶直接看到的、直接觸碰到的。畢竟客戶端就那么大(你面臨的可能是一臺十年以上的IE瀏覽器 / 一臺iPhone5 / 一臺小米2S,你懂的,如果人人都是Surface Laptop或者iPhone11Pro或者華為保時捷那就沒啥好擔(dān)心的了,不可能嘛),你要在有限的資源中不斷挖掘性能,具體我就不懂了咱暫時也不會~~
寫在最后
也許你需要學(xué)習(xí)一下英語,當(dāng)然你會的話就當(dāng)我沒說。編程畢竟源自國外,學(xué)的東西都是從國外傳來的,官方很多的資源都是英文版,所以英語格外重要。
也許不是很全面!但大概是一個比較正確的方向吧!希望對大家有幫助吧~而且我自己是一個C/C++的軟件開發(fā)工程師,如果你選擇的是C/C++的方向的話,自學(xué)C/C++編程難度很大,不妨和一些志同道合的小伙伴一起學(xué)習(xí)成長,也有一些源碼和資料分享!
筆者的C語言C++編程學(xué)習(xí)交流圈子,【點擊進入】微信公眾號:C語言編程學(xué)習(xí)基地
最后就以一份關(guān)于C/C++編程的學(xué)習(xí)路線來結(jié)束吧!
總結(jié)
以上是生活随笔為你收集整理的初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MapReduce算法形式四:mapjo
- 下一篇: 2023考研高数接力题典1800习题讲解