一个C/C++开发工程师的学习路线

声明:

1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。
2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。
3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。
4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。

文章目录

    • 声明:
    • 资源(^-^)V
    • 〇、写在前面
    • 一、编程能力
        • (1)熟练使用 linux
        • (2)流畅使用 python
        • (3)熟练使用 C++
        • (4)良好的算法与数据结构基础
        • (5)良好的编程习惯
    • 二、C++的其他重要书籍
    • 三、g++, CMake和Makefile
    • 四、shell,vim 和 git
    • 五、操作系统
    • 六、计算机网络
    • 七、数据库
    • 八、Linux提高
    • 九、后台开发
    • 十、总结
    • 参考文章

资源(^-^)V

资源因为网上很多,而且我的百度云也不是会员,GitHub也不能放大于25M的文件,就自己找一找吧。。。

〇、写在前面

  • 关于深度学习和算法工程师的成长路线在这个博客中,【记录】一个深度学习算法工程师的成长之路(思考和方法以及计划);
  • 关于后台学习和开发工程师的学习路线在这个博客中,【资源】C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔),即本文。

在这里插入图片描述
事实上19届秋招算法岗就有些【供过于求】了,头条甚至发了 算法劝退贴,而这很大程度上就是由于前几年算法就业形势太好了,导致一大批人转算法,这导致的大泡沫其实还没有消化掉,所以其实不是现在算法突然不好找工作了,而是之前太容易了。其实你说公司真的不缺算法工程师嘛?当然不是,公司也是有算法工程师的缺口的,那为什么出现这种情况?除了要劝退一部分盲目入行的同学;听到、遇到的好几个HR都说,收到几百份简历,但是没什么匹配的。所以说做算法的人多是真的,可是需要做算法的人也是真的,而主要的矛盾点在于 供需不匹配
在这里插入图片描述
所以在这个大背景下,加上最近看到好多关于C/C++的学习路线,以及若干大佬的面经,此外也有很多同学询问算法或者数据结构相关的资源,就有了这么一个博客。因为我也在学习,没有办法给出具体的方案,不过下面提到的这些相关的都是必备的,也就是必须要学习的。这个文章应该会是一个【资源】性质的文章,关于 准备学什么需要学什么,希望和各位共勉。

一、编程能力

在这个博客中谈到过,【记录】一个深度学习算法工程师的成长之路(思考和方法以及计划),这里面还是直接拿出来用了。

这真是个老生常谈的问题,为什么这么说呢,自然是因为这个【编程能力】我听过不下几百遍,听的脑瓜子都疼,可是没法子,这就是 必备技能,必备到什么程度?

这么说吧,假如你想写作文,如果你不会写字,组词,造句,我想你应该完全没法完成这个创作过程。很形象吧,但是也确实如此,仔细想一想,招你进去是要干活的,公司不会招聘一个只会 MATLAB 或者 python 都用不熟的人来做项目开发吧,做纯算法研究都不行。

  • MATLAB 大家都懂的,做实验室研究确实很棒,高效方便的矩阵和数组运算,画图方面也相当不错,但是工业应用还没听过谁说是用 MATLAB 实现的呢。
  • python 你可能想问为什么,可以这么说,如果连 python 这样比较简单的语言还用不熟,那真是无话可说。
  • C++ 你更不必说了,因为这是一个开发工程师的主要工具,你的刀都没了还准备打架吗?嗯?

那么 具体地说,编程能力需要哪些基本要求呢?

(1)熟练使用 linux

在这里插入图片描述
新手肯定都是用 Windows 起手的了,像我之前就是这样,但是在学习过程中发现在 Windows 上搞不定了,一般也会先忍几次,然后掉头就去学 linux 了,一定是这样的过程。尤其是很多工业上的项目实现都是在 linux 下完成的,深度学习的很多算法也是在 Windows 上真的搞不定,所以 linux 真的是一个必备的工具。。。

但是在条件上可能很多人都觉得不是太合适,比如实验室条件,电脑条件等等,那也没有办法,只能搞起,下面是好久之前询问大佬给的意见,可供参考。
在这里插入图片描述
如果是剩下的完全是在使用的过程中现用现学,手边常备一本书 《鸟哥的linux私房菜》,神书,你可以百度或者Google一下自然就知道这个书的强大了。在或者现在的网络比较强大了,资源也是很多,实验楼 也是一个不错的选择,帮你搭配好的环境,直接使用就OK了。如果还是想自己搞一下,虚拟机也是一个不错的选择,不会影响你电脑本来的环境配置,但是还满足了要求。

