讀《底層技術開發之四書五經》有感

讀了《程序員》第三期刊登的劉江老師寫的《底層技術開發之四書五經》之後,深有感觸,忍不住談談自己的想法。現在越來越多的人加入到了軟件開發的行業中,但有一部分初學者,也包括幾年前的我,會陷入了一個誤區,希望能通過快速地學習各種編程技術,從而能立竿見影地製作出可以運行的程序或者軟件,似乎這樣就能成爲高手,於是就如飢似渴的去學習各種語言的語法,去追求那些華而不實的技術,而忽視了對計算機學科中組成原理、操作系統、彙編語言等基礎知識的積累。
實際上,像《底層技術開發之四書五經》推薦的圖書所涉及到的彙編、操作系統、組成原理、系統級編程等知識,有很多都是計算機學科中最基本的。作爲一個軟件開發人員,如果對這些知識達不到非常熟悉,至少也應該有所瞭解和掌握。只有理解底層的機制,熟悉系統的特性和平臺之間的差異,才能做出更好地與系統結合的軟件。當出現與底層機制相關的問題時,就不會因爲對底層機制的知識的匱乏而不知所措。比如,爲什麼會出現浮點數溢出?網絡編程中爲什麼要考慮主機是little-endian還是big-endian?什麼是緩衝區溢出,應該怎樣預防?對於高級語言中,執行同樣邏輯功能、形式上不同的語句(e.g. for,while),編譯器會轉換成怎樣的彙編代碼?哪種有更佳的效率?等等。
在這些書目中,我比較喜歡《深入理解計算機系統(修訂版)》,它的原名Computer System A Programmer’s Perspective能確切地體現出本書的獨到之處和實用價值,而且可以使用Cygwin工具在Windows平臺上享受Linux下編程的樂趣,如果再配合專門講述Linux下編寫、查看彙編代碼的《彙編語言程序設計》,相信那些不喜歡彙編的人也會逐漸喜歡上這種語言。目前很多軟件開發並不要求程序員熟練運用彙編語言,但是程序員最好能熟悉彙編語言,當軟件運行時出現一些難以捉摸的bug,或者出現性能上的瓶頸時,能夠通過編譯器轉換出的彙編代碼找到根源,找到代碼中潛在的低效率。《操作系統概念》理論性、概念性比較強一些。Bach的《UNIX操作系統設計》應該與Stevens的《Unix環境高級編程》結合一起看,再動手寫寫程序,會有事半功倍的效果。如果喜歡學習linux內核和操作系統的知識,除了文章中推薦的,還有一本難得的好書是《操作系統原理、技術與編程》,這本書把理論與實踐結合的挺好。關於程序語言底層機制的圖書,如果讓我再選擇的話,我還會加上Lippman的《深度探索C++對象模型》,看了這本書就會明白C++語言中繼承、虛函數、多態等面向對象或者動態語言的特性是怎樣由C++編譯器實現的。
以上是一些我個人的看法,慚愧的是這些書我也沒有完全認認真真閱讀過,由於我所掌握的侷限性,肯定會有不少疏漏與錯誤,歡迎大家給予我批評指正。但是有點我是深信不疑的: 掌握了這些底層、基礎的知識並不代表成爲了高手,但是卻鋪好了一條成爲高手的道路,您說呢?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章