適合 C++ 新手學習的開源專案——在 GitHub 學程式設計

削微寒發表於2020-11-05

作者:HelloGitHub-小魚乾

俗話說:萬事開頭難,學習程式設計也是一樣。在 HelloGitHub 的群裡,經常遇到有小夥伴詢問程式語言如何入門方面的問題,如:

  • 我要學習某一門程式語言,有什麼開源專案可以推薦嗎?
  • 我是某程式語言的新手,有什麼練手的專案推薦嗎?
  • 等等

See,這就是本系列文章的由來,我們希望學習各類程式語言的同學們,讀(Mark)完我們的入門系列,可以找到學習的方向、系統的學習某一門語言,然後做個簡單的小玩意,不只是 Hello World

《GitHub 上適合程式設計入門的專案》系列,共計 5 篇文章:

  1. C++ 篇
  2. Python 篇
  3. Go 篇
  4. Java 篇
  5. JavaScript 篇

以下為 C++ 篇 的內容。不管哪門程式語言,基礎都是很重要的。所以我們要先從基本的語法和基礎知識學習學起,一步步掌握這門語言。

一、基礎

1.1 一個專案入門 C++ 足以:CPlusPlusThings

CPlusPlusThings 是國人開源一個 C++ 學習專案。它系統地將 C++ 學習分為了【基礎進階】、【實戰系列】、【C++2.0 新特性】、【設計模式】和【STL 原始碼剖析】、【併發程式設計】、【C++ 慣用法】、【學習課程】、【工具】、【擴充】。

作為一個全面系統的 C++ 學習專案,CPlusPlusThings 是優秀的,它合理地安排了 10 Days 的實戰部分,在實戰中瞭解語法和函式用法,唯一不足的是,在註釋部分有些不盡人意,對部分新手程式設計師並不是很友好。【基礎進階】部分內容:

  • const 那些事
  • static 那些事
  • decltype 那些事
  • 引用與指標那些事
  • 巨集那些事

GitHub 地址→https://github.com/Light-City/CPlusPlusThings

1.2 基礎部分之演算法:C-Plus-Plus

C-Plus-Plus 是收錄用 C++ 實現的各種演算法的集合,並按照 MIT 許可協議進行授權。這些演算法涵蓋了電腦科學、數學和統計學、資料科學、機器學習、工程等各種主題。除外,你可能會發現針對同一目標的多個實現使用不同的演算法策略和優化。

GitHub 地址→https://github.com/TheAlgorithms/C-Plus-Plus

二、進階

2.1 現代 C++:modern-cpp-tutorial

modern-cpp-tutorial 是現代 C++ 教程,它的目的是提供關於現代 C++(2020 年前)的相關特性的全面介紹。除了介紹了程式碼之外,它還儘可能簡單地介紹了其技術需求的歷史背景,這對理解為什麼會出現這些特性提供了很大的幫助。

GitHub 地址→https://github.com/changkun/modern-cpp-tutorial

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.結語:討論有益,爭端無用(尚未開始)

GitHub 地址→https://github.com/wuye9036/CppTemplateTutorial

三、動手實戰

3.1 來實踐一下:MyTinySTL

當你學習完 C++ 的“書本”知識後,是不是有些手癢了呢?MyTinySTL 這個註釋詳細、實踐夯實基礎的專案便是你 C++ 學習之旅的下一站。作為新手練習用途,MyTinySTL 的作者 Alinshans 用 C++11 重新複寫了一個小型 STL(容器庫+演算法庫)。程式碼結構清晰規範、包含中文文件與註釋,並且自帶一個簡單的測試框架,適合 C++ 新手來實踐一番。

GitHub 地址→https://github.com/Alinshans/MyTinySTL

3.2 重溫同年俄羅斯方塊:Tinytetris

Tinytetris 是一個用 C++ 編寫的終端版俄羅斯方塊遊戲。它提供了兩個版本的原始碼,分為註釋版和庫版,註釋較多易於理解和學習。

GitHub 地址→https://github.com/taylorconor/tinytetris

3.3 學習下大佬們的程式碼:calculator

微軟開源的 Windows 系統預裝的計算器工具。該工具提供標準、科學、程式設計師計算器的功能,以及各種度量單位和貨幣之間的轉換功能。快來看看微軟工程師編寫的程式碼吧!學習大廠的編碼規範、專案結構之類的,提高閱讀原始碼的能力。英文的專案且沒有講解部分,需要通過閱讀原始碼學習,難度較高。

GitHub 地址→https://github.com/microsoft/calculator

最後

HelloGitHub 想讓更多人愛上程式設計、開源,所以一直在嘗試、摸索如何可以幫助到更多的人。我想試試 HelloGitHub 能不能組建一個大學生開源俱樂部你們的程式設計路才剛開始 HG 想陪你們走一段。

如果你是在校大學生或研究生熱愛程式設計、開源,喜歡討論和學習技術相關的內容,但是周圍沒有和你樂趣相投的小夥伴?那麼來 HelloGitHub 的大學生開源俱樂部吧!加​微訊號:HelloGitHub (​備註:學校和專業)

相關文章