在我剛開始學習編程的時候,我就意識到一個問題。抽象在使用軟件解決問題時的重要工具。解決問題的過程其實是把問題抽象成模型,然后將模型還原成代碼。代碼是對問題也就是問題的模型的一種描述,由處理器的運行把描述好的問題解決掉。這種抽象一直在我學習編程的路上發(fā)揮著重要的作用。
在之后的學習編程的過程中,我一直對各種編程上的東西進行抽象思考。例如,操作系統(tǒng),面向對象,API,分層,模塊化等概念。在偶然間,我突然發(fā)現(xiàn)在程序中抽象出的模型和現(xiàn)實中的一些大型系統(tǒng)竟然有著很大的相似之處。例如,公司的結構,交通運輸系統(tǒng),一座商場,乃至這個世界。首先,分層的概念在編程中是極其重要的。有位計算機科學家甚至說過:分層可以解決一切計算機軟件問題。然而,現(xiàn)實中的一些大型的組織結構也是分層的。并不是軟件專有的。比如國家的管理,是劃分區(qū)域,然后在區(qū)域之下再細分。公司的組織管理結構也是分層,底層員工,管理層等。如果再把編程中的一些其他概念代入進來就更有意思了。部門經(jīng)理其實就是這個部門模塊相對于上層的API函數(shù)。需要部門做的事,只需要跟主管溝通,后續(xù)的工作執(zhí)行主管再去依次安排。
面向對象和面向過程并不局限于編程語言,而是兩種不同的代碼組織方式或者解決問題的思路。而面向對象語言提供的一些用語言本身的特性來體現(xiàn)這種編程思想,而面向過程的語言去實現(xiàn)面向對象的思想的時候需要編程者的思路去實現(xiàn)。兩種方式各有好壞,面向過程效率很高,但是處理復雜情況就不如面向對象更好。我想到,面向過程相當于出租車,面向對象相當于公交車。出租車能把人更快更方便地送到目的地,但是缺陷同時很多人要坐車,每條路線都需要有一輛車,當人非常多的時候需要的出租車資源就很大。反應到編程上來說就是需要些很多函數(shù)并且很雜亂。而公交車會走一條大多數(shù)人走的路線,只要和坐車人的路程相近就可以上車,但是需要坐車人走到車站,下車后再走到目的地。這樣的話,可以運送很多人,但是人需要走到車站。反應到編程上來說就是,建立一個盡量通用的類,然后對于不同的對象賦予不同的屬性來使用這個類。這樣的話只要和這個類相近的要求都可以用這個類來解決。再往深入思考,一座城市如果人非常少的話,出租車是效率比較高的。人非常多的話,公交車是效率比較高的。在編程上面就是小型系統(tǒng)使用面向過程,效率高,速度快,方便。而大型系統(tǒng)使用面向對象,能夠用盡量少的代價去完成大量的工作。整體的效率高。 位于底層之上的非常重要的操作系統(tǒng)其最本質的功能其實是各種資源的管理,內(nèi)存的管理,文件系統(tǒng)是對硬盤的管理,驅動程序是對外設的管理,而操作系統(tǒng)最核心的功能:任務調度,其實是對處理器的時間的管理。而處理器的時間就是處理器的最重要資源。因為處理器的功能是運算,而運算量和時間是成正比的。也可以說是在自己管理自己。我認為在做裸機編程和位于操作系統(tǒng)之上的編程之中很大的一個區(qū)別就是,在做裸機編程時一定要對時間有深刻的意識,因為沒有操作系統(tǒng)來幫助你管理時間,需要編程者自己管理好。必須在編程時抽象出程序運行時的模型,而運行時的模型是會在時間的維度上變化的。
于是,我得出結論。編程,歸根到底是一種管理學,對電子系統(tǒng)資源的管理。這些系統(tǒng)的相似性讓我想起道家所講的,一生二,二生三,三生萬物。所有的東西的核心是同根同源的,然后分化為不同的形式顯現(xiàn)出不同的事物形態(tài)
|