自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

編程語(yǔ)言的被淘汰:選錯(cuò)語(yǔ)言毀終身

開(kāi)發(fā) 前端
在我當(dāng)前所在項(xiàng)目里,其中的某一個(gè)子系統(tǒng)是用 Groovy 中的 Gradle 插件。Groovy 作為一個(gè)運(yùn)行在 JVM 上的腳本語(yǔ)言,天生具有膠水的特性。加之,它支持 DSL 與其程式的簡(jiǎn)潔語(yǔ)法。嗯,如果不考慮性能問(wèn)題,這真的是不一個(gè)不錯(cuò)的語(yǔ)言。

[[350038]]

在我當(dāng)前所在項(xiàng)目里,其中的某一個(gè)子系統(tǒng)是用 Groovy 中的 Gradle 插件。Groovy 作為一個(gè)運(yùn)行在 JVM 上的腳本語(yǔ)言,天生具有膠水的特性。加之,它支持 DSL 與其程式的簡(jiǎn)潔語(yǔ)法。嗯,如果不考慮性能問(wèn)題,這真的是不一個(gè)不錯(cuò)的語(yǔ)言。

可真的是如此嗎?

開(kāi)始之前,我再次 FBI warning 一下:

  • 關(guān)于編程語(yǔ)言的討論,并非能真實(shí),都存在或多或少的個(gè)人偏愛(ài)因素。因此,文中的某些觀點(diǎn)或許會(huì)有些偏頗。若是不正確又或者是出入較大,也希望大家能指正。
  • 這里的場(chǎng)景主要是基于團(tuán)隊(duì)協(xié)作的場(chǎng)景之下討論的,而非個(gè)人項(xiàng)目,又或者是小項(xiàng)目。也就是說(shuō),只有團(tuán)隊(duì)協(xié)作時(shí),才會(huì)出現(xiàn)的問(wèn)題,才會(huì)出現(xiàn)各種討論。
  • 說(shuō)起這一點(diǎn)我也是有個(gè)人偏好,如業(yè)余開(kāi)發(fā)選各種語(yǔ)言,而真正做項(xiàng)目的時(shí)候,選的語(yǔ)言便是 Java;業(yè)余開(kāi)發(fā)用 React、Stencil.js,在公司做項(xiàng)目的時(shí)候,還是 Angular 大法好。

引子 1 :編程語(yǔ)言的讀與寫

我們都知道,編程語(yǔ)言是寫給人看的代碼,寫機(jī)器運(yùn)行的機(jī)器碼。所以呢,對(duì)于編程語(yǔ)言而言,我們會(huì)有一個(gè)簡(jiǎn)單的判別標(biāo)準(zhǔn),即它的讀與寫。從使用體驗(yàn)上呢,我們可以分為:易讀易寫,易讀難寫,易寫難讀,難寫難讀,這么四類的語(yǔ)言。

為了貼合文章的主題,我大概對(duì)我在項(xiàng)目上用過(guò)的 JVM 語(yǔ)言做了一個(gè)分類。(PS:真實(shí)情況下,差異沒(méi)有這么大。)與此同時(shí),由于每個(gè)語(yǔ)言的使用場(chǎng)景不一樣,我們并不考慮諸如于性能等問(wèn)題。

難度 易寫 難寫
易讀 Java Groovy
難讀 Kotlin Scala

簡(jiǎn)單說(shuō)明一下 (笑,我們并不討論他們的優(yōu)點(diǎn)。例子中的 Kotlin 不太適合,只是我暫時(shí)沒(méi)有在項(xiàng)目上用過(guò)其它 JVM 語(yǔ)言,也許 JRuby 就不好讀了):

Java 語(yǔ)言嘛,大家都懂,又好讀又好寫,所以 Java 程序員便宜。

Groovy (Gradle 所采用的 DSL 語(yǔ)言)難寫的地方在于,文檔少、語(yǔ)法糖導(dǎo)致IDE 支持差(相對(duì)而言)。事實(shí)上,它也不是那么好懂,在 IDE 支持的情況下,要用碳基腦做個(gè)類型推斷。

Kotlin,如果已經(jīng)熟悉 Java 或者其它語(yǔ)言的話,寫 Kotlin 并不是一件難事。這件事情難就難在閱讀別人的 Kotlin 代碼,可能會(huì)有點(diǎn)費(fèi)勁,除非你有良好的 IDE 支持——它的親爸爸可能是 Jetbrains。離開(kāi)了 IDEA,找個(gè)擴(kuò)展(extension)都得找半天。所以難度總體上還是不難的,只是相對(duì)難讀一點(diǎn)——因?yàn)檎Z(yǔ)法糖。

Scala,早期的某個(gè)項(xiàng)目,我?guī)讉€(gè)月后看不懂幾個(gè)月前寫的代碼。

而如上所說(shuō),對(duì)于語(yǔ)言每個(gè)人是有偏好的。所以,這里依舊是我的一些個(gè)人觀點(diǎn)。我也并非這方面的專家,只是從個(gè)人閱讀開(kāi)源代碼和編寫相關(guān)代碼的感受來(lái)說(shuō)的。

引子 2:適用領(lǐng)域與流行應(yīng)用

談及編程語(yǔ)言,我們要討論的是另外的另一特質(zhì):適用領(lǐng)域。如我們熟悉的:

  • Golang 背靠云原生和 Google
  • Python 是科學(xué)家們的偏好,畢竟不是以代碼為生。
  • JavaScript 是交互方式發(fā)生了變化
  • Ruby 是 Rails 框架,所以流行開(kāi)了。
  • Java 用于企業(yè)編程,因?yàn)槌绦騿T便宜

