“簡單”這個詞在漢語裡可以代表兩個維度上的含義:難度和複雜度。而 C 語言恰恰在這兩個維度上處於兩個反向極端。
如果說難度,那 C 語言確實很簡單。
就那二三十個關鍵字,基本上已經少到減無可減的地步了。如果非要再精簡的話,也就auto/signed/const等少數幾個了。
而且在概念上,絕大部分和 cs 基本結構、形態也存在非常強的關聯對應。如果你在這方面的基本功不錯的話,你學 C 就會感到非常舒適,甚至會覺得理當如此。
有了上面兩條,再加上語言本身的限制極少,所以邏輯能力比較強的人,簡單的上手不就,就很容易折騰出各種花式玩法:什麼閉包、回撥、多型、代理、委託……隨隨便便都能玩出來。
如果說複雜度,那就是反過來了。
因為 C 在語法上沒有對底層進行過多的封裝和抽象,以至於把大量細節都繁瑣的暴露在程式設計師面前。這個時候,要完成一個特定目的的功能,尤其是複雜點的功能,你有兩條路可走:
1:自己不厭其煩的全部實現一遍——但大多數情況下,這都是無價值的重複勞動。這就是為什麼都在勸“不要重複創造輪子”。
2:找個合適的庫。這時你就會發現,實現類似功能,會有很多的選擇,但那些選擇,往往都有不少細節上的區別。而去篩選、鑑別這些庫,本身也就成為一項挺費精力的工作。這也是為什麼誰都知道不要重複創造輪子,但總是有人會這麼幹。
而其他的高層語言,大都在語言層面提供了額外的抽象/概念/封裝/實現,那這種實現成本就會大幅減少,也就實現了在複雜度上的“簡單”。
但是因為提供了額外的抽象/概念/封裝/實現,所以必然會在語法等方面增加了複雜度,也就必然加大了在難度上的“不簡單”:例如說你說到的“1+2”等於多少等。
“簡單”這個詞在漢語裡可以代表兩個維度上的含義:難度和複雜度。而 C 語言恰恰在這兩個維度上處於兩個反向極端。
如果說難度,那 C 語言確實很簡單。
就那二三十個關鍵字,基本上已經少到減無可減的地步了。如果非要再精簡的話,也就auto/signed/const等少數幾個了。
而且在概念上,絕大部分和 cs 基本結構、形態也存在非常強的關聯對應。如果你在這方面的基本功不錯的話,你學 C 就會感到非常舒適,甚至會覺得理當如此。
有了上面兩條,再加上語言本身的限制極少,所以邏輯能力比較強的人,簡單的上手不就,就很容易折騰出各種花式玩法:什麼閉包、回撥、多型、代理、委託……隨隨便便都能玩出來。
如果說複雜度,那就是反過來了。
因為 C 在語法上沒有對底層進行過多的封裝和抽象,以至於把大量細節都繁瑣的暴露在程式設計師面前。這個時候,要完成一個特定目的的功能,尤其是複雜點的功能,你有兩條路可走:
1:自己不厭其煩的全部實現一遍——但大多數情況下,這都是無價值的重複勞動。這就是為什麼都在勸“不要重複創造輪子”。
2:找個合適的庫。這時你就會發現,實現類似功能,會有很多的選擇,但那些選擇,往往都有不少細節上的區別。而去篩選、鑑別這些庫,本身也就成為一項挺費精力的工作。這也是為什麼誰都知道不要重複創造輪子,但總是有人會這麼幹。
而其他的高層語言,大都在語言層面提供了額外的抽象/概念/封裝/實現,那這種實現成本就會大幅減少,也就實現了在複雜度上的“簡單”。
但是因為提供了額外的抽象/概念/封裝/實現,所以必然會在語法等方面增加了複雜度,也就必然加大了在難度上的“不簡單”:例如說你說到的“1+2”等於多少等。