在初級(jí)程序員階段,每個(gè)人都不可避免遇到選擇編程語(yǔ)言和職業(yè)方向的難題。我挑選了幾個(gè)常見(jiàn)的編程語(yǔ)言,分析了優(yōu)缺點(diǎn)和職業(yè)方向,以供想當(dāng)程序員的人參考。
C/C++
一句話概括:大多數(shù)中國(guó)程序員的第一個(gè)語(yǔ)言
C語(yǔ)言是面向過(guò)程語(yǔ)言在當(dāng)代的魯?shù)铎`光,常用于編寫操作系統(tǒng)。C++是C語(yǔ)言的一個(gè)超集,既有指針又有對(duì)象使它成為最復(fù)雜的語(yǔ)言。
C/C++的優(yōu)勢(shì):幾乎所有現(xiàn)代編程語(yǔ)言都脫胎于C/C++,因此了解了C/C++,就了解了關(guān)于編程語(yǔ)言的一切,非常有利于快速掌握其他各類編程語(yǔ)言。
C/C++的不足:據(jù)說(shuō)C/C++發(fā)明的時(shí)候?yàn)榱颂岣呷胄虚T檻和行業(yè)收入水平刻意制造了學(xué)習(xí)難度。
C/C++的優(yōu)勢(shì):C/C++可以被嵌入任何現(xiàn)代處理器中,幾乎所有操作系統(tǒng)都支持C/C++,跨平臺(tái)性非常好。
C/C++的不足:盡管C語(yǔ)言體型小巧,可最常使用的C++規(guī)??捎^且擁有大量極為復(fù)雜的功能交互方式,容易造成資源浪費(fèi)。
職業(yè)路線:
(1)首推Unix/Linux等操作系統(tǒng)軟件的開發(fā)和嵌入式開發(fā)。
(2)Android ROM的定制,以及Android App的NDK開發(fā)。
(3)用Cocos2d-x開發(fā)游戲也是C++程序員的好出路。
Java
一句話概括:最長(zhǎng)壽的語(yǔ)言
Java是最典型的面向?qū)ο笳Z(yǔ)言。Java不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等坑爹概念。今明兩年畢業(yè)的大學(xué)生大多是Java的同齡人(1995年)。
Java的優(yōu)勢(shì):Java平臺(tái)不斷迎來(lái)新功能,比如移動(dòng)互聯(lián)網(wǎng)時(shí)代的Android,大數(shù)據(jù)時(shí)代的Hadoop,人工智能時(shí)代的TensorFlow。
Java的不足:國(guó)內(nèi)Java及其衍生技術(shù)的就業(yè)環(huán)境被培訓(xùn)班破壞得太厲害,培訓(xùn)班HR曾問(wèn)我:“Android不吃香了,你能推薦幾個(gè)Hadoop講師嗎?”
Java的優(yōu)勢(shì):Java是世界上使用范圍最廣的語(yǔ)言——Java環(huán)境安裝時(shí)那句“3 Billion Devices Run Java”誰(shuí)沒(méi)見(jiàn)過(guò)?
Java的不足:Java占用大量?jī)?nèi)存,并且啟動(dòng)時(shí)間較長(zhǎng)——搞Android的都被Windows系統(tǒng)中的Android AVD坑過(guò)。
職業(yè)路線:
(1)招聘網(wǎng)站上常見(jiàn)的“招聘Java開發(fā)”指的就是狹義的Java開發(fā)——基于JavaEE的后臺(tái)開發(fā),以前一度流行過(guò)SSH框架和SSM框架,現(xiàn)在入門建議學(xué)習(xí)SpringMVC框架。
(2)在移動(dòng)互聯(lián)網(wǎng)時(shí)代,Java可用于Android App開發(fā)。但Java之于Android的地位可能被Kotlin取代,并且近年培訓(xùn)班造成了低水平Android程序員的泛濫。
(3)在大數(shù)據(jù)時(shí)代,Java可用于Hadoop的開發(fā),前景非常廣闊,但可能有泛濫的趨勢(shì)。
(4)在人工智能時(shí)代,Java可用于TensorFlow深度學(xué)習(xí)的開發(fā)。
C#
一句話概括:自稱不是Java的Java語(yǔ)言
C#是微軟看到Java太火了而發(fā)明的和Java語(yǔ)法差不多的語(yǔ)言。
C#的優(yōu)勢(shì):C#的最大優(yōu)勢(shì)在于全面集成.Net庫(kù),提供出色的功能與完美的庫(kù)訪問(wèn)能力。
C#的不足:由于集成.Net庫(kù)造成跨平臺(tái)能力太差。
C#的優(yōu)勢(shì):VR時(shí)代的到來(lái)讓Unity-3d開發(fā)者有很好的發(fā)展前景。
C#的不足:目前.Net在國(guó)內(nèi)就業(yè)環(huán)境不太好,收入較低。
職業(yè)路線:
(1)招聘網(wǎng)站上常見(jiàn)的“招聘C#開發(fā)”和“招聘.Net開發(fā)”指的都是狹義的C#開發(fā)——基于.Net框架的后臺(tái)開發(fā)。
(2)Unity-3d也用C#作為開發(fā)語(yǔ)言,除了能開發(fā)3D游戲,在VR時(shí)代也會(huì)大放光芒。
JavaScript
一句話概括:不是Java語(yǔ)言的語(yǔ)言。
JavaScript是一種動(dòng)態(tài)類型、弱類型、基于原型的直譯式腳本語(yǔ)言,也是使用頻率最高的給HTML網(wǎng)頁(yè)增加動(dòng)態(tài)功能的語(yǔ)言。外行最常鬧的笑話是以為它是Java語(yǔ)言的分支。
JavaScript的優(yōu)勢(shì):作為腳本語(yǔ)言,JavaScript可立即運(yùn)行而無(wú)需等待服務(wù)器響應(yīng),速度非常出色。
JavaScript的不足:代碼在用戶電腦上運(yùn)行,可能會(huì)被別有用心的壞人惡意利用。
JavaScript的優(yōu)勢(shì):JavaScript是動(dòng)態(tài)類型語(yǔ)言,學(xué)習(xí)難度低。并且掌握了JavaScript語(yǔ)言就等于成為能同時(shí)開發(fā)網(wǎng)頁(yè)(HTML5)、后臺(tái)(Node.js)、移動(dòng)端(React Native、Weex)的全棧工程師。
JavaScript的不足:JavaScript過(guò)于依賴瀏覽器,在不同的瀏覽器上有不同的表現(xiàn)。
職業(yè)路線:
(1)首選HTML5的初心:網(wǎng)站和手機(jī)站的前端頁(yè)面開發(fā)。
(2)用Node.js或Bmob云端代碼進(jìn)行后臺(tái)開發(fā)
(3)基于React Native、PhoneGap、Weex、HBuilder、AppCan進(jìn)行移動(dòng)開發(fā),只需寫一遍代碼,就有Android和iOS兩個(gè)軟件
(4)微信開發(fā):包括微信公眾號(hào)、微信小游戲、微信小程序。不要把這個(gè)方向當(dāng)成中國(guó)特色方向,國(guó)外的Android機(jī)也是需要PWA開發(fā)的。
(5)如果以上四樣全能做到,那么你就是全棧工程師。
SQL
一句話概括:數(shù)據(jù)庫(kù)離不開的語(yǔ)言
SQL是一種專精于數(shù)據(jù)庫(kù)的特殊目的語(yǔ)言。用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。
SQL的優(yōu)勢(shì):存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開發(fā)人員的工作量,開發(fā)速度快。
SQL的不足:和Java語(yǔ)言的大多數(shù)設(shè)計(jì)模式一樣,SQL開發(fā)速度是靠犧牲運(yùn)行速度換來(lái)的。
SQL的優(yōu)勢(shì):SQL可設(shè)定只有某此用戶才具有對(duì)指定存儲(chǔ)過(guò)程的使用權(quán),安全性好。
SQL的不足:不同數(shù)據(jù)庫(kù)系統(tǒng)之間的SQL不能完全相互通用,可移植性差。
職業(yè)路線:
(1)掌握了SQL可以從事DBA(Database Administrator,即數(shù)據(jù)庫(kù)管理員),主要負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)庫(kù)從設(shè)計(jì)、測(cè)試到部署交付的全生命周期管理。
Python
一句話概括:需要拿著游標(biāo)卡尺學(xué)習(xí)的語(yǔ)言
Python是一款服務(wù)器端解釋型開源非編譯腳本語(yǔ)言。它常被昵稱為膠水語(yǔ)言,能夠把用其他語(yǔ)言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。
Python的優(yōu)勢(shì):Python學(xué)習(xí)簡(jiǎn)單,被譽(yù)為“最易學(xué)習(xí)的語(yǔ)言”
Python的不足:Python存在一些只在特定情況下才會(huì)出現(xiàn)(無(wú)法重現(xiàn))的bug
職業(yè)路線:
(1)用Django框架進(jìn)行Web開發(fā):和Java沒(méi)什么兩樣。
(2)用PIL框架進(jìn)行圖形處理
(3)物聯(lián)網(wǎng):Raspberry Pi等物聯(lián)網(wǎng)平臺(tái)都選擇了Python作為開發(fā)語(yǔ)言
(4)Python有一個(gè)無(wú)所不能的Hack庫(kù),如果認(rèn)為“打工時(shí)不可能打工的”就去當(dāng)一個(gè)自由的黑客吧
PHP
一句話概括:世界上最好的語(yǔ)言
PHP是一種通用開源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特點(diǎn),利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域。號(hào)稱“世界上最好的語(yǔ)言”
PHP的優(yōu)勢(shì):PHP學(xué)習(xí)簡(jiǎn)單,易于快速上手。
PHP的不足:PHP的運(yùn)行速度比較慢。
PHP的優(yōu)勢(shì):歷久彌新的PHP擁有龐大而活躍的官方社區(qū),開發(fā)者面臨的大部分難題都有現(xiàn)成的解決方案,很多十幾年前的解決方案在當(dāng)代也有指導(dǎo)意義。
PHP的不足:PHP的錯(cuò)誤處理機(jī)制比較糟糕,以為PHP需要支持大量舊版本的功能。
職業(yè)路線:
(1)適合進(jìn)行Web開發(fā),配合Node.js效果更佳。
Objective-C和Swift
一句話概括:被培訓(xùn)班害苦了的語(yǔ)言
Objective-C和Swift都是OS X和iOS系統(tǒng)上的專用語(yǔ)言。Objective-C在三年前是國(guó)內(nèi)收入最高的語(yǔ)言,從去年開始大量培訓(xùn)班輸出了一大堆“三年經(jīng)驗(yàn)”的速成“iOS工程師”成了脈脈匿名區(qū)的笑話。
Objective-C的優(yōu)勢(shì):蘋果提供了豐富的工具和庫(kù)以便開發(fā)者使用Objective-C開發(fā)軟件。
Objective-C的不足:Objective-C擁有自己獨(dú)特的編程方法思路,與其他編程語(yǔ)言思路差別較大。
Swift的優(yōu)勢(shì):隨著時(shí)間推移,Swift在iOS和OS X軟件中占的代碼比例會(huì)越來(lái)越多。
Swift的不足:版本更迭太快,不同版本差別過(guò)大,近年發(fā)生過(guò)幾次“從精通到重新入門”的情況。
Objective-C和Swift的優(yōu)勢(shì):因?yàn)閮H需要在少數(shù)平臺(tái)上運(yùn)行,不容易遇到兼容性問(wèn)題。
Objective-C和Swift的不足:這倆語(yǔ)言的就業(yè)環(huán)境被培訓(xùn)班徹底毀了,現(xiàn)在才開始學(xué)這兩種語(yǔ)言可能會(huì)有像2007年6000點(diǎn)時(shí)入市的散戶的結(jié)局。
職業(yè)路線:
(1)這兩種語(yǔ)言都是專為iOS和OS X服務(wù)的,入行前記得先準(zhǔn)備一臺(tái)蘋果電腦和蘋果開發(fā)者賬號(hào)。近年培訓(xùn)班造成了低水平Objective-C和Swift程序員的泛濫。
Kotlin
一句話概括:運(yùn)行在JVM但不是Java的語(yǔ)言
Kotlin 是最新問(wèn)世的一個(gè)基于JVM的編程語(yǔ)言,專用于開發(fā)Android。
Kotlin的優(yōu)勢(shì):和Java的互操作性極佳。其他JVM語(yǔ)言都實(shí)現(xiàn)了自己語(yǔ)言的標(biāo)準(zhǔn)庫(kù)。而Kotlin則使用Java的標(biāo)準(zhǔn)庫(kù),只是對(duì)其進(jìn)行了擴(kuò)充。更輕巧,Apk更小。
Kotlin的不足:同時(shí)可能也繼承了Java比較坑爹的東西。
Kotlin的優(yōu)勢(shì):因?yàn)槿趸藬?shù)據(jù)類型,學(xué)習(xí)成本較Java低。
Kotlin的不足:能且僅能在Android Studio 3.0上運(yùn)行,這點(diǎn)有點(diǎn)像易語(yǔ)言。
職業(yè)路線:
(1)只能用來(lái)開發(fā)Android。即使你想干點(diǎn)別的,除了Android Studio 3.0 還有別的編譯器嗎?
聯(lián)系客服