打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从小白到月薪20K我的C学习思路总结 (作为一个 C++ 程序员GCC/GDB 是必须要去了解的linux也是必须要会的)

前言

  • https://m.toutiaocdn.com/i6834100274290754061/?app=news_article&timestamp=1591231315&use_new_style=0&req_id=202006040841550101300361452D331623&group_id=6834100274290754061 

  •    (作为一个 C++ 程序员GCC/GDB 是必须要去了解的linux也是必须要会的)

  • 读者定位是两类人群:a.初学者,即将入手 C++ 语言、不知道如何开始;b.已经开始学习C++许久了,却进度缓慢,抓不到精髓,倍感迷茫。

  • 本文不会深入到C++语言内部挖掘技术点。

  • 如果你自诩C++高手,请绕道;如果你本就是C++高手,开发经验丰富,可以对本文提一些建议。

  • 本文将结合我自己的学习经历和经验,谈一谈 C++ 应该如何学习。

【文章福利】:如果觉得学习资料难找的话,可以关注!转发!私信 “资料” 即可免费获取C语言/C++基础学习全套视频!案例实战!书籍等...资料~

为什么 C/C++?

C++ 是一门编程语言,请注意它仅仅是一门编程语言。这句话的意思就是一旦有人在做语言好坏之争的时候,一笑而过即可。特定的语言只是用来在特定的领域解决特定的问题,仅此而已,尤其是现在众多语言纷飞的年代,这句话的正确性不容置疑。

在编程领域里,每个人都会有他/她的入门语言,各持己见。我个人认为 C 语言是一个很不错的选择,语法简单,深度可深可浅,高级语言的鼻祖。很重要的一点是现今的各种编程语言,或多或少都是 C 语言的衍生品,或者是衍生品的衍生品。语言相通,只要 C 语言学好了,上手其他语言问题不大。C 语言的灵魂在于指针,指针可以帮助你更好的理解内存,理解操作系统的工作机理。

