天天看點

Linux C/C++開發方向怎麼樣,要學習哪些東西?

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

這些公司的 Linux C/C++ 開發屬于底層開發(背景服務、算法支援等),而不是應用開發,編寫的程式在背景運作,沒有界面,不直接面向使用者。

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

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

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

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

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

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

初學者可以給自己樹立一個目标,做一個類似 QQ 這樣的軟體出來,它可以有無限的優化空間,比如:

        ▶ 剛開始隻是用 Qt、GTK+、WxWidgets、Fltk 等 GUI 庫建構了一個界面,并不能發送和接受資訊。

        ▶ 增加一對一聊天功能,在這個過程中可以學習通信(socket)。

        ▶ 同時支援多人聊天,每增加一個對話就開啟了一個線程,這個過程中可以學習多線程程式設計。

        ▶ 提高伺服器的性能,讓單台伺服器同時抗住一萬個人聊天,這個時候你可能就需要去優化程式了,就需要關注線程建立、排程的開銷,關注通信過程中的緩存。

        ▶ 增加群聊功能,讓伺服器可以給多個使用者發送消息,這個時候你對通信的了解将更加深入。

        ▶ 最後呢,你可以将多台伺服器聯合起來,抗住幾十萬人甚至上百萬人聊天。

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

總之,初學者要讓學習過程變得有趣,不要天天研究作業系統、資料結構、算法、記憶體、線程程序、通信等理論,一定要去實踐。

學習路線

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

1) 語言&工具

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

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

由于 C++ 文法變态,到處都是奇*巧*淫*技,并且沒有記憶體回收機制,是以被最近幾年大火的其他語言給分流了。

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

2) 資料結構和算法

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

3) 作業系統

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

記憶體(虛拟位址空間、記憶體配置設定政策)+ 程序線程(程序通信、線程排程、死鎖) + 檔案系統 + 輸入輸出 + 中斷等才是重點。這些都是理論,要和實踐相結合起來。

4) 通信(Socket)

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

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

5) 界面庫

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

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

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

【值得關注】我的 程式設計學習交流俱樂部 !【點選進入】

C語言入門資料:

C語言必讀書籍: