初學編程丨從零開始學習編程的基本路線,BAT程序員親手總結!

編程並非說代碼怎麼寫,框架怎麼用,業務怎麼轉換爲代碼邏輯,這些都不是編程的要素(但倒是工做的剛需......)。我認爲按照下面這個路線來學習編程,會使本身在學習的路途上少去不少問題(好比爲啥會有多線程問題啊,什麼是阻塞啊,爲啥單線程模型反而更快啊,I/O爲啥是阻塞的啊,爲何要報NPL錯誤啊等等等等,可能不太恰當,打個比方嘛)。前端

先學一門程序語言

首先得掌握編程的邏輯。算法

要學會把生活中的問題,用程序語言的方式來轉換。最簡單的學習就是直接學一門編程語言。能夠是C/C++,Python,Go,Java, C#,Kotlin,Swift等等面嚮對象語言,隨便選一個喜歡的/之後會用到的均可以。spring

你會學習到變量、循環、條件判斷、類與對象、基本數據結構的一些用法甚至更深一些,獲取文件、控制欄輸入輸出等之類的東西。這是一門程序語言的基礎。編程

而後最好開始學習數據結構

由於此時掌握了基本編程語言的你,是徹底能夠把理論的數據結構轉換爲代碼邏輯的。數據結構通常不須要了解一些底層複雜的機制,也暫時無需考慮併發問題。基本的線性表、樹狀結構、圖型結構、查找/排序算法,高級數據結構等等,慢慢學習並總結,嘗試用這些數據結構與算法去類比生活中的一些事務。那時你會發現,算法無處不在(就跟數學同樣)。後端

能夠上LeetCode看看了

掌握了編程語言與數據結構,就去刷題吧。魯迅說過,刷題千萬遍寫代碼若有神。大膽地刷吧,不會就看答案,去理解答案,而後思考並總結其方法,最好是寫文章記錄下來。寫文章不要記流水帳,必定要你徹底弄明白了再去寫,保證寫下來的都是本身所領會到的(雖然百分之九十九都是別人寫過的...認可吧這就是事實...)。LeetCode社區還會有一些比賽之類的,雖然我還沒去體驗過。設計模式

計算機是如何運做的?

若是你不知道計算機究竟是怎麼運做的,那你也很難去深入理解你寫的那些涉及多線程、I/O、文件、網絡的代碼的原理。《計算機組成原理》《操做系統》《計算機》這兩本書也是計算機系學生的必修課。爲啥要學這個,這不明擺着嘛。。瀏覽器

一開始挺枯燥的,慢慢看,有耐心一點。其中會有一些東西運用到數據結構,正好派上用場。緩存

要理解處理器、磁盤、網絡、內存這些東西的基本運做方式,後面才能爲你解決一些想不通的問題(好比讀取文件時爲啥CPU能夠暫時掛起啥都不幹)。服務器

看完這些知識後你也基本上理解了你寫的代碼究竟是在幹嗎了。微信

作一個網站或者手機App或者桌面App?

此時你應該基本掌握你學的這一門語言了。你想作一點什麼,好比你學了Kotlin想開始作安卓應用?上google看開發文檔或者買本書照着學就好了。照着步驟一步一步來,不會難倒你的。也許會有一些疑問,爲啥這個地方會這麼設計啊,爲啥這些東西能夠這麼用啊,此時去學一些設計模式,而後你也許就能理解爲啥源代碼裏一些東西會這麼設計。

學網站的話,C#、Java、Python之類的均可以作到。另外因爲網頁確定是瀏覽器打開,因此你還得去學一學前端的東西(JS、Html、CSS)。難不到你的,只是作基礎網頁(基本的數據展現與輸入)的話用不了太多知識。網上各類資源都有,去照着作就是了。另外學一學基本的UI設計、平面設計知識會讓你寫出來的網頁更好看一些(起碼得配上本身帥氣的臉吧)。

後端好比Java(目前我只會這個),目前開發網站最須要的就是spring-boot了,百度去搜,或者掘金站內都有不少東西我就不講了,能夠基於servlet也能夠基於netty來開發,隨便你。甚至你還能夠用kotlin來開發Java後臺項目。Kotlin你就理解爲是Java語言的一種方言就行了,百分之百兼容Java,且某些方面更好用。在學這些框架的過程你也會更加深刻地接觸到I/O、網絡、多線程的知識。學習一門語言到越後面就會發現知識都是相通的,前面學到的東西都能爲你提供幫助。

桌面應用的話C#無疑是王者了。畢竟巨硬滿天下。可是也有一些其餘方法能夠開發桌面應用好比基於JS的Electron、還有基於C++的Qt。不少,我比較推薦C#(若是你沒學過C#能夠去學一學,此時的你多學一門語言僅僅是一兩週就搞定的問題,固然我指的是能用而不是深刻。多學一門語言也能讓你認識到不一樣的編程語言之間的差別與優缺點)。

繼續深刻?服務器 or 客戶端

服務器天然就是指Java這類後端方向的領域了,而客戶端則表明了網頁前端、桌面/手機App這類方向。由於兩者注重的方向出現了差異。因此深刻工做的話,你就要在本身所擅長的領域多下功夫。

後端天然要去研究分佈式、緩存、消息、SOA模型之類的東西,這些能讓你的後端網站擁有更健壯的體格,讓它們可以長久地運行下去;你要多瞭解一下服務器Linux系統,由於之後會常常打交道的。後端的東西很深刻,也許發展到必定程度你要根據具體的需求去建立輪子或者改造現有的輪子。任重而道遠吶~

前端則更加註重用戶體驗,界面交互邏輯、性能之類的,由於是用戶直接看到的、直接觸碰到的。畢竟客戶端就那麼大(你面臨的多是一臺十年以上的IE瀏覽器 / 一臺iPhone5 / 一臺小米2S,你懂的,若是人人都是Surface Laptop或者iPhone11Pro或者華爲保時捷那就沒啥好擔憂的了,不可能嘛),你要在有限的資源中不斷挖掘性能,具體我就不懂了咱暫時也不會~~

寫在最後

也許你須要學習一下英語,固然你會的話就當我沒說。編程畢竟源自國外,學的東西都是從國外傳來的,官方不少的資源都是英文版,因此英語格外重要。

也許不是很全面!但大概是一個比較正確的方向吧!但願對你們有幫助吧~並且我本身是一個C/C++的軟件開發工程師,若是你選擇的是C/C++的方向的話,自學C/C++編程難度很大,不妨和一些志同道合的小夥伴一塊兒學習成長,也有一些源碼和資料分享!

筆者的C語言C++編程學習交流圈子,【點擊進入】微信公衆號:C語言編程學習基地

最後就以一份關於C/C++編程的學習路線來結束吧!

相關文章
相關標籤/搜索