屬於野生自學的非科班學生(學地理的) 想把這塊基礎夯實

有類似的朋友或者前輩能給些不走彎路的學習路線嗎

水平停留在入門階段


首先需要題主記住一個結論:編程技術是一個技能。既然是一項技能,就像騎自行車一樣,是可以通過不斷的練習來獲得這項技能。

因此,題主在日後的工作中,不要再提自己屬於野生自學非科班學生這個背景,每當你這麼說自己時,其實都是對自己的不自信,潛意識裡認為自己是非專業出身,是學不會的根本原因。但是,其實壓根就是錯誤的想法。想想看,從高考後,到大學的所學專業,沒有幾個人真正知道自己想學什麼的,另外還有很多是服從調劑的專業學生。因此呢,從這裡可以說明,學什麼專業在某種程度上其實是一個偶然事件。所以,以後千萬不要再拿自己的非專業出身說事,不會就學,人的主觀能動性是能發揮決定性作用的。

其次,題主已經熟練使用了Python,說明是具備編程基礎和編程思想的。既然已經掌握了Python,那再接觸golang,無非就是換了一門語言而已。所以不要先去學C了,那樣只會是浪費時間,重要的還是我說的第一點,多練習。

人類的最本能的學習其實是模仿,所以,看不懂golang的一些特性,沒關係,別逼著自己看,也別著急。你可以先用golang語言,比如使用golang的框架搭一些小型的項目,做幾個功能。再比如說,去看看開源的一些組件和框架,自己按照例子,學習著寫一些。在用的過程中,用到什麼就學什麼,遇到的不會的,就找資料去解決問題。

這種學習方式是遇到問題解決問題;而不是試圖把所有知識都學會,所有問題都弄明白,最後再去實踐,後一種方式是錯誤的學習方式,效率及其低下。

希望題主能掌握好go,謝謝。

最後說一下,如果需要的話,我在github上維護的一個go的學習資料庫,可以看看:https://github.com/rubyhan1314/Golang-100-Days

也歡迎大家star和fork。

聲明:內容完全免費,侵刪。


要這麼看:

Go 已經實現了自舉,做應用和看源代碼,基本就在 Go 裡邊打轉轉。

但是有 C 的基礎的話,你再接觸到 Go 的指針、結構等概念時,會發現 Go 裡面的這些概念跟 C 比起來都是小兒科,畢竟 Go 的作者 Ken 自己就是 C 語言的作者之一,畢竟 Go 就是類 C 的編程語言。然而這些概念的問題都不大,畢竟 Go 也是友好上手型編程語言。


你這個問題是等於問,學習Python 需要先學C 語言嗎?

不需要先學C 語言。

如果真的熟練Python,Golang 可以在很短時間內學會的。

該學習一下數據結構和演算法了。

當然如果是轉行的,先轉行成功,以後再補上C 語言、操作系統、編譯原理、資料庫等科班課程。

請看

程序員提升書大全


顯然,有 C 的基礎肯定是好的,因為 Go 語言和 C 有太多的相似之處。但是題主的目標是 Go 語言,那就直接學 Go 語言吧。沒必要為了學一門語言而去再學一門比他更難的語言。如果是這樣,那我覺得,每個人都應該把 C 學一下,甚至要把彙編學一下,畢竟這樣你才能對什麼是指針,地址理解的更深刻。

資料是很多的,小白的話,我建議去學 bilibili 上韓順平的 Go 語言課程或其他類似課程,輔以各種書籍資料,如此學習起來會比較輕鬆。那些專業老師的事無巨細,雖說對有經驗的人來說是浪費時間,但我覺得對小白的學習是很有幫助的,能把基礎打的比較牢。

雖然說 Go 語言很簡單,對於有經驗的開發而言,一個星期就可以寫代碼了,我就是這樣。但一個基本沒什麼經驗的小白,還是建議系統學習一下,很多時候大佬不懂小白的苦,小白的問題,大佬也是很無語的,說不定因此會打擊了學習的熱情。

在有了一定的基礎之後,就是時候參考各位大佬的方法進行更加深入的學習了。


不需要先學C語言,但是有C語言基礎會更好。下面回答當中會有完整的Go語言的學習路線圖,以及配套資料。在看如何學習之前,先來看看Go語言比較中肯的評價。

懶人目錄:

  • Go語言的分析
  • Go語言基礎學習路線(附詳細學習方案!)
  • Go語言免費資源分享

一、Go語言的分析

下面這個是我在知乎上看到過的比較中肯的對Go語言的分析。原鏈接:kanmars:最近在看GO語言,反思C、JAVA等語言 。把文章部分內容引用在下面,給大家看看。

這個作者寫的後面他對於Go語言的判斷分析:

