「該死的魚雷!全速前進。」
—— 海軍上將 Farragut
程序設計是一門將問題求解方案轉化為計算機可執行形式的藝術。這過程中,大量精力投入於方案探索與優化。往往只有親自編寫代碼解決問題,才能真正透徹理解問題本質。
本書面向零基礎但願意投入努力的初學者,旨在傳授使用 C++ 進行程序設計的基本原理與實踐技巧。目標是讓讀者掌握足夠知識與經驗,運用現代最佳技術完成實用編程工作。
學習過程循序漸進:每章引入新概念並以實際應用案例闡述。隨著進度推進,你將逐步獲得用代碼表達思想、驅動計算機按預期工作的能力。拒絕「先學一個月理論再上機」的枯燥模式。
計算機文化建立在軟件之上。不懂軟件,就只能盲目相信「魔法」,錯失最有趣、經濟與社會價值最高的領域。程序設計涵蓋從 GUI 桌面應用、工程計算、嵌入式系統(數碼相機、汽車、手機控制程序)到文字處理等廣泛場景。
它類似數學,是優秀的智力訓練;但因計算機即時反饋,比純數學更具體、更易上手。程序設計能拓寬視野、改善世界,且極具樂趣。
這不是簡單的入門教材,而是以最簡潔方式傳授專業級實用編程技術的書籍。涵蓋現代軟件依賴的核心技術(多在近幾年才出現),拒絕浪費時間在低實用性內容上。
基本假設: 你希望編寫供他人使用的高質量程序,追求專業水準。因此本書覆蓋實用編程必需的所有主題,配套編程思想、語言工具與練習。
若你只想用現成程序、不想了解原理或編寫核心代碼,請另尋他書。程序設計複雜度與重要性常被低估,本書面向真正想編寫、理解複雜計算機程序的人。
結構與實踐導向使其也適合作為第二本程序設計書:
建議:大量做練習。常見問題是習慣用舊方式編程而非採用新技術。除非你是 Stroustrup,否則你會發現本書內容並非「你父輩的 C++」。
學習程序設計必須寫代碼,如同學游泳、樂器、開車無法只靠看書。本書提供大量帶註釋圖表的代碼範例,需通過閱讀理解思想與語言特性。但僅讀代碼無法掌握實戰技巧,必須親自編寫、編譯、運行、遭遇錯誤並修復。這正是樂趣所在!
程序設計遠不止語法規則與手冊。本書重點在基礎思想、原理與技術——優秀程序員的必備素養。良好設計的代碼才能成為正確、可靠、易維護系統的組成部分。「基礎」意味著延續性:語言工具演變甚至被取代,這些知識依然寶貴。
計算機科學、軟件工程、數據結構、用戶接口、數據處理等不屬於程序設計範疇,但程序設計是所有計算機相關領域的基礎學科。本書簡要介紹相關重要概念,無法替代系統學習。
代碼既可實用又可優美。本書助你理解優美代碼的含義,掌握構造原理與技巧。祝學習順利!
作者在德州農工大學用初稿教過 1000+ 大一新生(60% 有經驗,40% 零基礎),大多數成功,你也可以。無論課程還是自學,請與他人協作。程序設計非孤獨活動,團隊合作效率更高、學習更快、更快樂。與朋友討論非作弊,而是最高效進步途徑。但切記:必須完成練習與習題,編程是實踐技能,不寫代碼純屬理論空談。
遇到懷疑時,重讀前言、第 1 章與第 22 章,尋找編程的激情與價值。書厚是因寧願重複解釋、多舉例,也因後半部分含參考資料供深入查閱。請保持耐心,重要技能值得時間投入。
本書非傳統 CS101,而是構造可工作軟件的指南。省略圖靈完備、狀態機、離散數學、喬姆斯基文法等傳統內容,也省略硬件細節(假設學生幼兒園起已用電腦)。聚焦少量主題的深度而非廣度。希望與其他課程配合,共同形成完整計算機科學介紹。請閱讀第 0 章教學理念並傳遞給學生。
官網:www.stroustrup.com/Programming 提供:
歡迎提出改進意見。
感謝已故同事 Lawrence "Pete" Peterson 早期鼓勵與共同建設課程;感謝學生、助教、教師及 Damian Dechev、Tracy Hammond 等人的建設性意見;感謝 Mogens Hansen 解釋引擎控制軟件;感謝 Al Aho、Brian Kernighan 等人幫助騰出寫作時間。
感謝 Addison-Wesley 審閱人 Richard Enbody 等人的寶貴意見,編輯 Peter Gordon 的耐心,以及製作團隊 Julie Grady、Chris Keane、Rob Mauhar、Julie Nahil、Barbara Wood 的貢獻。Bashar Anabtawi 等人用 MSVC 7.1/8.0 和 GCC 3.4.4 檢查所有代碼。
感謝 Brian Kernighan、Doug McIlroy 為程序設計書籍樹立高標準,以及 Dennis Ritchie、Kristen Nygaard 為實用編程語言設計的寶貴經驗。