个人建议

  • 《鸟哥的linux私房菜》
  • 实验楼

linux 内核的推荐放在后面了。

(2)流畅使用 python

在这里插入图片描述
网络如此发达的今天,如果你说你找不到资源我是不相信的,但是如果你说你眼花缭乱了,我是毫不质疑的。因为我当时就就是这样的,基础部分看廖雪峰的 python教程 就可以了,我个人有看一些,但是真正入门的是一本书——《Python编程:从入门到实践》,极其的基础,但是对小白来说非常友好。

有的同学会问是学 python2 还是 python3?这么说吧,python 核心团队计划2020年停止支持 python2,也就是说 python2 马上就要说再见了,肯定还是学 python3,遇到之前的 python2 的代码再查找区别即可。python 学起来其实很简单,看别人代码的过程就是学习的过程。对于不熟悉的用法多搜下官方文档,如 python,numpy,pandas,matplot,scikit-learn 等等。

python 的开发环境值得说一下,因为有太多选择,这里比较建议使用 pycharm 和 jupyter notebook 吧,具体可以参考这个博客——Windows10 下 Anaconda和 PyCharm 的详细的安装教程(图文并茂)。

个人计划

  • 《Python编程:从入门到实践》
  • 廖雪峰的 python教程

(3)熟练使用 C++

在这里插入图片描述
至于 C++,比较普遍的都是 《C++ primer》 或 《C++ primer plus》 这样的大块头书,我也写过这类的博客,不过还没有写完,因为写起来太累了。。。《C++ Primer》学习笔记/习题答案 总目录,这种特别厚的书有一个什么样的问题呢?

直接看图说话:
在这里插入图片描述
怕吗?知道什么叫做恐惧吗?就这?没错,真的厚,,,我服了,但是你还是得看,比如我现在就暂时停下了《C++ primer》的博客更新,去啃《C++ primer plus》了,原谅我的不厚道,对不住了兄弟们,我实在是觉得《C++ primer》的逻辑有点异于常人。。。《C++ primer plus》更适合我一点,最近正在写《C++ primer plus》的课后题:https://github.com/TeFuirnever/Cpp-Primer-Plus,有一起的小伙伴可以关注一下。

入门之后就需要看一下《Effective C++》这本书了,可以说是必须要看的书之一,不过有大佬跟我说看过《C++ Primer》之后就不用了看《Effective C++》这本书,因为基本都包含在内了。。。你可以试一试。

看完上面的书之后(大块头书优点在于全面,同时也往往导致了重点不突出),可以看一下 《王道程序员求职宝典》,这类书就是比较实用,推荐可以后期提高或者准备面试之前看。

如果想看视频课程的话,推荐中国慕课上浙江大学的 《程序设计入门——C语言 浙江大学》,《C语言程序设计进阶》,第一个课是非常基础的C,第二个课是进阶加上一些数据结构,目前还在更新中,不过看视频课程一般比较慢,但是如果没什么基础或者特别想把基础学好的话,强烈推荐。

个人计划

  • 《C++ primer》
  • 《C++ primer plus》
  • 《Effective C++:改善程序与设计的55个具体做法》
  • 《more effective C++》
  • 《程序设计入门——C语言 浙江大学》
  • 《C语言程序设计进阶》
  • 《王道程序员求职宝典》

(4)良好的算法与数据结构基础


开发能力如果想过关,算法效率必须要高,因为在实际生产中还是有要求的。因为工业界用的算法是滞后于学术界好几年的,所以不要对公司所做的算法有太多的幻想,现实用的算法也没有那么高端,大部分时间都不是用在建模,而是在开发,这也就是说你要好好准备算法与数据结构,这样你就立于不败之地了,无论是啥,都能游刃有余,懂不?

道听途说的,某师哥说过进入公司培训期间就是刷LeetCode!?!

个人计划

  • LeetCode
  • 牛客网
  • 《剑指offer》(准备校招刷一遍,校招过程再刷一遍,哪里不会刷哪里)
  • 《算法图解》(python写的,算法的入门书籍,写的真的牛逼,通俗易懂,之前写过 笔记,其实就是偷偷抄了抄书,写了写个人看法)
  • 《大话数据结构》(c语言写的,数据结构的入门书籍,写的真的牛逼,和《算法图解》一样,都是神书,作者自嗨写成了教案,你说牛逼不)
  • 《算法导论中文第三版》(这是本神书。。。据说你要是能看完就是大佬了,如果能看懂部分就是大牛,如果能全部看懂那你一定是在吹牛逼,骗谁呢兄弟???)
  • 网易云课堂-浙江大学《数据结构课程》(推荐,0基础学生的必备良药,基础视频,每节课的配套题目必须独立完成)
  • 《程序员代码面试指南》(左程云,好书,配套左神的视频使用效果更佳)

