小白該如何學好C++?
那麼做爲一個從C語言小白摸爬滾打、入坑無數到成長爲現在的高級C++遊戲開發工程師、高級C++服務端工程師、項目經理、技術總監、我想跟你們分享下我大牛的學習心得與體會!python
Linus曾說過:「C++是一門很恐怖的語言,而比它更恐怖的是不少不合格的程序員在使用着它」,這個世界上最難的編程語言可能非C++莫屬了,呵呵,雖然有點誇張...... 可是, 你們記住,難度越高意味着含金量與競爭力越高,越能把你和別人區分開來,因此,你在一開始就須要有很當心謹慎的態度,並把C++當成一種難以訓服的猛獸來看待。
最後,若是你們若是在自學遇到困難,想找一個C++的學習環境,能夠加入咱們的C++學習圈,點擊我加入吧,會節約不少時間,減小不少在學習中遇到的難題。linux
那麼若是你只是一時興起,並無真正沉下心來想學好一門語言,那麼我不建議你學,由於學習C++是痛苦的,沒有興趣,那麼這個學習過程將是一種折磨與煎熬!nginx
門檻與含金量並存,一旦你學會了C++,能夠說,不少語言對你而言也就不是難事了。c++
通常呢,學習C++的新手學員有如下幾種狀況:程序員
小白該如何學好C++?
1.純小白(非計算機專業、沒學過任何編程語言)web
2.接觸過C語言、但沒學好redis
針對第一、2種狀況,我建議必定要把C語言基礎打牢,若是C沒學好,學C++會很受挫,打擊自信心,能夠按部就班,不知道怎麼學的能夠關注咱們,咱們有一站式的學習方案!算法
3.C語言已經學的很好了,但沒接觸過C++mongodb
有了紮實的C語言基礎,恭喜,你能夠開始學習C++了編程
4.C++基礎語法都學會了,而後想學點高級的?
以我多年的C++遊戲服務器開發經驗,企業中真實對開發者的考察要求無非就那麼幾點:
C++數據結構,重點,最基礎的鏈表、隊列,棧,排序算法,各類算法,此乃程序的核心。
C++泛型編程,模板,各類項目中存在大量模板設計,特別是框架,
C++多線程,線程同步,線程池。 99%的項目必定用到,列爲重點。
Socket網絡編程,各類併發網絡模型(Select WSASelect IOCP)
C++靜態庫、動態連接庫dll ,開發項目中90%、SDK中必定用到,無需精通,但必須掌握。
Win32 API 高級編程 , 重點,真實企業項目中大量用到win32 API ,必定有相關的經驗。
5.C++進階知識也會了,你須要學習基礎框架。
MFC框架 。 可選,雖然說MFC在windows桌面運用中由於其複雜性愈來愈顯得過期了。可是其OO思想仍是發揮的淋漓盡致,能夠了解熟悉下,各類控件、對話框、單文檔程序、多文檔走一遍,不只能夠掌握桌面運用開發,還能夠再次鞏固面向對象的理念,總之MFC是個大雜燴,總會學點東西的。
QT框架. 跨平臺的應用程序和用戶界面框架,linux與windows桌面應用開發的優秀框架。
GTK+(GIMP Toolkit) GIMP 一個功能強大跨平臺的圖形庫,是GNU/Linux下開發圖形界面的應用程序的主流開發工具之一。
STL庫,優秀的跨平臺模板庫STL 包含大量的STL容器,算法和函數等。
Boost庫 一個可移植、提供源代碼的C++庫,做爲STL標準庫的後備,是C++標準化進程的開發引擎之一,優秀而高效的模板與算法
6.相關開發工具、無需深刻、會使用便可。
磨刀不誤砍柴工,打仗還得有槍,下面最經常使用的工具你必須掌握:
集成開發環境: VS2010 ~ VS2017 ,愈來愈強大的IDE。
代碼配置管理工具: 最簡單易用的SVN 或 最流行的Git
7.有了以上6個方面的基礎,說明你已經具有企業開發的能力了。
可是每一行業都有其專一的技術,因此,你須要開始細分方向了,仔細思考你究竟想從事哪一個行業,而後對號入座,
此刻就是術業有專攻了!一位嶄新的C++大牛即將誕生......
小白該如何學好C++?
如下附上真實企業中相應崗位須要掌握的技能:
【流媒體開發工程師】
熟悉視音頻編解碼算法(如mpeg-四、H.26四、H.26五、G7十一、AAC等);
熟悉流媒體協議 RTP/RTCP , RTMP, RTSP, SIP ,HLS, HDS, TS;
熟悉開源多媒體項目 FFmpeg、GStreamer、 vlc、live555 ,nginx-rtmp , WebRTC、DSS、 ,darwin ;
熟悉流媒體服務器 Red五、FMS、Wowza等
熟悉多媒體容器封裝標準mp4, FLV , TS ,MPEG2-TS,mxf,mov 等流媒體文件封裝協議
【遊戲開發工程師】
熟練應用Cocos2d-x引擎,熟悉c++/cocos2dx開發模式;
Lua/Python腳本開發經驗者優先。
OpenGL/DirectX等工做經驗者優先
商業引擎 Unity 3D ,CE3和 UE4 , (Unreal Engine 4, CryENGINE 3 );
【服務器開發工程師】
有高性能高併發系統的開發經驗;
雲風skynet (基於C跟lua的開源服務端併發框架)
IOCP , epoll
具備分佈式負載均衡相關經驗
lua ,python語言
【嵌入式開發工程師】
MTK平臺 (臺灣聯發科技 MediaTek)採用的是Nucleus OS, 嵌入式實時操做系統,使用標準C開發,其中Nucleus Plus提供源代碼下載。
vxworks、uc/OS等嵌入式操做系統開發
熟悉嵌入式CPU如STM八、STM32系列處理器的架構和應用;
精通ARM、AVR、STM3二、805一、MSP430中一種MCU的結構和編程;
至少精通ARM、AVR、STM3二、805一、MSP430中一種MCU的結構和編程;
熟練掌握ARM、MCU等控制器內部原理和配置
ZigBee是基於IEEE802.15.4標準的低功耗局域網協議。根據國際標準規定,ZigBee技術是一種短距離、低功耗的無線通訊技術。
【人工智能工程師】
數學好
有基於Opencv開發項目經驗者優先
人工智能、深度學習、模式識別、 機器學習/機器視覺/圖像識別/語音識別/天然語言處理等算法開發;
目標檢測、識別算法,有Faster R-CNN,FaceNet等算法
熟悉深度學習開源平臺,如TensorFlow、Torth、Caffe、Keras、Theano 、Spark、OpenAI、Mxnet等
統計機器學習(如深度神經網絡、Boosting, 圖模型,機率統計,最優化方法、等)
計算機視覺(如圖像識別理解,人臉檢測識別、目標檢測和跟蹤、OCR、加強現實、圖像質量評價,圖像分割加強等)
熟悉主流的通用機器學習算法和大數據挖掘算法,如SVM,神經網絡,深度機器學習,數學建模,數據特徵提取及挖掘等,並對CNN,RNN等模型有深刻的研究。
【大數據工程師】
熟悉大數據平臺如Hadoop、HBase、Spark、Hive,Storm,Mahout更佳
使用tomcat/weblogic/WebSphere等中間件,懂得優化及集羣搭建;
熟練使用mongodb/redis/Ehcache等流行技術;
熟悉MapReduce, Spark等基於Hadoop的數據架構及挖掘分析工具;
熟悉Matlab、SPSS等軟件工具,熟悉數種經常使用挖掘分析算法;
掌握經常使用的數據挖掘算法(貝葉斯、決策樹、k—均值、SVM、邏輯迴歸、時間序列等)
掌握經常使用數據挖掘工具軟件:SPSS/MatLab/Weka等
說了這麼多,最後送各位小白一句本身的心得: 堅持學習、不斷學習、總有一天你會是真正的大牛!