1. 程式人生 > >軟體行業理論太多 實踐太少

軟體行業理論太多 實踐太少

一、中心思想

本文將從理論和實踐的角度分析在軟體行業理論與實踐的差距,將著重表達提高實踐在整個軟體行業的作用和意義;但是,本文不會刻意貶低理論的價值,理論同樣非常重要。

二、軟體行業理論密切依賴於實踐

軟體行業理論和實踐似乎比其它行業更加密切,原因就在於使用它的實在太多了,不論國防、科技、教育、網際網路以及日常生活。所以,分析軟體行業理論和實踐可以舉的例子特別多。也正因為經常接觸,它的理論和實踐結合程度才顯得更加重要。

在此時此刻,已經有許多理論,它們可以指導著實踐該如何如何去進行。但是不可否認,經常出現這種情況,本認為一種情況應該是如何,可是經過實踐發現,它似乎是有問題的,問題的原因可能莫名其妙,又或者很離奇。

為什麼會有這些莫名其妙的情況?一則是因為對於理論理解有誤,理解不全面,理解上有個人因素,錯誤地運用到了實踐;二是實踐環境不平常,或者環境中的子模組不平常,導致由理論產生的程式碼不恰當地運用到了實踐。

而,對於軟體行業,因為硬體不同、作業系統不同、作業系統上的支撐軟體不同、應用程式相容性、使用者使用情景不同等原因造成實踐和所謂的理論不相符太多太多。由此也能更加證明軟體行業理論密切依賴於實踐這句話。

三、理論多數只是說說

理論這個東西,不是隨便就能理解的;有的經過了數次實踐嘗試,有的經過多年實踐才能最後確認,當然不能認為它一定是永遠的真理,至少在這個時期可以看成事實上的真理。

對於理論,教科書已經說得夠多了,說多了,很容易產生一種預設接受的想法。雖然這樣無妨,但是它也可能讓我們形成一種錯誤的認識:看熟了這個理論,從幾個或者多個實踐中理解了這個理論,就想當然地認為已經完全或者基本上理解了這個理論。當然,和那些理論創立者相比,學習者確實還差好遠好遠。

就像,比如說編譯器(廣義上的編譯器)的作用之一是將原始碼編譯成目標檔案,最終可以生成一個可執行檔案供使用。理論上描述,包括預處理、編譯原始碼為目標檔案、連結成為目標可執行檔案等過程。再具體到細節,預處理就像文字替換一樣,編譯原始碼為目標檔案似乎才是最主要的工作,連結過程會根據目標平臺的可執行檔案格式不同而建立不同的檔案;

就例如,預處理,簡單地理解文字替換就行了嗎?是如何文字替換的?哪些文字需要替換?如果是標頭檔案包含,替換後會不會打亂之前的程式碼?如果打亂了原來的程式碼,如何恢復?

編譯原始碼為目的碼過程,如果出錯了,錯誤位置如何準確定位?原始碼過長或者變數、表示式過長,採用什麼方式合理儲存?語法樹的優化如何去做?編譯器效率過低,如何提高?

連結過程,如何記錄不同目標檔案程式碼段位置?最終可執行檔案依賴的動態庫資訊儲存在哪裡?

試想,如果要做這個東西,光有最初的那些理論有多少幫助呢?

再例如,如果發現某個地方顯示資料是亂碼,原因是什麼?當然,一般來說,很可能是編碼錯誤。一堆問題就來了,是當前的應用程式使用的資料對應的編碼不對嗎?還是支撐軟體的編碼不對?抑或是作業系統採用預設的處理使得亂碼了?或者又是本身傳入的資料就錯誤了?又或者是病毒的錯誤干擾導致了這種錯誤發生?

如果可以確定是某個模組(廣義的模組)出錯了,那麼能否給出為什麼其它模組都正確的內部原因呢?

同樣對於編碼,某個應用程式使用的編碼在二進位制級別表示是什麼含義?UI介面上的編碼怎麼能知道是什麼?編寫的程式碼使用編碼又是什麼?

對於介面顯示,字元的顯示依賴於什麼?字型庫在哪裡?它們是如何作用的?

對於應用程式,作業系統是如何載入它們的?都載入了應用程式的什麼?應用程式執行時所謂的虛擬地址是什麼?

對於庫,庫內部包含什麼符號?如何將一個庫拆分成不同的目標檔案?庫中各個函式或者變數使用的地址是虛擬地址嗎?它使用的地址是如何計算的?執行時是如何轉換成實際地址的?

對於作業系統,它是如何排程的?對於作業系統,時鐘是必須的嗎?作業系統如何管理虛擬記憶體?硬體的異常如何通知作業系統?

......

......

總之,實踐中遇到的東西遠比理論要多,經歷了幾次實踐,很多時候它和理解理論差的還很遠;隨便用理論來說明或者試圖證明實踐應該怎麼樣可能會遇到很多問題。

四、軟體開發的低要求導致理論和實踐差距加大

中國不是軟體的發源地,更多地技術都是從外國傳入,更多的方便使用的IDE工具也層出不窮,大量的支撐軟體、類庫還有大量現成的示例程式碼或者開原始碼,讓更多的開發沒有時間甚至不想去進一步理解實踐和理論內部的關係,也許僅僅是心理上的一種暗示。

不可否認,這種情形只會導致理論和實踐的差距進一步加大。換句話說,開發像一個使用者一樣來開發軟體。

同樣不可否認,對於實踐過程中出現的問題的解決確實是對理論理解提升的一種的方式。但是,也不可否認,中國當前有無數多的開發在經歷這個過程,甚至一遍一遍地重複著重新理解理論的痛苦過程,它是一種事實,很難改變。

五、差距意味著什麼

理論和實踐的差距一方面意味著中國的軟體還很低階,另一方面意味著現實讓中國的軟體很狼狽,為了跟隨世界潮流不得不拋棄那麼多理論,最後一方面它還意味著中國的軟體業還很浮躁。

如果只從錢的角度出發,只從最終是否造出軟體的角度,他們做對了;當然,也造成了一個不可否認的事實,它不利於提高中國軟體在世界的整體水平。

xichen

2012-6-1 17:08:47