通過上一篇文章《01_程式語言》,我們瞭解到
- Java是眾多程式語言中的其中一種
- 程式語言可以用來開發軟體
因此,我們即將要學習的Java技術,是屬於軟體開發的範疇。那軟體開發的前景如何呢?這個行業是否值得我們長期紮根呢?本篇文章將帶著大家初步認識一下軟體開發這個行業。
應用範圍
網站_應用_遊戲
軟體開發涵蓋的範圍極其廣泛,你的手機、平板、電腦、手錶、電視等裝置上安裝的網站、應用、遊戲等,都是由軟體開發工程師(程式設計師,Programmer)開發出來的。
VR/無人駕駛/AR/刷臉
還有大家平時聽到的VR、無人駕駛、AR、刷臉等技術,都是屬於軟體開發的範疇。如果你經常去超市購物,那麼對右下角這臺自助結賬機應該不會陌生。現在我們去超市購物,可以通過掃碼自助結賬,再也不用去收銀臺排隊結賬了。甚至還可以刷臉支付,連手機都不用掏出來了。
智慧家居
還有智慧家居,也是屬於軟體開發的範疇。現在我們完全可以通過手機軟體來控制家裡的電視機、空調、攝像頭、路由器、音響、檯燈等裝置,甚至還可以控制窗簾。
人工智慧
這幾年比較流行的人工智慧,也屬於軟體開發的範疇。這些機器人之所以這麼智慧,是因為它們背後有強大的軟體在做支撐。
區塊鏈
還有最近非常火熱的區塊鏈技術,也是屬於軟體開發的範疇。大家應該聽說過比特幣,比特幣的底層就是區塊鏈技術。現在我們國家也非常鼓勵大家學習和應用區塊鏈技術。
可以看得出來,軟體開發涵蓋的範圍真的是非常廣泛,而且在不斷地提高我們的生活質量,讓我們的生活越來越美好。我們的生活必然是越來越離不開這些豐富多彩的軟體了,一旦脫離了它們,我們的生活質量必將大打折扣。你可以想象一下:如果生活中突然不能使用手機支付了,只能使用現金支付,那得多麼繁瑣和痛苦。
我覺得在我們有生之年,軟體技術都是我們人類的剛需,而且隨著技術的不斷髮展,會有更多好用、強大的軟體被開發出來,人類的生活質量也會不斷地被提高。因此,軟體開發人才的需求會一直存在,而且在不斷地增長。
程式設計教育
國外
其實,外國很多國家在很久以前就開始注重:從小培養孩子的程式設計能力。比如美國政府投資40億美元開展少兒程式設計教育,呼籲全美青少兒學習程式設計,奧巴馬總統也親自上陣宣傳程式設計,還邀請了Microsoft創始人比爾蓋茲、Facebook創始人祖克伯等IT大咖錄製節目宣傳程式設計。
祖克伯從6年級開始學習程式設計,而打敗人類圍棋頂尖高手的AlphaGo之締造者、谷歌人工智慧設計師傑米斯從8歲就開始喜歡程式設計。所以,那些全球頂尖的網際網路公司(比如Microsoft、Google、Facebook、Apple等),都是美國的公司,這並不是偶然;還有現在世界上流行的很多軟體開發技術,都是源自美國,這也並不是偶然。
國內
目前,我們國家也越來越重視青少年的程式設計能力,經常會舉辦一些針對初中生、高中生、大學生的程式設計競賽,如果你能在競賽中獲得比較好的名次,可以直接保送名牌大學、網際網路一線名企。而且也已經開始出現了少兒程式設計,連小學生都開始學習程式設計了。
另外,此前有新聞報導:程式設計科目將被納入新高考,浙江地區首先會做嘗試,未來極有可能會推廣到全國各地,這只是時間問題。
在今年兩會上,網易CEO丁磊提議:在全國推廣少兒程式設計,將少兒程式設計納入學業水平考試。
對比美國的程式設計教育,顯然我們已經落後了一大截。但我們已經在努力加強程式設計教育,程式設計將會越來越普及。預計在不久的將來,家長們在輔導孩子寫作業時,不僅僅要輔導語文數學英語了,還要輔導孩子寫程式碼。
職責分工
軟體開發型別
按照職責分工的不同,需求量比較大的常見的軟體開發型別有:(瞭解一下即可,不用去深究)
- 移動開發(也叫“移動端開發”)
- Android開發,主要用的程式語言是:Java、Kotlin
- iOS開發,主要用的程式語言是:Objective-C、Swift
- 前端開發
- 主要用的程式語言是:JavaScript
- 後臺開發(也叫“後端開發”)
- 主要用的程式語言是:Java、C++、PHP、.NET、Python、Go
- 嵌入式開發
- 主要用的程式語言是:C、C++、組合語言
那上述的這幾種型別的開發在公司中分別幹些什麼事情呢?他們的職責分工是怎樣的呢?
移動/前端/後臺開發
先來說說移動開發、前端開發,如上圖所示
- 移動開發:可以開發移動裝置(手機、平板、手錶等)上的軟體
- 前端開發:可以開發網站
根據日常生活中的經驗,大家應該可以發現:
- 只要有網路,網站上顯示的內容是可以不斷更新的,比如說新聞網站,你每一天用瀏覽器開啟它,看到的新聞資料都是不一樣的。
- 還有手機上的購物軟體,你每一天開啟它,都會給你展示新的商品資料,而且是有看不完的商品資料。
那這些網站和手機軟體上的新資料是哪裡來的呢?這些資料其實都來自伺服器(Server)。什麼是伺服器?顧名思義,就是提供(資料)服務的機器。
你的手機只要聯網了,手機軟體就可以通過網路向伺服器傳送一個網路請求,向伺服器請求資料:求求你,給我點資料吧!!!然後伺服器就會大發慈悲地利用網路返回資料給手機軟體。然後,手機軟體會將伺服器返回的最新資料展示在使用者眼前。
網站也是一樣的,當我們在瀏覽器上嘗試開啟或重新整理一個網站時,瀏覽器會利用網路向伺服器請求資料,然後伺服器返回資料到瀏覽器上顯示出來。
那伺服器這邊的開發和維護工作,又是誰在做呢?那就是後臺開發。這裡再來說一個小細節,那為什麼要叫它們為移動開發、前端開發、後臺開發呢?
- 移動開發:這個很好理解,因為手機、平板、手錶等都是可以隨身攜帶的,人走到哪裡,它就去哪裡,統稱為移動裝置。
- 前端開發:因為它展示的內容(比如網站),是在使用者眼前能直接看見的,所以叫前端。
- 後臺開發:因為它對使用者來說是不可見的,在後面默默為移動端、前端提供資料服務,所以叫後臺,或者叫後端。
- 但是前端一般就不叫前臺,說前臺會有歧義,前臺我們一般是指公司負責接待的工作人員。
嵌入式開發
另外,不僅僅是手機軟體和網站需要伺服器的資料,現在很多裝置都能聯網,它們也需要資料,比如說現在的電視、洗衣機、空調,甚至是微波爐,它們都能夠上網。像這些智慧裝置的開發是屬於嵌入式開發的範疇。
再比如下圖中的智慧機器人,它也可以上網。
- 如果你問它:今天天氣如何?它就會通過網路向伺服器請求天氣資料,然後伺服器返回天氣資料給它,它就把天氣資料說給我們聽
- 如果你吩咐它:給我播放一首周杰倫的歌吧!它就會通過網路向伺服器請求歌曲資料,然後伺服器就返回歌曲資料給它,它就開始播放歌曲。
後臺開發的重要性
不難發現,移動開發、前端開發、後臺開發、嵌入式開發,每一個角色都特別重要。但你知道最不能缺的是哪個麼?必然是後臺開發。
- 因為資料真的非常重要,你沒有優質的資料就沒有使用者
- 你的網站做得再漂亮、手機軟體開發得再好看、使用者體驗再好,但是沒有優質的資料,也是不會有多少人用你產品的
- 但是反過來,如果的你的手機軟體開發地不太好看、使用者體驗一般,然後網站也非常地難看,但是你伺服器提供的資料是別的公司沒有的,你的使用者量照樣是非常多
- 舉個例子:如果你公司的伺服器有全國最全面的車票資料,你的手機軟體和網站做得再爛,都不可能會缺少使用者的,因為大家都需要用到你的車票資料,都要去你那裡買票
可以想象得到,一旦伺服器當機了或者缺少了後臺開發這個角色,手機軟體、網站、智慧機器人都會變得“死氣沉沉”,因為已經沒有伺服器給它們提供資料。手機上的購物軟體永遠顯示的都是那幾件商品,再也沒有新的看不完的商品。新聞網站上的新聞也是一成不變的,不會再有新的新聞。智慧機器人也變得不再智慧了,問它啥它都回答不出來。
所以很多公司對後臺開發這一塊是比較重視的。當然,我並不是說移動開發、前端開發、嵌入式開發不重要,其實都很重要。只是相比而言呢,後臺開發這一塊是最關鍵的。很多公司的CTO、技術總監,都曾經歷過後臺開發的洗禮,因為你只有懂後臺開發,才能更好地把控公司整條產品線的技術方案。
另外,現在很多人想創業,首先會招聘的開發人員或技術合夥人,一般都是懂後臺開發的人。因為創業初期,資金、時間等資源非常有限,根本沒必要去開發手機APP、網站,只需要開發公眾號、小程式即可,等以後發展起來了再去開發手機APP、網站。由於公眾號、小程式的開發工作並不會太複雜,所以前期也由後臺開發人員來負責就好了。
後臺開發的程式語言
後臺開發可以選擇的程式語言比較多,主流的有:Java、C++、PHP、.NET、Python、Go等。目前市面上後臺開發需求量最大的程式語言,必然是Java,所以想學習Java的人還是比較多的,很多培訓機構都有開設Java課程。
那為什麼Java這麼受歡迎呢?原因有很多,我個人覺得目前還不適合討論這個話題。等你有一定的程式設計經驗了,再來討論這個話題會更加合適,你的理解會更加深刻。因此,以後有機會再回來探討這個話題。
從業疑問
本文的最後,針對初學者可能會產生的一些疑問,發表一下我個人的一些淺見哈。
英語水平
大家可能聽說程式設計師寫的程式碼基本都是英文的,查詢的技術資料很多也是英文的,那是不是意味著這個行業對英文的要求很高呢?
- 其實很多時候,程式碼中用到的英文單詞數量還是比較有限的,1000行程式碼中,可能就只用了50個單詞不到。比如下面這段程式碼,用來用去就是那幾個單詞(
public
、void
等),寫多了自然就記住了。
public class Cat {
public void run() {
System.out.println("run");
}
public void eat() {
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
}
- 就算遇到看不懂的英文單詞,用翻譯軟體查一下不就好了麼?
- 其實我的英文水平也很一般,只過了英語四級而已,但這並不影響我寫程式碼哈
- 我也見過很多連英語四級都沒有過,但也可以把程式碼寫得很漂亮很優秀的
- 但是,如果你英文水平不錯的話,在閱讀別人程式碼、查閱英文資料等方面,是個很大的優勢,你可以比別人學得更快
總結一下:不要求有很高的英語水平,能看懂26個英文字母,會使用翻譯軟體就行了。如果英語水平好,是個加分項。
計算機專業
- 不一定要計算機專業,熟練使用計算機就行
- 像我本人也不是計算機專業的,我大學的專業屬於物理系(有點偏電子、光學)
- 我身邊也有很多優秀的程式設計師朋友並非計算機專業出身
學習難度
- 首先,不管什麼行業,只要你是從0開始踏入這個行業,必然要學習大量行業相關的專業知識。作為初學者,第一次接觸到大量的技術名詞時,可能會有一點點的學習難度和壓力,但是這個學習難度是會隨著你知識儲備的增加、技術的積累而逐漸降低的
- 其次,全世界有這麼多的程式設計師,這就側面說明了這個行業並沒有超高的門檻,只要你找對了學習資料、學習方法,都是可以掌握的
- 但在我看來,也並不是所有人都適合從事這個行業,不開玩笑,有些人是真的不適合從事這個行業
智商
- 全世界有這麼多的程式設計師,難道每個人都是智力超群、天才型選手?
- 在我看來,我們只要是個正常智商的人就行,另外,認真努力才是王道
女生
並不是只有男生可以從事這個行業,很多公司都不乏優秀的女程式設計師(程式媛)
行業薪資
參考招聘網站,比如拉勾網
電腦系統
- 不管你的電腦是Mac還是Windows系統,都可以學習本課程
- 學習中用到的工具在Mac、Windows系統中是通用的
最後的個人淺見
我一直都覺得程式設計師是一個非常Cool的職業,給你一臺電腦、一根網線,你就可以利用你的雙手在鍵盤上噼裡啪啦敲出非常優美的程式碼,開發出非常優秀的軟體,從而改變這個世界。
程式設計師也是一個可以改變世界的職業。下面列舉的IT大佬們,相信大家或多或少都用過他們企業的產品,比如
- Microsoft創始人比爾蓋茲
- Facebook創始人祖克伯
- 位元組跳動創始人張一鳴
- 騰訊創始人馬化騰
- 小米創始人雷軍
- 微信創始人張小龍
- 360創始人周鴻禕
他們曾經都是非常優秀的程式設計師。是的,世界上很多IT名企的創始人都是程式設計師出身,再比如Google、Twitter等。他們企業的產品的確了改變了世界、讓這個世界變得越來越美好。感謝這些大佬前輩們!
軟體開發行業,也是一個相對比較公平、穩定的行業。有些行業,需要攀關係、勾心鬥角你才能往上升。軟體開發行業呢?全憑實力說話,給你一臺電腦、一根網線,一看你寫的程式碼便知水平如何,也不需要去處理那些複雜的人際關係,更多的還是跟機器打交道、專心寫好自己的程式碼。
軟體開發行業也可以隨著自己技術的積累而不斷增值,技術越厲害,機會也就越多,值得長期紮根在這個行業。不像有些行業,1年經驗3K薪水,5年、10年、20年工作經驗,依然是3K薪水。也不像有些行業,這個月薪資1W,下個月薪資3K,非常不穩定。
我當初之所以踏入這個行業,其實跟薪資待遇一點關係都沒有。當初的我從來沒想過我要拿多少薪資,純粹是因為對程式碼的執著和熱愛,才在這個行業長期紮根的,我一直都覺得寫程式碼是一件非常享受、有成就感、有趣的事情。回想當初在公司打工時,廢寢忘食,不寫完這個功能就不想吃飯,也經常睡前腦子裡還在想著某段程式碼可以怎麼去優化?很幸運的是,我最後一次打工時,年薪突破了7位數,為了紀念這個階段,薪資協議書現在都還保留著。這裡並不是想炫富,因為在這個行業突破7位數年薪的大有人在,我只是想告訴大家,只要你肯努力,這個行業其實擁有無限的功能。
時至今日,雖然我已經創業了,但我仍然堅持每一天都在鑽研技術、寫程式碼,每一天的進步能讓我很興奮很快樂,甚至還經常廢寢忘食地鑽研,跟當初在公司打工是一個狀態。不過不同的是,現在確實熬不動夜了,畢竟隨著年齡的增長,身體素質肯定會有所變化。大家在學習技術的同時,一定要注意勞逸結合哈。
這個行業雖然有前景,但是你若想在這個行業站穩腳跟、取得自己滿意的成績,必然還需要多下功夫。現在也不用想太多,一步一步來,慢慢積累,積累到一定程度,機會自然會找上門,該有的都會有的!但是如果你沒積累好,就算會有機會擺在你面前,你也抓不住,眼睜睜看著機會從手中溜走!最後送大家一句我一直都非常喜歡的8個字:你若盛開,蝴蝶自來!加油!