在初級程序員階段,每一個人都不可避免遇到選擇編程語言和職業方向的難題。我挑選了幾個常見的編程語言,分析了優缺點和職業方向,以供想當程序員的人蔘考。
C/C++前端
一句話歸納:大多數中國程序員的第一個語言程序員
C語言是面向過程語言在當代的魯殿靈光,經常使用於編寫操做系統。C++是C語言的一個超集,既有指針又有對象使它成爲最複雜的語言。數據庫
C/C++的優點:幾乎全部現代編程語言都脫胎於C/C++,所以瞭解了C/C++,就瞭解了關於編程語言的一切,很是有利於快速掌握其餘各種編程語言。編程
C/C++的不足:聽說C/C++發明的時候爲了提升入行門檻和行業收入水平刻意製造了學習難度。小程序
C/C++的優點:C/C++能夠被嵌入任何現代處理器中,幾乎全部操做系統都支持C/C++,跨平臺性很是好。微信小程序
C/C++的不足:儘管C語言體型小巧,可最常使用的C++規模可觀且擁有大量極爲複雜的功能交互方式,容易形成資源浪費。設計模式
職業路線:瀏覽器
(1)首推Unix/Linux等操做系統軟件的開發和嵌入式開發。安全
(2)Android ROM的定製,以及Android App的NDK開發。服務器
(3)用Cocos2d-x開發遊戲也是C++程序員的好出路。
Java
一句話歸納:最長壽的語言
Java是最典型的面嚮對象語言。Java不只吸取了C++語言的各類優勢,還摒棄了C++裏難以理解的多繼承、指針等坑爹概念。今明兩年畢業的大學生大可能是Java的同齡人(1995年)。
Java的優點:Java平臺不斷迎來新功能,好比移動互聯網時代的Android,大數據時代的Hadoop,人工智能時代的TensorFlow。
Java的不足:國內Java及其衍生技術的就業環境被培訓班破壞得太厲害,培訓班HR曾問我:「Android不吃香了,你能推薦幾個Hadoop講師嗎?」
Java的優點:Java是世界上使用範圍最廣的語言——Java環境安裝時那句「3 Billion Devices Run Java」誰沒見過?
Java的不足:Java佔用大量內存,而且啓動時間較長——搞Android的都被Windows系統中的Android AVD坑過。
職業路線:
(1)招聘網站上常見的「招聘Java開發」指的就是狹義的Java開發——基於JavaEE的後臺開發,之前一度流行過SSH框架和SSM框架,如今入門建議學習SpringMVC框架。
(2)在移動互聯網時代,Java可用於Android App開發。但Java之於Android的地位可能被Kotlin取代,而且近年培訓班形成了低水平Android程序員的泛濫。
(3)在大數據時代,Java可用於Hadoop的開發,前景很是廣闊,但可能有氾濫的趨勢。
(4)在人工智能時代,Java可用於TensorFlow深度學習的開發。
C#
一句話歸納:自稱不是Java的Java語言
C#是微軟看到Java太火了而發明的和Java語法差很少的語言。
C#的優點:C#的最大優點在於全面集成.Net庫,提供出色的功能與完美的庫訪問能力。
C#的不足:因爲集成.Net庫形成跨平臺能力太差。
C#的優點:VR時代的到來讓Unity-3d開發者有很好的發展前景。
C#的不足:目前.Net在國內就業環境不太好,收入較低。
職業路線:
(1)招聘網站上常見的「招聘C#開發」和「招聘.Net開發」指的都是狹義的C#開發——基於.Net框架的後臺開發。
(2)Unity-3d也用C#做爲開發語言,除了能開發3D遊戲,在VR時代也會大放光芒。
JavaScript
一句話歸納:不是Java語言的語言。
JavaScript是一種動態類型、弱類型、基於原型的直譯式腳本語言,也是使用頻率最高的給HTML網頁增長動態功能的語言。外行最常鬧的笑話是覺得它是Java語言的分支。
JavaScript的優點:做爲腳本語言,JavaScript可當即運行而無需等待服務器響應,速度很是出色。
JavaScript的不足:代碼在用戶電腦上運行,可能會被別有用心的壞人惡意利用。
JavaScript的優點:JavaScript是動態類型語言,學習難度低。而且掌握了JavaScript語言就等於成爲能同時開發網頁(HTML5)、後臺(Node.js)、移動端(React Native、Weex)的全棧工程師。
JavaScript的不足:JavaScript過於依賴瀏覽器,在不一樣的瀏覽器上有不一樣的表現。
職業路線:
(1)首選HTML5的初心:網站和手機站的前端頁面開發。
(2)用Node.js或Bmob雲端代碼進行後臺開發
(3)基於React Native、PhoneGap、Weex、HBuilder、AppCan進行移動開發,只需寫一遍代碼,就有Android和iOS兩個軟件
(4)微信開發:包括微信公衆號、微信小遊戲、微信小程序。不要把這個方向當成中國特點方向,國外的Android機也是須要PWA開發的。
(5)若是以上四樣全能作到,那麼你就是全棧工程師。
SQL
一句話歸納:數據庫離不開的語言
SQL是一種專精於數據庫的特殊目的語言。用於存取數據以及查詢、更新和管理關係數據庫系統。
SQL的優點:存儲過程能夠重複使用,可減小數據庫開發人員的工做量,開發速度快。
SQL的不足:和Java語言的大多數設計模式同樣,SQL開發速度是靠犧牲運行速度換來的。
SQL的優點:SQL可設定只有某此用戶才具備對指定存儲過程的使用權,安全性好。
SQL的不足:不一樣數據庫系統之間的SQL不能徹底相互通用,可移植性差。
職業路線:
(1)掌握了SQL能夠從事DBA(Database Administrator,即數據庫管理員),主要負責業務數據庫從設計、測試到部署交付的全生命週期管理。
Python
一句話歸納:須要拿着遊標卡尺學習的語言
Python是一款服務器端解釋型開源非編譯腳本語言。它常被暱稱爲膠水語言,可以把用其餘語言製做的各類模塊(尤爲是C/C++)很輕鬆地聯結在一塊兒。
Python的優點:Python學習簡單,被譽爲「最易學習的語言」
Python的不足:Python存在一些只在特定狀況下才會出現(沒法重現)的bug
職業路線:
(1)用Django框架進行Web開發:和Java沒什麼兩樣。
(2)用PIL框架進行圖形處理
(3)物聯網:Raspberry Pi等物聯網平臺都選擇了Python做爲開發語言
(4)Python有一個無所不能的Hack庫,若是認爲「打工時不可能打工的」就去當一個自由的***吧
PHP
一句話歸納:世界上最好的語言
PHP是一種通用開源腳本語言。語法吸取了C語言、Java和Perl的特色,利於學習,使用普遍,主要適用於Web開發領域。號稱「世界上最好的語言」
PHP的優點:PHP學習簡單,易於快速上手。
PHP的不足:PHP的運行速度比較慢。
PHP的優點:歷久彌新的PHP擁有龐大而活躍的官方社區,開發者面臨的大部分難題都有現成的解決方案,不少十幾年前的解決方案在當代也有指導意義。
PHP的不足:PHP的錯誤處理機制比較糟糕,覺得PHP須要支持大量舊版本的功能。
職業路線:
(1)適合進行Web開發,配合Node.js效果更佳。
Objective-C和Swift
一句話歸納:被培訓班害苦了的語言
Objective-C和Swift都是OS X和iOS系統上的專用語言。Objective-C在三年前是國內收入最高的語言,從去年開始大量培訓班輸出了一大堆「三年經驗」的速成「iOS工程師」成了脈脈匿名區的笑話。
Objective-C的優點:蘋果提供了豐富的工具和庫以便開發者使用Objective-C開發軟件。
Objective-C的不足:Objective-C擁有本身獨特的編程方法思路,與其餘編程語言思路差異較大。
Swift的優點:隨着時間推移,Swift在iOS和OS X軟件中佔的代碼比例會愈來愈多。
Swift的不足:版本更迭太快,不一樣版本差異過大,近年發生過幾回「從精通到從新入門」的狀況。
Objective-C和Swift的優點:由於僅須要在少數平臺上運行,不容易遇到兼容性問題。
Objective-C和Swift的不足:這倆語言的就業環境被培訓班完全毀了,如今纔開始學這兩種語言可能會有像2007年6000點時入市的散戶的結局。
職業路線:
(1)這兩種語言都是專爲iOS和OS X服務的,入行前記得先準備一臺蘋果電腦和蘋果開發者帳號。近年培訓班形成了低水平Objective-C和Swift程序員的泛濫。
Kotlin
一句話歸納:運行在JVM但不是Java的語言
Kotlin 是最新問世的一個基於JVM的編程語言,專用於開發Android。
Kotlin的優點:和Java的互操做性極佳。其餘JVM語言都實現了本身語言的標準庫。而Kotlin則使用Java的標準庫,只是對其進行了擴充。更輕巧,Apk更小。
Kotlin的不足:同時可能也繼承了Java比較坑爹的東西。
Kotlin的優點:由於弱化了數據類型,學習成本較Java低。
Kotlin的不足:能且僅能在Android Studio 3.0上運行,這點有點像易語言。
職業路線:
(1)只能用來開發Android。即便你想幹點別的,除了Android Studio 3.0 還有別的編譯器嗎?