我的程式設計生涯裡啟發我的15本書

Phodal發表於2016-03-28

從幾百本書中整理出一份書單是一件困難的事,但是從這些書中挑選出對自己影響比較大的書確是一件容易的事。

在是一份遲來的書單,但是並不是一份適用於每個人的書單。這是我在學習程式設計過程中看的一些書,啟發到我的書,有很多你可能沒有聽過,也有很多可能是你耳熟能詳的。之所以說是啟發是因為很多說並沒有那麼好,但是我從上面獲取到了一些靈感。

高中時期

高中時期,因為想開發遊戲的熱情才深入計算機世界。並且高中也是一個相當無聊的時期,除了為高考準備的考試,還有就是上課

《C++遊戲開發》

有一些書,你就沒有必要去看了,比如這裡的第一本書《C++遊戲開發》,這本書是我在高中的時候翻了好幾遍的書

enter image description here

這本書一直在說“C++是一門優雅的語言”,也介紹了很多我在之前程式設計中不懂的知識點:陣列、指標,以及高階點的過載和繼承這一些物件導向的知識。這本書在遊戲開發方面講得不是很多,但是當時讓我腦洞大開的是——2.5D程式設計。簡單地來說,就是二張圖片疊加在一起形成的3D效果。我才意識到當然我玩的很多遊戲是這樣做出來的。

我那之前我只會寫點程式碼,並不知道一個遊戲是如何在作業系統上執行的。在這本書中我學會了程式碼是如何通過作業系統的API來建立視窗、操作檔案、操作聲音等等。

其實上面說到的遊戲開發的書應該是一整個系列,但是很多書啟發性似乎並不大就不提了。記得還有《Java5 遊戲程式設計》、《網路遊戲開發》、《遊戲開發核心技術•劇本與角色創造》等等的書。

《3D遊戲》

這是一本講述3D遊戲程式設計的書,實際上說的是如何去造一個遊戲引擎。上圖:

enter image description here

當然很多內容都看得不是很懂,這本書對我的幫助並不是技術本身,而是對於數學的提高和3D空間的理解。高中的知識本身並不多,多的是知識本身衍生出來的試題。換句話說,這樣的書和上一本書一樣,在我們遇到瓶頸的時候是很有幫助的,相當於幫我們開啟了另外一片天空。原本我們以為世界是這樣的,後來我們意識到了世界並不是這樣的,世界比我們想象中的要大。

《Linux核心設計與實現》

這本書並不是同上兩本是一本啟發性的書籍,但是是一本奠定基礎的書籍。

enter image description here

出於某種原因,加之發現一個人很難開發3D遊戲。便開始學習遊戲底層之下的技術——作業系統。於是很快地就從一個遊戲開發愛好者變成了一個Kernel Hacker。很多東西都已經忘了,但是很多東西都記得很清楚。如Linux是一個單核心,但是藉助了微核心的很多思想。在當時的環境下,所謂的多程式是怎麼一回事,他們多久切換一次程式等等。

除此,不得不提及的一本書是《Orange'S:一個作業系統的實現》,這本書在當時的映像是非常不錯的。但是這本書放在我的家裡吃灰塵了~~。

《程式碼之美》

這本書開啟了我的裝B史~~,上圖

enter image description here

由於這是一本合集,所以書中的大部分內容我沒有看懂。但是,這本書讓我看到了各種很Diao的程式碼。不過這並不重要,重要的是我在這本書裡面認識了Emacs。這就是為什麼這本書會上榜的原因。

enter image description here

這本書中有多篇提到了Emacs,然後我就去試了!!! 這本書中有多篇提到了Emacs,然後我就去試了!!! 這本書中有多篇提到了Emacs,然後我就去試了!!!

大學

大學學的是硬體,所以在軟體方面花費的經歷並不是特別多,成長比較大的是大學最後的學習。

《設計模式》

之所以買這本書的原因是:很多書中都提到了這本書,強調這本書是多麼的重要。然後,我就買了。

enter image description here

當時寫的語言基本上就是C、Python還有彙編,所以在當時並不特別懂,後面我們會繼續說到。它給我的感覺就是,WOCAO,我當年的C++連入門都算不上。雖然能看懂,但是一知半解。主要是當時程式碼寫得並不多,主要是在博覽群書。

《領域特定語言》

DSL大法好,DSL大法真的是一個很棒的想法。

enter image description here

它可以用更簡潔的語言業表達你的想法。這是很美好的一個想法,如果我們可以把我們的業務程式碼抽象成外部DSL的話,那麼我們就不擔心架構的變更、技術框架的落後。

