进化吧!我的C++!!
繁忙的日子似乎隨著炎炎夏日漸漸遠(yuǎn)去,有人忙著放假,有人忙著旅游,有人忙著補(bǔ)覺(jué)……那么,你的選擇呢?別急著告訴柳貓,請(qǐng)看完后面的內(nèi)容再告訴我~~
你有兩個(gè)選擇:
- 1)把所有夏季空閑時(shí)間都用來(lái)休整,適當(dāng)放松一下沒(méi)什么不可以。
- 2)或者你可以投入一部分空閑時(shí)間來(lái)提升你的技能,尤其是 C++ ,用 C++ 水平的提高(boost C++ )來(lái)開(kāi)始新的一年。
如果你覺(jué)得選擇1)更適合你,那么關(guān)掉手機(jī)和筆記本吧,真正地放松一下!
但是如果你傾向于選擇2),那么這篇文章就是為你準(zhǔn)備的。
有 7 種方法幫助你利用夏天真正提高 C++ 。之后我會(huì)給你一些小技巧來(lái)幫助你真正實(shí)現(xiàn)所選的目標(biāo)。
1)開(kāi)始一個(gè)項(xiàng)目
用 C++ 來(lái)建一個(gè)你自己的小項(xiàng)目是一個(gè)很好的試驗(yàn)方法,而且能通過(guò)這個(gè)項(xiàng)目真正理解程序的運(yùn)行。另一個(gè)優(yōu)點(diǎn)在于你可以完全自由地決定使用什么組件。這樣你能夠提升這一年沒(méi)有權(quán)限/時(shí)間使用的語(yǔ)言特性和庫(kù)組件。
在我去年的夏季項(xiàng)目中,我實(shí)現(xiàn)了一些區(qū)間適配器,這讓我學(xué)到了超多東西。所以我會(huì)把這個(gè)項(xiàng)目的細(xì)節(jié)告訴你,這樣你能夠得到一些靈感來(lái)構(gòu)建你自己的項(xiàng)目:
如果你不熟悉 C++ 中的區(qū)間(Ranges),請(qǐng)參考《Ranges: the STL to the Next Level》
- 實(shí)現(xiàn) transform_iterator,
- 實(shí)現(xiàn)變換區(qū)間適配器(transform range adaptor),
- 實(shí)現(xiàn) filter_iterator,
- 實(shí)現(xiàn)篩選區(qū)間適配器(filter range adaptor),
- 實(shí)現(xiàn) zip 適配器(zip adaptor),然后結(jié)合變換區(qū)間適配器使用。Zip 適配器需要兩個(gè)區(qū)間,并且返回到來(lái)自這兩個(gè)區(qū)間的成對(duì)對(duì)象的視圖
- 為 zip 適配器一般化,要令 zip 適配器能夠使用任意數(shù)量的區(qū)間,
- 實(shí)現(xiàn)笛卡爾積區(qū)間適配器(Cartesian product range adaptor),
- 實(shí)現(xiàn)你自己的新區(qū)間適配器! 是否完美,是否完整或者是否遵從上述指示都不重要,重要的是你要去試驗(yàn)。但是上面這些任務(wù)能給你帶來(lái)的是:
明確理解區(qū)間,而區(qū)間是當(dāng)下一個(gè)非常流行的 C++ 特性, 練習(xí)變參模板(variadic templates)的使用, 初步接觸模板元編程(template metaprogramming), 并且這些都是逐漸才能體會(huì)到的。
如果你在這種項(xiàng)目上有任何需要幫助的地方,柳貓能幫上忙的地方,可以私信柳貓,一定竭盡所能~~
2)讀一本好書(shū)
我會(huì)發(fā)布一個(gè) C++ 的書(shū)單,但是我現(xiàn)在要給你一個(gè)選擇。我認(rèn)為作為一個(gè)程序員要讀的第一本書(shū)就是 Steve McConnell 的《代碼大全》。盡管這本書(shū)不是專注于 C++ 的,但是它把寫(xiě)好代碼要注意的幾乎所有方面都教給你了。從寫(xiě)一個(gè) if 語(yǔ)句(沒(méi)錯(cuò),有好多方法把 if 語(yǔ)句搞砸)到分配類責(zé)任,再到代碼審查,《代碼大全》涵蓋了軟件架構(gòu)的所有方面。在讀完這本書(shū)以后你永遠(yuǎn)不會(huì)還用一樣的方法來(lái)編程。
如果你還沒(méi)有讀過(guò)《代碼大全》,你應(yīng)該去看看 Scott Meyers 的《Effective C++ 》。我建議《Effective C++ 》要讀兩遍。我已經(jīng)讀過(guò)三遍了,但是我想兩遍的效果應(yīng)該一樣好。盡管這本書(shū)是在 C++ 11 之前寫(xiě)的,但是大部分內(nèi)容在今天也仍然是有用的。而且《Effective Modern C++ 》涵蓋了C++ 11 和 C++ 14 中的特性,可以作為這本書(shū)的補(bǔ)充材料。
今年夏天我要看的是 Eric Evans 的著名書(shū)籍——《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》(Domain Driven Design)。《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》涵蓋了領(lǐng)域?qū)<液烷_(kāi)發(fā)人員之間的密集交流,建立領(lǐng)域模型以及在討論模型與代碼時(shí)使用同一種語(yǔ)言。
盡管這本書(shū)的內(nèi)容很有價(jià)值,但是讀起來(lái)并不容易。我發(fā)現(xiàn)一個(gè)有用的小技巧:對(duì)每一小節(jié)先讀第一段,再讀最后一段,最后讀其余部分。這樣你能更好地理解作者的寫(xiě)作方向,節(jié)省時(shí)間。
我希望通過(guò)顯示代碼中的域,來(lái)找到使代碼具有表達(dá)性的靈感。當(dāng)然啦,我會(huì)在博客上分享這些靈感的。
這只是一個(gè)選擇,我還會(huì)做一個(gè)更全面的書(shū)單。
3)學(xué)習(xí)一個(gè)新的語(yǔ)言
雖然聽(tīng)起來(lái)很稀奇,但是學(xué)習(xí)一種新的語(yǔ)言可以讓你對(duì)你所的專注語(yǔ)言獲得更深層次的理解,而且是最有效的方法之一。并且新的語(yǔ)言和你自己使用的語(yǔ)言差別越大,效果越好。
新的觀點(diǎn)認(rèn)為,其他編程語(yǔ)言會(huì)讓你對(duì)編程有更一般的理解。由于你太熟悉自己所用的語(yǔ)言,往往會(huì)忽略它的特性,而用不同的方法解決問(wèn)題能夠使這些特性凸顯出來(lái)。即使你不會(huì)使用新語(yǔ)言來(lái)寫(xiě)產(chǎn)品代碼,所接觸到的新概念也能為你提供可以應(yīng)用到主語(yǔ)言中的思路。
如果你用的是 C++,那么我推薦你去學(xué)習(xí)一下 Haskell 語(yǔ)言。Haskell 是一種函數(shù)型編程語(yǔ)言。如果你還沒(méi)有試用過(guò)函數(shù)型編程,那么你能從它的概念中獲得啟發(fā),并從新的角度看待 C++,尤其是 STL。
柳貓已經(jīng)花了很長(zhǎng)時(shí)間比較網(wǎng)絡(luò)上各種學(xué)習(xí) Haskell 的資源,這里柳貓推薦一個(gè)C語(yǔ)言交流群710520381(推薦碼:柳貓),這里免費(fèi)分享更多資料和學(xué)習(xí)課程,無(wú)論是想要接觸編程的小白還是期待轉(zhuǎn)行的大牛,都?xì)g迎加入。
一旦你學(xué)完這門(mén)課程,你可以在 data61 課程中獲得很多 Haskell 的練習(xí),包括填空補(bǔ)充代碼。你能夠通過(guò)這些練習(xí)來(lái)整理不尋常的函數(shù)型編程的相關(guān)知識(shí)。
4)提升使用 STL 的能力
STL 是 C++ 中處理容器和算法的部分。它很強(qiáng)大而且并不難用,卻沒(méi)有它應(yīng)有的名氣。要想掌握 STL 需要有相當(dāng)?shù)闹R(shí)積累,但是這是值得的。它是一個(gè)神奇的方法,能使你的 C++ 代碼更具有表達(dá)性也更健壯。
柳貓正在整理幫你掌握 STL 的資料,叫做 STL 學(xué)習(xí)資源。還沒(méi)有完成,如果它完成了,毫無(wú)疑問(wèn),柳貓會(huì)立即更新在交流群里,我想足夠讓你在這個(gè)夏天的大部分時(shí)間都很充實(shí)了。
5)緊跟現(xiàn)代C++的特性
C++ 11,C++ 14 和C++ 17給C++ 和標(biāo)準(zhǔn)庫(kù)帶來(lái)了很多新的特性。即使你現(xiàn)在,比如今年夏天,沒(méi)有在產(chǎn)品代碼中使用它們,它們也都來(lái)了。并且你可以立即把它們應(yīng)用在你的項(xiàng)目中(看上面的第1條)。
有些特性很好掌握,比如 lambdas。盡管精通 lambda 表達(dá)式需要掌握很多細(xì)節(jié)上的東西,但是學(xué)會(huì)它們的基礎(chǔ)用法不需要花太多精力。
所以部分特性很好理解,只需要一些好資源和時(shí)間來(lái)熟悉它們。比如 Scott Meyers 的《Effective Modern C++》(見(jiàn)上面的第2點(diǎn))涵蓋了 C++ 11和 C++ 14 的大部分特性。
如果你不練習(xí)的話,是無(wú)法理解很多特性的。尤其是變參模板,它是現(xiàn)代標(biāo)準(zhǔn) C++ 的一個(gè)重要特性。上面第一點(diǎn)中的項(xiàng)目和其他任何包含變參模板的項(xiàng)目都可以作為練習(xí)。
6)提高你對(duì) boost 的了解
Boost 是設(shè)計(jì)良好的 C++ 庫(kù)的集合,可移植且開(kāi)源。很多現(xiàn)代 C++ 的特性都源自 Boost。
了解 Boost 的內(nèi)容很重要。有兩個(gè)原因:第一,在代碼中確實(shí)需要它們,因?yàn)?boost 主要應(yīng)用于綜合使用;第二,更重要的原因是即使你在產(chǎn)品代碼中沒(méi)有使用 boost,它可以給你一個(gè)通用的精心設(shè)計(jì)的 API 和 C++ 代碼模型。留心 boost 中的內(nèi)容可以給你自己的設(shè)計(jì)帶來(lái)靈感。
學(xué)習(xí)大量的 boost 庫(kù)的一個(gè)方法是閱讀 Boris Sch?ling 的書(shū)——《The boost C++ Libraries》。 特別地,它沒(méi)有包含 Boost Hana。Boost Hana 是一個(gè)流行的現(xiàn)代 C++ 元程序庫(kù)。實(shí)際上,學(xué)習(xí) Boost Hana 可以作為今年夏天的一個(gè)目標(biāo)。
7)觀看網(wǎng)絡(luò)視頻
各個(gè)視頻網(wǎng)站,騰訊,慕課,潭州等等……沒(méi)有最多只有更多,當(dāng)然,如果你實(shí)在是選擇太多無(wú)法決定先看哪個(gè)視頻,也可以私聊柳貓或者在評(píng)論里留言,柳貓會(huì)提供自己的意見(jiàn)幫你決定~~
實(shí)現(xiàn)你的夏季目標(biāo)
現(xiàn)在已經(jīng)有很多事要做啦。一個(gè)夏天之內(nèi)不可能做完這些所有事情。所以你應(yīng)該選擇其中一部分來(lái)做,并且提前定好目標(biāo)。不要從一件事情跳到另一件事情上,否則夏天會(huì)很快過(guò)去而且你也完不成任何一件事。
此外,要想完成你的目標(biāo),你需要集中注意力。一個(gè)實(shí)用的方法是使用番茄工作法,我是用 kanbanflow 來(lái)實(shí)現(xiàn)的。我現(xiàn)在就在使用這個(gè)方法而且結(jié)果也不錯(cuò)。
你的目標(biāo)是什么呢?現(xiàn)在就選擇兩個(gè)目標(biāo)吧,寫(xiě)在評(píng)論區(qū)或者私發(fā)給柳貓,讓柳貓了解一下你們的選擇吧~~
總結(jié)
以上是生活随笔為你收集整理的进化吧!我的C++!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【代码设计】C# 实现 AOP 面向切面
- 下一篇: RestClient C# 举例 是用j