從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

比較重要的區別是編程範式(programming paradigm):

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

由於機器語言和彙編語言太過反人類,相信題主不會太感興趣,所以以下只討論高級語言。

首先一個區別是編譯型語言和解釋型語言的區別。編譯型語言要通過編譯器編譯之後才能執行,但是在程序運行時無需編譯器介入,這一類最典型的是C和C++。

而解釋型語言無需編譯,但在運行過程中需要解釋器作為運行的環境,否則無法運行,這一類有Python、lisp等。

當然還存在一些介於兩者之間的語言,比如Java,它需要編譯器進行編譯,但在執行時又必須有JVM作為運行環境。

除了編譯型和解釋型的區別之外還有強類型和弱類型的分別,但我見過的弱類型語言都是解釋型的(也可能是我孤陋寡聞了)

最後的區別應該是支持的編程範式的分別,最常用的是面向過程和麵向對象的區分。這兩個主要是編程思維上的區分,而編程語言只是在語法上對二者提供支持,面向過程的語言照樣可以寫出面向過程的程序(具體方法自行百度)。像C語言、BASIC等就是面向過程的,C++、Java等就是面向對象的。(實際上C++是多範式的,這貨語法太複雜,哪個都能沾點邊)

另外現在似乎也常說一種叫做函數式編程的東西,這個很多語言都有支持,比如lisp、JavaScript、Python(當然萬能的C++也有一定支持,這裡指C++11以後)

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

在初級程序員階段,每個人都不可避免遇到選擇編程語言和職業方向的難題。下面是幾個常見的編程語言,分析了優缺點和職業方向,以供想當程序員的人參考。

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 上運行,這點有點像易語言。

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?

從職業玩家角度看,各種計算機語言都有什麼區別?


分享到:


相關文章: