如何成為一名合格的 C/C++ 開發者?
本文選自 | 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++ 開發這一生態體系的基礎,筆者認為的基礎包括:
C++ 語言本身熟練使用程度。
必須結合一個具體的作業系統平臺,所以得熟悉某個作業系統平臺的 API 函式,比如 Linux,以及該作業系統的原理。
網路通訊,網路通訊在這裡具體一點就是 Socket 程式設計。
說了這麼多,你可能會覺得很抽象。舉個具體例子,假設我們現在要開發一個類似電驢這樣的軟體,軟體介面如下圖:
如上圖所示,假設作業系統選擇 Windows,使用語言使用 C++,這款產品的實現技術分為 UI 和網路通訊部分,下面將詳細介紹這兩部分。
UI 部分
無論你是在閱讀別人的專案還是需要自己開發這樣的專案,在確定了這款軟體使用的 UI 庫,您就需要對 Windows 的視窗、對話方塊、訊息產生、派發與處理機制進行了解。
接著,根據上圖中的軟體功能,大致分為三大模組,即資源、下載和分享。這三大塊是可以使用一個 Windows Tab 控制元件去組織,這個時候您需要了解 Windows Tab 控制元件的特性。
網路通訊部分
網路通訊部分,主要有兩大塊,第一個是程式啟動時,與服務端的互動;第二個就是檔案下載與分享的 P2P 網路。
2.2 進階:
如果您達到了我上面說的三點後,可以再找一些高質量的開源專案去實戰一下。需要注意的是,最好找一些沒有複雜業務或者您熟悉其業務的開源專案(如開源的 IM 系統)。
我個人學習一套陌生的開源專案時,總是喜歡將程式用偵錯程式正常跑起來,然後再中斷下來,統計當前的執行緒數目,然後通過程式入口 main 函式從主執行緒追蹤其他工作執行緒是如何建立的;接著,分析和研究每個執行緒的用途以及執行緒之間互動的,這就是先整體把握,然後找感興趣的細節去學習。
03
關於 C++ 的面試
關於 C++ 面試,面試的要求到底是側重程式碼量、專案經驗,還是側重作業系統、資料結構這種基礎知識?
如果你是想進入大型網際網路公司的應屆生:
應該優先好好準備演算法和資料結構知識以應對面試,這是大型網際網路公司面試頻率最高的考察範圍。
如果是社會人士參加的 C++ 職位的面試:
如果是大型網際網路公司,雖然社招問的更多的是專案經驗,但適當準備一些基礎的演算法和資料結構知識也是非常有用的。
另外,C++ 是一門講究深度的程式設計技能,對於有一定工作年限的面試者,面試官往往會問很多原理性的細節,這就要求廣大 C++ 開發者在平常多留心、多積累、多思考技術背後的原理。
以上文章摘自我在 GitChat 上發表的一場線上交流的分享,原文提供了我十幾年來工作經驗的分享和更詳細的學習建議,相信不論是學生黨還是工作黨都能讓你收穫頗豐!!
掃碼就能訂閱這場 Chat 的完整原文
還可以到我的讀者圈來提問,一起交流~
一旦進入社會開始工作以後,所有的路和目標都要靠我們自己走出來。有時候我們會迷茫,並不是我們沒有激情再去奮鬥,而是我們需要一座座燈塔來指明方向,雖然路都是自己摸索出來的,但正因為有這些前輩們的經驗參考,才能使我們站在巨人的肩膀上,看得更遠,走得更遠!
點選閱讀原文,訂閱這場 Chat ,獲得我十幾年的程式設計經驗!
相關文章
- 如何成為一名合格的(Java)程式設計師Java程式設計師
- 如何成為一名合格的資料產品經理?
- 成為一名合格的java工程師Java工程師
- DT時代,如何成為一名合格的電商資料分析師?
- 如何成為一名優秀的移動開發者?移動開發
- 職場10年之如何成為一名合格的程式設計師(上)程式設計師
- 成長路線圖:如何成為一名Python開發者?Python
- 關於《如何塑造自己成為一名合格的軟體工程師》的討論軟體工程工程師
- 如何成為一名入門級 iOS 開發者及DemoiOS
- 如何成為一位合格的ScrumMasterScrumAST
- 前端修煉の道 | 如何成為一名合格前端開發工程師?前端工程師
- 如何成為一名黑客?黑客
- 如何成為一名黑客黑客
- 如何快速的成為一個合格的Oracle DBA?Oracle
- 成為一名合格的Java工程師,需要掌握哪些基本知識Java工程師
- 《演講之禪》助你成長為一名合格程式設計師程式設計師
- 【DBA】如何快速的成為一個合格的Oracle DBA?Oracle
- 如何成為一名合格的機器學習演算法工程師?我們做了一次技能拆分…機器學習演算法工程師
- 開發者談合格遊戲文件的基本構成要素遊戲
- [譯] 如何成為更好的開發者
- 如何成為一個合格的資料架構師?架構
- 如何成為一名Oracle ebs DBAOracle
- 如何成為一名架構師架構
- iOS 效能調優,成為一名合格 iOS 程式設計師必須掌握iOS程式設計師
- 如何成為一名Top DevOps Engineerdev
- 如何成為一名Linux專家Linux
- 如何成為一名成功的程式設計師程式設計師
- 如何成為一名卓越的前端工程師前端工程師
- 來自阿里的P7高階程式設計師教你如何成為一名合格的Java程式設計師阿里程式設計師Java
- 如何成為一個出色的敏捷開發者?敏捷
- 如何成為優秀的遠端開發者
- 如何成為坐擁百萬的Web開發者?Web
- 如何成為一個偉大的開發者
- 如何成為一名Linux發燒友Linux
- EricS.Raymond:如何成為一名黑客黑客
- 如何成為一名黑客 How To Become A Hacker黑客
- 如何有效的成為一名資料科學家資料科學
- 如何成為一名優秀的CTO(技術長)