您的位置:首頁>正文

提升 C++ 技能的 7 劍如何下“天山”,拯救你於水火中

冬天時常會談到春節、旅遊、拜年、回家或者你的家庭住宅。 更充裕的時間也是冬天帶來的好處之一。 可能是因為你在休假, 也可能是因為這段時間工作沒有那麼忙。 無論是哪種情況, 與一年中的其他季節相比, 冬天的時間似乎更加寬裕。

你有兩個選擇:1)把所有冬天閒置時間都用來休整, 適當放鬆一下沒什麼不可以。 2)或者你可以投入一部分閒置時間來提升你的技能, 尤其是 C++, 用 C++ 水準的提高(boost C++)來開始新的一年。

如果你覺得選擇1)更適合你, 那麼關掉手機和筆記本吧, 真正地放鬆一下!但是如果你傾向於選擇2),

那麼這篇文章就是為你準備的。

有 7 種方法幫助你利用夏天真正提高 C++。 之後我會給你一些小技巧來幫助你真正實現所選的目標。

1)開始一個專案

用 C++ 來建一個你自己的小專案是一個很好的試驗方法, 而且能通過這個專案真正理解程式的運行。 另一個優點在於你可以完全自由地決定使用什麼元件。 這樣你能夠提升這一年沒有許可權/時間使用的語言特性和庫元件。

在我去年的冬天專案中, 我實現了一些區間適配器, 這讓我學到了超多東西。 所以我會把這個專案的細節告訴你, 這樣你能夠得到一些靈感來構建你自己的項目:

如果你不熟悉 C++ 中的區間(Ranges), 請參考《Ranges: the STL to the Next Level》

實現 transform_iterator,

實現變換區間適配器(transform range adaptor),

實現 filter_iterator,

實現篩選區間適配器(filter range adaptor),

實現 zip 適配器(zip adaptor), 然後結合變換區間適配器使用。 Zip 適配器需要兩個區間, 並且返回到來自這兩個區間的成對對象的視圖

為 zip 適配器一般化, 要令 zip 適配器能夠使用任意數量的區間,

實現笛卡爾積區間適配器(Cartesian product range adaptor),

實現你自己的新區間適配器!

是否完美, 是否完整或者是否遵從上述指示都不重要, 重要的是你要去試驗。 但是上面這些任務能給你帶來的是:

明確理解區間, 而區間是當下一個非常流行的 C++ 特性,

練習變參範本(variadic templates)的使用,

初步接觸範本元程式設計(template metaprogramming),

並且這些都是逐漸才能體會到的。

2)讀一本好書

我會發佈一個 C++ 的書單, 但是我現在要給你一個選擇。 我認為作為一個程式師要讀的第一本書就是 Steve McConnell 的《代碼大全》。 儘管這本書不是專注於 C++ 的,

但是它把寫好代碼要注意的幾乎所有方面都教給你了。 從寫一個 if 語句(沒錯, 有好多方法把 if 語句搞砸)到分配類責任, 再到代碼審查, 《代碼大全》涵蓋了軟體架構的所有方面。 在讀完這本書以後你永遠不會還用一樣的方法來程式設計。

如果你還沒有讀過《代碼大全》, 你應該去看看 Scott Meyers 的《Effective C++》。 我建議《Effective C++》要讀兩遍。 我已經讀過三遍了, 但是我想兩遍的效果應該一樣好。 儘管這本書是在 C++11 之前寫的, 但是大部分內容在今天也仍然是有用的。 而且《Effective Modern C++》涵蓋了C++11 和 C++14 中的特性, 可以作為這本書的補充材料。

儘管這些書的內容很有價值, 但是讀起來並不容易。 我發現一個有用的小技巧:對每一小節先讀第一段, 再讀最後一段, 最後讀其餘部分。 這樣你能更好地理解作者的寫作方向, 節省時間。

我希望通過顯示代碼中的域, 來找到使代碼具有表達性的靈感。 當然啦,我會在我交流群上分享這些靈感的。

這只是一個選擇,我還會做一個更全面的書單。

3)學習一個新的語言

雖然聽起來很稀奇,但是學習一種新的語言可以讓你對你所的專注語言獲得更深層次的理解,而且是最有效的方法之一。並且新的語言和你自己使用的語言差別越大,效果越好。

