一本1986年就問世的編程書為何能暢銷至今?(文末福利贈送)
說起IT編程經典,我們總是繞不開《編程珠璣》。距離這本書首次問世已有近40年之久了,中文版也已經出版近15年。以計算機和互聯(lián)網(wǎng)的發(fā)展速度而言,別說是40年,哪怕只有幾個月也足夠讓一項技術更新得“面目全非”。那么這一本1986年就面世的《編程珠璣》,為何至今仍能暢銷全球,且被業(yè)內大牛譽為編程“奇書”?
對于這個問題,我們邀請了一位老朋友——資深技術人高博,來和大家聊聊《編程珠璣》。

▲ 點擊圖片,與大師交流

▲ 《編程珠璣》姊妹篇,再續(xù)經典
01
“第一次讀《編程珠璣》還是在大學里,當時的互聯(lián)網(wǎng)雖然還不像現(xiàn)在這樣發(fā)達?!碑敗毒幊讨榄^》剛剛進入國內,高博就有機會拜讀了這本書。和其他讀過《編程珠璣》的人一樣,高博被這本書深深地震撼了。
“《編程珠璣》的厲害之處,在于它從一個程序設計大師的視角出發(fā)直擊編程這件事情的‘要害’,直接教你老師傅是怎么想問題,以及怎么著手做事。”
編程其實無非兩件事情,第一要正確地實現(xiàn)功能,第二要取得盡可能好的時空性能,《編程珠璣》整本書就是在全面細致地展開這兩個主題。但是《編程珠璣》與眾不同的地方有三點:
要熟練掌握基礎算法和數(shù)據(jù)結構
《編程珠璣》特別強調基礎算法和數(shù)據(jù)結構的熟練掌握和靈活運用。也就是說,我們不能只掌握到去調用庫函數(shù),而是要深入了解基礎算法和數(shù)據(jù)結構是怎么實現(xiàn),在不同的場景下應該怎么選擇,在默認實現(xiàn)不能滿足需要的時候要怎么改造它們的關鍵部分。
為代碼建立自動化驗證工具
《編程珠璣》極力建議大家養(yǎng)成為編寫的代碼建立配套的自動化驗證工具的習慣,這一點可以說是檢驗程序員是業(yè)余還是專業(yè)的分野。專業(yè)程序員寫出來的每一行代碼都是要用在生產環(huán)境里作為生產力的。
這里不得不提到一個詞,工業(yè)級代碼。什么叫工業(yè)級代碼?
工業(yè)級代碼必須是能站得住腳的,不能只建立在直覺和短期的思考之上。在作為功能的代碼周圍要建立起一系列驗證設施,以確保它們能夠應對千變萬化的、合法或非法的、甚至是蓄意破壞性的輸入。這些設施包括斷言和單元測試,等等。
此外,還要保證代碼運行的性能在設計限制之內,這就不僅要運用時空剖析工具,更重要的是要回歸原理,反思是不是能通過換用或改造算法和數(shù)據(jù)結構來獲得性能提升。
設計和構建工業(yè)級代碼,要求我們熟練地運用各種第三方工具,保證生產環(huán)境中運行的代碼實現(xiàn)選用了最合理的算法和數(shù)據(jù)結構,并且有著可驗證、可分析的功能和性能,這些都是專業(yè)程序員的必備素養(yǎng)。
要不斷提升品味,不斷反思代碼
最重要的一點,這是書里沒有明確地寫出來,而是在字里行間透射出來的,就是要不斷地提升作為程序員的品味,不斷地反思已經寫完的代碼。
能不能讓我寫的代碼更健壯、更有可移植性、跑得更快、占用的資源更少……
這樣的追求在時下浮躁的行業(yè)氣氛中要求很高,對于程序員來說,要在巨大的進度壓力下做到這些很不容易。但是如果要不斷提高自己,成為更專業(yè)的程序員,就必須不斷地自問,并在日常工作中做出選擇。
“我想,這就是閱讀《編程珠璣》能夠給我們帶來的字面上的實務指導,還有隱含在字面下的精神力量?!?/p>
《編程珠璣》的作者Jon Bentley曾經說過,“計算機編程充滿樂趣,有時候,它既是門優(yōu)雅的科學,還要靠它去開發(fā)和使用新的軟件工具?!?/p>
正如自然界里珍珠出自細沙對牡蠣的磨礪,Jon Bentley以其獨有的洞察力和創(chuàng)造力,從磨礪程序員的實際問題中凝結出一篇篇不朽的編程“珠璣”,最終結集為兩部不朽的計算機科學經典名著,影響和激勵著一代又一代程序員和計算機科學工作者。
書中的真實歷史案例和練習題以及部分練習題的提示與解答,非常適合自學。閱讀這兩本書時,讀者需要備有紙和筆,最好還有一臺計算機在手邊,邊讀邊想、邊想邊做,這樣才能將閱讀這兩本書的收益最大化。
“如果你有志于成為一個優(yōu)秀的軟件工程師,那么你一定要仔細地讀一讀《編程珠璣》?!?/p>
書里講的算法和工具固然重要,但要明白這些都是例子,僅僅掌握這些例子本身是遠遠不夠的。必須要舉一反三,吃透為什么要選擇這些算法和工具,它們?yōu)槭裁催m用于書里講到的問題和場景,對于自己在面對的問題和場景又應該怎么做。
“如果你勤于思考,我建議你每隔一段時間就重讀一次,每次重讀都會讀出新的體會來,而這種體驗恰恰說明你自己確實有提高了!”
02
《編程珠璣》的作者喬恩.本特利(Jon Bentley)是世界著名計算機科學家,被譽為影響算法發(fā)展的十位大師之一。他先后任職于卡內基-梅隆大學、貝爾實驗室和Avaya實驗室。
在卡內基-梅隆大學擔任教授期間,他培養(yǎng)了包括Tcl語言設計者John Ousterhout、Java語言設計者James Gosling、《算法導論》作者之一Charles Leiserson在內的許多計算機科學大家。
上個世紀80年代,Bentley以技術人員的身份常駐貝爾實驗室,但他一直有一個夢想:“我希望能讓每程序員都能學到東西?!?/p>
因此Bentley一直將自己的工作歷程發(fā)布在《ACM通訊》雜志上,希望能夠幫助熱愛編程的年輕人開闊眼界。ACM非常支持Bentley,并且為Bentley設置了一個頗具傳奇色彩的“編程珠璣”(Programming Pearls)專欄 。
在這些文章中,Bentley從工程實現(xiàn)的角度出發(fā),為程序員們提供了一個個艱難問題的解決方案,猶如一顆顆閃閃發(fā)亮的珍珠。Bentley的“珍珠”超出了可靠工程學的范疇,利用他的洞察力和創(chuàng)造力為那些惱人的問題提供了獨特而巧妙的解決方案。因此,Bentley便成了風靡一時的“愛豆”,可以說,那時熱愛編程的人幾乎都迷戀他。
后來在ACM的鼓勵下,Bentley將“編程珠璣”系列仔細修訂和補充整理,對各篇文章的先后次序做了精心編排。于是,現(xiàn)在我們看到的這本涵蓋從算法理論到軟件工程各種主題的《編程珠璣》正式誕生。

