第8周讀書筆記-讀《編程珠璣》有感
讀《編程珠璣》有感
《編程珠璣》(後文簡稱《珠璣》)在序章中就開宗明義地提出了兩個問題:一個是如何對實際問題進行抽象,找出問題的獨特性質。二是一個富有意思的小題目:“如何在1MB內存內對0~10^7內若幹元素組成的集合內的整數進行排序(10s內)”。一開始我想到的是歸並排序,但是書中提出可以利用位圖的位向量,不用考慮任何排序算法,只需要遍歷兩次即可,忽然就有茅塞頓開之感,從這個簡單的例子中就可以對一些思想窺見一斑:位圖數據結構、簡單的設計、時間-空間的折中……整本書其實都是圍繞這兩點展開,讓我大感裨益。
整本書涉及了很多東西,讓我在意的首先是算法。也許是上學期“數據結構與算法”上機的後遺癥,現在對於算法比較敏感。算法與其他思想地位相同,但是我認為在一般的編程層面上它具有更重要的影響。例如書中舉出的例子:“給定一個英語詞典,找出其中所有的變位詞集合,例如pots
那麽實際問題的情況非常復雜,我們應該如何結合實際選擇合適的解決方案呢?《珠璣》告訴我們:要多想。書中有很多這方面的技巧,例如粗略估算中Brooklyn Bridge的設計強度估算,代碼調優等等。然而紙上談兵是不行的,還是得依靠實踐出真知。就像以前軟工群裏幾位同學討論的那樣。讓我印象深刻的是群裏一位比較牛的同學的闡述,他說他時常重構自己所寫的代碼,因為有時他的選型有更好的選擇。而同時他認為代碼重構是提升自己能力的一個良好途徑,我深以為然。我偶爾也重構自己的代碼,然後就會發現以前的自己代碼中的毛病是有多……了,也能夠認識到自己應當註重的點在哪裏。並且寫新代碼的過程也是一個鍛煉自己的過程,有些東西不是說寫過一遍就能保證下次就bug free
總的體會是這樣子,當中的題目我只是看了幾題,並沒有時間細做,也算一個小小的遺憾吧。暑假裏爭取能夠做一做,在深刻體味一下。
第8周讀書筆記-讀《編程珠璣》有感