主流程式語言的介紹及特點
1.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++ 程式設計師的好出路。
C
C 語言是一種通用的高階語言,最初是由丹尼斯·裡奇在貝爾實驗室為開發 UNIX 作業系統而設計的。UNIX 作業系統,C編譯器,和幾乎所有的 UNIX 應用程式都是用 C 語言編寫的。由於各種原因,C 語言現在已經成為一種廣泛使用的專業語言。
C語言是一門程式導向的計算機程式語言,與C++、Java等物件導向程式語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、僅產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。C語言描述問題比組合語言迅速,工作量小、可讀性好,易於除錯、修改和移植,而程式碼質量與組合語言相當。C語言一般只比組合語言程式碼生成的目標程式效率低10%~20%。因此,C語言可以編寫系統軟體。
特點:
易於學習,進行結構化程式設計
c語言所產生的程式碼執行速度與組合語言編寫的程式碼執行速度幾乎一樣
預編譯處理使C語言更有彈性
優點:
程式碼量小
生成目的碼質量高,執行速度快
功能強大
跨平臺,可移植性強
使用指標,靈活性強
允許直接訪問實體地址,對硬體進行操作
缺點:
資料安全性有很大問題
語法限制不嚴格,映像程式安全性
指標太過靈活,初學難度有點大
c++
C++是C語言的繼承,它既可以進行C語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。
特點:
支援資料封裝和資料隱藏
支援整合和重用
物件導向
支援多型性
C++ 是一種靜態型別的、編譯式的、通用的、大小寫敏感的、不規則的程式語言,支援過程化程式設計、物件導向程式設計和泛型程式設計。
優點:
型別檢查比c語言更加嚴格
增加了物件導向機制
增加了泛型程式設計機制
增加了函式過載和運算子過載
異常處理
提供了標準庫STL
缺點:
沒有垃圾回收機制,可能引起記憶體洩漏
2.Java
一句話概括:最長壽的語言
Java 是最典型的面嚮物件語言。Java 不僅吸收了 C++ 語言的各種優點,還摒棄了 C++ 裡難以理解的多繼承、指標等坑爹概念。今明兩年畢業的大學生大多是 Java 的同齡人(1995 年)。
Java 的優勢:
Java 平臺不斷迎來新功能,比如移動網際網路時代的 Android,大資料時代的 Hadoop,人工智慧時代的 TensorFlow;Java 是世界上使用範圍最廣的語言——Java 環境安裝時那句 “3 Billion Devices Run Java” 誰沒見過?
Java 的不足:
國內 Java 及其衍生技術的就業環境被培訓班破壞得太厲害,培訓班 HR 曾問我:“Android 不吃香了,你能推薦幾個Hadoop 講師嗎?”Java 佔用大量記憶體,並且啟動時間較長——搞 Android 的都被 Windows 系統中的 Android AVD 坑過。
特性:
-
純物件導向
-
支援分散式
-
跨平臺,移植性強
-
是一門編譯性語言
-
支援多執行緒,高效能
優點:
-
物件導向
-
穩健、安全、可移植、高效能
-
跨平臺
-
編譯型靜態語言
缺點:
-
編譯速度慢
3.Python
一句話概括:需要拿著遊標卡尺學習的語言
Python 是一款伺服器端解釋型開源非編譯指令碼語言。它常被暱稱為膠水語言,能夠把用其他語言製作的各種模組(尤其是 C/C++)很輕鬆地聯結在一起。
Python 的優勢:
Python 學習簡單,被譽為 “最易學習的語言”
Python 的不足:
Python 存在一些只在特定情況下才會出現(無法重現)的 bug
職業路線:
(1)用 Django 框架進行 Web 開發:和 Java 沒什麼兩樣。
(2)用 PIL 框架進行圖形處理
(3)物聯網:Raspberry Pi 等物聯網平臺都選擇了 Python 作為開發語言
(4)Python 有一個無所不能的 Hack 庫,如果認為 “打工時不可能打工的” 就去當一個自由的黑客吧
特性:
-
解釋性語言
-
擁有豐富的庫
-
跨平臺
-
可移植、可擴充套件
-
支援GUI程式設計
-
可嵌入
優點:
-
簡單,易學
-
免費,開源
-
可移植性強
-
屬於解釋性的一門動態語言
-
物件導向
-
擁有豐富的庫
-
強制性縮排程式碼使得程式碼規範
缺點:
-
執行速度慢
-
國內市場小
-
中文資料匱乏
4.JavaScript
一句話概括:不是 Java 語言的語言。
JavaScript 是一種動態型別、弱型別、基於原型的直譯式指令碼語言,也是使用頻率最高的給 HTML 網頁增加動態功能的語言。外行最常鬧的笑話是以為它是 Java 語言的分支。
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)如果以上四樣全能做到,那麼你就是全棧工程師。
優點:
-
減少網路資料傳輸
-
javascript可以方便的操縱HTML物件
-
支援分散式運算
缺點:
-
各瀏覽器對javascript支援程度不同
-
“web安全性”對javascript一些功能犧牲
5.SQL
一句話概括:資料庫離不開的語言
SQL 是一種專精於資料庫的特殊目的語言。用於存取資料以及查詢、更新和管理關聯式資料庫系統。
SQL 的優勢:
儲存過程可以重複使用, 可減少資料庫開發人員的工作量,開發速度快;SQL 可設定只有某此使用者才具有對指定儲存過程的使用權,安全性好。
SQL 的不足:
和 Java 語言的大多數設計模式一樣,SQL 開發速度是靠犧牲執行速度換來的;不同資料庫系統之間的 SQL 不能完全相互通用,可移植性差。
職業路線:
(1)掌握了 SQL 可以從事 DBA(Database Administrator,即資料庫管理員),主要負責業務資料庫從設計、測試到部署交付的全生命週期管理。
6.PHP
PHP 是一種通用開源指令碼語言。語法吸收了 C 語言、Java 和 Perl 的特點,利於學習,使用廣泛,主要適用於 Web 開發領域。號稱 “世界上最好的語言”
PHP 的優勢:
PHP 學習簡單,易於快速上手;歷久彌新的 PHP 擁有龐大而活躍的官方社群,開發者面臨的大部分難題都有現成的解決方案,很多十幾年前的解決方案在當代也有指導意義。
PHP 的不足:
PHP 的執行速度比較慢;PHP 的錯誤處理機制比較糟糕,以為 PHP 需要支援大量舊版本的功能。
職業路線:
(1)適合進行 Web 開發,配合 Node.js 效果更佳。
特性:
獨特的語法:混合了c、java\perl以及php自創的新的語法
與其他程式語言相比,更快速的執行動態網頁
php支援幾乎所有流行的資料庫以及作業系統
可以用c、c++進行程式擴充套件
優點:
php是一個免費開源語言
開發快,執行快,語法簡單,方便學習
跨平臺,效率高
具有很多成熟框架
有成熟社群支援php的開發
缺點:
php是個單程式的程式,不支援多執行緒
只支援做web開發,不方便做.exe問件、桌面應用程式、手機程式
不適合做爬蟲、自動執行指令碼
後期維護比較困難,後期提速空間侷限性大
7.C#
一句話概括:自稱不是 Java 的 Java 語言
C#是微軟看到 Java 太火了而發明的和 Java 語法差不多的語言。
C#的優勢:
C#的最大優勢在於全面整合.Net 庫,提供出色的功能與完美的庫訪問能力;VR 時代的到來讓 Unity-3d 開發者有很好的發展前景。
C#的不足:
由於整合.Net 庫造成跨平臺能力太差;目前.Net 在國內就業環境不太好,收入較低。
職業路線:
(1)招聘網站上常見的 “招聘 C#開發” 和 “招聘.Net 開發” 指的都是狹義的 C#開發——基於.Net 框架的後臺開發。
(2)Unity-3d 也用 C#作為開發語言,除了能開發 3D 遊戲,在 VR 時代也會大放光芒。
8.JSP
JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標籤在HTML網頁中插入Java程式碼。
特點:
JSP可以直接在HTML網頁中動態嵌入元素
JSP 基於Java Servlet API,因此,JSP擁有各種強大的企業級Java API,包括JDBC,JNDI,EJB,JAXP等等。
JSP頁面可以與處理業務邏輯的 Servlet 一起使用,這種模式被Java servlet 模板引擎所支援。
優點:
一次編寫,到處執行。除了系統之外,程式碼不用做任何更改。
跨平臺,支援多種網頁格式,jsp標籤可擴充套件性
強大的可伸縮性。從只有一個小的Jar檔案就可以執行Servlet/JSP,到由多臺伺服器進行叢集和負載均衡,到多臺Application進行事務處理,訊息處理,一臺伺服器到無數臺伺服器,Java顯示了一個巨大的生命力。
具有非常多的免費優秀的開發工具,並且可以順利的執行於多平臺
支援伺服器端元件
缺點:
增加產品的複雜性
java的高效率執行需要佔用大量的記憶體和硬碟空間
除錯困難
9. go
go語言被設計成一門應用於搭載web伺服器,儲存叢集或巨型中央伺服器的系統程式語言,在高效能分散式系統領域擁有著極其高效的開發效率
特點:
簡潔,快速,安全
自動垃圾回收
函式多返回值
併發程式設計
反射
語言互動
跨平臺
開源
編譯型靜態語言
優點:
1.效能優越,go比python快30倍,比java快將近一倍
2. 編譯時間非常快
3. go編寫簡單,易於學習
4. 對 gPRC 和 protocol Buffers 具有一流支援
5. GOFMT,強制程式碼格式
6. 天生支援併發程式設計
7. 強大的標準庫
8. 接近c的執行效率,接近php的開發效率
缺點:
沒有主要框架
錯誤處理機制太原始
垃圾回收器不完善
語法格式要求太過嚴格,禁止有未使用的變數和多餘的import
物件沒有建構函式和解構函式
技術比較年輕,有待後續發展