▲ 1986年出版的第一版《編程珠璣)
(Programming Pearls)
后來Bentley又出版了《編程珠璣(續(xù))》。在《編程珠璣(續(xù))》中,Bentley將書中的例子都改用當時火爆的C語言書寫,并多處提到如何用C++和Java中的類來實現(xiàn),因此大部分程序員閱讀起來都比較輕松,導致這兩本書一出版幾乎賣斷貨。
03
《編程珠璣》圍繞程序設計人員面對的一系列實際問題展開。作者以其獨有的洞察力和創(chuàng)造力,引導讀者理解這些問題并學會解決方法,而這些正是程序員實際編程生涯中至關重要的。本書的特色是通過一些精心設計的有趣而又頗具指導意義的程序,對實用程序設計技巧及基本設計原則進行了透徹而睿智的描述,為復雜的編程問題提供了清晰而完備的解決思路。
我們用一個簡單的思維導圖展示《編程珠璣》兩本書的內容框架,而蘊含其中的精華內容,還需讀者集中注意力,仔細閱讀。

▲ 《編程珠璣 第2版》與《編程珠璣 續(xù)》內容對比
如今,Bentley已經69歲了,而《編程珠璣》也已走過36個年頭。這個從10幾歲就熱愛編程的老人用了50幾年的時間來研究它。50幾年里,一路奉獻著自己的研究成果,未來他也會一直在自己最愛的事業(yè)上拋灑熱血。而對于我們這些后輩來說,讀《編程珠璣》,正當其時!
—END—
讀者,你好!今天贈送給讀者朋友們4本《編程珠璣》,你只需要掃描下方小程序即可參與到活動中來!中獎的朋友請在3天之內,填寫你的聯(lián)系方式,我們會盡快郵寄給你!

分享
收藏
點贊
在看

