看你是什麼方向了。我推薦一開始還是學習 C 語言,因為他真的大道至簡,並且順便能逼著自己了解一些計算機原理,而且能碰到一些更加底層的東西(功利心不要太重,打好基礎,終生受益。我倒是推薦 小甲魚 的 C 語言視頻,B站優酷大概都有。 書的話,《C Primer Plus》算嗎( 這類問題我好像看到好多遍了 我依舊覺得你可以去某寶某東看看這是以前的一個回答。請問各位大佬想自學編程需要看什麼書??www.zhihu.com大學本科如何深入的學習一門編程語言??www.zhihu.com 太多了,不知道你想學具體哪方面的,可以關註:http://nndev.cn 相信每個初入計算機編程大門的小白都會有很多問題?例如我應該學習哪門編程語言?學習了這門編程語言我能進入 BAT 大廠嗎?除了編程語言我還要學習什麼?網上有很多文章講述初學者應該如何去學習,內容五花八門,錯綜複雜。文章翻了又翻,初入編程大門的小朋友們最終還是無法下定決心,反而看了以後開始變得更加迷茫,懷疑自己的智商。 在這裡我想要說的是,我和你一樣曾經也迷茫過,不是因為你太笨,而是因為互聯網上的知識太多了,作為初學者的你根本不知道如何抉擇。我和你一樣,曾經迷茫過,但慶幸的是我最後找到了答案,打開了計算機編程的大門。如今作為一個編程近十載的老碼農,我想就此將我的經驗分享與你。此文僅代表的我的個人觀點,歡迎一起討論學習。我將編程生涯分為了三個階段,並且我會告訴你這三個階段你分別要掌握什麼樣的技能,以及這三個階段你可以做什麼樣的事情。 三個階段 站在食物鏈頂端的程序員必然會經歷過三個階段。悲催的是有些人整個職業生涯都處於第一階段,而還有一部分停留在了第二階段,只有少量的人才能進入第三階段。這三個階段分別是:碼農(代碼民工)、程序員 和 架構師。接下來我們一起詳細聊聊這三個階段: 第一階段:碼農 每個程序員都會從碼農做起。還記得大學上第一節 C 語言課程的時候老師問誰有編程經驗,教室裡面有十來個同學舉起手來,然而那時候我不知道編程是什麼。沒錯,很多人還沒進入大學就達到了碼農階段。碼農到底是什麼,如何定義碼農?碼農知道如何跟機器交流,他可以編寫計算機能讀得懂的文字。當遇到一些問題時候,碼農可以將問題轉換為計算機可以讀懂的代碼,讓計算機幫助我們幹活(不管三七二十一,先 run 起來再說)。如何你在這個階段感覺到非常痛苦和難受,那麼你應該認真思考一下是不是適合程序員這個職業。如果 feel so good,那麼恭喜你,你有可能會成為一個不錯的程序員。然而可悲的是,很多人在整個職業生涯中都處於碼農這一階段。但是我要告訴你的是,這一階段的你雖然能幹活,但是很容易被年輕人替代,因為隨著你年紀的增長,年輕人會比你更有活力,而且他們可以忍受拿更少的錢,搬更多的磚頭。如果你只是個碼農,你的晉陞機會也會很少,同時意味著你的薪水也會較少。 如果你想加入 BAT 級別的大公司,這個階段的你會處處碰壁,面試一次被打擊一次,你會面到開始懷疑人生,自暴自棄。因此你需要掌握更多的技能,然後達到第二個階段,成為一名程序員。 第二階段:程序員 在這個階段,你可能接觸了至少 2 門編程語言,一個動態類型語言和一個靜態類型語言。程序員本質上是一個高級的碼農,那麼我們該如何進一步提升自己呢?碼農編寫可以正常 run 起來的代碼,俗稱搬磚。而程序員呢,是編寫高質量高性能的可以 run 的代碼,俗稱高級搬磚(哈哈哈)。那想成為程序員你需要掌握哪些技能呢: 了解代碼最終如何變成硬體晶元可以理解和執行的指令。 了解如何讓代碼有效利用計算機資源,例如 處理器、內存和網路。 了解如何使用數據結構和演算法編寫高效的代碼。 了解代碼質量很重要,並且會編寫測試代碼。 到此你是不是被嚇到了,成為程序員居然還有這麼多知識要學習,安安靜靜地做一個碼農不香嗎。我要告訴你的是,碼農很多,但是真正基礎紮實的程序員並不多。如果你能靜下心來修鍊內功,達到這一階段,BAT 的大門將隨時為你敞開,你會收穫更多的東西。絕大多數人一輩子都會停留在這個階段,直到退休。 第三階段:架構師 很悲催的告訴你,編程永無止盡,你需要不斷的去學習去進步。當你到達這個階段時候,你會站在一個更高的角度,對系統的全局的思考比對細節的細膩了解更多。你對設計大型分散式系統有紮實的了解,並且知道如何構建高可用,高並發,高可伸縮的大型分散式系統。 你永遠不會停止學習,並且始終關注前沿的技術,當然你可能也會創造出一些技術。在這個級別上,你可能會負責公司的大型項目,並且管理著一個團隊,團隊裡面有幾個骨幹程序員和多個碼農來完成工作。你可能會經常和其他團隊開會討論和制定技術方案,同時你需要有出色的社交和領導才能。如上就是我認為的程序員職業發展的三個重要階段,那麼接下來我們一起聊聊在這三個階段我們該如何去學習,逐步打怪升級走向程序人生的疊峰。 1 - 編程 首先考慮如何成為一個碼農,在這個階段你往往會有這樣的困惑,我到底該學哪門編程語言?Java,Python,C#,Ruby,Go,JavaScript 。。。其實你不應該為選擇編程語言發愁,因為這個階段,重要的不是特定的編程語言,而是一些編程的概念。這些概念在幾乎所有其他編程語言中都適用。當你成為經驗豐富的程序員時,學習一種新的編程語言所需的時間不超過一個星期,所以不要浪費時間去糾結 「完美的」 編程語言,因為根本不存在,也沒有必要。話雖如此,我還是會推薦 2 門編程語言給你,從最簡單的開始慢慢建立自信心,打怪升級從編程中獲得樂趣。 Python 我強烈建議你從 Python 開始學習。為什麼?因為 Python 是一門非常易於學習的語言,它真的,真的,真的很容易!Python 是一門高級的編程語言,使用它可以非常快速的開發出一個程序,正如 Python 之父的名言:人生苦短,我用 Python。誇張一點說,100 行 Java 代碼完成的事情,Python 只要一行就搞定了。那麼如何學習 Python 呢?在此推薦一下廖雪峰大神的在線圖文 Python教程,這是比較全面的一套教程。如果要繼續簡單點,你還可以在這個在線學習網站開始學習:Python 基礎教程。當然最好還是要搭配一本書一起學習,我推薦一下《Python 編程從入門到實戰》,喜歡讀紙制書的同學,它可以是你的一個選擇。 Java 學完 Python 之後,我強烈建議你學習另外一門語言 Java。學習 Java 將會把你帶入面向對象的世界,這是和面向過程完全不同的編程思想。Python是一種動態類型的語言,而 Java 是一種靜態類型的語言,此時你可能一臉懵逼,當你學完這兩種語言之後你會茅塞頓開。Python 和 Java的組合是很好的入門方法,學習他倆你會掌握到幾乎所有的編程概念,為以後學習其他編程語言打下紮實的基礎。我要告訴你的是,Python 和 Java 目前在企業里被大量使用,同時 Python 是機器學習首選語言,Java 是大數據生態的核心語言,學習他們也會更利於你找到一份好的工作。對於 Java 的學習,初期我建議你主要學習 Java Core 知識,等到熟悉以後再去學習高階知識。此時,我不再會推薦你去在線網站學習,因為你已經擁有了編程基礎,同時有了很強的動手能力,我會推薦你從書籍入手。學習 Java 當然少不了經典的 Java 編程思想,我推薦 Bruce Eckel 大師的最新 Java 巨作《 On Java 8 》,這是內容相當充實的一本書,學完它你將掌握 Java 編程的核心技能,同時關於 Java 語言的面試題對你來說將會是小菜一碟,不信你讀讀看? 如果此時你仍然不滿足,我會推薦你去學習一下 Java 之父 James Gosling 鼎力推薦的 《 Effective Java 》,它將教會你如何寫出高效的 Java 代碼,學完此書你的 Java 技能將會更上一層樓,此時你已經甩掉一大部分 Java 碼農。 此處我要恭喜你!你已經獲得碼農資格證! 2 - 計算機的構造 此時你已經可以寫出大量的代碼,但是你真的明白計算機底層究竟發生了什麼嗎?假設你編寫了一個非常簡單的程序,列印 Hello World 到屏幕上。例如用 Python 來編寫:hello = Hello World print(hello) 在硬體級別,變數分配(hello = Hello World)是什麼意思?字元串 Hello World 在硬體中如何表示?結果如何顯示在你的屏幕上?歸根結底,計算機只是硬體晶元和電線的集合。計算機到底是怎麼理解我們的代碼,並且完美的執行呢?小朋友你是否有很多問號? 事實是,代碼只是最表面的東西。代碼下還有許多其他層,它們一起互相協同工作,最終執行了我們輸入的代碼指令。相信此時你已經迫不及待的去解決頭上的眾多問題,不要著急,我推薦一本書給你。 這本書從最基礎的角度介紹了硬體,編譯器,鏈接器和操作系統,非常適合初學者。它將告訴你,如何創建一種編程語言,如何創建編譯器和鏈接器,最後創建操作系統。 3 - 演算法和數據結構 現在你處於高度興奮狀,此時你的編程思維發生了轉變。因為現在,你知道代碼之下計算機是怎麼運行的,硬體是如何工作的。你知道硬體資源是有限的,並且了解如何高效利用有限的資源。但是還不夠,我們要學習演算法和數據結構。數據結構和演算法是進入 BAT 大廠的必考項目,當然我們學習數據結構和演算法也不僅僅是為了進入大廠,歸根結底還是為了寫出高效的代碼,具體可以參考我之前的文章:面試了一個月,到底要不要刷演算法?我有了答案。在演算法和數據結構方面,如果你已經掌握了 Java 編程,那麼我推薦你從下面這本書入門: 好吧,書確實挺厚的,但是書中的內容絕對值得你去花時間學習,學完此書,你將紮實的掌握數據結構和演算法。如果你不喜歡選擇這本以 Java 描述的演算法書,如下這本也是一個不錯的選擇: 4 - 網路 到目前為止,我們還沒有談到網路,生活在互聯網時代,我們的程序不可能僅僅單機運行,因此作為一名合格的程序員掌握網路是必不可少的。基礎知識是枯燥的,尋找一本有趣的書是非常有必要的。 如上《計算機網路:自頂向下的方法》是一本超級容易理解的書,它涵蓋了你需要知道的所有的網路基礎知識,同時也是一本你可以用來墊桌角,適當時間查詢的資料書。學完此書,相信你會回來感謝我的推薦。 5 - 操作系統 如果你按照我推薦的學習順序,此時知道了計算機的組成原理,網路,演算法數據結構,那麼是時候開始學習操作系統了。操作系統基本採用 C 語言編寫,所以你需要一些 C 語言的基本知識。操作系統是非常繁雜龐大的知識體系,了解它的各個方面的所有細節非常耗時。我不建議你陷入細節,除非你想成為一名操作系統研發人員。在這裡,你只需要掌握基本操作系統概念,然後繼續前進,不要被繁雜的細節揪住。學習操作系統你可以參考如下這本書: 恭喜你!此時你已經是一名合格的程序員了! 6 - 分散式系統 分散式系統是關於構建和設計可伸縮的軟體系統,避免單點故障。這要求我們站在更高的層次考慮問題,而不是專註於如何編寫一個模塊組件(程序員和碼農)。舉個例子,例如你想要和你的好朋友通過軟體進行聊天通訊,你租用了一台伺服器,上面運行了聊天服務端,你和朋友的電腦上都運行了聊天客戶端,此時你們可以開始愉快的聊天了。相信通過前面的學習過程,這對你來說簡直易如反掌。但是當你的朋友的朋友知道了這個工具,也想加入進來,朋友的朋友的朋友也知道了,你的客戶滿滿的變得巨多無比。現在,你的服務每秒可以收到數百萬個聊天客戶端的請求。假如此時你的聊天伺服器出現故障怎麼辦?數百萬的請求將無法得到滿足,此時應該開始考慮分散式系統設計問題了。分散式系統是在單台機器無法滿足我們的請求時候,將多台機器通過軟體連接在一起,共同對外提供服務。當請求量增加時,我們可以靈活的添加服務節點。同時如果某個節點故障後,整個系統仍然可以對外提供服務。此處,我推薦《分散式系統概念與設計》,它可以幫助你掌握分散式系統設計的基本原理。 7 - 機器學習 機器學習是一個橫跨計算機科學,數學和統計學的領域,它是個硬骨頭。但是在當今時代,它被無處不在的使用!例如每天刷抖音的小朋友應該深有體會,刷抖音一時爽,一直刷一直爽,都是機器學習搞的鬼,拚命的推薦你喜歡的東西。即使你不從事相關的工作,我也建議那你學習了解一下它。為什麼?萬一機器哪天會自己寫代碼了怎麼辦(哈哈哈)。但是想要做這樣的事情,我們還需要有數學和統計學基礎,以及一些機器學習類庫,例如,Python 的 Scikit-Learn。機器學習主要有 2 種方法,一種方法和我們學習計算機基礎知識類似,上來就是干,先學習類庫擼代碼,然後再補充理論知識(個人更喜歡這種);另外一種方式是先學習理論,數學、統計學和機器學習演算法,這種方法在前期比較枯燥,初學者容易受挫。當年學習 Java 我就採用了第一種方法,先直接擼代碼,做項目,然後再鞏固理論知識。這種方法容易形成正反饋,寫代碼一時爽,一直寫代碼一直爽。一定有很多人採用這種方式,是的小朋友請舉手。 但這種方法的缺點是,有時候比較難理解為什麼這樣做,這樣做就沒 Bug 了,因為我們缺少了理論知識。相信你一定聽說過大名鼎鼎的 Andrew Ng,他在 Coursera 發布的課程可以作為你的機器學習入門課程,這門課程裡面沒有採用 Python,採用了另外一門語言,具體原因相信你看到就懂了,Andrew 老師會細細的告訴你,哈哈。如果你確確實實照我說的學習了上面的機器學習課程,那想必你應該已經知道了 Kaggle,去吧體驗用技術賺錢的快感,嘿嘿。 恭喜你成神了!現在我認為你是一名架構師了! 摘自我的知乎文章:尼克:假如時光倒流,我要這樣學編程?zhuanlan.zhihu.com 我個人路徑自學過程:Python→PHP→MySQL→(前端+JavaScript)→Linux(剛剛開始)學校安排:c→c++(可以學Java我沒選)隨便找個感興趣的方向就行,反正該踩的坑一個也少不了。 你說的是哪門編程語言?建議看官網,一般官網都會有技術文檔說明和論壇。 推薦閱讀:
看你是什麼方向了。
我推薦一開始還是學習 C 語言,因為他真的大道至簡,並且順便能逼著自己了解一些計算機原理,而且能碰到一些更加底層的東西(
功利心不要太重,打好基礎,終生受益。
我倒是推薦 小甲魚 的 C 語言視頻,B站優酷大概都有。
書的話,《C Primer Plus》算嗎(
這類問題我好像看到好多遍了
我依舊覺得你可以去某寶某東看看
這是以前的一個回答。
太多了,不知道你想學具體哪方面的,可以關註:http://nndev.cn
相信每個初入計算機編程大門的小白都會有很多問題?例如我應該學習哪門編程語言?學習了這門編程語言我能進入 BAT 大廠嗎?除了編程語言我還要學習什麼?
網上有很多文章講述初學者應該如何去學習,內容五花八門,錯綜複雜。文章翻了又翻,初入編程大門的小朋友們最終還是無法下定決心,反而看了以後開始變得更加迷茫,懷疑自己的智商。
在這裡我想要說的是,我和你一樣曾經也迷茫過,不是因為你太笨,而是因為互聯網上的知識太多了,作為初學者的你根本不知道如何抉擇。
我和你一樣,曾經迷茫過,但慶幸的是我最後找到了答案,打開了計算機編程的大門。
如今作為一個編程近十載的老碼農,我想就此將我的經驗分享與你。此文僅代表的我的個人觀點,歡迎一起討論學習。
我將編程生涯分為了三個階段,並且我會告訴你這三個階段你分別要掌握什麼樣的技能,以及這三個階段你可以做什麼樣的事情。
站在食物鏈頂端的程序員必然會經歷過三個階段。
悲催的是有些人整個職業生涯都處於第一階段,而還有一部分停留在了第二階段,只有少量的人才能進入第三階段。
這三個階段分別是:碼農(代碼民工)、程序員 和 架構師。
接下來我們一起詳細聊聊這三個階段:
每個程序員都會從碼農做起。
還記得大學上第一節 C 語言課程的時候老師問誰有編程經驗,教室裡面有十來個同學舉起手來,然而那時候我不知道編程是什麼。沒錯,很多人還沒進入大學就達到了碼農階段。
碼農到底是什麼,如何定義碼農?
碼農知道如何跟機器交流,他可以編寫計算機能讀得懂的文字。
當遇到一些問題時候,碼農可以將問題轉換為計算機可以讀懂的代碼,讓計算機幫助我們幹活(不管三七二十一,先 run 起來再說)。
如何你在這個階段感覺到非常痛苦和難受,那麼你應該認真思考一下是不是適合程序員這個職業。
如果 feel so good,那麼恭喜你,你有可能會成為一個不錯的程序員。
然而可悲的是,很多人在整個職業生涯中都處於碼農這一階段。
但是我要告訴你的是,這一階段的你雖然能幹活,但是很容易被年輕人替代,因為隨著你年紀的增長,年輕人會比你更有活力,而且他們可以忍受拿更少的錢,搬更多的磚頭。
如果你只是個碼農,你的晉陞機會也會很少,同時意味著你的薪水也會較少。
如果你想加入 BAT 級別的大公司,這個階段的你會處處碰壁,面試一次被打擊一次,你會面到開始懷疑人生,自暴自棄。
因此你需要掌握更多的技能,然後達到第二個階段,成為一名程序員。
在這個階段,你可能接觸了至少 2 門編程語言,一個動態類型語言和一個靜態類型語言。
程序員本質上是一個高級的碼農,那麼我們該如何進一步提升自己呢?
碼農編寫可以正常 run 起來的代碼,俗稱搬磚。而程序員呢,是編寫高質量高性能的可以 run 的代碼,俗稱高級搬磚(哈哈哈)。
那想成為程序員你需要掌握哪些技能呢:
到此你是不是被嚇到了,成為程序員居然還有這麼多知識要學習,安安靜靜地做一個碼農不香嗎。
我要告訴你的是,碼農很多,但是真正基礎紮實的程序員並不多。如果你能靜下心來修鍊內功,達到這一階段,BAT 的大門將隨時為你敞開,你會收穫更多的東西。
絕大多數人一輩子都會停留在這個階段,直到退休。
很悲催的告訴你,編程永無止盡,你需要不斷的去學習去進步。
當你到達這個階段時候,你會站在一個更高的角度,對系統的全局的思考比對細節的細膩了解更多。
你對設計大型分散式系統有紮實的了解,並且知道如何構建高可用,高並發,高可伸縮的大型分散式系統。
你永遠不會停止學習,並且始終關注前沿的技術,當然你可能也會創造出一些技術。
在這個級別上,你可能會負責公司的大型項目,並且管理著一個團隊,團隊裡面有幾個骨幹程序員和多個碼農來完成工作。
你可能會經常和其他團隊開會討論和制定技術方案,同時你需要有出色的社交和領導才能。
如上就是我認為的程序員職業發展的三個重要階段,那麼接下來我們一起聊聊在這三個階段我們該如何去學習,逐步打怪升級走向程序人生的疊峰。
首先考慮如何成為一個碼農,在這個階段你往往會有這樣的困惑,我到底該學哪門編程語言?
Java,Python,C#,Ruby,Go,JavaScript 。。。
其實你不應該為選擇編程語言發愁,因為這個階段,重要的不是特定的編程語言,而是一些編程的概念。這些概念在幾乎所有其他編程語言中都適用。
當你成為經驗豐富的程序員時,學習一種新的編程語言所需的時間不超過一個星期,所以不要浪費時間去糾結 「完美的」 編程語言,因為根本不存在,也沒有必要。
話雖如此,我還是會推薦 2 門編程語言給你,從最簡單的開始慢慢建立自信心,打怪升級從編程中獲得樂趣。
我強烈建議你從 Python 開始學習。
為什麼?
因為 Python 是一門非常易於學習的語言,它真的,真的,真的很容易!
Python 是一門高級的編程語言,使用它可以非常快速的開發出一個程序,正如 Python 之父的名言:人生苦短,我用 Python。
誇張一點說,100 行 Java 代碼完成的事情,Python 只要一行就搞定了。
那麼如何學習 Python 呢?
在此推薦一下廖雪峰大神的在線圖文 Python教程,這是比較全面的一套教程。
如果要繼續簡單點,你還可以在這個在線學習網站開始學習:Python 基礎教程。
當然最好還是要搭配一本書一起學習,我推薦一下《Python 編程從入門到實戰》,喜歡讀紙制書的同學,它可以是你的一個選擇。
學完 Python 之後,我強烈建議你學習另外一門語言 Java。學習 Java 將會把你帶入面向對象的世界,這是和面向過程完全不同的編程思想。
Python是一種動態類型的語言,而 Java 是一種靜態類型的語言,此時你可能一臉懵逼,當你學完這兩種語言之後你會茅塞頓開。
Python 和 Java的組合是很好的入門方法,學習他倆你會掌握到幾乎所有的編程概念,為以後學習其他編程語言打下紮實的基礎。
我要告訴你的是,Python 和 Java 目前在企業里被大量使用,同時 Python 是機器學習首選語言,Java 是大數據生態的核心語言,學習他們也會更利於你找到一份好的工作。
對於 Java 的學習,初期我建議你主要學習 Java Core 知識,等到熟悉以後再去學習高階知識。此時,我不再會推薦你去在線網站學習,因為你已經擁有了編程基礎,同時有了很強的動手能力,我會推薦你從書籍入手。
學習 Java 當然少不了經典的 Java 編程思想,我推薦 Bruce Eckel 大師的最新 Java 巨作《 On Java 8 》,這是內容相當充實的一本書,學完它你將掌握 Java 編程的核心技能,同時關於 Java 語言的面試題對你來說將會是小菜一碟,不信你讀讀看?
如果此時你仍然不滿足,我會推薦你去學習一下 Java 之父 James Gosling 鼎力推薦的 《 Effective Java 》,它將教會你如何寫出高效的 Java 代碼,學完此書你的 Java 技能將會更上一層樓,此時你已經甩掉一大部分 Java 碼農。
此處我要恭喜你!你已經獲得碼農資格證!
此時你已經可以寫出大量的代碼,但是你真的明白計算機底層究竟發生了什麼嗎?
假設你編寫了一個非常簡單的程序,列印 Hello World 到屏幕上。
例如用 Python 來編寫:
hello = Hello World print(hello)
在硬體級別,變數分配(hello = Hello World)是什麼意思?字元串 Hello World 在硬體中如何表示?結果如何顯示在你的屏幕上?
歸根結底,計算機只是硬體晶元和電線的集合。
計算機到底是怎麼理解我們的代碼,並且完美的執行呢?小朋友你是否有很多問號?
事實是,代碼只是最表面的東西。代碼下還有許多其他層,它們一起互相協同工作,最終執行了我們輸入的代碼指令。
相信此時你已經迫不及待的去解決頭上的眾多問題,不要著急,我推薦一本書給你。
這本書從最基礎的角度介紹了硬體,編譯器,鏈接器和操作系統,非常適合初學者。
它將告訴你,如何創建一種編程語言,如何創建編譯器和鏈接器,最後創建操作系統。
現在你處於高度興奮狀,此時你的編程思維發生了轉變。
因為現在,你知道代碼之下計算機是怎麼運行的,硬體是如何工作的。
你知道硬體資源是有限的,並且了解如何高效利用有限的資源。
但是還不夠,我們要學習演算法和數據結構。數據結構和演算法是進入 BAT 大廠的必考項目,當然我們學習數據結構和演算法也不僅僅是為了進入大廠,歸根結底還是為了寫出高效的代碼,具體可以參考我之前的文章:面試了一個月,到底要不要刷演算法?我有了答案。
在演算法和數據結構方面,如果你已經掌握了 Java 編程,那麼我推薦你從下面這本書入門:
好吧,書確實挺厚的,但是書中的內容絕對值得你去花時間學習,學完此書,你將紮實的掌握數據結構和演算法。
如果你不喜歡選擇這本以 Java 描述的演算法書,如下這本也是一個不錯的選擇:
到目前為止,我們還沒有談到網路,生活在互聯網時代,我們的程序不可能僅僅單機運行,因此作為一名合格的程序員掌握網路是必不可少的。
基礎知識是枯燥的,尋找一本有趣的書是非常有必要的。
如上《計算機網路:自頂向下的方法》是一本超級容易理解的書,它涵蓋了你需要知道的所有的網路基礎知識,同時也是一本你可以用來墊桌角,適當時間查詢的資料書。
學完此書,相信你會回來感謝我的推薦。
如果你按照我推薦的學習順序,此時知道了計算機的組成原理,網路,演算法數據結構,那麼是時候開始學習操作系統了。
操作系統基本採用 C 語言編寫,所以你需要一些 C 語言的基本知識。
操作系統是非常繁雜龐大的知識體系,了解它的各個方面的所有細節非常耗時。我不建議你陷入細節,除非你想成為一名操作系統研發人員。
在這裡,你只需要掌握基本操作系統概念,然後繼續前進,不要被繁雜的細節揪住。
學習操作系統你可以參考如下這本書:
恭喜你!此時你已經是一名合格的程序員了!
分散式系統是關於構建和設計可伸縮的軟體系統,避免單點故障。這要求我們站在更高的層次考慮問題,而不是專註於如何編寫一個模塊組件(程序員和碼農)。
舉個例子,例如你想要和你的好朋友通過軟體進行聊天通訊,你租用了一台伺服器,上面運行了聊天服務端,你和朋友的電腦上都運行了聊天客戶端,此時你們可以開始愉快的聊天了。
相信通過前面的學習過程,這對你來說簡直易如反掌。
但是當你的朋友的朋友知道了這個工具,也想加入進來,朋友的朋友的朋友也知道了,你的客戶滿滿的變得巨多無比。
現在,你的服務每秒可以收到數百萬個聊天客戶端的請求。
假如此時你的聊天伺服器出現故障怎麼辦?
數百萬的請求將無法得到滿足,此時應該開始考慮分散式系統設計問題了。
分散式系統是在單台機器無法滿足我們的請求時候,將多台機器通過軟體連接在一起,共同對外提供服務。
當請求量增加時,我們可以靈活的添加服務節點。同時如果某個節點故障後,整個系統仍然可以對外提供服務。
此處,我推薦《分散式系統概念與設計》,它可以幫助你掌握分散式系統設計的基本原理。
機器學習是一個橫跨計算機科學,數學和統計學的領域,它是個硬骨頭。
但是在當今時代,它被無處不在的使用!
例如每天刷抖音的小朋友應該深有體會,刷抖音一時爽,一直刷一直爽,都是機器學習搞的鬼,拚命的推薦你喜歡的東西。
即使你不從事相關的工作,我也建議那你學習了解一下它。
為什麼?萬一機器哪天會自己寫代碼了怎麼辦(哈哈哈)。
但是想要做這樣的事情,我們還需要有數學和統計學基礎,以及一些機器學習類庫,例如,Python 的 Scikit-Learn。
機器學習主要有 2 種方法,一種方法和我們學習計算機基礎知識類似,上來就是干,先學習類庫擼代碼,然後再補充理論知識(個人更喜歡這種);另外一種方式是先學習理論,數學、統計學和機器學習演算法,這種方法在前期比較枯燥,初學者容易受挫。
當年學習 Java 我就採用了第一種方法,先直接擼代碼,做項目,然後再鞏固理論知識。這種方法容易形成正反饋,寫代碼一時爽,一直寫代碼一直爽。
一定有很多人採用這種方式,是的小朋友請舉手。
但這種方法的缺點是,有時候比較難理解為什麼這樣做,這樣做就沒 Bug 了,因為我們缺少了理論知識。
相信你一定聽說過大名鼎鼎的 Andrew Ng,他在 Coursera 發布的課程可以作為你的機器學習入門課程,這門課程裡面沒有採用 Python,採用了另外一門語言,具體原因相信你看到就懂了,Andrew 老師會細細的告訴你,哈哈。
如果你確確實實照我說的學習了上面的機器學習課程,那想必你應該已經知道了 Kaggle,去吧體驗用技術賺錢的快感,嘿嘿。
恭喜你成神了!現在我認為你是一名架構師了!
摘自我的知乎文章:
我個人路徑
自學過程:Python→PHP→MySQL→(前端+JavaScript)→Linux(剛剛開始)
學校安排:c→c++(可以學Java我沒選)
隨便找個感興趣的方向就行,反正該踩的坑一個也少不了。
你說的是哪門編程語言?建議看官網,一般官網都會有技術文檔說明和論壇。