編輯推薦
避免常犯的錯誤
養成優良的習慣
破解密碼,你也可以好起來
內容簡介
本書集閤瞭作者在軟件行業裏總結的第一手教訓、體會和走過的彎路。話題涉及程序員生活的方方麵麵,例如,如何保持開發動力,如何提高生産力,如何擺脫軟件的復雜性,如何與客戶打交道,如何教導編程新手,何時進行自主開發,程序員的自豪感等。每個話題獨立成篇、言簡意賅,引人思考。
本書不僅適閤編程老手閱讀,也適閤編程菜鳥學習,還適閤想瞭解軟件這個行業的人士閱讀。
作者簡介
Ka Wai Cheung,程序員、設計師,還是芝加哥We Are Mammoth(我們是猛獁)公司的聯閤創始人。為各行各業的客戶製作應用軟件,也製作自有的一些基於網頁的軟件。
譯者介紹:
勞佳,上海交通大學電子工程係碩士,現在SAP美國任高級軟件支持顧問。業餘愛好語言、數學、設計,近年閤作翻譯齣版瞭《周末讀完英國史》、《加州大學伯剋利分校人文建築之旅》等書。
內頁插圖
精彩書評
“這是Pragmatic Programmers係列中的又一本書——對新手來說是指引,對專傢來說是重溫,這是關於程序員技藝(和生活)的一本美妙的智慧集。”
——Derek Sivers,CD Baby和sivers.org的創始人
“Ka Wai Cheung先生為那些尋找自己賴以生存的代碼的專業開發人員寫瞭一本書。這本書不是用那些在任何博客中都能找到的傳統想法拼湊起來的,而是用強有力且有針對性的方法,講述專業編程的技藝和現實。
如果你想找一本新瓶裝舊酒的編程規則,那就不用看這本書瞭。但是,如果你正在尋找一種視角,看看軟件開發是什麼,或者你想要一套由真實經驗提煉齣的指導方針,那這本書正是你需要的。”
——Bob Walsh,作傢、47 Hats的創始人
“充滿‘美味’的經驗,每篇的大小也十分‘適口’——在這本書裏你可以學到很多。花上些時間從過來人那裏學學吧。”
——Adam Hoffman, 高級開發主管
“一本好書,有現代程序員從日新月異的世界中得到的提示、技巧和經驗教訓。從事開發或與開發人員閤作的人士不可不看。”
——Caspar Dunant, Webfish
目錄
第1章 引言
1.1 誰是21世紀的程序員
1.2 吸取第一手教訓
1.3 這本書寫的是我們自己
第2章 比喻
第1篇 謹慎使用比喻
第2篇 規劃完備,然後開工
第3篇 發行不過是第1版
第4篇 “象牙塔”架構師的傳說
第5篇 扔掉舊代碼
第6篇 多元化勝於專業化
第7篇 比喻漸欲迷人眼
第3章 動力
第8篇 工作即福利
第9篇 從喜歡處入手
第10篇 莫求全
第11篇 休止一下
第12篇 早起先測試
第13篇 彆在臥室裏工作
第14篇 第一印象也就那麼迴事
第15篇 軟件發行的情感價值
第16篇 找個爭論話題
第4章 生産力
第17篇 對消閑項目堅決說不
第18篇 限製所有的因素
第19篇 去掉時間錶中的細節
第20篇 每天改進産品的兩個方麵
第21篇 為良好的工作環境投資
第22篇 列一張個人待辦事項清單
第23篇 和團隊一起安排免打擾時間
第24篇 采用自治小團隊的工作形式
第25篇 提高生産力,避談“我們”
第5章 復雜性
第26篇 “嗅”齣壞的復雜性
第27篇 關於“簡單”的悖論
第28篇 復雜性就像挑棍遊戲
第29篇 把復雜性藏起來
第30篇 “難編”可能意味著“難用”
第31篇 知道何時重構
第32篇 確定編程的節奏
第6章 教學
第33篇 教學不同於編程
第34篇 當心“知識魔咒”
第35篇 用淺顯的例子
第36篇 為簡化不妨說謊
第37篇 鼓勵自主思維
第7章 客戶
第38篇 刁鑽的客戶無處不在
第39篇 軟件黑魔法揭秘
第40篇 設定軟件的目標
第41篇 激發熱情,相信自己
第42篇 寬容大度,和藹可親
第43篇 價值遠不隻是工時
第44篇 尊重你的項目經理
第8章 代碼
第45篇 寫代碼是不得已而為之
第46篇 拿來主義的文化
第47篇 代碼是最好的初級程序員
第48篇 把機器和人的工作區分開
第49篇 從核心開始生成代碼
第50篇 自主開發的情形
第9章 自豪感
9.1 形象是個問題
9.2 烹飪行業的一課
參考文獻
前言/序言
中文版序
親愛的讀者:
在編程的世界裏,我們會和各種各樣的“語言”打交道。雖然我主要的服務器端開發語言是C#,但我的工作方法卻幾乎可以完全應用到Java、PHP、Ruby或Python上。編程語言雖有不同,核心的編程思想、方法和架構卻是高度類似的。我們隻是用不同的方式來錶達而已。
我們的工作方式也具有普遍性——如何保持乾勁、提高成效,教學的重要性,如何與客戶閤作,如何發現閤適的流程,勇於擺脫不好的流程。此外,我猜想,我通過編程學到的人生一課,不僅適閤在美國工作的我們,也可能適用於在中國工作的你。
作為在美國齣生的第一代華裔,我非常榮幸這本書能夠被翻譯成我父輩的語言。我在美國長大,在西方文化中生活,同時也有一些中國的傳統價值觀。我對於應該如何在這個行業工作的看法肯定受到瞭兩種文化的影響。
無論你是剛剛投身編程事業,正在創業,還是在尋找一些新鮮的觀點,我都希望這本書在現在和未來都能對你有所啓發。
張傢為
Dear readers,
In the world of programming, we work with “languages” of all different kinds. Though my primary server-side development language is C#, the way I work almost fully translates to the world of Java, PHP, Ruby, or Python. Core programming ideas, methodologies, and architectures are highly similar between these different coding worlds. We just express them in different ways.
The same is true for how we work - How we stay motivated and productive, the importance of teaching, working with clients, discovering the processes that work just-right and being brave enough to shed the ones that don’t. And, I’d imagine that the life lessons I’ve learned through programming translate not just to how we work in the U.S., but how you might work in China.
As a first-generation American born to Chinese parents, I was tremendously humbled to have this book translated to my ancestral language. I grew up in the United States, living in a western culture while growing up with some traditional Chinese values. My opinions on how we ought to work in this industry have certainly been influenced by both cultures.
Whether your just beginning your career in programming, starting your own small business, or seeking some fresh perspectives, I do hope you find this book valuable now and in the future.
Sincerely, Ka Wai Cheung
《卓越程序員密碼》:解鎖代碼的藝術與科學 在這數字浪潮席捲全球的時代,軟件已成為驅動社會運行的無形引擎。從智能手機上的便捷應用,到支撐起整個經濟體係的龐大係統,代碼的力量無處不在。然而,僅僅掌握編程語言的語法,寫齣能運行的代碼,與真正意義上的“卓越程序員”之間,尚有一段需要深耕的距離。正如任何技藝的精湛都需要對工具的深刻理解和對原理的融會貫通,卓越的編程也蘊含著一套獨特的思維方式、一套行之有效的方法論,以及一套不斷精進的哲學。 《卓越程序員密碼》正是這樣一本旨在揭示這套“密碼”的書籍。它並非羅列枯燥的技術細節,也不是堆砌晦澀的理論公式,而是深入到程序員的思維內核,從更宏觀、更本質的層麵,探討如何纔能從一名閤格的編碼者蛻變為一名能夠創造卓越、解決復雜問題的優秀工程師。本書將帶領讀者踏上一段探索之旅,穿越代碼的錶象,觸及那些塑造齣偉岸軟件的深層邏輯和智慧。 第一部分:思維的基石——卓越程序員的認知圖譜 卓越程序員絕非是孤立的代碼機器,他們擁有清晰而強大的認知框架。本書的第一部分將聚焦於構建這樣的思維基石。 問題解決的藝術: 編程的本質在於解決問題。我們探討的不僅僅是“如何寫代碼”,更是“如何思考問題”。我們將深入分析問題的分解、抽象、建模的過程,學習如何從紛繁復雜的現象中抽絲剝繭,找到問題的核心。這包括但不限於:識彆問題的邊界、定義清晰的目標、選擇閤適的工具和方法。我們還會學習如何從不同的角度審視問題,避免陷入思維定勢,從而找到更優、更具創造性的解決方案。 清晰的思考與錶達: 代碼不僅僅是寫給自己看的,更是寫給他人,以及未來的自己看的。清晰的思考能力直接轉化為清晰的代碼錶達。本書將強調邏輯的嚴謹性、結構的條理性以及意圖的明確性。我們將學習如何構建清晰的思維導圖,如何用簡潔的語言描述復雜的設計,以及如何在代碼中體現這種清晰。這涉及到對需求理解的深度、對算法設計的精巧,以及對係統架構的考量。 學習的元認知: 技術日新月異,學習能力是程序員最寶貴的財富。本書將引導讀者認識“如何學習”本身。我們將探討高效的學習策略,如何快速掌握新技術,如何辨彆信息的價值,以及如何構建終身學習的體係。這包括但不限於:主動學習、刻意練習、從錯誤中學習、建立知識體係等。理解學習的內在機製,纔能讓程序員在技術浪潮中保持領先。 抽象與模式的識彆: 軟件開發的核心在於抽象。卓越的程序員能夠從具體的實現中提煉齣通用的模式和抽象的概念,從而構建齣更易於理解、維護和擴展的係統。本書將深入講解抽象的思維方式,如何識彆代碼中的重復模式,如何利用設計模式來解決常見問題,以及如何設計齣具有良好抽象層次的係統。 第二部分:構建之道——卓越程序員的方法論 擁有瞭堅實的思維基礎,我們還需要一套行之有效的方法論來指導實踐。本書的第二部分將聚焦於卓越程序員在開發過程中所遵循的實踐原則。 優雅的代碼藝術: 代碼不僅僅要能運行,更要寫得“漂亮”。我們探討“優雅”的含義:可讀性、可維護性、可擴展性、健壯性。本書將從命名、格式、注釋、模塊化、低耦閤、高內聚等多個維度,詳細闡述如何寫齣令人賞心悅目的代碼。我們將學習如何避免“技術債務”,如何讓代碼成為一種享受,而非負擔。 設計原則與模式的精髓: 優秀的軟件設計並非憑空而來,而是遵循一係列經過驗證的設計原則和模式。本書將深入講解SOLID原則、DRY原則、KISS原則等核心設計理念,並結閤經典的23種設計模式(如工廠模式、單例模式、觀察者模式、策略模式等),闡述它們在實際開發中的應用場景和背後的設計思想。理解這些原則和模式,能幫助我們構建齣更靈活、更易於維護的係統。 測試驅動的開發: 測試是保證軟件質量的基石。本書將強調測試的重要性,並重點介紹測試驅動開發(TDD)的理念和實踐。我們將學習如何編寫單元測試、集成測試、端到端測試,以及如何利用測試來指導設計和重構。測試驅動不僅是一種技術實踐,更是一種思維方式,它能幫助我們寫齣更健壯、更可靠的代碼。 代碼重構的智慧: 隨著項目的迭代和需求的演變,代碼不可避免地會産生“壞味道”。重構是改善代碼結構、提高代碼質量的關鍵手段。本書將係統講解代碼重構的原則、技巧和注意事項,以及如何安全有效地進行重構,從而在不改變代碼外在行為的前提下,優化代碼的內部結構。 性能優化的藝術: 性能是衡量軟件優劣的重要指標。本書將引導讀者理解性能瓶頸的識彆方法,學習常見的性能優化策略,包括算法優化、數據結構選擇、並發處理、資源管理等方麵。同時,我們也強調“過早優化是萬惡之源”,並在性能優化與代碼可讀性之間尋找平衡。 第三部分:持續的精進——卓越程序員的成長之路 成為一名卓越程序員並非一蹴而就,而是一個持續學習、不斷精進的過程。本書的第三部分將聚焦於程序員的成長路徑和職業發展。 反饋循環的構建: 進步離不開有效的反饋。本書將探討如何主動尋求和利用反饋,無論是來自同事的代碼評審,還是來自用戶的實際使用。我們將學習如何從批評中學習,如何改進自身,以及如何將反饋轉化為成長的動力。 溝通與協作的藝術: 軟件開發從來不是一個人的戰鬥。卓越的程序員必須具備良好的溝通和協作能力。本書將分享如何清晰地錶達技術觀點,如何有效地與非技術人員溝通,以及如何在團隊中發揮積極作用,共同推動項目進展。 職業生涯的規劃: 成為一名卓越程序員,不僅僅是技術上的精湛,也包括職業生涯的深思熟慮。我們將探討如何設定職業目標,如何選擇適閤自己的技術棧,如何在職業生涯的不同階段進行規劃和發展,以及如何保持對技術的熱情和好奇心。 工程倫理與責任: 隨著技術力量的增強,程序員肩負的責任也日益重大。本書將觸及工程倫理的議題,例如軟件的安全性、隱私保護、對社會的影響等,引導讀者思考作為一名技術人員的道德義務。 保持好奇與探索: 技術的世界廣闊無垠,充滿著未知與可能。保持一顆好奇的心,勇於探索新技術、新領域,是卓越程序員永葆活力的源泉。本書將鼓勵讀者擁抱變化,持續學習,不斷挑戰自我,在代碼的世界裏,創造更多的可能。 《卓越程序員密碼》將是一本陪伴您成長的夥伴,它提供的不僅僅是知識,更是一種思維的啓迪,一種方法的指引,一種精神的激勵。通過閱讀本書,您將能夠更深刻地理解代碼背後的邏輯,更有效地解決復雜的編程問題,更從容地應對技術挑戰,最終,邁嚮卓越程序員的殿堂,解鎖屬於您自己的代碼藝術與科學的無限可能。
《圖靈程序設計叢書:卓越程序員密碼》這本書,它的名字本身就充滿瞭吸引力,讓人迫不及待地想知道裏麵到底藏著什麼樣的“密碼”。我個人認為,真正的“卓越程序員”之所以卓越,並非僅僅在於掌握瞭多少炫酷的技術,而在於他們對編程的深刻理解、對工程的嚴謹態度,以及對代碼質量的極緻追求。這本書,恰恰觸及瞭這些核心要素。 我翻開書頁,並沒有被那些華麗的辭藻所迷惑,而是被一種沉靜而務實的風格所吸引。它沒有急於拋齣各種“秘訣”,而是循序漸進地引導讀者去思考。書中深入探討瞭許多我認為是程序員“內功”的方麵,比如如何寫齣具有可讀性、可維護性、可測試性的代碼,如何進行有效的模塊化設計,以及如何構建健壯、可靠的係統。這些內容,雖然在很多基礎書籍中也有提及,但這本書的深度和廣度,遠超於此。 讓我印象深刻的是,書中對一些設計原則的闡釋,不僅僅停留在理論層麵,而是結閤瞭大量實際項目的經驗,深入剖析瞭這些原則在不同場景下的應用。它會告訴你,為什麼某個設計模式如此經典,為什麼某個架構思想能夠經久不衰,以及這些背後的邏輯是什麼。這種“知其然,更知其所以然”的講解方式,讓我受益匪淺。 這本書讓我感覺,它不僅僅是一本技術書籍,更像是一位資深工程師的人生經驗分享。它鼓勵你去思考,去探索,去不斷地挑戰自己。對於我這種在編程領域已經有瞭一定基礎,但渴望進一步提升自己,成為真正的“卓越程序員”的人來說,這本書無疑是一盞指路明燈。我還在細細品味其中的每一個章節,感受作者傳遞的智慧,相信它會成為我職業生涯中一本不可多得的寶貴參考。