BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!
目前從事 Linux C/C++ 開發(fā)的程序員很多,尤其是像百度、騰訊、阿里這樣的大公司,他們的網(wǎng)站流量巨大,業(yè)務(wù)邏輯復(fù)雜,會遇到很多瓶頸,需要開發(fā)底層服務(wù)來提高程序效率,快速響應(yīng)用戶請求。
這些公司的 Linux C/C++ 開發(fā)屬于底層開發(fā)(后臺服務(wù)、算法支持等),而不是應(yīng)用開發(fā),編寫的程序在后臺運行,沒有界面,不直接面向用戶。
從事應(yīng)用開發(fā)(尤其是網(wǎng)站開發(fā))的程序員,工作的前幾年提升很快,工資也嗖嗖嗖往上漲,不知不覺年薪就到了 30W。但是這個時候,很多人會遇到瓶頸期,如果沒有成為領(lǐng)導(dǎo),工資就長得慢了。
習(xí)慣了自我進(jìn)步的程序員,怎么能讓工資停滯呢,不進(jìn)步就是退步呀,怎么辦?領(lǐng)導(dǎo)不是每個人都能當(dāng)?shù)摹?/p>
可以轉(zhuǎn)底層開發(fā)呀!!!有了數(shù)年應(yīng)用開發(fā)的經(jīng)驗,對用戶、業(yè)務(wù)、交互等都非常了解了,轉(zhuǎn)底層開發(fā)很容易,也知道應(yīng)用層的瓶頸在哪里,明白如何在底層做優(yōu)化。
底層開發(fā)比應(yīng)用開發(fā)的工資要高一些,再過幾年,年薪到五六十萬不是問題。
? ? ? ? ? ? ? ? ?
當(dāng)然,上面說的是努力并且聰明的程序員,還有很多程序員工作十來年了依然在做應(yīng)用層的開發(fā)。
那么,這個方向到底適合不適合初學(xué)者呢?初學(xué)者肯定可以學(xué)習(xí),也肯定能找到相關(guān)的工作,但是,如果沒有應(yīng)用開發(fā)的經(jīng)驗,個人認(rèn)為只學(xué)底層開發(fā)是非常枯燥的,因為你做不出一個有趣的東西來,每天面對一堆理論,早晚吐血。
初學(xué)者可以給自己樹立一個目標(biāo),做一個類似 QQ 這樣的軟件出來,它可以有無限的優(yōu)化空間,比如:剛開始只是用 Qt、GTK+、WxWidgets、Fltk 等 GUI 庫構(gòu)建了一個界面,并不能發(fā)送和接受信息。增加一對一聊天功能,在這個過程中可以學(xué)習(xí)通信(socket)。同時支持多人聊天,每增加一個對話就開啟了一個線程,這個過程中可以學(xué)習(xí)多線程編程。提高服務(wù)器的性能,讓單臺服務(wù)器同時抗住一萬個人聊天,這個時候你可能就需要去優(yōu)化程序了,就需要關(guān)注線程創(chuàng)建、調(diào)度的開銷,關(guān)注通信過程中的緩存。增加群聊功能,讓服務(wù)器可以給多個用戶發(fā)送消息,這個時候你對通信的理解將更加深入。最后呢,你可以將多臺服務(wù)器聯(lián)合起來,抗住幾十萬人甚至上百萬人聊天。
你可以自己完成這個項目,也可以組隊完成,在這個過程中你將會全方位的學(xué)習(xí) Linux C/C++ 編程。
總之,初學(xué)者要讓學(xué)習(xí)過程變得有趣,不要天天研究操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、算法、內(nèi)存、線程進(jìn)程、通信等理論,一定要去實踐。
? ? ? ? ? ? ??
學(xué)習(xí)路線
上面說了 Linux 服務(wù)器開發(fā)的前景和學(xué)習(xí)方式,接下來再說一下學(xué)習(xí)線路。
1) 語言&工具
C語言和C++是傳統(tǒng)的 Linux 開發(fā)的語言,需要掌握。除了基本的語法,還要玩轉(zhuǎn)一套工具鏈。
經(jīng)典的組合是 GCC(編譯器)+ Make/Makefile(構(gòu)建中大型項目必須的工具)+ GBD(調(diào)試器)+ Valgrind(內(nèi)存分析工具)+ Vim/EMACS/Gedit/Sublime Text(編輯器)。
現(xiàn)在有越來越多的新項目使用 Clang/LLVM 來構(gòu)建了,例如 Android NDK 已經(jīng)放棄GCC,全面轉(zhuǎn)向 Clang。
由于 C++ 語法變態(tài),到處都是奇*巧*淫*技,并且沒有內(nèi)存回收機(jī)制,所以被最近幾年大火的 Golang 完爆了,不少底層項目開始轉(zhuǎn)向 Golang,棄用 C++。嗯,這是好事,作為《C++教程》的作者我已經(jīng)惡心透了,C++ 這種垃圾語言早就該被替代了。
對于初學(xué)者來說,不要貪多嚼不爛,先學(xué)好 C/C++ 語言,掌握 GCC 就可以,Clang/LLVM 和 Golang 留著以后再學(xué)。
2) 數(shù)據(jù)結(jié)構(gòu)和算法
學(xué)習(xí)基本的,了解概念就可以,很多庫已經(jīng)封裝好了常用的數(shù)據(jù)結(jié)構(gòu)和算法,實際開發(fā)中你不用從零開始,所以千萬不要陷在里面不能自拔,算法是個無底洞,耗死你。記住,以后需要了可以再來回顧,不用一開始就吃透。
3) 操作系統(tǒng)
除了基本的 Linux 操作,還有必要了解一些常用命令;當(dāng)然,這不是重點,只要你經(jīng)常使用 Linux 操作系統(tǒng),慢慢就會了。
內(nèi)存(虛擬地址空間、內(nèi)存分配策略)+ 進(jìn)程線程(進(jìn)程通信、線程調(diào)度、死鎖) + 文件系統(tǒng) + 輸入輸出 + 中斷等才是重點。這些都是理論,要和實踐相結(jié)合起來。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
4) 通信(Socket)
在服務(wù)器上做開發(fā),通信是必不可少的,而且是重中之重。除了了解 TCP/IP 協(xié)議族,還要學(xué)習(xí) socket 編程,將理論和實踐集合起來。
ACE、Libevent、Libev 等知名的網(wǎng)絡(luò)庫也要掌握一兩個的,畢竟在實際開發(fā)中不可能直接調(diào)用 Linux API 吧,怎么也得搞個庫來提高效率。
5) 界面庫
當(dāng)然,在服務(wù)器領(lǐng)域一般不需要界面,但是掌握一個界面庫會讓你做出一個好玩的軟件來,學(xué)以致用,提高興趣。
Linux 下常用的界面庫有 Qt、GTK、WxWidgets 等,其中 Qt 是老大。
搞 Linux 開發(fā),操作系統(tǒng)原理和通信是重點,也是最難學(xué)的部分,這是你跨進(jìn) Linux 開發(fā)這扇大門的標(biāo)志,不學(xué)這些即使耍流流氓。
“我是一名從事了10年開發(fā)的老程序員,最近我花了一些時間整理關(guān)于C語言、C++,自己有做的材料的整合,一個完整的學(xué)習(xí)C語言、C++的路線和工具。如果感覺自己學(xué)習(xí)C/C++編程有難度的話可以湫湫掃下方二維碼。這里是編程愛好者的聚集地,歡迎初學(xué)和進(jìn)階中的小伙伴。希望你也能憑自己的努力,成為下一個優(yōu)秀的程序員。
筆者分享的C/C++學(xué)習(xí)路線圖:
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1 小时顶 7 天!程序员工作中的巧思
- 下一篇: C/C++知识分享番外:如何申请一个腾讯