新的觀點認為,其他程式設計語言會讓你對程式設計有更一般的理解。由於你太熟悉自己所用的語言,往往會忽略它的特性,而用不同的方法解決問題能夠使這些特性凸顯出來。即使你不會使用新語言來寫產品代碼,所接觸到的新概念也能為你提供可以應用到主語言中的思路。

如果你用的是 C++,那麼我推薦你去學習一下C語言 語言。C語言 語 是一種偏基礎的程式設計語言。如果你還沒有試用過面向過程程式設計,那麼你能從它的概念中獲得啟發,並從新的角度看待 C++,尤其是 STL。

我已經花了很長時間比較網路上各種學習C語 的資源。在群裡的課程是我找到的最好的資源。它解釋得很清楚,沒有太多理論,課程練習也很良心而且有指導性,並且它還是免費的。有興趣可以駐足下:C/C++學習交流:8群 491994603

一旦你學完這門課程,你可以在 課程中獲得很多 項目的練習,包括填空補充代碼。你能夠通過這些練習來整理不尋常的函數型程式設計的相關知識。

4)提升使用 STL 的能力

STL 是 C++ 中處理容器和演算法的部分。它很強大而且並不難用,卻沒有它應有的名氣。要想掌握 STL 需要有相當的知識積累,但是這是值得的。它是一個神奇的方法,能使你的 C++ 代碼更具有表達性也更健壯。

我正在整理幫你掌握 STL 的資料,叫做 STL 學習資源。還沒有完成,但是有很大一部分已經做完了,我想足夠讓你在這個冬天的大部分時間都很充實了。

5)緊跟現代C++的特性

C++11,C++14 和C++17給C++ 和標準庫帶來了很多新的特性。即使你現在,比如今年夏天,沒有在產品代碼中使用它們,它們也都來了。並且你可以立即把它們應用在你的專案中(看上面的第1條)。

有些特性很好掌握,比如 lambdas。儘管精通 lambda 運算式需要掌握很多細節上的東西,但是學會它們的基礎用法不需要花太多精力。

所以部分特性很好理解,只需要一些好資源和時間來熟悉它們。比如 Scott Meyers 的《Effective Modern C++》(見上面的第2點)涵蓋了 C++11和 C++14 的大部分特性。。

如果你不練習的話,是無法理解很多特性的。尤其是變參範本,它是現代標準 C++ 的一個重要特性。上面第一點中的項目和其他任何包含變參範本的專案都可以作為練習。

6)提高你對 boost 的瞭解

Boost 是設計良好的 C++ 庫的集合,可移植且開源。很多現代 C++ 的特性都源自 Boost。

瞭解 Boost 的內容很重要。有兩個原因:第一,在代碼中確實需要它們,因為 boost 主要應用於綜合使用;第二,更重要的原因是即使你在產品代碼中沒有使用 boost,它可以給你一個通用的精心設計的 API 和 C++ 代碼模型。留心 boost 中的內容可以給你自己的設計帶來靈感。

學習大量的 boost 庫的一個方法是閱讀 Boris Schäling 的書——《The boost C++ Libraries》。這本書有電子版,但是紙質版可以放進供你躺在床上閱讀(真的,我去年冬天就讀的這本書)。不過這本書是基於 boost 1.55.0 的,所以它包含了很多庫,但並不是所有。

7)觀看網路視頻

C++課程上有超多網路視頻,尤其是年會的視頻。今年冬天是觀看這些視頻的好時機。

現在已經有很多事要做啦。一個夏天之內不可能做完這些所有事情。所以你應該選擇其中一部分來做,並且提前定好目標。不要從一件事情跳到另一件事情上,否則夏天會很快過去而且你也完不成任何一件事。

此外,要想完成你的目標,你需要集中注意力。一個實用的方法是找到一群學習交流的人,有興趣可以駐足下:C/C++學習交流:8群 491994603,我現在就在使用這個方法而且結果也不錯。

現在就選擇兩個目標吧,寫在評論區內讓我瞭解一下你們的選擇。

當然啦,我會在我交流群上分享這些靈感的。

這只是一個選擇,我還會做一個更全面的書單。

3)學習一個新的語言

