C++ 開發程序員的黃金方向和學習路線

目前從事 Linux C/C++ 開發的程序員很多,尤其是像百度、騰訊、阿里這樣的大公司,他們的網站流量巨大,業務邏輯複雜,會遇到很多瓶頸,需要開發底層服務來提高程序效率,快速響應用戶請求。

這些公司的 Linux C/C++ 開發屬於底層開發(後臺服務、算法支持等),而不是應用開發,編寫的程序在後臺運行,沒有界面,不直接面向用戶。

從事應用開發(尤其是網站開發)的程序員,工作的前幾年提升很快,工資也嗖嗖嗖往上漲,不知不覺年薪就到了 30W。但是這個時候,很多人會遇到瓶頸期,如果沒有成為領導,工資就長得慢了。

習慣了自我進步的程序員,怎麼能讓工資停滯呢,不進步就是退步呀,怎麼辦?領導不是每個人都能當的。

可以轉底層開發呀!!!有了數年應用開發的經驗,對用戶、業務、交互等都非常瞭解了,轉底層開發很容易,也知道應用層的瓶頸在哪裡,明白如何在底層做優化。

底層開發比應用開發的工資要高一些,再過幾年,年薪到五六十萬不是問題。

BAT老程序員分享:Linux C/C++ 開發程序員的黃金方向和學習路線

當然,上面說的是努力並且聰明的程序員,還有很多程序員工作十來年了依然在做應用層的開發。

那麼,這個方向到底適合不適合初學者呢?初學者肯定可以學習,也肯定能找到相關的工作,但是,如果沒有應用開發的經驗,個人認為只學底層開發是非常枯燥的,因為你做不出一個有趣的東西來,每天面對一堆理論,早晚吐血。

初學者可以給自己樹立一個目標,做一個類似 QQ 這樣的軟件出來,它可以有無限的優化空間,比如:剛開始只是用 Qt、GTK+、WxWidgets、Fltk 等 GUI 庫構建了一個界面,並不能發送和接受信息。增加一對一聊天功能,在這個過程中可以學習通信(socket)。同時支持多人聊天,每增加一個對話就開啟了一個線程,這個過程中可以學習多線程編程。提高服務器的性能,讓單臺服務器同時抗住一萬個人聊天,這個時候你可能就需要去優化程序了,就需要關注線程創建、調度的開銷,關注通信過程中的緩存。增加群聊功能,讓服務器可以給多個用戶發送消息,這個時候你對通信的理解將更加深入。最後呢,你可以將多臺服務器聯合起來,抗住幾十萬人甚至上百萬人聊天。

你可以自己完成這個項目,也可以組隊完成,在這個過程中你將會全方位的學習 Linux C/C++ 編程。

總之,初學者要讓學習過程變得有趣,不要天天研究操作系統、數據結構、算法、內存、線程進程、通信等理論,一定要去實踐。

BAT老程序員分享:Linux C/C++ 開發程序員的黃金方向和學習路線

學習路線

上面說了 Linux 服務器開發的前景和學習方式,接下來再說一下學習線路。

1) 語言&工具

C語言和C++是傳統的 Linux 開發的語言,需要掌握。除了基本的語法,還要玩轉一套工具鏈。

經典的組合是 GCC(編譯器)+ Make/Makefile(構建中大型項目必須的工具)+ GBD(調試器)+ Valgrind(內存分析工具)+ Vim/EMACS/Gedit/Sublime Text(編輯器)。

現在有越來越多的新項目使用 Clang/LLVM 來構建了,例如 Android NDK 已經放棄GCC,全面轉向 Clang。

由於 C++ 語法變態,到處都是奇*巧*淫*技,並且沒有內存回收機制,所以被最近幾年大火的 Golang 完爆了,不少底層項目開始轉向 Golang,棄用 C++。嗯,這是好事,作為《C++教程》的作者我已經噁心透了,C++ 這種垃圾語言早就該被替代了。

對於初學者來說,不要貪多嚼不爛,先學好 C/C++ 語言,掌握 GCC 就可以,Clang/LLVM 和 Golang 留著以後再學。

2) 數據結構和算法

學習基本的,瞭解概念就可以,很多庫已經封裝好了常用的數據結構和算法,實際開發中你不用從零開始,所以千萬不要陷在裡面不能自拔,算法是個無底洞,耗死你。記住,以後需要了可以再來回顧,不用一開始就吃透。

3) 操作系統

除了基本的 Linux 操作,還有必要了解一些常用命令;當然,這不是重點,只要你經常使用 Linux 操作系統,慢慢就會了。

內存(虛擬地址空間、內存分配策略)+ 進程線程(進程通信、線程調度、死鎖) + 文件系統 + 輸入輸出 + 中斷等才是重點。這些都是理論,要和實踐相結合起來。

BAT老程序員分享:Linux C/C++ 開發程序員的黃金方向和學習路線

4) 通信(Socket)

在服務器上做開發,通信是必不可少的,而且是重中之重。除了瞭解 TCP/IP 協議族,還要學習 socket 編程,將理論和實踐集合起來。

ACE、Libevent、Libev 等知名的網絡庫也要掌握一兩個的,畢竟在實際開發中不可能直接調用 Linux API 吧,怎麼也得搞個庫來提高效率。

5) 界面庫

當然,在服務器領域一般不需要界面,但是掌握一個界面庫會讓你做出一個好玩的軟件來,學以致用,提高興趣。

Linux 下常用的界面庫有 Qt、GTK、WxWidgets 等,其中 Qt 是老大。

搞 Linux 開發,操作系統原理和通信是重點,也是最難學的部分,這是你跨進 Linux 開發這扇大門的標誌,不學這些即使耍流流氓。

想要在程序員生涯內有更高的成就的話,C/C++就是一個既可以強化思維能力,又可以打好編程基礎的編程語言,你想要做軟件開發,成為核心程序員的話,學習C/C++的話筆者有一個C/C++的編程千人群(Q艘索:

C語言編程學習聚集地(無言建立))你如果感覺自學C/C++語言有困難的話,有興趣學習或者瞭解一下C/C++編程的小夥伴就可以進來交流。

筆者分享的C/C++學習路線圖:

BAT老程序員分享:Linux C/C++ 開發程序員的黃金方向和學習路線


分享到:


相關文章: