【C++養成計劃】不聊學習只談乾貨(Day1)

寫在前面:大家好!我是【AI 菌】,一枚愛彈吉他的程序員。我熱愛AI、熱愛分享、熱愛開源! 這博客是我對學習的一點總結與思考。如果您也對 深度學習、機器視覺、算法、Python、C++ 感興趣,可以關注我的動態,我們一起學習,一起進步~
我的博客地址爲:【AI 菌】的博客
我的Github項目地址是:【AI 菌】的Github


前言:
以前喜歡在筆記本上做筆記,以至於在學習C++、Python的時候做了滿滿的一本,但是卻很少翻看,甚至在用的時候經常“提筆忘詞”。所以我從上個月開始轉戰博客,希望把自己的筆記整理分享出來,正所謂“技術是開源的,知識是共享的!
我是在上大二的時候纔開始學C++的(相比很多大佬已經很晚了),當時管這門課叫做《面向對象程序設計》,我記得課程結束最後考了將近滿分,算是我大學裏學的最好的幾門課之一了。但是當我後面參加比賽、接觸項目時,才體會到“用時方恨少”。所以又陸陸續續的自學了一遍。
這個《C++21天養成計劃》我打算分21天寫完,每天一章。特別適合新手小白,不用擔心沒有C語言的基礎。雖然C++是從C語言發展而來的,但是C++本身是一個完整的程序設計語言,而且它與C語言的程序設計思想完全不同。我們的學習過程不必嚴格遵循科學技術的發展進程,只有儘快地掌握最新的理論和技術,才能站在巨人的肩膀上。那麼下面我們就開始進入正題吧!

系列教程,持續更新:
    【C++養成計劃】不聊學習只談幹活(Day1)
    【C++養成計劃】基本語法(Day2)
    【C++養成計劃】深入淺出——變量作用域(Day3)
    【C++養成計劃】運算符&運算符優先級(Day4)
    【C++養成計劃】控制程序流程——判斷與循環(Day5)
    【C++養成計劃】深入淺出——函數(Day6)
    【C++養成計劃】玩轉數字——數學運算函數/隨機數(Day7)
    【C++養成計劃】深入數組和字符串(Day8)
    【C++養成計劃】不得不掌握的——引用(Day9)
    【C++養成計劃】類與對象 || 構造函數 || 析構函數(Day10)


1. C++的應用領域

選擇一門編程語言是很重要的事情,這大多取決於你以後想要從事的領域。當然,若是興趣使然或者單純爲了應付考試來學習C++,我覺得也是可以的,畢竟“技多不壓身”嘛!
據多方數據顯示,C++目前仍然是最受歡迎的編程語言之一。它的應用領域也非常之廣,那麼C++編程最常用的領域有哪些呢?

  • 遊戲開發。現在很多遊戲客戶端都是基於C++開發的,除了一些網頁遊戲可能不是,所以如果想從事遊戲開發行業學好c++是沒錯的。
  • 服務器端開發。很多互聯網公司的後臺服務器程序都是基於C++開發的,而且大部分是linux,unix等類似操作系統。如果你想從事這樣的工作,你需要熟悉linux操作系統及其在上面的開發,熟悉數據庫開發,精通網絡編程。
  • 數字圖像處理。我用C++做的第一個項目就是有關圖像處理的。對於以後想從事圖像處理、模式識別、機器視覺的,那麼學習C++也是必不可少的。
  • 虛擬現實仿真。我們常說的VR技術,這個也是發展很快的計算機領域,目前各種數字地球,數字城市,虛擬地理環境什麼的,出現了這方面的大量應用。
  • 網絡軟件。C++擁有很多成熟的用於網絡通信的庫,其中最具有代表性的是跨平臺的、重量級的ACE庫,該庫可以說是C++語言最重要的成果之一,在許多重要的企業、部門甚至是軍方都有應用。比如谷歌的chrome瀏覽器,就是使用C++開發。