C++ 是一门争议性语言,喜欢研究的人很多,吐槽的(包括一些大神级的人物)的人也很多。在 C/C++ 的时代(C/C++刚出道的时候),语言的可选性较少,所以 C++ 干了许多事情,现在时代不一样了,正如我前面所谓语言纷飞,针对性语言众多,程序员的选择性也就多了(有很多的优秀的语言可以去学,C#,java,php,python,ruby……),所以 C++ 不再是必须品。

在你开始学习之前,请慎重考虑一下,为什么要学?如果考虑好了,请继续阅读。

C++新手

选择一本好书

如果你发现以“数字”命名的书籍,请扔掉!(21天学通C++?)如果你发现以“通”字样命名的书籍,请扔掉!(零起点学通C++?C++从入门到精通?)如果你发现把“Visual” 和 “C++” 联系起来的 C++ 教程,请扔掉!(太多了,不举例了)如果你发现“void main”作为实例的书籍,请扔掉!如果你发现“”作为实例的书籍,请扔掉!……

有几本书可以供你选择:

选择一个好的IDE

请注意我强调的是IDE(集成开发环境),而不是套餐(GCC+VIM/EMACS+GDB+[linux]),对于一个初学者来说,一定要抓住重点。

初学者一定要相信这一点,网上太多人吹嘘学 C++ 不应该用 IDE ,就应该直接 文本编辑器+GCC 用 GDB 调试,进而言语鄙视 IDE 。我不知道你抱着什么心态,我只想说你入门是那样入门的吗?当时有没有 IDE ?你了解 IDE 吗?你公司用什么开发?

对于一个入门新手,一个人性化的调试环境是必须的。当然,作为一个 C++ 程序员的话,GCC/GDB 是必须要去了解的,linux 也是必须要会的。

C++入门(停留在表面)

参考标准:熟练掌握 C++ 语法结构,了解 C++ 主要模块,技术难点。大部分书上可以找到的知识点。

学习 C++ 要不要学习 C ?

作为这样的一篇文章,这个探讨几乎是必须要做的。

我的观点很明确,要学!

因为我先学 C 语言,后学的 C++ 的,而且学习使用过程中无数次穿插的相互学习。我的程序中从来没有刻意的区分这是 C 还是 C++,我把握的标准是怎么样方便怎么来。

就好像文件读写我从来都不用 C++ 的文件流,因为我习惯了 C 语言的 fread、fwrite、 fopen、 fseek、 ftell 等等。

我是站在语言的语法和库的角度来说“要学”的。如果你要学面向对象的话,那就没必要学 C 了,好像也没有学 C++ 的必要了,你可以选择一个纯面向对象的语言去学面向对象岂不更好。

总结,以我的个人经历来说,学 C++ 可以先学习 C 语言(观点已明确,探讨结束!)。

要了解哪些东西呢?总结是两点:语法和库。所有的语言几乎都是一样的。

  • 语法[基本类型、标准库类型、数组和指针、表达式、语句、函数等]

  • STL[容器,算法]

  • 模板与泛型编程

  • 类与面向对象

语法熟练的是必须的;熟练使用 STL 编程,面向对象思想不是一天两天就可以有的,需要不断的历练和实战才能培养出来的;面向对象在C++中的实现方式一定要熟(继承,派生,虚函数等);模板的实参演绎要搞清楚。

如何实现入门?

  • 看书。《C++ primer》,《C++标准程序库》,《C++ template》

  • 多思考,多写小程序。

C++进阶(技术研究)

参考标准:内部机理,奇淫技巧

  1. 深入C++内部,探究实现的机理[为什么模板不支持分离编译?虚函数/多重继承是怎么实现的?类型转换做了那些事情?异常处理?等]

  2. STL源码学习[学习别人的设计方法?为什么STL效率高(为达效率,无所不用其极)?学习数据结构和算法?内存池?RTTI?等]

  3. 内存[理解指针运算?内存对齐?类的内存布局?new/delete 和 malloc/delete的区别?函数变参的实现?存储方式?智能指针?等]

  4. 编译器在编译,链接的过程中偷偷的做了那些事情。[如何分析编译器的提示?链接错误代表可能出现哪些问题?等]

  5. 跟上C++库的潮流,研究新标准。

如何实现进阶?

  • 看书。Effective 系列书籍,《STL源码剖析》,《C++标准程序库》,《C++沉思录》,《高质量C/C++编程》,《C++编程思想》,《深度探索C++对象模型》等。

  • 写软件,遇到问题之后自己折腾,自己探索。

  • 逛社区,回答别人的问题。

  • 多看看别人的博客。

  • 结交自己的技术圈子。

最后

现在的互联网是浮躁的,导致现在的学生是浮躁的,都想一步登天。

现在学习环境的肮脏的,是个人都想出来赚几声吆喝,就拿博客园的首页口水战一样,你喷我,我喷你,其实到最后都不知道大家在喷什么,只知道必须站出来喷一下证明自己的存在!这是多么可悲的一个环境。

最后给大家几个忠告来结束本文吧:

  • 多交流:不管你的技术多么硬,你都不可能一个人做完所有的事情,你要学会与别人合作,与别人交流。交流过程中,要注意交流技巧。学会尊重别人,但要不亢不卑。

  • 多动手:熟能生巧,这是万能之理。我们干的是技术活,最能证明自己能力的就是干!不是扯淡!

  • 多思考:不要做编码机器。

  • 多总结:相同的问题不可能只出现一次,尤其是在我们这个行业。总结是为了你在以后更快的解决类似的问题,提高工作效率。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何使用google解决问题
2004年《程序员》随笔
汇编语言与C语言的混合使用
Linux下C++开发工具介绍
开始在linux下做c语言开发
在Linux下学习C语言有什么好处?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服