以作者自己的经验来看,即便您将来不打算从事C++方向的开发,也建议没有编程基础的同学先从C语言开始学习,掌握C语言及面向过程的编程思想,接着再学习具有一脉相承的C++语言,不仅可以科学的学习两门计算机届最主流的开发语言,更可以体会到软件开发思想发展的变化,起到到触类旁通的效果。
1、如果你有编程语言经验,学习C++,那我认为应该不是太难,因为编程的基本思想是共通的,数据结构与算法,操作系统,计算机网络,设计模式,这些知识是所有语言都通用的。
2、阅读Googel C++ Style Guide,网上直接搜索就可以,学习一个语言,首先要了解它的编码规范,Google C++编码规范其实在业内也是非常受认可的,它也代表着一中编程哲学,根据它的规范也能学到很多东西。(关于C++编码规范可以看c++代码整洁之道)
3、尽可能使用最新的标准,C++11 、c++ 14、C++ 17,甚至是C++ 20,目前来说C++11是C++发展的一个里程碑,极大的提高了C++的开发效率,了解C++ 11的新特性那是学习C++所必须的,但了解这些最多也就是个及格,时代在发展,科技在进步,C++14和17也引入了很多新特性,如果你能相较于其他人更早的了解并用上,你就有优势,个人认为C++ 20和C++23也会是C++发展历程中的一个里程碑,关于协程关于concepts,我们都需要了解。
4、基于RAII编程,底层语言可能对于多数人最难的就是内存管理啦,内存都需要开发者自行管理,遵循RAII编程风格非常重要,需要熟练使用智能指针管理内存,明确对象所有权,所有权转变时使用std::move,明白智能指针的实现原理后可以尝试实现一个简单的智能指针。
熟练使用各种问题分析工具,gdb是最基本的debug工具,Address Sanitizer, TCMalloc,Valgrind定位内存问题,perf,gprofile和各种Linux命令定位性能问题。
5、熟练解决各种编译链接问题,cmake,make和各种编译链接命令,掌握各种编译链接知识,需要清楚预处理,编译,汇编,链接四个阶段都在做什么,了解基本的命令行参数的含义,包括但不限于-l -L -I -c -o -std=c++1x等。
6、了解C++ STL:C++最大块的内容貌似就是STL啦,使用STL可以让我们开发效率得到大幅度提高,常用的有vector,string,deque,list,tuple,map,set等,这些基本所有语言的原理都是类似的。
7、开发过程中所有人的开发环境尽可能一致,使用一致的编码规范,一致的format规则。
8、常用的一些琐碎的知识点:new是什么作用,malloc free是什么作用,类的构造和析构是什么,起到了什么作用,如何使用智能指针来管理内存。
关于C++教程的学习方法,完整教程需要您具备基本的C语言的语法知识,并且循序渐进的学习理解
作为重视动手的一套C++教程,我们教程中的知识点更多是用通俗的白话和样例代码展现,并且每个大的知识点都有完成的例子程序,我们希望读者可以边学边上机实现,来验证例子程序的结果,因为并不是所有的系统、编译器结果都完全一样,我们也极力建议您亲自上机运行来确认。
以此来保证大家的学练同步,强化动手能力,真正做到学会C++、会写C++!