Stack Overflow 創始人 Jeff Atwood 推薦給程式設計師的書。
本文最近一次更新是2015年3月份。 為什麼我很少更新我的讀書清單呢?因為雖然在這 10 年裡,計算機一直在迅猛發展,但人始終卻沒有變。 為了開發出更好的軟體,你需要理解人是如何工作的,這也是我推薦的這些書所關注的領域。
《程式碼大全2》
Steve McConnell所著的《程式碼大全2》就像是為軟體開發者所編寫的《烹飪的樂趣》。能夠去閱讀這本書,說明你很享受自己的工作,並且在認真地對待自己的工作。同時,你還想要不斷的進步。在《程式碼大全》中Steve寫到,普通程式設計師每年閱讀的技術書籍不到一本。僅僅是閱讀這本書的行為,就可能已經把你和你90%的程式設計師同事們區別開來了。
我非常喜歡這本書,以至於本站(coding horror)的名字也源於此書。書中列舉的程式設計反例都被打上了”Coding Horror”的標籤。沒有什麼比Coding Horror更有意思的了,直到你自己遇上一次。突然間一切都不那麼有趣了。幫自己一個忙,把這本書作為你要研讀的第一本書,並把它作為你推薦給同事的第一本書。
《人月神話》
這本書可能是我們這領域唯一的一本經典了。如果你還沒讀過,那就太不對了。
我敢說任何一個拿起這本書的程式設計師都沒有發現關於那個早就不使用作業系統的故事以及它的開發團隊之間驚人的相關性。這本二十五年前出版的老書大膽的闡明瞭一個觀點:計算機也許會變,但人永遠不會。
花時間去閱讀這本經典書籍一定比你去閱讀當今哪些幾千頁的大部頭書籍更加有意義。
《點石成金 : 訪客至上的網頁設計祕笈》
在關於可用性的書籍中,這是我讀過的最好的一本書。書名提到了“網頁的可用性”,但是請不要被這一虛假的特指所迷惑。Steve Krug在書中提到了可用性這一概念所包含的全部重要內容,而且講的很好,書也很有意思。如果你只想讀一本關於可用性的書,那麼讀這本就可以了。這本書囊括了很多有用的資訊,並且以簡練的、平易近人的方式將這些資訊呈現給你。這本書對於很多人都是適用的:技術人員、非技術人員、使用者、開發者、經理等凡是你能說出名字的任何人。
呃。。。好吧。從來沒有開過這樣的會議。順便提一下,解決這個問題的辦法是進行一次快速的可用性測試。請想象這樣的場景:基於實際資料來做決定而不是基於一場為了通過說服所有持有反對意見的人的辯論。真是革命性的轉變啊!
《快速軟體開發》
這本書的全稱是:《快速軟體開發:掌控軟體開發進度》,這個標題不僅冗長還有些可笑,更不幸的是它用詞不當。
《快速軟體開發》並不是一本關於快速開發的書。它講述的是軟體開發失敗這一現實問題。大多數的軟體開發專案都會失敗:有時是沒能按期交付,有時是開發出了不合格的產品,甚至有的時候都沒有能夠完成開發。這並不是什麼論點,而是一個事實。一個令人不快的事實是,:你的團隊要足夠的好,才能避免失敗,更別說取得成功了。儘管這一切聽起來可能會令人沮喪——好吧,這確實令人沮喪——但你仍然會想要去讀一讀這本書。
為什麼呢?因為你曾經犯過的錯誤,或者其他人犯過的錯誤,如果能夠避免再犯,就已經成功了一半*了。這本書傳達了一個真諦:犯錯是有益的——只要這些錯誤是一些未曾犯過的錯誤。如果你犯了一些經典的老錯誤,那麼你在沒有開始前就已經失敗了。同時,你可能並沒有意識到,你現在就在犯著類似的錯誤。
對我們這一行來講,唯一不變的就是變化。所以擁抱變化和採取不同的“快速”開發技術是很自然的一件事。但是這句話反過來說就不對了。我們不能認為自1970年以來,所有的舊式軟體開發課程同今天的技術相比已經是廢棄的或是沒用的了。老生常談的一件事是:計算機改變了很多;人卻沒有。在你準備開始前,至少對於哪些可行哪些不可行有個認識。用 McConnell 的話說就是:“粉刷之前請先閱讀油漆桶上的說明文字。” 誠然,這聽上去已經足夠直白了,但是直到你讀了這本書,你才意識到,我們很少會真正去這麼做。
- 根據書的內容,嚴格來講,有四分之一的內容。但是我覺得要比這多得多。
《人件》
如果你曾經看到過一個全明星球隊,因為教練水平不高而戰績不佳,那你肯定會喜歡這本書。如果團隊成員不能相互溝通或是認同一件事,那麼你的團隊中不論有多少“程式設計之星”都沒用。如果一個開發者經常被一些瑣事打斷,即使他是個天才,也不能夠高效的工作。開發者並不清楚他們自己的社交技能,但是,諷刺的是:這可能是你專案成功的關鍵因素。如果你希望成為一個真正的“團隊領袖”,而不是徒有其名,你需要看看這本書。
儘管《人件》中有很多不錯的、完全正確的觀點,但是書中描繪的這種僱員管理對於大多數公司來講純粹是幻想。但是至少你可以在你的工作環境,或是你的團隊出現問題的時候有所察覺——最重要的是,你可以知道怎麼做。
《設計心理學》
軟體開發有時候是一件極度令人沮喪的事情,因為很多事情都會做錯。我們做的很多事情都是防禦性的:嘗試在情況變壞之前做出預測。這令人十分傷神,並且最終可能會被證明是錯的。我經常根非技術人員這樣去解釋這個問題:就好像去造一塊有上千個運動部件的手錶,其中每個部件都會動不動就隨機壞掉。棒極了!
軟體開發是很困難的,這點沒錯,但是做一個門也很困難。設計的微妙之處存在於我們接觸到的每個事物,不論是最新的 SQL 引擎還是一雙普通的鞋。這本書會讓你對“惡魔藏在細節裡”這句話產生新的認識。如果設計一個門並不是我們想象的那樣是一件很簡單的事的話,也許是時候因為意識到我們也無法設計出完美的軟體而給自己放個假了。
《About Face:互動設計精髓》
Alan Cooper 是 Visual Basic語言之父,可用性領域的教父級人物。我擁有這本書的多個版本(現在是第四版),這本書是少數越修訂越好的書,越來越多的合作者向本書加入了不同的觀點。
《About Face》一書中包含了關於移動應用和 web 應用的通用實用指導。 以老掉牙的 Windows 95 人機介面作為例子來進行闡釋,將該系統已經改進的地方(在進行對話方塊選擇前使用視覺樣例進行展示)和還沒有改進的部分(使用愚蠢的模態框來停止正在執行的程式)進行對比是很有趣的一件事。
這是一本非常有用的書;我在我自己的專案中用到了書中提到了全部的指導。
《互動設計之路:讓高科技產品迴歸人性》
正是這本書向世人介紹了角色模型的概念:不要把使用者想象為一群抽象的、難以描述的、無定形的人。角色模型指導我們和特定的使用者進行交談,這些使用者有名字,有個性,有需求也有目標。我們的使用者是否需要列印預覽功能?誰知道?但是,如果對於客戶經理 Gerry Manheim 來說,列印每週花銷報表是他的工作,那你最好提供列印預覽功能給他。這裡邊沒有什麼神奇的東西;一如既往的是,一切都歸結於你的使用者是誰,他們究竟要做什麼——角色模型是解決這一問題的好辦法。
程式設計師認為自己在設計產品可用性時能夠代表“普通”使用者作出某些決定,但是在現實世界中,他們完全不能代表使用者。程式設計師是一群怪人,充其量能算是是一種極端的使用者——就好比“邏輯人(Homo Logicus)” vs. “現代智人(Homo Sapiens)”。除非你碰巧開發的是一款編譯器,因為編譯器的使用者也是程式設計師。
這本書有一個隱含的觀點,有的時候,無論你的設計有多好,就像由 Alan 擔任顧問並在此書中用作案例的這兩款軟體:掃描器軟體以及網頁開發軟體,在市場上都沒有能夠取得成功,但這和軟體的可用性無關,因為它們的可用性已經被證明是非常優秀的了。有些時候,非常優秀的產品同樣會失敗,而其失敗的原因是你無法掌控的,無論你多麼努力。對於此書中的一些華而不實的詞藻,你可以用以上事實將自己拉回到現實當中。
- 我有書中圖片裡的同款 USB 掃描器,裝置配套對軟體令我印象深刻。後來我把這臺掃描器送給了我父親。有一次和他打電話,我並沒有提到任何關於掃描器的事情,但是他卻提到他很喜歡這個掃描軟體。這一切都發生在這本書出版之前!
《程式設計珠璣》
在這裡推薦《程式設計珠璣》,我本來有些猶豫,因為這本書中介紹了很多底層的程式設計技巧。但是書中確實包含了很多軟體開發中的『珠璣』,所以值得每位開發者花時間去讀一讀。任何包含這幅圖的書…
…都是物有所值的。利用TRS-80 與 DEC Alpha 的對比來闡釋48n和n3演算法的差別?各位,真的沒有比這樣做更合適的了。能和大師一起工作一年是最好的了,退而求其次,你也可以讀讀《程式設計珠璣》。這本書將很多軟體工程師的智慧提煉成了簡潔易懂的文字,納入其中。
我不會騙你:有一些章節是可以完全略過的。比如說,第11、13和14章分別介紹瞭如何實現排序,堆和雜湊演算法,考慮到現如今這些基本演算法都有成熟的庫可以使用,我無法想象再去實現它們有什麼意義。 對於那些和教科書一樣惱人的習題,這裡有一個很實在的建議。瀏覽一下這本書,跳過程式碼部分。有件事可能會讓你失望,第八章“粗略估算”(Column 8, “Back of the Envelope” )是必須要看的。這裡有我見過的最佳的估算方法。這章還解釋了一些瘋狂的面試問題,一些公司很喜歡用這些問題提問我們。
如果你還在猶豫,你也可以在網上閱讀一下此書的樣章。最近我用書中關於字串的章節去解釋了馬爾科夫鏈在生成人造資料填充空資料庫時的作用。
《程式設計師修煉之道:從小工到專家》
看這本書時常會讓我想到《程式設計珠璣》,但是實際上這本書更好一些。因為這本書沒有那麼的專注於程式碼,取而代之的的是,作者在這本書中總結了實際工作中發現的全部實用方法。並非所有的方法都是與程式設計相關的。比如,問問自己『為什麼我要做這件事?是否值得這樣做?』,跳出固有的思維方式。你應該把這些東西融入到你和你同事的日常生活中。正是這些內容,使得《程式設計師修煉之道》成為了一本如此優秀的書。
如果你想再多瞭解一些這本書,我建立一個HTML 版本的插頁參考卡片,這個參考卡片很好的總結了這本書的內容。
《Web 可用性設計》
Jakob Neilsen 因為他所建立的可用性網站而出名。1989年,當他的書出版的時候,他就是一個可用性專家了。《Web 可用性設計》是一本專注於 web 可用性的新手教程,所以它和麵向 GUI 的 Cooper 的那本書有所不同。
《定量資訊的視覺顯示》
《視覺解釋:影象和數量,證據與線索》
《想象資訊》
《美麗的證據》
資訊是很美的。一個設計良好的 GUI 也很美。
除非你是個完美主義者(或是一個受虐狂,我猜),否則你沒有必要把一套四本全買齊,但是前兩本是必須的。
Chris Sells 對 Tufte 的書有些有趣的見解,這些見解源於他2004年6月參加Tufte研討會時的見聞。
《正規表示式經典例項》
眾所周知 UNIX 非常複雜、難以理解。正規表示式也是這樣。
我可能已經是『保持簡單直白』俱樂部的正是成員了,但是我願意將正規表示式作為一個特例。若能正確的書寫正規表示式,則在處理字串時,它可以幫你節省非常多的時間。我從來沒有遇到過一個專案,正則表達不能在某些地方為我們提供方便。
一旦你深入研究了正規表示式,你就會沉醉於正規表示式驚人的能力和潛力,這一切也造就了 Perl。記住,絕對的權利會導致絕對的腐敗。但是同樣非常的贊。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式