1024 程式設計師節快樂丨C++之父Stroustrup寫給中國程式設計師的祝福及1047條C++最佳實踐建議

1024 程式設計師節快樂丨C++之父Stroustrup寫給中國程式設計師的祝福及1047條C++最佳實踐建議

從1979年C++誕生的那一天起,C++之父Bjarne Stroustrup就一直致力於C++的標準制定、語言設計與實現、教學和研究等相關的工作,碩果累累,為C++的發展和應用做出了傑出的貢獻。

Stroustrup不僅僅是在C++方面取得了不菲的成就,在其他很多方面都頗有建樹。10月24日程式設計師節,為了向Stroustrup致敬,我們來看看他亮眼的履歷。

1024 程式設計師節快樂丨C++之父Stroustrup寫給中國程式設計師的祝福及1047條C++最佳實踐建議

C++之父Bjarne Stroustrup

1

Bjarne Stroustrup介紹

C++語言之父:C++的設計者和最初實現者,C++語言ISO標準的維護者。

科學界明星人物:曾獲《財富》雜誌“美國12位最年輕的科學家”稱號,以及BYTE雜誌“近20年來計算機工業最具影響力的20人”稱號。

學術造詣極高:美國工程院院士、IEEE會士、ACM會士,曾獲Sigma Xi(科學研究協會)的William Procter獎(首位獲得此獎的計算機科學家)。

教育貢獻重大:曾擔任德州農工大學首席教授,為劍橋大學、哥倫比亞大學、普林斯頓大學等知名學府教育事業做出重要貢獻。

企業界擔任要職:現任摩根士丹利技術與資料部門董事總經理,RollApp科技公司資深顧問。

著作頗豐:

The Design and Evolution of C++(《C++的設計與演化》)

A Tour of C++(《C++語言導學》,更新至第2版)

The C++ Programming Language(《C++程式設計語言》,更新至第4版)

Programming: Principles andPractice Using C++(《C++程式設計:原理與實踐》,更新至第2版)

為了幫助程式設計師更好地學習和使用C++,Stroustrup建立了一個內容豐富的C++元宇宙《C++之父建立的C++元宇宙》。其中,這個元宇宙中包含1047條C++程式設計的最佳實踐,全部都是從C++語言設計者的視角和大量工程實踐中總結出來的寶貴經驗,可謂字字珠璣。

2

Stroustrup的C++元宇宙

從制定C++語言標準、設計並實現C++語言特性,到撰寫C++專著和論文,再到C++教學、佈道和企業實踐,Stroustrup在C++領域做了大量的工作並取得了豐碩的成果,為我們構建了一個豐富的C++元宇宙。要跟隨Stroustrup學好C++,必須先了解他的C++元宇宙。

下面來開始我們的C++元宇宙之旅,看看它都有什麼:

(1)

C++語言

Stroustrup發明了C++語言,今天依然在創新;

(2)

C++標準

Stroustrup制定了C++的設計標準,至今仍在前進;

(3)

C++標準庫

Stroustrup設計了早期標準庫裡的很多內容,至今仍在參與和幫助設計標準庫;

(4)

4部C++作品

Stroustrup撰寫了4部經典的C++作品,暢銷全球20餘個國家和地區,影響了幾代程式設計師,C++程式設計師奉為瑰寶。

(5)

1024條C++編碼最佳實踐

Stroustrup從他的工程實踐經驗中總結出了1024條C++編碼最佳實踐(建議),字字珠璣,全部寫在了他的著作《C++程式設計語言(第4版)》(The C++ Programming Language,4th)和《C++語言導學》(A Tour of C++)裡。

(6)

1182道習題和思考題

為了幫助C++的學習者更好地瞭解、使用C++並懂得它背後的設計思想和原理,Stroustrup精心設計了1182道習題和思考題,這些內容全部在他的著作《C++程式設計:原理與實踐(第2版)》(Programming: Principles andPractice Using C++)裡。

(7)

大量C++ FAQ

Stroustrup對各種常見的C++問題進行了整理,他從語言設計者和工程實踐者的角度給出了他的分析和答案。

(8)

近百個採訪

Stroustrup將全球多個國家對他的關於 C++DE 採訪進行了系統整理,多達近100個,裡面有大量關於他對C++的思考和經驗總結。

(9)

大量影片學習資料

Stroustrup將他演講和談論C++的影片進行了整理,留下了大量寶貴的C++影片學習資料。

(10)

C++編譯器

Stroustrup對已有的免費和付費的C++編譯器進行了全面分析,並給出選型建議。

(11)

有價值的連結

Stroustrup在C++的學習路線圖上給出了大量進一步瞭解和學習C++的連結,將把你帶向C++元宇宙更廣闊的深處。

如果你想更具體的瞭解Stroustrup的C++元宇宙,入口在這裡:

Stroustrup的C++元宇宙入口

3

Stroustrup的1047條C++最佳實踐建議

1024程式設計師節,讓我們來看看Stroustrup的這個元宇宙中包含的1047條C++程式設計的最佳實踐,這些建議全部都是從C++語言設計者的視角和大量工程實踐中總結出來的寶貴經驗,可謂字字珠璣。

為了幫助程式設計師更好地學習和使用C++,Stroustrup將這些最佳實踐都悉數總結在他撰寫的3部享譽全球的著作裡,由於數量比較多,本文無法全部呈現,只能展示部分,想要領會語言之父思想和經驗的讀者,可以沿著下面的路線找到這些最佳實踐。