(5)良好的编程习惯

在这里插入图片描述
这里说的习惯有:多使用类,多利用函数封装,写好项目的目录结构,良好的变量或者函数命名,善用程序的注释功能。这可以帮助你更好的和同事或者同行沟通,而且看着也舒服,就算好久不看程序了,依然可以做到很好的回溯记忆。

这个真的是一个很重要的但是被好多人忽略的习惯,希望咱们能跳过这个坑,让自己更具有影响力。

二、C++的其他重要书籍

《STL源码剖析》是一本 STL 方面的神书,介于 STL 的地位,虽然是一个很老的书了,很多内容都过时了,比如空间配置器,但是面试官还是会问。。。可以跟面试官讲讲 ptmalloc 的实现,故而整本书都是重点,有没有回到高中或者上学的时候那种感觉,老师说划重点了,整本书都是(微笑)。

《深度探索C++对象模型》基础书籍,虽然基本只会问虚函数的实现,看一篇博客也能应付面试,但是还是建议多看几遍。比如某大佬(当然不是我)表明自己STL和对象模型我都看了3遍以上,因为太容易忘了,所以还没开始的我和你赶紧的吧。
在这里插入图片描述
个人计划

  • 《STL源码剖析》
  • 《深度探索C++对象模型》

三、g++, CMake和Makefile

在这里插入图片描述
关于部署在移动端嵌入式平台,需要使用 c / c++ / java 语言,g++,CMake 和 Makefile 正是 Linux 下编译 C系代码 的工具,也是必备的基础。实际上一些开源项目也需要预编译,更多的等到了工作岗位自然懂。

个人计划

  • g++
  • CMake
  • Makefile

四、shell,vim 和 git

在这里插入图片描述
Linux 下一个熟练的工程师,会比 Windows 下工作效率高很多,提高写代码效率可以从终端多任务管理,熟练使用 shell 命令,熟练使用 vim 等开发环境,熟练使用 git 命令等地方入手。

  • shell 命令是 Linux 的操作基础,也是学习使用 Linux 的开始,而慢慢熟悉高级的 shell 命令在将来的工作中会带来很大的效率提升。
  • vimLinux 下最常用的编辑器,从小白到高手都可以使用,而它的列编辑,查找替换,自动补全等功能都是效率的保证,或许从 visual studio 等环境切换过来的同学刚开始会有些许不适应,但是时间久了就会越来越明白 vim 的好。
  • git 是程序员必备的素养,慢慢学会维护几个自己的代码库,等到将来出问题的时候就明白了。

个人计划

  • shell
  • vim
  • git

五、操作系统

在这里插入图片描述
《深入理解计算机基础》(CSAPP),一本神书,极度推荐*****,号称比同等质量的金子更加之前的书,这个评价一点也不为过,是一个必读的书籍。

《现代操作系统》,建议在读完上一本书后再读,讲述操作系统的概念,可以配套网易云盘北大或者清华的操作系统课程视频,这样效率会高很多,不然自己摸路实在是。。。不想说了,就这样吧。

《UNIX环境高级编程》(APUE),同样是一本强烈推荐的书籍*****,尤其是如果想进鹅厂(腾讯),建议此书列为必读,如果能够理解这本书的内容,网络编程不会是你拿到offer的拦路石。

关于想去哪一个公司,可以留言区发表一下看法,我们探讨探讨,共同努力,话不多说,我想去字节。。。不过现在还只是在做梦中。。。
在这里插入图片描述

还有一个一个牛客推荐的——MIT6.828的这门课,要求自己设计出一个简易的操作系统,是一个极好的实践项目(7个lab),如果有机会就建议搞一下,因为这可以作为作为项目的东西。

个人计划

  • 《深入理解计算机基础》
  • 《现代操作系统》
  • 《UNIX环境高级编程》
  • 《MIT6.828》

六、计算机网络

在这里插入图片描述
不知道你们本科学没学过计算机网络,如果学过的话应该会好一些,虽然学的比较水,但是聊胜于无。本人在本科学过的《计算机网络 自顶向下方法》,这本书虽然厚,虽然是翻译版本,但是真的不错。