原公司架構為PHP等架構,需要升級,而公司無力立刻招攬足夠的JAVA等語言技術人員,既有IT架構人員又不能立刻開除,這種情況下,可以採用GO語言「先頂個五年」。原公司架構為C語言等架構,因擴展業務至其他未知領域,C語言開發過於精細,而Python等又過於粗糙,且既有IT架構人員不能立刻開除換一批,這種情況下,可以採用GO語言「先用著」原公司因為業務擴展,伺服器內存不足但是CPU充足,原業務為JAVA也不複雜,在此情況下,適宜用GO語言對業務進行重構原公司業務一無所有,而資金有限,GO語言程序員便宜,可以迅速招攬,並且公司自己用就行,不對外商業化,此情況下,適宜建立GO語言的技術體系。

而如果是:公司資源充足,技術體系為JAVA體系,業務目標極其底層只能用C,等情況,不建議使用GO語言。

其實Go語言在近幾年一直在風口浪尖上,比如知乎開始招聘Go語言的開發人員了。或者是Steam平台也逐漸轉向go語言開發等等這樣的話題一直被大家拿出來討論。

二、Go語言的學習線路圖

  1. Go語言介紹以及開發環境:Go語言是什麼、Go語言優勢、Go語言適合來做什麼、Go語言安裝和設置、標準命令概述、第一個Go語言程序
  2. 基礎類型:變數的命名規則、變數的聲明、變數的初始化、變數的賦值、匿名變數、基礎數據類型、字面常量、常量定義、iota枚舉、類型轉換、類型別名、fmt包的格式化輸出
  3. 運算符:算術運算符、關係運算符、邏輯運算符、賦值運算符、其他運算符、運算符優先順序
  4. 流程式控制制:選擇結構、循環語句、跳轉語句
  5. 函數:定義格式、自定義函數、遞歸函數、函數類型、匿名函數與閉包、延遲調用defer、獲取命令行參數、作用域(局部變數,全局變數)
  6. 工程管理:工作區、包、測試案例、GOPATH設置、編譯運行程序、Go install的使用
  7. 符合類型:指針、數組、Slice、map、結構體
  8. 面向對象程序:封裝與繼承、interface{}數據類型、類型斷言、多態的特性
  9. 異常處理:error介面、panic錯誤,recover
  10. 符合類型加強:map加強、Slice加強
  11. 實戰開發:基於Go語言的綜合和案例實戰

這樣的學習線路主要是夯實基礎,學習Go語言編程從入門到精通的簡介路徑,從動鵪鶉的與研發理解到靈活應用解決實際問題,有助於區塊鏈技術基礎做鋪墊,掌握Linux和Windows雙系統的開發環境,掌握常見數據結構和演算法(時間複雜度計算、排序、搜索、棧、隊列、二叉樹),建立對象面向對象思維,能對問題進行抽象歸類。掌握基礎的並發理論。

可掌握的核心能力:

  • 通過Go語言培養編程思維和動手能力
  • 通過Go語言的學習培養面向對象培養面向過程和編程思想,為以後的深入學習打下基礎

本階段可以解決的問題:

  • 具備Go領域基礎專業編程能力
  • 實現Go語言程序開發案例

第二階段:Golang高級編程

  1. Linux命令:Linux下的目錄結構、工作日程應用命令、Ubuntu下的軟體安裝和卸載
  2. Linux開發與調試工具:Go語言Linux下的IDE開發工具安裝與配置、文件描述符,虛擬地址空間、linux系統IO函數、阻塞和非阻塞的概念
  3. 文本文件處理:字元串處理、字元串轉換、文件操作、文本文件案例
  4. 反射機制:結構體標籤、結構體序列化、json、reflect反射
  5. 系統I/O操作:os包、文件屬性相關函數、鏈接相關概念以及函數、目錄操作相關概念以及函數
  6. 進程與通信:進程相關的概念、進程操作相關函數、孤兒進程、將是進城、進程回收、進程間的通信
  7. 線程與同步:互斥量、死鎖以及解決方案、讀寫鎖、條件變數、條件變數實現生產消費者模型、線程同步、Sync包
  8. goroutine協程與調度器:Goroutine協程的概念、Goroutine調度器機制、協程的高並發編程
  9. channel管道與CSP同步機制:CSP通訊順序同步機制、channel管道以及特性、緩存channel管道以及特性、並發的循環、select

可掌握的核心能力:具備Linux平台Golang伺服器開發方向基本知識和常用技能,並且具備基本的開發能力。

可解決的實際問題:

  • 具備Golang後端開發能力
  • 具備Linux系統編程能力
  • 可解決常見Linux系統編程問題
  • 了解系統編程的並發機制

熟練掌握以上階段的學習,基本上可以滿足企業開發中的初中級的需求,根據市場反饋數據來看的話,薪資普遍在8k左右。

三、Go語言免費學習資源

  • GO語言快速入門
  • Go語言Gui遊戲開發——黑白棋
  • Go語言Web開發Beego框架深入淺出
  • Go語言打造區塊鏈

以上內容均有配套的筆記和ppt課件,內含源碼的資料。但是每次一放上去網盤就被舉報,大家有需要的話可以留言,或者私信找我要一下~~~以上內容不完整,如果有需要日後來更新進階版本的學習方法。


推薦閱讀:
相关文章