小白该如何学好 C ++?
那么作为一个从 C 语言小白摸爬滚打、入坑无数到成长为如今的高级 C ++ 游戏开发工程师、高级 C ++ 服务端工程师、项目经理、技术总监、我想跟大家分享下我大牛的学习心得与体会!
Linus 曾说过:“C++ 是一门很恐怖的语言,而比它更恐怖的是很多不合格的程序员在使用着它”,这个世界上最难的编程语言可能非 C ++ 莫属了,呵呵,虽然有点夸张 …… 但是,大家记住,难度越高意味着含金量与竞争力越高,越能把你和别人区分开来,所以,你在一开始就需要有很小心谨慎的态度,并把 C ++ 当成一种难以训服的猛兽来看待。
最后,如果大家如果在自学遇到困难,想找一个 C ++ 的学习环境,可以加入我们的 C ++ 学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题。
那么如果你只是一时兴起,并没有真正沉下心来想学好一门语言,那么我不建议你学,因为学习 C ++ 是痛苦的,没有兴趣,那么这个学习过程将是一种折磨与煎熬!
门槛与含金量并存,一旦你学会了 C ++,可以说,很多语言对你而言也就不是难事了。
一般呢,学习 C ++ 的新手学员有以下几种情况:
小白该如何学好 C ++?
1. 纯小白(非计算机专业、没学过任何编程语言)
2. 接触过 C 语言、但没学好
针对第 1、2 种情况,我建议一定要把 C 语言基础打牢,如果 C 没学好,学 C ++ 会很受挫,打击自信心,可以循序渐进,不知道怎么学的可以关注我们,我们有一站式的学习方案!
3.C 语言已经学的很好了,但没接触过 C ++
有了扎实的 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-4、H.264、H.265、G711、AAC 等);
熟悉流媒体协议 RTP/RTCP , RTMP, RTSP, SIP,HLS,HDS,TS;
熟悉开源多媒体项目 FFmpeg、GStreamer、vlc、live555 ,nginx-rtmp,WebRTC、DSS、,darwin ;
熟悉流媒体服务器 Red5、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 如 STM8、STM32 系列处理器的架构和应用;
精通 ARM、AVR、STM32、8051、MSP430 中一种 MCU 的结构和编程;
至少精通 ARM、AVR、STM32、8051、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 等
说了这么多,最后送各位小白一句自己的心得:坚持学习、不断学习、总有一天你会是真正的大牛!