工作也快兩年了,偶然看到自己以前寫過的一些技術博客,發現自己自畢業后一直沒有更新過自己的技術博客,趁現在是剛過完春節快要回公司工作之際,談談我個人對后台開發的一些個人見解,希望能夠對在校的學生或者剛剛接觸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當然沒有直接關系了,哈哈。我是一名工科男,周邊的同事基本都是工科男,工科男大多比較直接,也容易發泄自己的不滿。對於自認為一些不合理的需求,要深入思考該需求是否確實不合理,深入分析,有理有據,讓人心服口服。
隨隨便便寫了一點東西,新的一年工作希望跟大家一塊進步,一同成長!
——————————————————————————作者作於2017-2—————————————————————————