C/C++后臺開發(fā)丨Linux服務器開發(fā)丨后端開發(fā)丨以我之見

今天趁著過完春節(jié)快要回公司工作之際,也馬上進入金三銀四的時期,談談我個人對后臺開發(fā)的一些個人見解,希望能夠?qū)υ谛5膶W生或者剛剛接觸C++后臺開發(fā)的同學有點幫助。

還記得自己在學校的時候,一直都比較注重的是:編程語言+數(shù)據(jù)結構與算法。沒錯,對于一個在校的計算機專業(yè)的學生,這是很重要的方面。但是,這往往不夠,或許是因為畢業(yè)前一直沒有進入企業(yè)實習,以至于自己在畢業(yè)之前,對自己未來的職業(yè)規(guī)劃做得很不夠,不知道自己以后會做什么方向,那時候比較寬泛且迷茫的定位是,只要是軟件開發(fā)的工作,我都OK。畢業(yè)后,主要是從事C++后臺開發(fā),工作一段時間后,才知道自己擅長什么,對什么感興趣。

前端和后端,你喜歡什么?

一提到前端,大家都會想到html+javascript+css,或許這是web前端的最最基本的東西了吧。我個人會將與用戶直接打交道的端稱為前端,除了前面所提到的傳統(tǒng)意義上的前端,我還會把android和ios開發(fā)的app稱為前端?,F(xiàn)在前端各種框架的迭代速度相當?shù)目?,要跟上各種比較NB的框架的步伐,也不是那么簡單的事情。雖然工作之后,沒有做過前端方面的項目,更多的是與前端工程師FE合作,但是我知道,前端領域也有很多東西要學,而且前端的東西由于能自己直接看到開發(fā)結果,或許在工作中會很有成就感,所以永遠不要覺得前端工程師做的事情沒技術含量,蘿卜青菜,各有所愛,任何一個領域,只要深入了,都很有技術含量,關鍵在于自己喜不喜歡,擅長不擅長。就我個人而言,更喜歡的是后端開發(fā),主要原因是在學校的時候一直學的是C++,工作之后一直做的是后端的項目,沒有直接參與前端的項目,既來之,則安之,既然上天給我分配了一個方向,我就應該在這個方向上做深入研究。

后臺開發(fā)是什么?

我第一次聽說過后臺開發(fā)這個崗位是在騰訊的招聘網(wǎng)站上,有一個崗位叫后臺開發(fā)。個人覺得,后臺開發(fā)也很廣,開發(fā)語言也很多,如:php,node.js,java,C/C++,go ,每一個公司都有自己主打的語言,如騰訊和百度的后端開發(fā)中,C++用的比較多,當然php也用得比較多,阿里和美團,java用得比較多。當然,語言只是一種實現(xiàn)工具而已,不能單一地認為那種語言好那種語言不好,沒有最好,只有最適合。后臺開發(fā),是相對前端開發(fā)而言,個人覺得,所有跟前端直接交互的開發(fā)都可以認為是后臺開發(fā)。企業(yè)里面,除了前端開發(fā)的崗位,就是后臺開發(fā)了嗎?當然不是。這也是我要說的,希望能夠給在校的學生一點思考。在互聯(lián)網(wǎng)公司里面,有美學功底非常好的UE工程師,他們常常會站在用戶的角度進行審美,提高用戶體驗,能夠在產(chǎn)品真正落地之前,做出各種demo;有市場調(diào)研和需求分析的產(chǎn)品經(jīng)理PM,具有嚴密的邏輯思維和良好的溝通能力;有前面所提到的前端工程師FE,負責向后端發(fā)送用戶提交的請求,并接收后端返回的結果,進行展示;有軟件研發(fā)工程師RD,需要具備一定的研發(fā)能力和bug定位和修復,系統(tǒng)性能優(yōu)化等能力;有測試開發(fā)工程師QA,上線前的最后把關;又做運維的OP,負責維護和監(jiān)控線上的穩(wěn)定;有做運營的,像雙十一等大型的購物節(jié),一般都需要強大的運營支持;有做大數(shù)據(jù)的,hadoop+spark+storm各種大數(shù)據(jù)框架;有做基礎架構的;有做算法分析的。。。還有更多的職位。

C++后臺開發(fā)需要掌握什么?

