蘋果
今年的新 iPhone 你們也看到了。
旗艦款——iPhone Xs,iPhone Xs Max。
還有個五光十色“廉價版”
——iPhone Xr
發(fā)布會一結束,我看我的朋友圈就看到有人訂購了抑堡,聽說新iPhone太難買了,為什么難呢朗徊?因為余額不足唄首妖;螞蟻花唄不夠用唄;信用卡不夠刷唄爷恳;
但是羅馬不是一日建成的有缆,蘋果也不是一天就貴起來的,然而最扎心的是温亲,新款iPhone價格破萬棚壁,你還沒有月薪過萬。
想要
月薪過萬栈虚,選對行業(yè)袖外、崗位很重要
在我們身邊,經(jīng)常聽得到別人家的工資魂务,動則就是一萬起曼验;近年來北京上海的平均工資,也都遠遠超過了一萬粘姜;甚至不久前鬓照,一位在公園為女兒相親的上海老大爺直言:月薪一萬是討飯。
乍一看相艇,好像月薪過萬真是一件再稀松平常不過的事,所以在總的概率上講纯陨,想要月薪過萬坛芽,還是挺難的留储?
數(shù)據(jù)顯示:2017年全國主動申報個稅人數(shù),也就是年收入12萬以上的人數(shù)咙轩,大概1500萬获讳,就算沒主動申報個稅的也是1500萬,那月薪過萬的總人口也不過3000萬活喊。而2017年全國總的就業(yè)人口丐膝,超過7.7億,也就是月薪過萬的人數(shù)占總就業(yè)人數(shù)不到5%钾菊。
月薪
過萬帅矗,你就打敗了至少95%的職場人。
并且煞烫,想要月薪過萬浑此,還很大程度上跟工作經(jīng)驗、行業(yè)滞详、崗位等有關凛俱。
工作時間越長,工資越高料饥;互聯(lián)網(wǎng)行業(yè)蒲犬,相比傳統(tǒng)的制造業(yè)、農(nóng)林牧副漁要有更高的薪酬岸啡;技術崗普遍比職能崗待遇高原叮。
月薪
過萬,都是什么職業(yè)凰狞?
互聯(lián)網(wǎng)行業(yè)這幾年一直是“朝陽行業(yè)”篇裁。無論是前段時間鼓吹是下一個風口的“人工智能”,還是近來爆火的“區(qū)域鏈”赡若,互聯(lián)網(wǎng)行業(yè)一直處于“爆炸式上升”的階段达布,各大互聯(lián)網(wǎng)公司對畢業(yè)生開出的價位也越來越高,甚至到了“不過萬就無人問津”的程度逾冬,月入過萬者多如牛毛黍聂。
那怎么樣才能做到月薪過萬的程序員呢?
一身腻、用技能賺錢
現(xiàn)在产还,有這樣一種主流觀念,壓垮了很多新手軟件開發(fā)者嘀趟,那就是你需要學習很多東西才能成為軟件開發(fā)人員脐区,并且很多人不知道從哪里開始起步。
這里我會嘗試著具體說明那些在你追求成為軟件開發(fā)人員的路上將讓你受益的必要技術技能她按。
二牛隅、
編程語言
不懂編程語言炕柔,怎么能成為一個真正的程序員?
許多新手程序員會試圖一次性或在第一份工作之前學習幾種編程語言媒佣,以便于有備無患匕累。
雖然我個人認為你應該學會一種以上編程語言,但是不建議提前這樣做默伍,因為這只會導致混亂欢嘿,并且會分散你需要學習的其他技能的精力。
相反也糊,我建議你應該深入研究炼蹦,重點學習單一編程語言的來龍去脈,這樣你才能對用這種編碼語言來寫代碼信心十足显设。
那么在你決定想要成為什么樣的開發(fā)人員的時候框弛,怎么樣才能盡可能地獨樹一幟呢?
三捕捂、
如何構造代碼
在學習了一門編程語言之后——或者最好是在學習的同時——我堅信瑟枫,你需要知道的下一件事就是如何正確地構造你的代碼。
我所
說的構造代碼是什么意思呢指攒?
我的意思是慷妙,要寫出好的,清晰的允悦,易于理解的代碼膝擂,不需要大量注釋,因為代碼本身就是一種表達方式隙弛。
很多軟件開發(fā)者在他們整個職業(yè)生涯都不曾去學習這個技能架馋,這是不幸的,因為這是你的老板判斷一個軟件開發(fā)人員技術和能力的主要方式全闷。
良好的代碼結構展示了對這種技藝的熱衷叉寂,而不僅僅是為了完成工作。
構建代碼是軟件開發(fā)真正的藝術部分总珠,但它也是至關重要的屏鳍,因為你和你的同事得花費相當多的時間來維護現(xiàn)有的代碼,而不是編寫新的代碼局服。
四钓瞭、
面向對象的設計
這一條是有爭議的,特別是如果你正在學習的編程語言并不面向對象淫奔,但是有大量的軟件開發(fā)世界會按照面向對象設計的思維思考山涡,所以你需要確保你了解它。
面向對象的設計是一種將復雜程序設計分解為單獨的類或對象(類的實例)的方法,其中封裝功能且具有特定的角色和責任鸭丛。
在軟
件開發(fā)中霍殴,我們總是試圖管理復雜性。
從對象的角度思考可以幫助我們做到這一點系吩,因為它能讓我們從一堆交互組件中定義并設計一個復雜的系統(tǒng),而不是作為一個整體的試圖解決整個復雜性妒蔚。
現(xiàn)在的編程世界有著大量的函數(shù)式編程語言穿挨,但你在軟件開發(fā)中找到的最流行的語言和模式,仍然深受面向對象設計和分析的影響肴盏。
你應該好好理解什么是類科盛,繼承的不同類型——何時使用它們——還有理解像多態(tài)性和封裝等術語。
五菜皂、
算法和數(shù)據(jù)結構
如果你上傳統(tǒng)院校學習并想獲得計算機科學學位的話贞绵,那么這是一個很大的考點。
算法是解決各種計算機科學/編程問題的常用方法恍飘。
例如榨崩,有若干常見的在程序上用于排序的算法。每一種排序算法都有一系列關于速度章母,內(nèi)存大小要求母蛛,以及數(shù)據(jù)理想類型的不同屬性。
計算機科學領域有很多這樣的算法乳怎,并且理解如何變化這些算法來解決你可能遇到的棘手問題也很重要彩郊,當你解決現(xiàn)實編程問題的時候。
通常情況下蚪缀,擅長這些算法可以讓一個開發(fā)人員在1個小時之內(nèi)就能解決可能需要另一個開發(fā)人員幾天時間才能搞清楚的問題秫逝。
除非你熟悉和擅長算法,否則你甚至不知道已經(jīng)有了優(yōu)雅的解決方案在那里询枚。因此违帆,僅僅只為這個原因,我認為這也是一個值得掌握的寶貴技能哩盲。
數(shù)據(jù)結構也是如此前方,并且可以與算法結合使用。
有幾個所有軟件開發(fā)者都應該熟悉數(shù)據(jù)結構中的廉油,包括:
數(shù)組或向量
鏈表
堆棧
隊列
樹
哈希
集合
通過熟練掌握數(shù)據(jù)結構和算法惠险,你可以輕松又優(yōu)雅地解決許多艱難的編程問題。
學習這些東西是一個挑戰(zhàn)抒线,但非常值得班巩。這是可以讓你超越眾多同行的技能之一。大多數(shù)軟件開發(fā)人員都不擅長這個領域。
如果你想通過如微軟或谷歌這樣的大公司的面試抱慌,那么你一定得掌握這個技能集逊桦。
六、
開發(fā)平臺及相關技術
你應該具備一些經(jīng)驗抑进,并至少掌握一個開發(fā)平臺以及與之相關的技術或框架强经。
我所
說的平臺是什么意思呢?
通常它的意思是操作系統(tǒng)(OS)寺渗,但也適用于其他可以充當類似于操作系統(tǒng)角色的抽象匿情。
例如,你可以是專注于Mac或Windows操作系統(tǒng)得Mac開發(fā)者或Windows開發(fā)者信殊,你也可以是一名專注于特定的web平臺的web開發(fā)人員炬称。
具體確切的關于平臺是什么就不討論了——不同的人會有不同的看法——但這里我要定義平臺為你開發(fā)的特定環(huán)境,它有自己的生態(tài)系統(tǒng)和特殊性涡拘。
再者玲躯,這是另一個我認為選擇并非那么重要的技術技能,只要你選擇了一個就好鳄乏。
企業(yè)通常會聘請開發(fā)人員針對特定的平臺或技術開發(fā)軟件跷车。
你作為iOS開發(fā)者將更容易找到工作,如果你專業(yè)于那個特定平臺的話橱野。
這意味著要熟悉平臺本身姓赤,以及開發(fā)工具,慣用模式仲吏,還有大多數(shù)程序員在為那個平臺開發(fā)時會使用的通用框架不铆。
你可能會認為編程語言的選擇決定了平臺,但實際上事實情況很少是這樣的裹唆。
就拿C#舉例誓斥。如果你是一個C#開發(fā)人員,那么你可以用這種編程語言為Windows许帐,Mac劳坑,iOS,Android成畦,Linux距芬,甚至是嵌入式系統(tǒng)寫代碼。
所以循帐,不要僅僅只是選擇語言框仔;還要選擇平臺。
七拄养、
框架或堆棧
除了學習特定的編程語言和平臺离斩,我高度建議去學習框架,或者更好的是,與之相配套的完整的開發(fā)堆棧跛梗。
什么是框架寻馏?
什么是堆棧?
框架就是一系列被用于在特定平臺或多個平臺上開發(fā)代碼的庫核偿。它通吵锨罚可以使得在該平臺上的編程任務變得更加容易。
看這個C#的例子漾岳。大多數(shù)C#開發(fā)人員使用.NET框架來編寫C#應用程序聂薪。 .NET框架包括許多庫和類,能夠讓C#開發(fā)人員在更高的抽象級別上工作蝗羊,因為每當他想做什么事情的時候,沒有必要完全重新發(fā)明輪子仁锯。
例如耀找,.NET框架的部分還包含了處理圖像的代碼。這類代碼從頭編寫是極其困難的业崖,所以框架極大地幫助了C#開發(fā)人員去編寫需要以某種方式處理圖像的代碼野芒。
堆棧則有點不同。堆棧是一組技術双炕,通常包括一個框架狞悲,并且常一起用于創(chuàng)造一個完整的應用程序。
例如妇斤,有一個常見的稱為MEAN的棧摇锋。它代表MongoDB,Express.js站超,AngularJS荸恕,和Node.js。
Mong
oDB是一個數(shù)據(jù)庫技術死相。
Express.js是一個用于創(chuàng)建web應用程序的Node.js框架融求。
AngularJS是一個用于為web應用程序創(chuàng)建用戶界面的前端Java框架。
最后算撮,Node.js是一個用Java開發(fā)基于web應用程序的運行時環(huán)境生宛。
有沒有理解所有這些東西并不重要—— 除非你打算成為一個MEAN開發(fā)者——重要的是要明白,如果你知道所有這些技術和框架肮柜,那么你就能夠開發(fā)一個完整的web應用程序陷舅。
棧使得創(chuàng)建應用程序變得更容易,因為它們提供了一種許多開發(fā)者用來開發(fā)應用程序的通用范式审洞,因此知識可以很容易地共享蔑赘,并且你也能確定哪些特定的技能集市可以一起工作的。
學習堆棧真的是非常有價值,因為這意味著你擁有開發(fā)一個完整的應用程序所有必要的技能缩赛。很多使用特定堆棧開發(fā)應用程序的企業(yè)耙箍,更愿意雇用那些熟悉那類堆棧能夠立馬開展工作的軟件開發(fā)人員。
八酥馍、
基礎數(shù)據(jù)庫知識
即使數(shù)據(jù)庫的景色在過去幾年時間里已經(jīng)改變了不少辩昆,但我不認為數(shù)據(jù)庫會很快消失,因此對此了解一二總是不會錯的旨袒,對吧汁针?
當前主要有兩種數(shù)據(jù)庫技術:關系數(shù)據(jù)庫和文檔數(shù)據(jù)庫。
現(xiàn)在的開發(fā)人員至少應該熟悉關系數(shù)據(jù)庫砚尽,并稍微了解文檔數(shù)據(jù)庫施无。
在軟件開發(fā)中,數(shù)據(jù)庫經(jīng)常被用來存儲應用程序的數(shù)據(jù)必孤。
當然猾骡,有些團隊甚至有專門的數(shù)據(jù)庫開發(fā)人員或數(shù)據(jù)庫管理員(DBA),但是這并不能真正允許你不懂至少是基本的數(shù)據(jù)庫知識敷搪。
最起碼兴想,你應該知道:
數(shù)據(jù)庫如何工作
如何執(zhí)行基本的查詢來獲取數(shù)據(jù)
如何插入、更新和刪除數(shù)據(jù)
如何連接數(shù)據(jù)集
此外赡勘,你可能會想知道如何以編程方式從你的代碼與你所選擇的平臺和/或框架檢索和存儲數(shù)據(jù)嫂便。
大多數(shù)開發(fā)者被期待能夠編寫與數(shù)據(jù)庫進行交互代碼。
九闸与、源代碼控制
源代碼控制是任何軟件開發(fā)項目的組成部分毙替。
在我們使用源代碼控制之前,我們必須在網(wǎng)絡上共享項目的所有文件践樱,或者通過U盤來回查看存儲在上面的不同軟件版本蔚龙。
當前,幾乎所有專業(yè)的開發(fā)者人員都被期待懂得如何使用源代碼控制來反復檢查代碼映胁,并希望懂得合并來自多個源的變化木羹。
最基本層面的源代碼控制可以讓你保持在一個軟件項目中對不同的文件所做更改的歷史記錄。
它還允許多個開發(fā)人員在同一時間工作于相同的代碼解孙,然后合并這些更改坑填。
具體就不細說了,但你應該知道如何熟練地使用至少一個源代碼控制系統(tǒng)弛姜,并且你應該熟悉大多數(shù)基本的源控制概念脐瑰。
在當今軟件開發(fā)領域,幾乎所有專業(yè)的軟件開發(fā)團隊都會使用某種源代碼控制廷臼。
十苍在、
構建和部署
現(xiàn)在绝页,大多數(shù)軟件開發(fā)項目都有著某種自動化的構建和部署系統(tǒng)。
有幾種不同的軟件應用程序寂恬,可以幫助軟對自動化這兩個任務续誉,曾經(jīng)是手動,當然對于某些團隊而言初肉,現(xiàn)在仍然如此酷鸦。
你問什么是構建和部署?
你知道如何寫代碼牙咏,并檢入到源控制系統(tǒng)嗎臼隔?
擁有一些方法來確保代碼可在你檢入后真正能工作很不錯。
這就
是構建系統(tǒng)的用武之地妄壶。
最起碼摔握,構建系統(tǒng)將編譯所有代碼,并確保沒有編譯錯誤丁寄。
一個復雜的構建系統(tǒng)可以運行單元測試或用戶測試氨淌,運行代碼質量檢查,并提供關于代碼庫當前狀態(tài)的一些報告狡逢。
部署系統(tǒng)將負責部署代碼要么到生產(chǎn)機器要么可能到某種測試環(huán)境。
你不必成為這些技術的絕對專家拼卵,但是了解至少這些系統(tǒng)如何工作的基礎知識奢浑,以及構建和部署代碼的過程,是非常重要的腋腮。
通常情況下雀彼,創(chuàng)建和維護構建和部署系統(tǒng)的實際職責屬于所謂的DevOps(developer operations的簡寫)——這個快速增長的領域。
以上
這些你都get到了嗎即寡?