當前位置: 華文星空 > 知識

學會了 C 語言真的可以開發出很多東西嗎?

2014-06-01知識

理論上C語言能開發出幾乎所有軟件。

但是,電腦發展了幾十年,留下的大量的輪子和解決方案。C後產生的各種新語言和第三方庫如此豐富,這已經是巨大的財富。我們沒有必要回到石器時代去建立新的文明,而且就算重來,也未必能建立出更加優秀的文明。已經能站在巨人肩上,理性地選擇拿來主義,擇優出解決方案才是王道。

我接觸C語言完全是因為課程的安排。C基本語法掌握後,接下來就是數據結構。開始了想題主一樣,做「數學題」。用C實作連結串列、平衡樹、排序和一些演算法等後,我也只是在後台黑框框輸出我的成果,確實枯燥。

但是這個過程對我的影響幾乎是最大的。數據結構課程結束,我對編程的認識大致就是函數的logical control+儲存的data。軟件的執行其實也就是一大坨從現實需求中抽象出來的數據透過程式碼的控制邏輯一直在變化。後來看到Nicklaus Wirth曾用「演算法+數據結構=程式」來概括,看來我沒有認識跑偏。在我看來,C語言抽象了2進制,它讓我們大腦中的「數據」概念對映到了電腦中。即便同是數值,我們也有了更好被我們大腦理解的char。還有struct這種custom的數據集合,完全就是為了照顧我們愚蠢的大腦。我們關註了C衍生出的抽象概念,而不再去死磕零零碎碎記憶體。我們還有便於邏輯展開的膠合物function。只要我們把現實世界的東西,透過我們大腦抽象出「數據和邏輯」,就能對映到電腦上,變成軟件。即便C語言本身看起來很整潔,但是這種松散的數據表達和粗獷的回收機制,讓我在大二美好的時光中,度過了大姨媽和Bugs同時問候我的心酸時光。後來投向C++,有了還算不錯的語法糖和特性,接觸OOP,生活有了點改善。而且也學會偷懶,有輪子就那來用,而且實際專案開發過程,其實也沒發現比啃數據結構課程難。C語言開發的經歷,讓我在看OOP那些設計模式的時候,自戀地傲嬌,「這些不用你教我也玩過好吧!」

再後來接觸Java和Python,特別是Python,太改善生活質素了。所以畢設毫不猶豫選擇Python做開發語言。這之後,我開始關心開發的復雜度。其實實際開發過程中,業務邏輯本身帶來的復雜度是無法消除的,而且開發過程使用的語言和選擇的框架也會帶入復雜度。我之前搞C語言,特別是多執行緒的時候,記憶體回收太容易出Bug了,很頭疼。即使使用了訊息傳遞機制來緩解,開發還是很耗時啊。現在很多語言都支持垃圾回收機制,一般情況我們不用關心回收。這其實就是控制開發復雜度的強有力的手段。

我個人的觀點,就是用最接近人腦理解的方式來抽象,即使增加開發成本也可是付出的。讓數據有更好的組織形式,優先考慮良好的數據結構表達而不是沈迷於OOP的設計模式,減少抽象過程帶入的膠合層,能吞掉的就不要暴露給使用者。畢竟膠合層本身就是增加復雜度的大隱患。減少開發的復雜度真的可以改善生活!請相信我。

我推薦還在大學學習的,時間多的是,不要根基不穩就追逐看似高大上的新玩意,很多真的當你用的時候在去看也不晚,多看看C和數據結構以及演算法。折騰明白了,學其他的會比較快,而且不會迷失在各種框架裏面。