這個話題有點大,而且像我這種小菜,只能拋磚引玉。語言只是基礎,不能一味地去研究語法糖。記得我在學校的時候,特別喜歡去研究語法糖,現(xiàn)在想想,浪費了很多時間。當然,作為C++后端的研發(fā)工程師,你首先需要掌握C++的基礎語法,需要掌握STL里面常用的庫和算法,如果你覺得這還不夠,你可以去系統(tǒng)地學習下boost庫,里面多STL里面所不具有很備的,看看C++11就知道了,里面很多新增的東西都是來自boost庫。當然,僅僅掌握語言還遠遠不夠,C++做后臺開發(fā)時,模塊跟模塊直接除了通過lib庫或so庫的方式相互調(diào)用外,還有更多的是采用網(wǎng)絡交互,這個時候,你就需要掌握多線程編程和網(wǎng)絡編程的基礎知識,當然,由于開發(fā)效率的需要,現(xiàn)在你不需要從零搭建一個網(wǎng)絡服務框架,比如:ACE、boost的asio和libevent。當然現(xiàn)在已經(jīng)有各種開源的RPC框架了,比如google-rpc,你可以通過調(diào)用本地函數(shù)來完成網(wǎng)絡包的發(fā)送與接收,so easy!那么網(wǎng)絡通信包的格式如何定義呢?客戶端和服務端需要提前約定?數(shù)據(jù)交互格式,常用的包括:json、xml和protobuffer,通常前端后后端交互會采用json,而后端各個模塊的交互,你可以隨便選擇;對于HTTP協(xié)議的交互,我用的比較多的是json,而 tcp協(xié)議,我用的比較多的是protobuffer。當然,服務端的平臺有很重要,國內(nèi)后臺開發(fā),基本都是運行在Linux系統(tǒng)上,所以你需要掌握Linux系統(tǒng)的常用的命令,這樣你才可以在Linux系統(tǒng)上運用自如,所以,如果你想從事或者即將從事C++后臺開發(fā),請暫時拋下VS下的C++學習,從現(xiàn)在開始,轉(zhuǎn)向Linux平臺下的C++開發(fā),那里有你要編譯器GCC/G++,調(diào)試時用到的gdb,如果你想依次性一個命令編譯所有的文件,請學習下如何編寫makefile。好了,有了編程語言,有了編譯和調(diào)試方法,你就可以將你的應用程序放在你的Linux系統(tǒng)上監(jiān)聽客戶端的請求了。如果某一天,你的程序出core了怎么辦?你必須要學會如果找出bug,除了前面提到的gdb,在大型的應用里面,你必須要學會掌握如何追bug,這個時候,你就要學會打日志,并且分等級打印日志,這樣一出問題了你就能夠快速定位問題的所在。日志有了,程序也能正常跑了,那你怎么算你程序的性能或者收益呢?所以,你需要學會編寫腳本語言,我個人推薦你去掌握shell腳本和python腳本,腳本語言能夠一邊執(zhí)行一邊編譯,具有比較高的開發(fā)效率,不用你每次執(zhí)行前編譯,掌握了腳本,你不用再那么忙了,哈哈。

提高自己的技術硬實力。技術的瓶頸是認知的問題,認知不是知其名,還需要知其因,更需要知其原。這個話題更大,但是適合很多技術崗位。在工作中,你不能只跟項目中的業(yè)務邏輯打交道,那樣你會覺得自己做的事情越來越?jīng)]意思,越來越?jīng)]技術含量。你應該有一種開源的情懷,你要找一個比較NB的開源軟件,如 redis, zookeeper,nginx等,去閱讀其中的源碼,當然,你也可以將你寫的一些庫上傳到gitlab上,讓大家給你提建議,相信開源讓人進步;你可以去gitlab上下載和學習各種有意思的開源庫,這會給你帶來更多的成就感。同時你要學會利用各種資源來解決你所遇到的各種問題,如segmentfault,stackoverflow等國外著名的網(wǎng)站。

對于在校,想轉(zhuǎn)C++后臺開發(fā)的朋友,自學耗時比較久,成本高,技術棧不完善,架構不成體系,自律性差。學習進階、完善技術棧體系、提升自己、跳槽漲薪、往更高層次發(fā)展。

推薦你可以看看這個視頻,內(nèi)容包括有C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒體,Linux內(nèi)核,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK多個高級知識點。視頻鏈接:C/C++Linux服務器開發(fā)/Linux后臺開發(fā)架構師-學習視頻

大家也可以+C/C++ Linux后臺服務器開發(fā)高級架構qun:正在跳轉(zhuǎn)

視頻內(nèi)容:

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容