《SEO藝術》

當你有一篇好的文章,還有一個好的產品,你還需要什麼?SEO就是其中一個。

enter image description here

讓我意識到一點:事物間的關聯性——也就是Page Rank。當時對論文這種東西沒啥概念,後來發現這是非常有趣的一個演算法。

enter image description here

這個原則不僅僅適用於SEO領域,還適用於社交領域、大V經濟領域。PR高的網站連結PR高的網站可能沒有啥明顯的作用,但是對提交PR低的網站特別有用。

《重來》

《重來》似乎是一本經常被提及的書,好在我也是看過的,還寫了幾篇相關的文章。

enter image description here

這本書有三點說得很不錯,換句話來說,這三點和我產生了共鳴:

  1. 賣掉程式碼的副產品。事物間存在的連線屬性。
  2. 招聘筆桿子。這個就不用多說了,我寫了那麼多文章。
  3. 音樂應在你的指尖流淌。好的裝備確實能帶來一些幫助,但事實是,你的演奏水平是由你自己的手指決定的。

ThoughtWorks面試與實習

大四的時候就開始找工作了,然後我就遇到了ThoughtWorks。面試的時候醒悟到了《重構》可以到《設計模式》,但是光醒悟並沒有啥卵用,下面這本書是我後來的後來才遇到的。

《重構與模式》

不知道在多少的場合裡,我一直在吐槽這本書應該是叫《重構到設計模式》。

enter image description here

雖然並沒有學到太多的實質性的東西——很多東西都在實習的時候已經學到了。重構和設計模式一樣,光一天天做一些智力練習並沒有啥用。從重構程式碼到抽象出設計模式,是一種很迷人的體驗。

《重構》

這本書雖然看得很早,但是提得很晚的原因是:主角總是最後才出場的。

enter image description here

在當時我也花了很多時間去識別書中的一些Code Smell,然後去重構。親手把自己的程式碼從一坨x變得更易讀是一種很棒的體驗,你說呢?

《敏捷軟體開發》

這又是一本Jolt效率大獎的書,這似乎也是進入我們公司應該讀的一本書。

enter image description here

這本書結合了敏捷方法、模式和麵向物件的一些思想,並提出了SOLID(單一功能、開閉原則、里氏替換、介面隔離以及依賴反轉)這五個基本原則。

工作

《持續交付 釋出可靠軟體的系統方法》

這倒不是一本對我啟發非常大的書,主要是因為這已經是我們的日常工作流程。

enter image description here

如果你先實踐了,然後再去看一本書,那麼你就不會覺得一本是多麼的棒。軟體本身是一種持續的過程,特別是Web開發來說。在這一點上來看,幾乎所有的網際網路公司都可以持續交付軟體。但是國內的大部分網際網路公司的程式碼都是沒有測試的,並且呈現的是一種幾乎有問題的持續交付模式。

《面向模式的軟體架構 卷1:模式系統》

作為另外一本Jolt效率大獎的書,這本書名副其實。

enter image description here

能從混亂到有序就可以抽象成一種架構模式,書中向我們展示了各個層面的模式是如何發揮作用的。這本書讓我意識到了模式不僅僅存在於程式碼之間,又存在於架構之間,更是可以存在於我們的日常生活之中。

《實現領域驅動設計》

儘管這本書提到的很多東西我都很瞭解,我還是不非常懂這本書。或許只是因為沒有連線概念到程式碼上,讓我在有空的時候再細細理解這本書。

enter image description here

雖是如此,但是這本書中提到的六邊形架構讓我映象深刻,又可以稱之為“埠和介面卡架構”。

enter image description here

還有CQRS(命令和查詢責任分離)架構,這種風格和我們現有系統的架構是類似的。在我們系統的架構中,讀和寫是兩個不同的資料來源,我相信這種結構也存在於很多的系統中。

enter image description here

還有我之前提到過的編輯-釋出-開發分離也是類似於這種風格的架構。

enter image description here

《浮現式設計 專業軟體開發的演進本質》

最後出現的這本書,讓我重新理解了軟體開發的演進。

enter image description here

浮現式設計這個概念很棒,軟體不是一開始就產生的,面向Web開發的軟體更是如此。由於業務發現的需要,我們不可能在一開始想到一切的可能性,我們只能在業務演進的同時發展我們的架構。

更多歡迎內容允許關注我的微信公眾號:

enter image description here

相關文章