1. 程式人生 > >C++後臺開發之我見

C++後臺開發之我見

                                                                         C++後臺開發之我見

                                                                                                                   --------2017.2.6

        工作也快兩年了,偶然看到自己以前寫過的一些技術部落格,發現自己自畢業後一直沒有更新過自己的技術部落格,趁現在是剛過完春節快要回公司工作之際,談談我個人對後臺開發的一些個人見解,希望能夠對在校的學生或者剛剛接觸C++後臺開發的童鞋有點幫助。

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

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

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

        C++後臺開發需要掌握什麼?這個話題有點大,而且像我這種小菜,只能拋磚引玉。語言只是基礎,不能一味地去研究語法糖。記得我在學校的時候,特別喜歡去研究語法糖,現在想想,浪費了很多時間。當然,作為C++後端的研發工程師,你首先需要掌握C++的基礎語法,需要掌握STL裡面常用的庫和演算法,如果你覺得這還不夠,你可以去系統地學習下boost庫,裡面多STL裡面所不具有很備的,看看C++11就知道了,裡面很多新增的東西都是來自boost庫。當然,僅僅掌握語言還遠遠不夠,C++做後臺開發時,模組跟模組直接除了通過lib庫或so庫的方式相互呼叫外,還有更多的是採用網路互動,這個時候,你就需要掌握多執行緒程式設計和網路程式設計的基礎知識,當然,由於開發效率的需要,現在你不需要從零搭建一個網路服務框架,比如:ACE、boost的asio和libevent。當然現在已經有各種開源的RPC框架了,比如google-rpc,你可以通過呼叫本地函式來完成網路包的傳送與接收,so easy!那麼網路通訊包的格式如何定義呢?客戶端和服務端需要提前約定?資料互動格式,常用的包括:json、xml和protobuffer,通常前端後後端互動會採用json,而後端各個模組的互動,你可以隨便選擇;對於HTTP協議的互動,我用的比較多的是json,而 tcp協議,我用的比較多的是protobuffer。當然,服務端的平臺有很重要,國內後臺開發,基本都是執行在Linux系統上,所以你需要掌握Linux系統的常用的命令,這樣你才可以在Linux系統上運用自如,所以,如果你想從事或者即將從事C++後臺開發,請暫時拋下VS下的C++學習,從現在開始,轉向Linux平臺下的C++開發,那裡有你要編譯器GCC/G++,除錯時用到的gdb,如果你想依次性一個命令編譯所有的檔案,請學習下如何編寫makefile。好了,有了程式語言,有了編譯和除錯方法,你就可以將你的應用程式放在你的Linux系統上監聽客戶端的請求了。如果某一天,你的程式出core了怎麼辦?你必須要學會如果找出bug,除了前面提到的gdb,在大型的應用裡面,你必須要學會掌握如何追bug,這個時候,你就要學會打日誌,並且分等級列印日誌,這樣一出問題了你就能夠快速定位問題的所在。日誌有了,程式也能正常跑了,那你怎麼算你程式的效能或者收益呢?所以,你需要學會編寫指令碼語言,我個人推薦你去掌握shell指令碼和python指令碼,指令碼語言能夠一邊執行一邊編譯,具有比較高的開發效率,不用你每次執行前編譯,掌握了指令碼,你不用再那麼忙了,哈哈。

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

        提高自己的情商。這個話題與我的tittle當然沒有直接關係了,哈哈。我是一名工科男,周邊的同事基本都是工科男,工科男大多比較直接,也容易發洩自己的不滿。對於自認為一些不合理的需求,要深入思考該需求是否確實不合理,深入分析,有理有據,讓人心服口服。

        隨隨便便寫了一點東西,新的一年工作希望跟大家一塊進步,一同成長!