雖然聽起來很稀奇,但是學習一種新的語言可以讓你對你所的專注語言獲得更深層次的理解,而且是最有效的方法之一。並且新的語言和你自己使用的語言差別越大,效果越好。

新的觀點認為,其他程式設計語言會讓你對程式設計有更一般的理解。由於你太熟悉自己所用的語言,往往會忽略它的特性,而用不同的方法解決問題能夠使這些特性凸顯出來。即使你不會使用新語言來寫產品代碼,所接觸到的新概念也能為你提供可以應用到主語言中的思路。

如果你用的是 C++,那麼我推薦你去學習一下C語言 語言。C語言 語 是一種偏基礎的程式設計語言。如果你還沒有試用過面向過程程式設計,那麼你能從它的概念中獲得啟發,並從新的角度看待 C++,尤其是 STL。

我已經花了很長時間比較網路上各種學習C語 的資源。在群裡的課程是我找到的最好的資源。它解釋得很清楚,沒有太多理論,課程練習也很良心而且有指導性,並且它還是免費的。有興趣可以駐足下:C/C++學習交流:8群 491994603

一旦你學完這門課程,你可以在 課程中獲得很多 項目的練習,包括填空補充代碼。你能夠通過這些練習來整理不尋常的函數型程式設計的相關知識。

4)提升使用 STL 的能力

STL 是 C++ 中處理容器和演算法的部分。它很強大而且並不難用,卻沒有它應有的名氣。要想掌握 STL 需要有相當的知識積累,但是這是值得的。它是一個神奇的方法,能使你的 C++ 代碼更具有表達性也更健壯。

我正在整理幫你掌握 STL 的資料,叫做 STL 學習資源。還沒有完成,但是有很大一部分已經做完了,我想足夠讓你在這個冬天的大部分時間都很充實了。

5)緊跟現代C++的特性

C++11,C++14 和C++17給C++ 和標準庫帶來了很多新的特性。即使你現在,比如今年夏天,沒有在產品代碼中使用它們,它們也都來了。並且你可以立即把它們應用在你的專案中(看上面的第1條)。

有些特性很好掌握,比如 lambdas。儘管精通 lambda 運算式需要掌握很多細節上的東西,但是學會它們的基礎用法不需要花太多精力。

所以部分特性很好理解,只需要一些好資源和時間來熟悉它們。比如 Scott Meyers 的《Effective Modern C++》(見上面的第2點)涵蓋了 C++11和 C++14 的大部分特性。。

如果你不練習的話,是無法理解很多特性的。尤其是變參範本,它是現代標準 C++ 的一個重要特性。上面第一點中的項目和其他任何包含變參範本的專案都可以作為練習。

6)提高你對 boost 的瞭解

Boost 是設計良好的 C++ 庫的集合,可移植且開源。很多現代 C++ 的特性都源自 Boost。

瞭解 Boost 的內容很重要。有兩個原因:第一,在代碼中確實需要它們,因為 boost 主要應用於綜合使用;第二,更重要的原因是即使你在產品代碼中沒有使用 boost,它可以給你一個通用的精心設計的 API 和 C++ 代碼模型。留心 boost 中的內容可以給你自己的設計帶來靈感。

學習大量的 boost 庫的一個方法是閱讀 Boris Schäling 的書——《The boost C++ Libraries》。這本書有電子版,但是紙質版可以放進供你躺在床上閱讀(真的,我去年冬天就讀的這本書)。不過這本書是基於 boost 1.55.0 的,所以它包含了很多庫,但並不是所有。

7)觀看網路視頻

C++課程上有超多網路視頻,尤其是年會的視頻。今年冬天是觀看這些視頻的好時機。

現在已經有很多事要做啦。一個夏天之內不可能做完這些所有事情。所以你應該選擇其中一部分來做,並且提前定好目標。不要從一件事情跳到另一件事情上,否則夏天會很快過去而且你也完不成任何一件事。

此外,要想完成你的目標,你需要集中注意力。一個實用的方法是找到一群學習交流的人,有興趣可以駐足下:C/C++學習交流:8群 491994603,我現在就在使用這個方法而且結果也不錯。

現在就選擇兩個目標吧,寫在評論區內讓我瞭解一下你們的選擇。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示