還記得本身在學校的時候,一直都比較注重的是:編程語言+數據結構與算法。沒錯,對於一個在校的計算機專業的學生,這是很重要的方面。可是,這每每不夠,或許是由於畢業前一直沒有進入企業實習,以致於本身在畢業以前,對本身將來的職業規劃作得很不夠,不知道本身之後會作什麼方向,那時候比較寬泛且迷茫的定位是,只要是軟件開發的工做,我都OK。畢業後,主要是從事C++後臺開發,工做一段時間後,才知道本身擅長什麼,對什麼感興趣。javascript
前端和後端,你喜歡什麼?一提到前端,你們都會想到html+javascript+css,或許這是web前端的最最基本的東西了吧。我我的會將與用戶直接打交道的端稱爲前端,除了前面所提到的傳統意義上的前端,我還會把android和ios開發的app稱爲前端。如今前端各類框架的迭代速度至關的快,要跟上各類比較NB的框架的步伐,也不是那麼簡單的事情。雖然工做以後,沒有作過前端方面的項目,更多的是與前端工程師FE合做,可是我知道,前端領域也有不少東西要學,並且前端的東西因爲能本身直接看到開發結果,或許在工做中會頗有成就感,因此永遠不要以爲前端工程師作的事情沒技術含量,蘿蔔青菜,各有所愛,任何一個領域,只要深刻了,都頗有技術含量,關鍵在於本身喜不喜歡,擅長不擅長。就我我的而言,更喜歡的是後端開發,主要緣由是在學校的時候一直學的是C++,工做以後一直作的是後端的項目,沒有直接參與前端的項目,既來之,則安之,既然上天給我分配了一個方向,我就應該在這個方向上作深刻研究。php
後臺開發是什麼?我第一次據說事後臺開發這個崗位是在騰訊的招聘網站上,有一個崗位叫後臺開發。我的以爲,後臺開發也很廣,開發語言也不少,如:php,node.js,java,C/C++,go ,每個公司都有本身主打的語言,如騰訊和百度的後端開發中,C++用的比較多,固然php也用得比較多,阿里和美團,java用得比較多。固然,語言只是一種實現工具而已,不能單一地認爲那種語言好那種語言很差,沒有最好,只有最適合。後臺開發,是相對前端開發而言,我的以爲,全部跟前端直接交互的開發均可以認爲是後臺開發。企業裏面,除了前端開發的崗位,就是後臺開發了嗎?固然不是。這也是我要說的,但願可以給在校的學生一點思考。在互聯網公司裏面,有美學功底很是好的UE工程師,他們經常會站在用戶的角度進行審美,提升用戶體驗,可以在產品真正落地以前,作出各類demo;有市場調研和需求分析的產品經理PM,具備嚴密的邏輯思惟和良好的溝通能力;有前面所提到的前端工程師FE,負責向後端發送用戶提交的請求,並接收後端返回的結果,進行展現;有軟件研發工程師RD,須要具有必定的研發能力和bug定位和修復,系統性能優化等能力;有測試開發工程師QA,上線前的最後把關;又作運維的OP,負責維護和監控線上的穩定;有作運營的,像雙十一等大型的購物節,通常都須要強大的運營支持;有作大數據的,hadoop+spark+storm各類大數據框架;有作基礎架構的;有作算法分析的。。。還有更多的職位。css
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腳本,腳本語言可以一邊執行一邊編譯,具備比較高的開發效率,不用你每次執行前編譯,掌握了腳本,你不用再那麼忙了,哈哈。html
提升本身的技術硬實力。這個話題更大,可是適合不少技術崗位。在工做中,你不能只跟項目中的業務邏輯打交道,那樣你會以爲本身作的事情愈來愈沒意思,愈來愈沒技術含量。你應該有一種開源的情懷,你要找一個比較NB的開源軟件,如 redis, zookeeper,nginx等,去閱讀其中的源碼,固然,你也能夠將你寫的一些庫上傳到gitlab上,讓你們給你提建議,相信開源讓人進步;你能夠去gitlab上下載和學習各類有意思的開源庫,這會給你帶來更多的成就感。同時你要學會利用各類資源來解決你所遇到的各類問題,如segmentfault,stackoverflow等國外著名的網站。前端
提升本身的情商。這個話題與個人tittle固然沒有直接關係了,哈哈。我是一名工科男,周邊的同事基本都是工科男,工科男大多比較直接,也容易發泄本身的不滿。對於自認爲一些不合理的需求,要深刻思考該需求是否確實不合理,深刻分析,有理有據,讓人心服口服。java