適合 C++ 新手學習的開源項目——在 GitHub 學編程
- 2020 年 11 月 5 日
- 筆記
- 讓開源帶你進入編程的世界系列
作者:HelloGitHub-小魚乾
俗話說:萬事開頭難,學習編程也是一樣。在 HelloGitHub 的群里,經常遇到有小夥伴詢問程式語言如何入門方面的問題,如:
- 我要學習某一門程式語言,有什麼開源項目可以推薦嗎?
- 我是某程式語言的新手,有什麼練手的項目推薦嗎?
- 等等
See,這就是本系列文章的由來,我們希望學習各類程式語言的同學們,讀(Mark)完我們的入門系列,可以找到學習的方向、系統的學習某一門語言,然後做個簡單的小玩意,不只是 Hello World
。
《GitHub 上適合編程入門的項目》系列,共計 5 篇文章:
- C++ 篇
- Python 篇
- Go 篇
- Java 篇
- JavaScript 篇
以下為 C++ 篇 的內容。不管哪門程式語言,基礎都是很重要的。所以我們要先從基本的語法和基礎知識學習學起,一步步掌握這門語言。
一、基礎
1.1 一個項目入門 C++ 足以:CPlusPlusThings
CPlusPlusThings 是國人開源一個 C++ 學習項目。它系統地將 C++ 學習分為了【基礎進階】、【實戰系列】、【C++2.0 新特性】、【設計模式】和【STL 源碼剖析】、【並發編程】、【C++ 慣用法】、【學習課程】、【工具】、【拓展】。
作為一個全面系統的 C++ 學習項目,CPlusPlusThings 是優秀的,它合理地安排了 10 Days 的實戰部分,在實戰中了解語法和函數用法,唯一不足的是,在注釋部分有些不盡人意,對部分新手程式設計師並不是很友好。【基礎進階】部分內容:
- const 那些事
- static 那些事
- decltype 那些事
- 引用與指針那些事
- 宏那些事
GitHub 地址→//github.com/Light-City/CPlusPlusThings
1.2 基礎部分之演算法:C-Plus-Plus
C-Plus-Plus 是收錄用 C++ 實現的各種演算法的集合,並按照 MIT 許可協議進行授權。這些演算法涵蓋了電腦科學、數學和統計學、數據科學、機器學習、工程等各種主題。除外,你可能會發現針對同一目標的多個實現使用不同的演算法策略和優化。
GitHub 地址→//github.com/TheAlgorithms/C-Plus-Plus
二、進階
2.1 現代 C++:modern-cpp-tutorial
modern-cpp-tutorial 是現代 C++ 教程,它的目的是提供關於現代 C++(2020 年前)的相關特性的全面介紹。除了介紹了程式碼之外,它還儘可能簡單地介紹了其技術需求的歷史背景,這對理解為什麼會出現這些特性提供了很大的幫助。
2.2 進階指南:CppTemplateTutorial
CppTemplateTutorial 為中文的 C++ Template 的教學指南。與知名書籍 C++ Templates 不同,該系列教程將 C++ Templates 作為一門圖靈完備的語言來講授,以求幫助讀者對 Meta-Programming 融會貫通。本項目寫作初衷,就是通過 「程式語言」 的視角,介紹一個簡單、清晰的 「模板語言」。我會儘可能地將模板的諸多要素連串起來,用一些簡單的例子幫助讀者學習這門 「語言」,讓讀者在編寫、閱讀模板程式碼的時候,能像 if(exp) { dosomething(); }
一樣的信手拈來,讓 「模板元編程」 技術成為讀者牢固掌握、可舉一反三的有用技能。
適合熟悉 C++ 的基本語法、使用過 STL、熟悉一些常用的演算法,以及遞歸等程式設計方法的 C++ 學習者閱讀。雖然項目章節文章寫的深入淺出,不過唯一的遺憾是尚未完成所有章節內容。進度如下:
- 0.前言
- 1.Template 的基本語法
- 2.模板元編程基礎
- 3.深入理解特化與偏特化
- 4.元編程下的數據結構與演算法 (尚未開始)
- 5.模板的進階技巧(尚未開始)
- 6.模板的威力:從 foreach, transform 到 Linq(尚未開始)
- 7.結語:討論有益,爭端無用(尚未開始)
三、動手實戰
3.1 來實踐一下:MyTinySTL
當你學習完 C++ 的「書本」知識後,是不是有些手癢了呢?MyTinySTL 這個注釋詳細、實踐夯實基礎的項目便是你 C++ 學習之旅的下一站。作為新手練慣用途,MyTinySTL 的作者 Alinshans 用 C++11 重新複寫了一個小型 STL(容器庫+演算法庫)。程式碼結構清晰規範、包含中文文檔與注釋,並且自帶一個簡單的測試框架,適合 C++ 新手來實踐一番。
GitHub 地址→//github.com/Alinshans/MyTinySTL
3.2 重溫同年俄羅斯方塊:Tinytetris
Tinytetris 是一個用 C++ 編寫的終端版俄羅斯方塊遊戲。它提供了兩個版本的源碼,分為注釋版和庫版,注釋較多易於理解和學習。
GitHub 地址→//github.com/taylorconor/tinytetris
3.3 學習下大佬們的程式碼:calculator
微軟開源的 Windows 系統預裝的計算器工具。該工具提供標準、科學、程式設計師計算器的功能,以及各種度量單位和貨幣之間的轉換功能。快來看看微軟工程師編寫的程式碼吧!學習大廠的編碼規範、項目結構之類的,提高閱讀源碼的能力。英文的項目且沒有講解部分,需要通過閱讀源碼學習,難度較高。
GitHub 地址→//github.com/microsoft/calculator
最後
HelloGitHub 想讓更多人愛上編程、開源,所以一直在嘗試、摸索如何可以幫助到更多的人。我想試試 HelloGitHub 能不能組建一個大學生開源俱樂部,你們的編程路才剛開始 HG 想陪你們走一段。
如果你是在校大學生或研究生熱愛編程、開源,喜歡討論和學習技術相關的內容,但是周圍沒有和你樂趣相投的小夥伴?那麼來 HelloGitHub 的大學生開源俱樂部吧!加微訊號:HelloGitHub (備註:學校和專業)