- Boost程序庫完全開發指南:深入C++”準”標準庫(第5版)
- 羅劍鋒
- 2442字
- 2020-05-22 18:05:57
第1版前言
屈指算來,接觸C++語言至今已經有十余個年頭了。回首往事,不禁感慨良多。
緣起
1996年,我上大學最開始學的是Pascal,不得不說,Pascal的程序風格嚴謹,確實很適合作為一門教學語言,然而用于實際開發它就不那么合適了(直到出現Delphi)。由于當時學校并未開設C語言課程,所以在Pascal課程結束后,我就買書自學C/C++語言,并在次年報名計算機軟件專業的技術資格和水平考試,靠著一點點編程和考試的“天分”獲得了高級程序員資質(當年很熱衷考級考證,后來就“淡定”多了)。雖然有了資格證,但我仍然是個C++的初學者,對于C++的認識還處于C的面向過程和簡單的基于對象層次上。
新千年伊始,我考入了北京理工大學就讀研究生,因為跟導師做項目開始接觸STL與C++標準庫,大概是2005年從1.33版開始接觸Boost,這才真正領略了C++的精髓。那段時期,Java和C#正在國內大行其道,C++則勢單力薄,有關STL和C++標準的技術書籍寥寥無幾,更沒有講解Boost的書,故對Boost的學習基本只能靠自己的摸索與實踐。好在Boost自帶的文檔的內容相當豐富(盡管看全英文的資料十分辛苦),而且其源碼也比較清晰規范,在熟悉了STL的基礎上學習Boost倒也不算太難。
但Boost的一個最大的特點就是“龐大”,其功能組件眾多,要想把它全部裝進腦子里融會貫通基本上是不可能的,使用Boost時需要經常查閱英文文檔,相當麻煩。因此,在學習的過程中,我逐漸產生了編寫學習筆記的想法。一開始的學習筆記只是簡單的純文本文件,記錄了一些使用經驗,隨著不斷累積,純文本形式已經不能夠滿足我整理知識的需求了,于是我又把這些文字遷移到了Word文檔里,并把這些使用經驗分類編目,進行較系統的歸納梳理。慢慢地,這份學習筆記居然有了上萬字的規模,成了一份很好的Boost備忘參考,它在日常的開發工作中給了我很大的幫助。就像《設計模式》一書中所說的那樣,我捕獲了很多使用Boost解決問題的實踐經驗,避免了重復發現。不過,這份資料一直僅限于我個人使用,屬于“自娛自樂”的作品,從未示人。
時間一晃,到了2010年1月份的某天夜里,不知道是什么原因,我忽然失眠了,躺在床上翻來覆去怎么也睡不著。突然,一個念頭闖入了我的腦海:把Boost開發經驗整理出版吧,讓更多人能夠分享這些知識,正所謂“獨樂樂,與眾樂樂,孰樂”。這個大膽的想法的出現讓我那天的失眠又延長了幾個小時——關于書的各種構想在我的頭腦中“肆虐橫行”。
隨后的幾天里,我就把這個想法付諸行動了,雖然以前寫過并發表過很多文章,也在網上印刷了幾本個人文集,但出版正式的書還是第一次。在把學習筆記進一步整理完善,編寫出較完整的結構和一個樣章后,我就開始聯系出版社了。當初并沒有多大的信心,畢竟我這個作者名不見經傳,也沒有什么資歷、背景和名氣(而且還是個“網盲”,從未跟隨潮流開個人博客)。很幸運,我發出的第一個E-mail就是給電子工業出版社發的,而且編輯也在第一時間回復了我,這才給了我持續寫作完成全書的動力。
在寫作過程中,我也進一步加深了對Boost的認識,弄清了許多原來未曾注意到的細節。原本我只打算寫20萬字左右、三百多頁,但寫到中途,我發現Boost庫的博大精深遠非我當初的理解,也意識到了自己當初的學習比較膚淺。我歷經了近半年近乎不眠不休的努力,最終呈現給讀者的是這本厚達500多頁的圖書,本書的文字量是最初的學習筆記的數十倍,其內容也翔實豐滿了很多——達成這個結果,我個人可以說是問心無愧了。
C++與Boost
與Java和C#等語言相比,C++最大的不同之處在于它并非由某個公司或個人把持的,它真正的發展動力來自廣大的程序員。Boost就是這樣的一個典范,它成功地填補了從C++98到C++0X這“失落的十年”間的空白,在競爭對手Java和C#不斷更新版本、新增特性的時候以庫的形式極大地增強了C++的能力,使C++不至于因為標準規范的滯后而落后于時代,而且Boost還深層次地挖掘了C++的潛力,開創了泛型編程、模板元編程、函數式編程等嶄新的境界。
就個人來說,我比較喜歡的Boost版本有兩個,分別是1.35版和1.39版。1.35版增加了asio、bimap、circular_buffer等許多重要組件,而1.39版則增加了signals2庫,這兩個版本都在我的工作用機上停留了相當長的時間。落筆之時,Boost已經更新到了1.43版,成長為一個相當完善、全面、強大的C++程序庫。可以毫不夸張地說,現在的C++程序員,如果不熟悉Boost,那么他至少會喪失一半使用C++的好處,同時會多耗費數倍的開發精力和時間。
隨著C++0X標準即將來臨,Boost程序庫的發展也出現了加速的趨勢,由原來間隔數月不定期更新版本,改為定期(每3個月左右)發布新版本,而且每個新版本都會包含大量極有價值的更新內容。因此,希望讀者在閱讀本書時及時訪問Boost的官網(http://www.boost.org),以便獲取最新的版本。
感謝讀者選擇本書,再說一句真心的“套話”(笑):限于作者水平有限,書中錯漏在所難免,敬請讀者原諒、指正。
致謝
首先,我要感謝整個C++群體,特別是C++語言的發明者Bjarne Stroustrup博士——他給我們帶來了美妙的C++;然后是Alexander Stepanov和C++標準委員會——他們把STL引入了C++,開創了C++的現代編程風格;以及Beman G.Dawes、Boost程序庫的所有作者和Boost社區——他們為我們奉獻了如此高水準的程序庫。
其次,我要感謝電子工業出版社博文視點公司,他們給了我這個把自己的開發經驗出版成書的機會,在把潦草的個人學習筆記變成正式圖書的過程中,他們付出了艱辛的努力。還要感謝陳碩先生,他審閱了本書的部分手稿,提出了很多有價值的參考意見,并慨然為本書撰寫序言。
再次,我要感謝我的家人:感謝我的父母和弟弟,他們永遠是我生命中最重要的人;感謝我的妻子,她自始至終都支持我寫作,并擔負了大部分照顧孩子的家務(雖然偶有怨言);我還要對已滿一歲半的女兒說聲抱歉,為了寫作本書,我犧牲了很多陪她玩耍的時間。
再次,我還要感謝黃美華、馮薇、戚天龍、羅玉震、顏靜、陳剛、張秋香、繆澤波等同事,長期的共事令我們建立了深厚的友誼。在此,我要對后兩位同事致以特別的感謝,他們對完成本書的寫作提供了大力的支持和幫助。
最后,感謝多年以來的好友岳大海、時吉斌、王峰,感謝我的中學老師鄧英、杜愛芹、練鑫云、陳靜,感謝我的研究生導師賈云得,以及所有在我成長過程中曾經給予我關心和幫助的朋友們!
羅劍鋒
2010年6月7日于 北京 王府井
- Apache ZooKeeper Essentials
- Learning PostgreSQL
- Mastering ServiceStack
- Rust編程從入門到實戰
- 從0到1:Python數據分析
- AppInventor實踐教程:Android智能應用開發前傳
- Learning YARN
- 深入實踐Kotlin元編程
- Zabbix Performance Tuning
- Everyday Data Structures
- Python全棧開發:基礎入門
- SAP Web Dynpro for ABAP開發技術詳解:基礎應用
- WordPress Search Engine Optimization(Second Edition)
- Java RESTful Web Service實戰
- PHP動態網站開發實踐教程