當然,C++的應用領域肯定不止上面這些,但是這也足以說明C++不可替代的地位。如果你有意從事這些領域,那麼就開始跟着我一起學習C++吧~

2. 怎樣學好C++

我特別喜歡一句話"practice makes perfect",用我們老祖宗的話來說就是熟能生巧。想要學好一門編程技術,沒有捷徑可走,只有不停地去練。大家耳熟能詳的"一萬小時定律",也就是這個意思。但是這裏不需要你花10000個小時,如果你能堅持認認真真的學完100個小時,我相信你已經入門了。
那麼這裏我也給大家整理了一些常用的刷題和學習網站:

  1. 力扣。很好的一個刷題練習平臺,題量豐富、分類全面、社區活躍。

  2. 牛客網。互聯網人都知道的,這個不解釋。

  3. C++官方網站。很全面的英文網站。

  4. 在線編程網站。無需安裝編譯器,聯網即可編譯和運行程序,新手可以拿來用。

3. C++簡史

C++ 是一種中級編程語言,它最初由 Bjarne Stroustrup 於1979年在貝爾實驗室開發,是從C語言發展演變而來的一種面向對象的程序設計方法。因此C++的主要兩個特點:一是兼容C,二是支持面向對象的方法。
那麼,什麼是面向對象程序設計呢?
顧名思義,面向對象程序設計以對象爲核心,認爲程序是由一系列對象組成。類是對現實世界的抽象,包括表示靜態屬性的數據和對數據的操作(函數)。對象是類的實例化,對象間通過消息傳遞相互通信,來模擬現實世界中不同實體間的聯繫。在面向對象的程序設計中,對象是組成程序的基本模塊。
對於初學者來說,上面這段話可能不太容易理解。很正常,這裏我只拋出一個概念,在後面的類與對象章節我將會具體講到,所以這裏可以選擇性跳過
由於面向對象方法有很多優點,使得它已經成爲開發大型軟件時所採用的主要方法。而C++又是應用最廣泛的面向對象的程序設計語言之一。
她也在不斷地成長之中。最新的C++標準獲得了ISO標準委員會的批准,名爲C++17。下表就展示了C++的一個發展過程:
在這裏插入圖片描述

4. 編程環境

這裏我給大家推薦我學習時所用的兩款軟件:
(1)Visual Studio Community 2017 (社區版)
這款軟件出自微軟,是我做工程時常用的一款軟件。當然也可以作爲C++語言的編譯器使用。對於以後想長期從事這方面的開發人員,強烈安利這個軟件,而且社區版是免費的,不需要你去破解!記得最好裝2017版的,因爲之前的版本會不支持C++17新特性。

  1. 下載與安裝:Visual Studio Community 2017
  2. 打開Visual Studio Community 2017
  3. 點擊文件->新建->項目
  4. 左側列表選擇C++ Visual ->控制檯應用->設置項目名爲FirstCpp,項目存放地址通過瀏覽鍵選擇,最後點擊確定。
    在這裏插入圖片描述
  5. 點擊已經創建成功的FirstCpp.cpp源文件,輸入以下代碼,實現第一個C++程序。
    在這裏插入圖片描述
  6. 點擊調試運行或者使用快捷鍵Ctrl + F5,運行第一個C++程序。

(2)Dev-cpp5.4.0
這款軟件是一個輕量版的編譯器,對於編程小白來說,相比於Visual Studio Community 2017更友好。缺點就是,可能不支持C++11之後的一些新特性。

  1. 下載與安裝:百度雲鏈接, 提取碼:4wz0
  2. 打開Dev-cpp
  3. 依次點擊File->New->Source File
  4. 輸入第一個程序,點擊編譯與運行,如下圖箭頭所示:
    在這裏插入圖片描述
  5. 完成第4步後,會出現下面頁面。如圖所示,先選擇文件存放路徑,再設置文件名Firstcpp,最後點擊保存。在這裏插入圖片描述
    運行成功後就會出現下面結果:
    在這裏插入圖片描述
    下次再點擊編譯運行時,就會直接運行了,不用再重新保存文件了。

