編程高手必備的思維模式:為什么抽象在計算機科學中如此重要?
一、沒有抽象的世界。
想象這樣一種場景,如果我們的語言中沒有代詞這種形式,那么我們想表達“張三是個好人“該怎么說呢?可能是這樣的:
”你還記得我說過的人吧,穿著邋邋遢遢的,公司在中關村,整天背著個雙肩包,寫代碼的,天天996,這個人是個好人“,看到了吧,在沒有代詞的情況下我們想表達一件事是非常困難的,因為我們需要具體的描述清楚所有細節,但是有了”張三“這種抽象后,一切都簡單了,我們只需要針對張三這種抽象進行交流,再也不需要針對一堆細節進行交流了,抽象大大增強了表現力,這就是抽象的力量。
二、接下來回到計算機世界。
1、編程語言層面。
我們在使用計算機時其實抽象就在發揮作用,在Word中編輯文檔時我們不會去考慮CPU是如何處理這些字符的,這些字符是如何被保存到磁盤的。在瀏覽網頁時我們不需要關心網頁中的數據是如何在網絡中傳輸的、瀏覽器是怎樣把這些數據適當的渲染出來的,我們需要做的僅僅就是在Word中簡單的輸入字符,用鼠標或者手指滑動網頁。因此只要在使用計算機,那么抽象就在發揮作用,只不過是我們沒有意識到而已,而之所以我們沒有意識到是因為抽象工作得太好了。
1、編程語言層面。
程序員也可以從抽象中獲得極大好處,因為軟件是復雜的,但程序員可以通過抽象來控制復雜度,方法就是抽象。比如一個好的設計就是對某項功能抽象出一組簡單的API,這樣其他程序員在使用這個模塊時只需要關注這幾個簡單的API而不是一堆內部實現細節。不同的編程語言提供了不同的機制來讓程序員實現這種抽象。比如面向對象語言(OOP)的一大優勢就是讓程序員方便進行抽象,這樣類的使用者就無需關心類的實現了,更不用提OOP中的多態、抽象類等,有了這些程序員可以只針對抽象而不是具體實現進行編程,這樣的程序會有更好的可擴展性,也能更好的應對需求的變化。
3、系統設計層面。
計算機從本質上將就是在抽象的基礎上建立起來的。計算機科學中的一大主題其實就是在不同層面提供抽象表示從而對外屏蔽實現細節。對于CPU來說,其對外提供的是一堆指令集,程序員只需要使用這些指令就可以指揮CPU工作了,這樣就無需從細節上知道CPU是如何取出指令、執行指令的。在操作系統層面,我們將I/O設備抽象成了文件、把程序的運行抽象成了進程、把程序運行時占用的內存抽象成了虛擬內存、又把進程和進程運行以來的環境抽象成了容器、最后把所有的一切包括操作系統、進程、CPU、內存、磁盤、網絡抽象成了虛擬機。現在虛擬機技術是云計算的基石,實際上這種技術在上世紀60年代就出現了,并在當前火熱的云計算中大放異彩。難怪計算機科學中有一句名言,“計算機科學中沒有什么是不能通過增加一層抽象解決的”,當然后面還有半句,“除了存在太多抽象層這個問題”。
總結。
抽象的目的其實就是通過移除不必要的信息從而減少復雜度,因此抽象可以讓我們更加關注重點。在這里沒有用太多編程語言中的示例來講解,其實這也是一種抽象,那就是學習編程也好其它領域也罷,最好理解“頂層原理”,這個是通用的。個人一直有這樣一種觀點,那就是學計算機不是學一堆語言語法,那不過就是一些文法規則的實現細節罷了,編程高手之所以是高手不在于比別人又多了解一門編程語言有什么用法,最重要的還是這所說的“頂層原理”,那么頂層原理在哪里呢?就存在于我們常說的基礎中:操作系統、編譯原理、網絡、數據結構算法等。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.