今天是平安夜,接近2011的尾聲了,差不多是該為今年作個回顧,並為2012定幾個目標。回顧2011,在專業上我有幾個比較大的轉變:
- 開始寫blog。我從9月下旬開始寫blog紀錄自己的學習心得,發現透過整理與解釋的過程會將一些凌散的知識作較系統的整理。我常常在google+零碎地紀錄想法,然後有空時就會整理好寫一篇blog,不管是閱讀的書籍或一些程式設計技巧,整理過後都明顯留下更深刻的印象,這個好習慣我會持續保持下去。
- 複習基礎學科。今年其實花了不少時間複習大學的基礎學科(不過我不是CS科班生,所以應該算第一次系統地學習這些知識:P),像是資料結構、演算法、計算機架構、函數式程式設計、作業系統、系統程式。在這過程深深感受基礎知識的重要性在實務上可以帶來多大的幫助,我希望自己可以不斷地以此為基礎延伸自己的軟體知識。在這個過程中,我讀到幾本獲益良多的書籍,推荐給大家:
- Introduction to computing:這本書是University of Virginia的CS入門課程用書,由他們自己的老師所寫。介紹了CS中重要的概念,並以Scheme語言作為媒介來進行程式設計,展現核心思想。從這本書我學習到了有別於imperative programming的方式,並預計繼續多看一些functional programming的資料。
- Foundations of Computer Science:這是由大師Al Aho與Jeff Ullman所寫的CS入門書,雖定義為入門書,不過大師之作依然非常紮實,重要的CS概念解釋的非常清楚,極度推荐(我快讀完了,每章都有練幾題習題喔!)。
- The Linux Programming Interfaces:這本書是Linux man page的維護者所撰寫,將user space程式所需的作業系統介面作了完整的介紹,可媲美以前的Steven系列書籍。
- Data Structures and Algorithm Analysis in C:說來慚愧,唸書時雖然也有修過資料結構的課程,但那時並不是很有感受,直到工作後遇到不少問題,才慢慢去尋找相關資料來補齊,但一直沒有系統的整理過,所以找了一本風評不錯的教科書來研讀(但目前也只讀一半...)。各式的資料結構或算法分析與設計技巧雖然日常實務中未必會用到,但它們就像程式設計師的百寶箱一樣,需要時拿出來耍一耍,連自己都會驚豔。:)
- Professional Linux Kernel Architecture (中譯版:深入探索Linux核心架構):日常工作就是以撰寫Linux kernel module為主,所以要學習作業系統的知識時,我自然會找Linux相關的書籍來看。這本書的優點是會將重點放在一般概念與Linux的實際作法上,並只將相關程式碼摘要出來,而不會只是乾乾的不斷說明流程。這種作法對已經熟悉作業系統的人來說或許會有點冗長,但透過不同的解釋與文章鋪陳,我覺得閱讀起來蠻順暢的(不過一樣只讀到一半:P)。
- Computer Systems: A programmer's perspective:這本書講的是整個計算機系統,包括CPU架構、記憶體階層、作業系統、連結與載入。並且主要以程式設計師的角度來看重要的計算機知識,閱讀這本書是為了補齊對計算機內部運作的了解不足。這本書我並沒有通讀,只有將我感興趣的部份精讀。然後其他的部份就由更深入的書籍補充。
- 程式設計師的自我修養:這本書是由對岸的好手所撰寫,講的是連結、載入與C執行期程式庫,並主要以Linux/ELF/glibc為討論對象,透過詳盡的解說每個步驟,以及用binutils去分析每個動作,可以讓我們對現代作業系統如何運行一個程式的流程更為清楚。了解執行檔格式有很多好處,可以讓我們更快地了解許多binary translation的工具與應用(像debugger、profiler、memory detector...),而不會覺得那是神祕不可輕易把玩的領域,並能夠親自觀察許多系統的有趣行為。
- FNTT (From Nand to Tetris):這是我研讀The Elements of Computing Systems這本書的目的,預計跟著這本書一步步實作每個模組,最後可以完成我的目標,我在google code開了個小專案,會逐步將這個過程紀錄下來,Form Nand to Tetris。Go!!
- 深入學習Scheme:接觸過Scheme後,對相關知識非常著迷,所以我希望可以將SICP這本經典精讀,並練習至少半數以上的練習題。Eli大俠曾經作過類似的事情,見賢思齊,衝啊!!
留言
張貼留言