5. 憶往思今

說好了【C++養成計劃】第一天,不聊學習只談幹活的。今天確實沒講學習,只是想帶大家對C++有一個簡單地認識,從而決定自己是不是真的要學習C++,知識可以後面慢慢分享嘛~。

我一直認爲,選擇大於努力。如果你覺得學習它對你有幫助,或者是你職業規劃的必備技能,哪怕是爲了應付考試,我覺得都有可能成爲你學習C++的動力。而當我們選擇之後,那麼就要持之以恆,切勿半途而廢。“鍥而不捨,金石可鏤”的道理大家都懂!

而我自己就喫過這方面的虧! 高考完後,聽家裏人的意見和懷着畢業就進世界五百強公司的憧憬,就選擇我們學校最好的材料專業。但是學了快一年,不是很感興趣,甚至對未來感到迷茫。於是在大一末選擇了轉專業,考慮到自己喜歡動手(小時候家裏的一些電器經常被我拆了,嘿嘿),所以我選擇了被稱爲“萬精油”的自動化專業。於是,整個大二我就在拼命補充掉了的課程和填補自己編程方面的不足。還利用課餘時間參加了學校的機器人比賽,獲得了不錯的成績,經選拔進了學校的機器人實驗室。自從大二暑假開始就開始駐紮實驗室了。在準備比賽過程中,做的最多還是嵌入式單片機方面的,因爲賽題和自身興趣還接觸過傳統的機器視覺。

而我現在主要學習的方向是深度學習和機器視覺。其實這個決定來源於我本科的一次實習經歷。那是一次寒假的時候,因爲在家無聊,所以投了一家公司,面試的是圖像處理崗位。一面的時候,面試官(一個小姐姐),熟練地看完我的簡歷後,問了一下有關項目的問題。然後就直接拋給我了一道題。給了我一堆圖片,裏面是各種麻將牌,讓我對它進行識別和分類。不僅要邏輯推理,還要代碼實現。給了我一天時間,讓我第二天拿程序來實測。(哈哈,可能考慮到當時我還是個學生)

回家一頓搗鼓之後,我用C++寫了個模板匹配的demo,在家測試還不錯,但是精度不高。於是第二天懷着忐忑的心情去測試代碼。還是這個小姐姐(後來成爲了我的師傅),將我的代碼進行了一頓測試,發現還不錯,基本功能都能實現,於是就問我原理。然後我也儘可能面面俱到的回答了。當然,最後也是順利地通過了。

而我後面的實習經歷其實就是圍繞這個麻將自動分類項目展開的,在剛開始的一週,我一邊學習一邊嘗試各種傳統的圖像處理方法,但是發現,分類精度僅僅有一點提升,並得不到根本性質上的改變。所以後來,在小姐姐的建議下,開始學習深度學習和機器視覺。於是我又開始惡補深度學習理論和Python的基本語法。經過一個星期學習後,我對深度學習算法有了初步的認識,並用Tensorflow框架搭建了最簡單的手寫數字分類識別模型。在這個模型的基礎之上,我又搭建了一個四層的卷積神經網絡,並運用到麻將分類上。僅僅通過幾個小時的訓練時間,在測試集上就達到了97%的精確度。當時就感嘆,深度學習真牛逼,心裏暗暗下定決心讀研就要學這個方向。

雖然這個實習時間不長,大約一個月時間,但是收穫滿滿!最重要的是,讓我決定從傳統的圖像處理轉變到深度學習和機器視覺領域

說了這麼多,其實就是想告訴大家,選擇大於努力 。如果有喜歡的方向和事情,那就趕緊去做吧。越早投入,你就越優秀!


最後,對於想學習深度學習、計算機視覺,而又無從下手的盆友,給您推薦我的深度學習專欄:快速入門之深度學習系列。歡迎一起學習,一起交流~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章