想罵人!開發(fā)語言不能統(tǒng)一成一個么?
有時候,寫TypeScript寫多了,寫Java的時候就老容易出錯。而當(dāng)陷入某個項目一段時間之后,自我感覺老熟悉的Python和Golang,會變得非常的陌生。而某段時間寫起來行云流水的Bash腳本,每次重新拿起,都會進(jìn)入看文檔寫代碼的境地。
因為工作和個人興趣的原因,需要在多種語言中進(jìn)行切換,這種感覺尤為強(qiáng)烈。個人精力有限,不可能每天都照顧到這些刁鉆的,五花八門的語言,所以最后干脆放棄了掙扎,讓語言的圈子漸漸的將開發(fā)人員隔離開來。
為什么不能統(tǒng)一成一種開發(fā)語言呢?下面這張圖或許可以說明一下。
每種語言在出現(xiàn)的時候,都覺得自己吊的不行,尤其是golang,覺得自己是個另類,是終極目標(biāo)。而事實上,它也是發(fā)展路線上的一枚棋子罷了。
別的不說,就連函數(shù)聲明,各門語言都TM統(tǒng)一不起來。在這上面做文章,不是閑的蛋疼么?
我們來看一下。
golang的函數(shù)聲明關(guān)鍵字是func。
- func test(x int,y int) int{
- }
java的函數(shù)聲明,沒有關(guān)鍵字。
- public int test(int x,int y){
- }
typescript的函數(shù)聲明。
- function test(x: number,y: number):int{
- }
python的函數(shù)聲明。
- def test(x,y):
kotlin函數(shù)聲明。
- fun test(x: Int,y:Int): Int{
- }
rust函數(shù)聲明。
- fn test(x: i32,y:i32){
- }
...
如此種種,僅僅定義函數(shù)的關(guān)鍵字就有多種。func,function,fun,fn,def...,且不說參數(shù)的聲明方式和定義方式。
我時常在想,創(chuàng)造這門語言的這些人,腦子是不是有病?關(guān)鍵字是一門語言的根本競爭優(yōu)勢嗎?
沒辦法,有時候只能按照開發(fā)語言將開發(fā)人員進(jìn)行區(qū)分。比如招聘golang程序員,招聘java程序員。
雖然說語言在軟件開發(fā)中,只是占了很小一部分,但在實際落地的時候,卻往往又影響重大。不同的語言,細(xì)節(jié)差異多,編碼規(guī)范不同,對程序的影響就比較大。這些差異,往往需要開發(fā)人員在日積月累之間,不斷的積累經(jīng)驗。在語言之上,建立的類庫和生態(tài),更是龐大。這些差異是無法消除的,只能隔離。
我是常年搞Java的,對待Java自然是親切而熟悉,也早已經(jīng)能夠忍受它的冗長和復(fù)雜。但在其他語言眼里,Java是個不折不扣的魔鬼。
就拿常見的lambda語法來說,在其他語言中,都是e=>{}使用=>這種語法。只有Java另類,使用->來表示。我就經(jīng)常在寫完TypeScript之后,回到Java中會腦子抽筋。
Java的泛型也是一般,一個int[]數(shù)組,并不能直接使用Arrays.sort()進(jìn)行自定義的排序,還得把它轉(zhuǎn)成Integer[]才行。
這些問題有,但都是有限的。問題是,別人覺得有問題,就會推倒重來,比如groovy,scala,比如kotlin,代碼可以更簡潔,但你TM別改關(guān)鍵字啊。
目前,已經(jīng)有700多種編程語言,它們風(fēng)格迥異,標(biāo)稱著能夠解決特定行業(yè)的問題,但大多數(shù)都是同質(zhì)化的萬能語言。
在Tiobe排行榜上,C、Python、Java、JavaScript、Php、SQL等,常年存在于排行榜前10。
可以說,語言的格局已經(jīng)大體形成,剩下的就是你爭我奪的搶奪戰(zhàn)。比如Java和C#,在一定程度上來說,就是一個東西,但現(xiàn)在它們的生態(tài)卻完全不同。語言有什么復(fù)雜的?復(fù)雜的是邏輯還有代碼組織方式,不是語言。
它們的發(fā)展,就像是中國的互聯(lián)網(wǎng),雖然標(biāo)榜著自己哪里哪里不一樣,到最后還是一樣的同質(zhì)化,該牛x的地方一樣牛x,該垃圾的地方一樣少不了。
語言也是,你參考我的,我參考你的,只要道理上說的通,那就可以安排上。比如Java的record關(guān)鍵字,真正的Javaer真的不在乎多一點getset方法的。
未來,有哪個語言標(biāo)稱統(tǒng)一了所有的語言,你就笑一笑看看罷了,它不過是第n+1種語言而已。另外,偷偷的告訴你,使用f關(guān)鍵字進(jìn)行函數(shù)定義的語言,到現(xiàn)在還沒有出現(xiàn),如果你想造一個的話,考慮一下啊。