《图解TCP/IP》,这本书非常的简单明了又很薄,只要花上三天时间就能大概读完。多读读这本书还是挺有好处的,基础数据,又有图,可以说是很友好了。

《TCP/IP详解》卷一,一本进阶书籍,属于必读的书籍之一,其中的12-16章是重点,TCP、IP、UDP等等。

其它部分看书太麻烦了,直接从博客里看了。

个人计划

  • 《计算机网络 自顶向下方法》
  • 《图解TCP/IP》
  • 《TCP/IP详解》卷一
  • 博客。。。

七、数据库

在这里插入图片描述
很多面试官都会问一下,你是不是学过数据库,如果没有的话,大概就不会问了,不是什么特别影响的事。

《数据库概论》基础书籍,快速读过一遍就可以了,重在了解概念与基础,相当于是个入门级别的。

《Mysql必知必会》基础书籍,快速了解mysql的好书,强烈推荐,Mysql(关系型数据库管理系统)是一个很重要的数据库知识,是 SQL 语言是用于访问数据库的最常用标准化语言。

《高性能mysql》,这个书只要读前面索引和性能的部分即可,除非你有很多时间去准备,这样就随便了,我是不行了。。。
在这里插入图片描述
如果问了数据库的话,也不会太多,校招时间有限,所以建议基础先打好,后续再学习更深入的部分。

个人计划

  • 《数据库概论》
  • 《Mysql必知必会》
  • 《高性能mysql》
  • 牛客网

八、Linux提高

在这里插入图片描述
Linux 环境编程 apueunp 两本是必须的,但是因为太厚了,看起来还是有点痛苦的,还好是不需要全看的,而且内容重叠很多。大佬推荐:unp 卷1前面8章是重点,卷2前面4部分都挺重要的;apue 全部,先是要有个概念,自己写代码的时候就知道哪块重要了。

《深入理解linux内核》,这本书是挺有名,不过很多人都是完全啃不动,一个大佬推荐《linux内核设计与实现》,外加一大堆博客,除此之外,《深入理解计算机系统》讲的东西比较简单,可以作为一个补充。

《Linux多线程服务器端编程》,陈硕的书,讲 muduo 网络库的,如果你能看好多遍的,收获肯定是非常多的。另外前面部分是后台开发的一些经验之谈,对面试也很有用。还有好多项目都是基于 muduo 实现的,基本上是必读书籍了。

《Redis设计与实现》也是一本看完之后感觉特别好的书,很值得学习,可以很快就看完。有很多重要的数据结构可以在面试的时候讲出来,比如跳表、redishash 表等等。

《深入理解Nginx》也是极其经典的一本书,因为 nginx 太经典了,很多面试官也都提到过,所以可以看一下。

一个大佬还推荐了,短小精悍的源码——leveldb,对照博客就可以把 leveldb 源码看完,并不需要多长时间,在此基础上还可以了解一下 rocksdb

《Linux内核完全剖析——基于0.12内核》,这个书好像之前CSDN上有人下载过,具体的忘了。

个人计划

  • 《apue》
  • 《unp》
  • 《深入理解linux内核》
  • 《Linux多线程服务器端编程》
  • 《Redis设计与实现》
  • 《深入理解Nginx》
  • 《leveldb》
  • 《rocksdb》
  • 《Linux内核完全剖析——基于0.12内核》

九、后台开发

《后台开发:核心技术与应用实践》是腾讯的员工写的,虽然这本书评价比较差,几乎都是抄的博客,但是内容上总结的很好,可以认为就是给咱们校招的同学写的(原来抄博客就能写书,那我岂不是也能写书了),都是后台开发需要的基础知识的总结,这本书中内容所代表的知识,基本都是腾讯的C++后台开发工程师所必备的基础,可以作为一个复习提纲。

十、总结

这就是一个拉锯战,谁能站到最后,谁就通吃,就是这么简单又残酷的道理,建议多看看面经,就知道自己有多菜了。。。共勉。

留言区有话就留言,可以一起加油,一起努力,已经无路可退,唯有逆风飞翔。

参考文章

  • 【记录】一个深度学习算法工程师的成长之路(思考和方法以及计划)
  • 我的C++后台/基础架构岗位学习路线(offer大多是ssp
  • 送你一个励志故事——涵盖20多所互联网公司的校招C++面经

你可能感兴趣的:(C++)