如何成為一名合格的 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 ,獲得我十幾年的程式設計經驗!
相關文章
- 前端修煉の道 | 如何成為一名合格前端開發工程師?前端工程師
- 成長路線圖:如何成為一名Python開發者?Python
- 如何成為一名合格的資料產品經理?
- DT時代,如何成為一名合格的電商資料分析師?
- 作為一名合格的前端開發工程師需要會哪些前端工程師
- [譯] 如何成為更好的開發者
- 如何成為一名大資料開發工程師大資料工程師
- 訓練營 | 如何成為一名開源社群貢獻者?
- Google開源Carbon語言,旨在成為C++的繼任者GoC++
- 開發者談合格遊戲文件的基本構成要素遊戲
- 如何成為一位合格的ScrumMasterScrumAST
- 如何成為一名Linux發燒友Linux
- 成為一名合格的Java工程師,需要掌握哪些基本知識Java工程師
- 如何成為一名黑客?黑客
- 如何成為一個出色的敏捷開發者?敏捷
- 把VSCode配置成C/C++開發IDEVSCodeC++IDE
- 如何成為一名後端開發工程師(附路線圖)後端工程師
- 阿里P7談:如何成為一名卓越的前端開發工程師!阿里前端工程師
- 程式設計師如何成為一名自由職業者程式設計師
- 如何成為一個合格的資料架構師?架構
- 開發者手冊之如何成為 OceanBase Contributor
- 一名合格的前端開發工程師應該掌握的8個技能前端工程師
- 天道金科成為BSN合格開發者,以區塊鏈技術賦能金融創新區塊鏈
- 來自阿里的P7高階程式設計師教你如何成為一名合格的Java程式設計師阿里程式設計師Java
- Java開發者使用C++寫程式踩的坑JavaC++
- 一個C#開發者重溫C++的心路歷程C#C++
- 聯易融成為BSN合格開發者,供應鏈金融平臺入選官方指定應用
- 如何能進階成為一個合格的測試工程師工程師
- Linux C++ 開發1 - 搭建C++開發環境LinuxC++開發環境
- 如何成為一名優秀的全棧工程師全棧工程師
- 如何成為一名大資料工程師?大資料工程師
- 作為一名Android開發者,你有過迷茫嗎?Android
- 成為最差開發者的10條建議
- 成為自信的node.js開發者(一)Node.js
- 成為自信的node.js 開發者(二)Node.js
- C++如何開啟“開發人員命令提示”C++
- 如何成為一名量化分析師(寬客)?
- 如何成為一名Java高階架構師Java架構