【CSDN 編者按】程式語言更新的頻率是越快越好,還是越慢越好,不斷增加的功能是否真的就是開發者想要的?
原文連結:https://medium.com/codex/c-is-dying-fa21a96107c5
聲明:本文為 CSDN 翻譯,未經允許,禁止轉載。
作者 | Andrew Zuo
譯者 | 彎月 責編 | 屠敏
我很喜歡 C#。大學畢業後,我的第一個程式設計項目是用 Unity 編寫的遊戲。我立刻愛上了這門語言。起初覺得很新鮮,C# 與 Java 很相似。當時還是 Java 7 的時代。我聽說他們從那時開始決定採用更快的發佈週期,之後一切都變了。
如今我仍然很喜歡這門語言。雖然它沒有特別之處,但你可以用它做任何事情,比如多執行緒。
但在過去的幾年裡,我非常擔心 C# 的命運。我在網上分享了我的想法,並引起了很多人的關注。

爭論的關鍵
我在一條評論中表達了自己的看法:
C# 就快完蛋了,微軟正在扼殺它,他們不斷添加沒人在意的功能。C# 之死就在於功能蔓延。
《魔鬼經濟學》中有一句話:「除了轟炸,我不知道還有什麼方法可以比租金管制更有效地摧毀一座城市。」
代入程式語言,我們可以說:「除了轟炸,我不知道還有什麼方法可以比功能蔓延更有效地摧毀一門程式語言。」
我保留了「轟炸」一詞,因為我不知道在程式語言的環境裡相應的詞語是什麼。但顯然轟炸是行不通的——你可以炸燬某個公司的總部大樓,但無法幹掉他們的程式語言,只能導致他們停止開發。
功能蔓延的問題在於,它會導致學習和掌握程式語言的難度加劇。C++就出現過這樣的問題,所以現在只有底層的軟體還在使用 C++,因為唯一能用的語言除了 C++ 就只有 C 了。想想看,現在還有人用 C++ 寫高級的軟體嗎?

C# 的狀況如何?
我不希望同樣的命運發生在 C# 身上。但不幸的是 C# 的狀況也堪憂。
我第一次產生懷疑,是因為看到了 C# 8 的 switch 表達式。你可以像下面這樣定義一個 switch 語句。
public static RGBColor FromRainbow(Rainbow colorBand) =>
colorBand switch
{
Rainbow.Red => new RGBColor(0xFF, 0x00, 0x00),
Rainbow.Orange => new RGBColor(0xFF, 0x7F, 0x00),
Rainbow.Yellow => new RGBColor(0xFF, 0xFF, 0x00),
Rainbow.Green => new RGBColor(0x00, 0xFF, 0x00),
Rainbow.Blue => new RGBColor(0x00, 0x00, 0xFF),
Rainbow.Indigo => new RGBColor(0x4B, 0x00, 0x82),
Rainbow.Violet => new RGBColor(0x94, 0x00, 0xD3),
_ => throw new ArgumentException(message: "invalid enum value", paramName: nameof(colorBand)),
};
這有什麼必要呢?正常的 switch 語句有什麼問題嗎?如果你覺得某些情況下這種寫法是有用的,那麼看看下面這個。在 C# 9 中,某些情況下 new 運運算元可以省略類型,例如:
private List _observations = new();
關鍵字 var 已經引發了足夠多的爭議,現在又來了一個?

那麼,如何在 C# 10 中為屬性創建屬性?他們又增加了一個關鍵字 field,用於定義自動屬性。我不明白為什麼我們不能直接使用普通屬性。
field 就是屬性,我們理應減輕工作負擔,而不是加重。

情況愈演愈糟
每年 C# 都要推出新版本。我不知道為什麼每個人都喜歡快速的發佈週期。我使用 Firefox 4 beta 已經一年了,我很滿意。但現在呢?Firefox 的版本發佈已經超過了 100 了。因為如今每個瀏覽器每 4 周就要更新一次版本。
C# 每年更新一次,Java 每 6 個月更新一次。我不明白這是為什麼。程式語言又不會很快過時。
我知道 Java 加快更新節奏的原因,我懷疑與 Open JDK 有關。舊版本的 Open JDK 沒有得到任何更新,所以如果你想使用 5 年前的 Java 版本,就像大多數公司那樣,那麼就需要付費。
現在 C# 可能還沒有那麼糟糕。但照目前的節奏發展下去,只要幾年的時間,很快我們就會被功能蔓延淹沒。

不要使用這些功能
看到這裡,有人肯定會說,不要使用這些功能不就好了嗎?我表示同意。但你必須知道,如今不使用這些功能也沒什麼大不了,但 C# 的功能繼續按照這個節奏蔓延下去,結果會怎樣?每個程式設計師都會覺得自己被某種神秘的力量所束縛,被迫使用語言中的這些元素。
當所有 C# 的教程都開始使用超級晦澀的語法時,會怎麼樣?我們該怎麼辦?
我認為,如果真的有那麼一天,很多人將停止使用 C#。

我愛 C#
C# 的問題在於過於冗長,這是因為他們借鑑了 Java,所以我經常開玩笑地稱它為「Java#」。
因此,如果 C# 添加新功能是為了減少冗餘冗長,那我很支持。但如今他們添加新功能感覺只是拆東牆補西牆,解決不了根本問題。
Dart 之類語言的努力方向是:「怎樣讓語言變得更簡單?」而 C# 卻在說:「我們如何才能用更少的程式碼完成以前實現的功能?」
然而,他們得出的答案是「只要給它一個宏」。
當然,有時他們也會考慮添加一些真正有用的東西。但大多數時候只是在添亂。表面看來,他們解決了需要鍵入的程式碼太多的問題,但潛在的複雜性愈演愈糟。
有報道稱,程式設計師正在放棄 C#。根據 Stack Overflow 的趨勢顯示,自 2009 年中期以來,有關 C# 的問題數量急劇下降,他們的年度調查(2017年~2018 年除外)顯示,該語言的數量呈緩慢下降的趨勢。

繼續按照這個水平膨脹下去,我相信會有更多人放棄 C#。