而諸如 Rust 這樣的小類語(yǔ)言,還沒(méi)有正式有一個(gè)能發(fā)揚(yáng)光大的場(chǎng)景。

引子 3 :編程的快樂(lè),先寫得爽

有一些語(yǔ)言能讓你拾起編程的快樂(lè),比如 Ruby,但是也能讓你不想去維護(hù)代碼——讓人又愛(ài)又恨的 Method Missing,可以讓你搞起元編程。也能分分鐘讓你看不懂別人寫的代碼。如果沒(méi)有文檔的話,那么我覺(jué)得你不會(huì)再看了。

又比如說(shuō),操作符重載也是一個(gè)讓人寫的代碼更加直觀。嗯,再重載一下賦值操作符,是不是非常爽。

對(duì)于快樂(lè)來(lái)說(shuō),維護(hù)性那是以后要考慮的問(wèn)題。

編程語(yǔ)言的被淘汰

在項(xiàng)目上經(jīng)歷了慘痛的 Groovy 開(kāi)發(fā)大型項(xiàng)目的經(jīng)驗(yàn)后,我和我的同事們一致覺(jué)得這是一門可能被淘汰的語(yǔ)言。主要原因有這么幾個(gè):

  1. 可維護(hù)性丟失
  2. 缺失更好的 IDE 支持(相比于 Java 之類的)。說(shuō)白了就是開(kāi)發(fā)人員寫起來(lái)不爽。
  3. 在最廣泛的場(chǎng)景之下,可遷移語(yǔ)言出現(xiàn)(如 Kotlin Script)

如果你還想把編程語(yǔ)言的一些缺點(diǎn)考慮一下,那也是可以的。

可維護(hù)性丟失

這也并非是語(yǔ)言本身的問(wèn)題,而是語(yǔ)言應(yīng)對(duì)大型項(xiàng)目時(shí),將會(huì)遇到的一個(gè)挑戰(zhàn)。對(duì)于大型項(xiàng)目而言,自由靈活的語(yǔ)法糖會(huì)帶來(lái)大量的問(wèn)題。而隨著項(xiàng)目的進(jìn)一步擴(kuò)大,保持同一套代碼風(fēng)格容易,而要使用同一套語(yǔ)法越來(lái)越困難。如同樣是聲明類型,有的用具體的類型,有的則是用 def 或者是 var。

缺失更好的 IDE 支持

嗯,如果你習(xí)慣了用 IDEA 對(duì) Java 代碼進(jìn)行快速的重構(gòu)之后。而與此同時(shí),你并不能使用相似的方式來(lái)對(duì)你的 Groovy 代碼進(jìn)行重構(gòu)。你們就會(huì)慢慢陷入了一個(gè)循環(huán),既然有一個(gè)更好的語(yǔ)言,為什么我們不去使用它們呢。

退而求其次的,為了使用 IDEA 的高級(jí)功能,如重構(gòu)。我們開(kāi)始將代碼中的 def 轉(zhuǎn)換為具體的類型。

可遷移的語(yǔ)言出現(xiàn)

而其實(shí)上面兩個(gè)問(wèn)題,并不是這個(gè)語(yǔ)言的主要問(wèn)題。畢竟,對(duì)于小的項(xiàng)目來(lái)說(shuō),IDE 和可維護(hù)性支持都不是問(wèn)題。

過(guò)去,我們根據(jù) Gradle 官方文檔,使用 Groovy 來(lái)編寫 Gradle 插件。而有一天,Gradle 官方文檔同時(shí)提供了 Kotlin Script 的支持。

這就相當(dāng)于是,上帝真的拋了個(gè)橄欖枝給你。你可以同時(shí)擁有更好的 IDE 支持,更好的可維護(hù)性。同時(shí),還可以快速地遷移過(guò)去。為什么不呢?

其它

與之相似的一個(gè)例子便是 JavaScript 和 TypeScript,但是瀏覽器運(yùn)行的是 JavaScript。所以,JavaScript 并不能這么容易被取代。

結(jié)論

有沒(méi)有可能出現(xiàn)一個(gè)兼容所有語(yǔ)言的語(yǔ)言?

本文轉(zhuǎn)載自微信公眾號(hào)「Phodal」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Phodal公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: phodal
相關(guān)推薦

2016-11-04 14:43:23

編程語(yǔ)言 程序員

2022-01-29 00:08:30

程序員編程語(yǔ)言Java

2011-01-06 09:00:01

靜態(tài)語(yǔ)言動(dòng)態(tài)語(yǔ)言

2009-04-24 10:57:25

2024-07-10 08:22:42

2021-04-13 10:14:12

編程語(yǔ)言PythonJava

2022-08-09 08:29:50

TIOBE編程語(yǔ)言排行榜程序員

2009-04-24 14:56:24

2010-03-19 09:39:17

Python編程語(yǔ)言

2012-09-28 13:23:43

編程語(yǔ)言語(yǔ)言進(jìn)化程序員

2021-05-28 05:34:06

Golang語(yǔ)言編程

2021-01-13 10:40:42

編程語(yǔ)言PLCGraph

2021-02-25 15:39:26

Python編程語(yǔ)言PYPL

2010-03-11 15:16:52

Python編程語(yǔ)言

2018-11-12 12:50:30

C語(yǔ)言編程匯編

2011-10-21 10:54:04

編程語(yǔ)言

2015-11-02 17:25:23

Elixir編程語(yǔ)言未來(lái)

2020-10-23 18:40:56

編程語(yǔ)言HTML程序員

2021-08-10 19:15:17

語(yǔ)言編程應(yīng)用

2020-10-13 06:34:15

編程語(yǔ)言IDE
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)