如何成為一名合格的 C/C++ 開發者?

GitChat 精品課發表於2019-04-12

640?wx_fmt=jpeg

本文選自 | Chat-《如何成為一名合格的 C/C++開發者》

作者 | 范蠡

責編 | Linse

首圖 | 《龍珠》


在大多數開發人員的認知中,C/C++ 是一門非常難學的程式語言,很多人知道它的強大,但因為“難”造成的恐懼讓很多人放棄。在我看來,C/C++ 一旦學成,其妙無窮,就像武俠小說中的“九陽神功”一樣,有了這個基礎,學習任何語言和程式設計技術都非常快速!


本文就為大家分享我學習 C/C++ 的經驗,不少人都說看完這篇文章感覺醍醐灌頂想一看再看,希望你也能有所收穫!


01

C/C++ 當前的應用領域


通常情況下,C++ 可以看成是 C 的一個超集


C 語言目前主要用於像作業系統一類偏底層的應用開發,包括像 Windows/Linux 這樣的大型商業作業系統,以及嵌入式作業系統、嵌入式裝置上的應用,還有一些開源的軟體,也會選擇 C 開發。


我們再來說說 C++,C++ 的應用領域目前有三大類:


第一類就是我們目前見到的各種桌面應用軟體,尤其 Windows 桌面軟體,如 QQ、安全類防毒類軟體、各種瀏覽器等;


另外就是一些基礎軟體和高階語言的執行時環境,如大型資料庫軟體、Java 虛擬機器、C# 的 CLR、Python 編譯器和執行時環境等;


第三類就是一些業務型應用軟體的後臺,像遊戲的伺服器後臺,如魔獸世界的服務和一些企業內部的應用系統。


02

C++ 語言基礎與進階


2.1 基礎:

這裡說的基礎不是狹義上的 C++ 語言基礎,而是包括 C++ 開發這一生態體系的基礎,筆者認為的基礎包括:


  1. C++ 語言本身熟練使用程度。

  2. 必須結合一個具體的作業系統平臺,所以得熟悉某個作業系統平臺的 API 函式,比如 Linux,以及該作業系統的原理。

  3. 網路通訊,網路通訊在這裡具體一點就是 Socket 程式設計。


說了這麼多,你可能會覺得很抽象。舉個具體例子,假設我們現在要開發一個類似電驢這樣的軟體,軟體介面如下圖:


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


如上圖所示,假設作業系統選擇 Windows,使用語言使用 C++,這款產品的實現技術分為 UI 和網路通訊部分,下面將詳細介紹這兩部分。


UI 部分

無論你是在閱讀別人的專案還是需要自己開發這樣的專案,在確定了這款軟體使用的 UI 庫,您就需要對 Windows 的視窗、對話方塊、訊息產生、派發與處理機制進行了解。


接著,根據上圖中的軟體功能,大致分為三大模組,即資源、下載和分享。這三大塊是可以使用一個 Windows Tab 控制元件去組織,這個時候您需要了解 Windows Tab 控制元件的特性。


網路通訊部分

網路通訊部分,主要有兩大塊,第一個是程式啟動時,與服務端的互動;第二個就是檔案下載與分享的 P2P 網路。


2.2 進階:

如果您達到了我上面說的三點後,可以再找一些高質量的開源專案去實戰一下。需要注意的是,最好找一些沒有複雜業務或者您熟悉其業務的開源專案(如開源的 IM 系統)。


我個人學習一套陌生的開源專案時,總是喜歡將程式用偵錯程式正常跑起來,然後再中斷下來,統計當前的執行緒數目,然後通過程式入口 main 函式從主執行緒追蹤其他工作執行緒是如何建立的;接著,分析和研究每個執行緒的用途以及執行緒之間互動的,這就是先整體把握,然後找感興趣的細節去學習


03

關於 C++ 的面試


關於 C++ 面試,面試的要求到底是側重程式碼量、專案經驗,還是側重作業系統、資料結構這種基礎知識?


如果你是想進入大型網際網路公司的應屆生:

應該優先好好準備演算法和資料結構知識以應對面試,這是大型網際網路公司面試頻率最高的考察範圍


如果是社會人士參加的 C++ 職位的面試:

如果是大型網際網路公司,雖然社招問的更多的是專案經驗,但適當準備一些基礎的演算法和資料結構知識也是非常有用的。


另外,C++ 是一門講究深度的程式設計技能,對於有一定工作年限的面試者,面試官往往會問很多原理性的細節,這就要求廣大 C++ 開發者在平常多留心、多積累、多思考技術背後的原理


以上文章摘自我在 GitChat 上發表的一場線上交流的分享,原文提供了我十幾年來工作經驗的分享和更詳細的學習建議,相信不論是學生黨還是工作黨都能讓你收穫頗豐!!


掃碼就能訂閱這場 Chat 的完整原文

還可以到我的讀者圈來提問,一起交流~

640640640

640?wx_fmt=jpeg

一旦進入社會開始工作以後,所有的路和目標都要靠我們自己走出來。有時候我們會迷茫,並不是我們沒有激情再去奮鬥,而是我們需要一座座燈塔來指明方向,雖然路都是自己摸索出來的,但正因為有這些前輩們的經驗參考,才能使我們站在巨人的肩膀上,看得更遠,走得更遠!


點選閱讀原文,訂閱這場 Chat ,獲得我十幾年的程式設計經驗!

相關文章