對編程語言,庫,框架,平台的一點思考


    有過一段時間編程或使用計算機經驗的童鞋可能會發現一個問題。就是計算機技術在快速變化,而反映到軟件開發上,也是一樣的。開發語言也在變化和進化。類庫框架也在演化,甚至連IDE也不再是古老的記事本了.

    為什么會這樣呢?原因很簡單,計算機科學是一門新生事物,從誕生到現在才短短幾十年.我們查下資料會發現,最早誕生的編程語言Fortran,1966年才標准化,這個年紀甚至比大多數程序員的父母還年輕.

    現在比較流行的C#和JAVA,JAVA算是哥哥,是1995年出生的,是標准90后,今年剛成年,18歲了.小弟弟C#是2000年生的,是00后,是個只有13歲的小屁孩.

    由此可見,短短時間內發展出來的技術,指望他們很成熟,一次到位是不現實的,就象看小孩子一樣,幾年不見又長個了,性格脾氣又變了.而其它行業的一些技術和規范,長的可能有幾千年的歷史,短的也有幾百年了.很多東西可能在你有生之年,也見不到多大變化.

    編程語言還在快速發展變化之中,帶來的結果就是你可能剛用上不久,就會發現它有這樣或那樣的不方便,功能限制.代碼重復等.所以人們為了復用,又在語言的基礎上形成類庫,類庫再龐大點就是框架,框架再龐大點就是平台(當然這個表達不一點准確).

    然而隨着復用的增加,庫和框架迅速膨脹,變得復雜,難於使用.這又反過來推動,推出更具有表達性的語言,以減少對庫的依賴.編程語言和庫就這樣螺旋式上升演化.

    當然,這種快速的演化,給程序員帶來了一些困惑,甚至會出現這么一種情況,你還沒有來得及適應新的變化,它居然就過時了.更新的語法,更新的庫,更新的框架出現了.

    面對這種情況要怎么處理?如果減少學習投入,達到高效.我們可以觀察下,語言和庫(框架或平台)的差別.以下為減化,對庫,框架,平台統稱API.

    我們以C#和.Net平台為例.C#的版本,會不斷引入關鍵字,比如泛型<>, 比如Lambda =>, 這種關鍵字的引入,其實就是引入了重要的表達概念,同時寫出的代碼也增加了"詞匯".然后我們再看API, 每一個API調用,也是在引入一個功能,概念或"詞匯", 比如Console.Write, 比如List,它們都增加了最初這個編程語言所能表達的深度和廣度.

    這里面還是有些重要差別,語言的進化相對還是緩慢的,是按個位數頂多十位數進化的, 而API的進化快,,動輒千位數萬位數.語言更有表達性,API更有替代性.語言更通用.比如Lambda =>, 你可以用在更多地方,而API范圍較窄,比如Console.Write主要用於控制台輸出顯示.

    另一個重大差別是,語言具有空間復雜度,大多數關鍵字和概念會產生交叉,復雜度是按幾何級數增長的.而API的復雜度大多限制在了一個層面上,復雜度一般是按代數級數增長的.

    由此可見,在編程過程中,應該對語言和API要有所區別,在使用上也應該這樣,要重言語,輕API,語言有的功能,就沒必要再用API,對API的使用應當夠用即可.在學習過程中,應該多重視語言本身,對於API,其實使用很簡單,一般都是一致性的類或函數調用.差別在於它們能完成的任務能解決的問題,所以對API主要要學習他們能解決的問題范圍,再根據工作需要有所側重,用於暫時用不上的,沒必要花太多精力.

    縱觀各技術論壇門戶,對語言本身探討較少,對API的使用充斥滿各個角落,當然原因是一般語言語法有限,而庫,框架,平台,產品,多如牛毛,浩如煙海,而在工作中,不得不用各種庫,框架,平台,產品,從而造成了迷失.感覺要學習掌握的太多,量太大,耗費了無數程序員的時間和精力.

    當然以上結論僅僅代表本人的思考,僅供參考.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM