-
1 # Go語言中文網
-
2 # 大學生程式設計指南
一種程式設計值多少錢除了自身的技術能力之外,主要還是看市場對於這種程式語言的需求,現在很多的招聘單位對於go語言的崗位上薪資都在3萬以上,但是具體看細節要求除了對於這種程式語言的要求之外,對於經驗以及行業經驗的要求要大於對這門程式語言的需求。基本上go語言的工作經驗2年以上,如果用go語言做過大型的專案,薪資就比較容易上去。
大致招聘go語言的公司主要分成幾個類別,一種是大資料開發工程師,一種是區塊鏈相關的,還有一種是物聯網,還有人工智慧以及演算法相關職位等等,而且基本上5年以上的開發經驗和java程式語言關聯比較大,所以講只靠單純的學習一種程式語言就能拿到3萬以上的工資對現在來講不是很現實。基本上是掌握了大型的軟體開發經驗再加上2年以上的開發經驗差不多能夠拿到這個數字。
其實這就觸碰到程式設計師基本功問題了,程式設計師基本功不完全是程式語言的程式設計能力,還需要具備一定的框架能力,以及實際專案開發經驗,所以想要拿到高薪需要全方位的發展,只是掌握一種程式語言只是代表具備了一定的基礎,現在簡單看一個基本的招聘資訊,簡單做下分析。
這是要求的go語言的高階工程師,對於go語言的要求是2年以上工作經驗,一直在強調資料結構和演算法功底,這都不是一個程式語言所能涵蓋的,而且任職的要求也不僅僅是就是用go語言進行程式設計,考察一個程式設計師的綜合解決問題的能力,這就是所說程式設計師水平。
一個成熟優秀的程式設計師首先是不受到程式語言限制的,程式設計師水平不僅僅限制在一種程式語言身上,很多程式設計師學習一種新的程式語言只需要半個月就能跟上做專案,這就是一種綜合能力的體現,所以真正的程式設計師也不會太在乎是不是要學習最新的程式語言,遇到專案需要直接上手解決問題。
可以說的再直白一點,如果是一個java高階工程師,切換到go語言去做專案,一樣可以做的非常出色,優秀的程式設計師會脫離開程式語言本身,學的是程式設計思想,遇到一個併發處理的場景解決問題的方案大同小異,至於是用什麼程式語言其實差異不是很大,所以能用java程式設計拿到高工資一樣能夠用別的程式語言拿到高薪水,都是一樣的道理。
現在很多初學者在選擇程式語言的時候猶豫非常多時間,覺得選擇好一種程式語言有助於拿到高工資,C語言程式設計不像之前那麼火熱,但是掌握C語言程式設計的高手一樣能拿到非常不錯的薪水,作為一個技術人員不要把程式語言看的那麼重,程式設計思想的錘鍊才是核心。
回覆列表
對於 Go 程式設計師來說,月薪 3 萬需要會哪些內容呢?希望本文對月薪不到 3 萬的你有一定的幫助,祝你早日實現月薪 3 萬+
在這裡,我需要假定一些前提條件。首先,我們假定工作地點是北京。然後,我們分大公司和創業公司兩個維度來看。
01大公司我們先來看一個滴滴的『Golang開發工程師(20k-50k)』招聘要求:
崗位職責:
參與滴滴基礎服務平臺的設計、研發工作,提升滴滴產品穩定性;與產品經理嘗試溝通產品需求;進行相關產品的技術文件編寫,方案設計;學習研究業界先進技術,保持技術進步;任職要求:
本科及以上學歷,計算機相關專業,兩年以上服務端研發經驗;深入理解計算機原理,有紮實的資料結構和演算法基礎;深入理解linux系統及其原理,熟悉TCP/IP、HTTP協議以及網路程式設計;良好的編碼和文件習慣,對程式碼美感的追求孜孜不倦;精通Go/C/C++/Python等至少一門語言,有Go開發經驗者優先;熟悉常用的sql、nosql資料庫原理,閱讀和理解優秀的開源系統程式碼;具有分散式系統設計和開發經驗者優先。我們主要關注任職要求。
硬性條件有一些是硬性條件,比如:學歷、專業、工作年限。這些必須具備,否則簡歷可能都不透過。能力特別突出除外。
計算機基礎前段時間,我拉了一些大學生,專門為他們做學習和職業規劃,已經做了兩期 「1對1」 溝通,其中我一再強調,要注重基礎知識。對於計算機來說,基礎主要包括:資料結構和演算法、作業系統、計算機網路、計算機組成原理等。另外,需要學習一些彙編知識,同時 C 語言最好能較熟悉。
然而,作為一個已經工作了的人,以上基礎,如果不好,可能沒法做到現在全面的補上來,但有一些應該花時間,至少換工作前,需要進行復習,比如:資料結構和演算法、計算機網路等,如果你剛工作,我建議給自己定一個計劃,什麼時間好好補補哪方面的基礎。
從上面滴滴崗位的要求可以看到,他們對基礎很看重。這也是我一直很看重的。
良好的習慣有時候我在想”處女座“的程式碼應該看起來會很美(你身邊有處女座的程式設計師嗎?)
程式設計師應該有一些潔癖:對程式碼美感的無限追求。永遠記住,程式碼是寫給人看的,只是偶爾讓機器執行一下。
在這方面,Go 為程式設計師做了很多,透過 gofmt 可以很大程度讓團隊的風格保持一致。我們應該按照 gofmt 的要求編碼,努力做到 gofmt 執行前後一致,好的習慣是需要長期養成的。
比如,我看到這樣的註釋就會忍不住改一下:
//這是註釋 我會改為:// 這是註釋
雖然只是加了一個空格,但看著更舒服!
精通一門語言這裡我們談 Go 語言,所以我們談談怎麼才算精通了 Go 語言。
對於精通,其實每個人的理解是不一樣的,並沒有統一的標準。但大體上,我們可以從以下幾個方面來考察:
Go 語言基本功。這方面相對來說是比較容易的,看書+專案實戰,基本就沒問題了;核心特性的原理。比如:GMP 理論,slice 和 map 等資料結構的實現,記憶體分配策略,GC 策略等。這些知識我們可以透過一些資料和書籍獲得,目前 Go 語言中文網就有這方面較多的資料,https://studygolang.com/subject/3。另外,如果能力夠,可以閱讀相關原始碼,實際來說也應該嘗試啃啃,可以結合著一些資料來啃;架構方面的知識。現在微服務架構很火,需要理解、掌握微服務架構的知識。掌握一些優秀的架構方案,有實際的架構經驗;問題排查知識和效能調優經驗。CPU、記憶體問題排查,垃圾回收問題排查等,runtime 涉及到的除錯工具熟練掌握,pprof 工具熟練掌握,有實際的效能調優經驗;Go 生態的掌握和優秀開源專案學習。熟悉 Docker、k8s 等 Go 生態方案,瞭解持續整合工具和實施方案。Go 的優秀開源專案,像 BoltDB、Caddy,Web 框架 Gin/Echo 等,都是值得認真閱讀的。https://github.com/avelino/awesome-go 該專案彙總了 Go 語言各種庫。資料庫知識現在的專案,都離不開儲存,要求我們必須掌握資料庫知識。現在資料庫一般分為兩種:關係資料庫(SQL)和非關係資料庫(NOSQL)。我們必須同時掌握這兩種,因為專案中很可能都會使用。
目前來說,關係資料庫一般掌握 MySQL 即可;而 NOSQL 方面,Redis 必須學習,MongoDB 也得了解。除此之外,快取方面,Memcached 雖然現在貌似更多被 Redis 替代了,有興趣也可以瞭解下。
其他方面,像 ElasticSearch 現在是很流行的,有些時候直接當資料庫使用,我們也應該熟悉它的使用。
分散式系統設計這方面的知識,很多人可能沒有機會實踐,更多隻能學習別人總結的知識、經驗。如果你工作中有幸能接觸這方面的知識,一定要好好學習,這是對你職業很有幫助的。
關於分散式系統設計,市面上有不少這方面的書籍。我個人建議,如果你現在的專案,在不斷向分散式方向演進,可以買這方面的書看,如果只看沒機會實踐,對自己的幫助會比較小,畢竟這是一個實踐更重要的技能。
高效能、可擴充套件、高可用,這是架構設計常談的一些方面,很多知識有實際的接觸會更能理解。
其他知識
除了上面的知識,一般還建議瞭解一些前端知識,掌握 Nginx 等 Web Server,熟悉 Linux 下的 shell 程式設計、Vim 的簡單使用等。總結透過上面的分析,你會發現,語言只是整個知識體系的一小部分。基礎紮實,不斷學習,有機會實踐,工作 3 年左右進入大廠,月薪 3 萬小 case。
02小公司由於各種原因,有些人可能沒進入大廠,那麼小公司如何能夠達到月薪 3 萬呢?
同樣,我在網上找了一份小公司招人要求。職位:Go開發工程師,薪資範圍(30k-50k)。
職責:
負責大資料平臺和AI運維平臺的服務端設計、研發工作, 保證服務穩定、可靠;理解業務邏輯與分析產品需求並給出相應的技術方案;學習研究業界前沿技術, 保持技術進步, 不斷提高服務效能;注重程式碼質量,有良好的自我驅動能力,工作嚴謹,責任感強,有協作精神;要求:
計算機相關專業本科及以上學歷,三年以上工作經驗;熟悉Linux系統及其原理, 熟悉Web服務端開發, 熟悉TCP/IP、HTTP協議以及網路程式設計;熟練掌握golang等程式設計開發,有實際專案開發經驗;基礎紮實, 熟悉掌握 mysql、redis等常用儲存方案及基本原理,能夠獨立地設計合理的資料庫結構;具有分散式/高效能系統設計和開發經驗者優先, 熟悉大資料hadoop相關技術經驗都優先。從這份 JD 可以看出,除了基礎要求、演算法方面和上面的不太一樣外,其他的類似。
一般來說,大廠,特別是百度系(指初始團隊從百度出來的),面試考核演算法特別多。相較而言,小公司對這方面不會太看重。
然而,無論要求是什麼,基礎紮實永遠是好的,無論是你的發展還是對你能力的提升都會很有幫助。
從上面小公司的 JD 看,似乎小公司更容易拿到 3 萬以上。從這幾年的行情看,情況確實如此,但這只是現金的部分。綜合考慮,大公司價效比會更高。
小公司的詳細情況,我就不額外重複分析了。這裡對選小公司提一些建議,方便更快地實現月薪 3 萬。
如何選擇小公司對於大學生,我強烈建議畢業時候要努力進入大公司。如何進入大公司,我以後有機會專門撰文分享。對於沒有經歷過大公司的,要給自己定一個目標,進入一家網際網路大公司歷練下,對自己的提升是很不一樣的。
那麼,如果選擇小公司,我們該如何選呢?
我在創業公司摸爬滾打了快 5 年,對創業小公司有一些自己的理解。在這裡給一些建議,供參考。
新人(0-2年)如果你是一個工作年限不長的(0-2年),你進入小公司並不是選擇創業,更多可能是進不去大公司。這時候,你一定要想辦法瞭解這家公司是否注重新人的成長,公司是否會有現金流問題(可能不一定了解到,但一定要多打聽這個公司的情況,否則很容易進去沒多久就裁員)。這個時期的你,最關注的不應該是拿到多少錢,而是這份工作對自己的成長會有多大。進入公司後,除了工作之外,一定要注意保持“帶薪學習”,否則幾年後,你和同學的差距會越來越大。
老手(3年以上)如果你工作有一定的年限了(3年以上),你選擇創業公司,更多希望公司能夠成功,能夠實現自己財務的突破。這時,你要找一個自己看好的方向,找靠譜的團隊,尤其是創始人,他代表了這個公司對這個行業的認知,能不能成功,創始人是關鍵。當然,進入創業公司,心裡要有預期:成功的可能性是很小的。選擇了創業公司,你就要做好準備,千萬別隻是簡單的混日子,應該把自己定位成公司的核心人員,甚至進入公司管理層。關於待遇,在談 offer 時,能多要就多要,創業公司的薪酬體系不完善,入職時的薪資很重要,切記!
總之,創業公司風險相對較大,適合想闖一闖的人。創業公司對你的要求,更多會是廣度,你需要多方面提升自己,這一定程度上也是一件好事。如果你進入創業公司之前,在某個領域的深度足夠,創業公司的環境對你來說是一個很好地機會,讓你能夠更全面的發展。同時,你要保持對技術的敏感度,別讓手生!
還有更多想說的~作為一個技術人,我們除了掌握技術本身之外,我個人強烈建議花些時間學學其他的東西,讀讀其他的書籍,別隻是停留在技術層面,至少工作了 2、3 年之後,應該花 30% 左右的時間在其他能力的提升上,工作年限越長,這個比例應該越大。同時,應該學會總結,將自己的學習、工作等心得、體會記錄下來,和別人分享。所以,強烈建議你嘗試寫作。
寫作,教會別人,這也是掌握知識最牢固、最有效的方式,當然難度也較大,需要有毅力,要堅持!
總結透過以上的分析,我想你應該對達到月薪 3 萬以上是個什麼要求有了一定的瞭解。這裡的關鍵還是要自己制定目標,堅持學習,否則一切都是遙不可及!
祝你早日實現月薪 3 萬!