1。《C++程式設計語言(原書第4版)》:698條

這裡隨機展示10條:

建議1:請關注程式設計技術,而非語言特性。

建議2:設計應該關注優雅且高效的抽象,可能的情況下以庫的形式呈現。

建議3:當介面和實現需要完全分離時,請使用抽象類作為介面。

建議4:如果你不確定是否會越界,請記得使用帶邊界檢查的容器。

建議5:儘量使用普通char,而非signed char或unsigned char。

建議6:讓表示所有權的指標位於控制代碼類的內部。

建議7:當不得不使用顯式型別轉換時,請儘量使用命名的轉換。

建議8:與函式指標相比,請優先使用函式物件(包括lambda)和虛擬函式。

建議9:僅在確實需要時才使用protected成員,且務必小心使用。

建議10:模板可以用來構成型別安全且緊湊的資料結構,以及用來線性化類層次。

2。《C++程式設計設計:原理與實踐(原書第2版)》:27條

這裡隨機展示3條:

建議11:請不要低估型別安全的重要性。型別是大多數正確程式的核心概念,大多數用於構建程式的有效技術依賴於型別的設計與使用。

建議12:輸入和輸出是很難處理的,所以我們必須預計到輸入輸出中所面臨的一定程度上的混亂,並接受它和適應它。

建議13:當設計一個類時,我們必須考慮類的初始化、複製與析構。

3。《C++語言導學(原書第2版)》:322條

這裡隨機展示12條:

建議14:理解C++語言的原語是如何對映到硬體的。

建議15:避免使用裸union,將其與型別域封裝在一個類中。

建議16:如果你的函式不丟擲異常,那麼將其宣告成noexcept。

建議17:如果成員函式不改變其物件的狀態,將其生命為const。

建議18:如果某個類是一個資源控制代碼,則它需要一個使用者自定義的建構函式、解構函式和非預設的複製操作。

建議19:不能將虛擬函式成員定義成模板成員函式。

建議20:如果你需要一個簡單函式物件且只用在一個地方,則使用lambda。

建議21:不要重新發明輪子,應該使用庫;當有多種庫可選擇時,優先選擇標準庫。

建議22:將regex用於正則表示式的大部分常規用途。

建議23:在使用一個檔案流之前,記得檢查它是否依附於某個檔案上。

建議24:如果要在大量資料中執行搜尋操作,請選擇無序容器。

建議25:與垃圾回收機制相比,請優先選擇智慧指標。

不管你現階段的C++功底如何,應該或多或少都能感受這些最佳實踐的價值。用“字字珠璣”來形容,一點也不誇張,有的是隻有隻有站在C++語言設計者才能明白的,有的可能是要踩了無數坑並付出一定的代價後才能明白的。

如果能將這1047條最佳實踐吃透並靈活運用,不敢說你從此在C++領域可以封神(Stroustrup才是yyds),但絕對可以稱得上是高手。

要學好C++,最重要的是程式設計實踐,一定要編寫和閱讀有一定複雜度的工程化程式碼,而不是Demo或玩具程式碼。提到實踐,上面提到的C++之父的這3本書也會給你驚喜,因為書中有2000-3000個程式碼示例,這些程式碼示例都是工程程式碼簡化而來的,同時這3本書中還有1000多道習題。

如果你想跟著C++之父學習最正統的C++,想了解C++的最新動態,想學習的過程事半功倍,推薦你瞭解C++之父構建的C++元宇宙。

4

有的人會問,C++真的廉頗老矣了嗎?

其實不然!C++不僅沒有老,散發著成熟的魅力的同時,仍不乏青春的活力。

從設計標準(ISO C++)角度看,C++11已經非常成熟且被廣泛使用;C++14和C++17的制定工作於2012年開始,進展非常順利,C++14中新增的核心功能基本全部實現,C++17中規劃的功能大部分也已經實現。

從語言特性角度看,既吸收了當下流行的函式式語言的一些好的語言特性(如泛型Lambda),也刪除了原來的一些飽受詬病的語言特性(如三字元組)。當然,最大的變化是增加了大量實用且功能強大的語言特性,如二進位制文字、元字串、靜態斷言等。語言功能更加豐富、更加強大、更加高效。

從應用場景角度看,作業系統、資料庫、網路軟體、驅動程式、遊戲、圖形處理軟體、搜尋引擎等領域C++依然是主角,完全不可取代。在權威的TIOBE程式語言排行榜上,C++從未跌出過前4。

1024 程式設計師節快樂丨C++之父Stroustrup寫給中國程式設計師的祝福及1047條C++最佳實踐建議

圖1 TIOBE程式語言排行榜(2021年7月)

從圖書市場的角度來看,程式語言類圖書,Python、Java和C++牢牢佔據著前3名。據不完全統計,僅僅是在中國,每年新開始學習C++的程式設計師不少於50萬,而且有逐年增加的趨勢。

5  Stroustrup給中國程式設計師的祝福:

1024 程式設計師節快樂丨C++之父Stroustrup寫給中國程式設計師的祝福及1047條C++最佳實踐建議

最後,用Stroustrup的一句話來結束全文:“程式設計師應該是藝術家(Artist),而非匠人(Worker)——後者只會堆砌程式碼,而前者能創造出美好的作品。

TAG: C++Stroustrup語言建議實踐