前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)

一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)

作者头像
我是管小亮
发布2020-04-20 17:00:19
1.3K0
发布2020-04-20 17:00:19
举报

文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever

0、写在前面

讲道理,其实这个文章我是怀着一个很严肃的心情写的,因为一谈到【找工作】这个问题,就很焦虑。。。。。。看到这个省略号了嘛?这就是我的心情 :|,尤其是在就业一年比一年难的情况下。

为什么这么说?

事实上19届秋招算法岗就有些【供过于求】了,头条甚至发了 算法劝退贴。而这很大程度上就是由于前几年算法就业形势太好了,导致一大批人转算法,这导致的大泡沫其实还没有消化掉,所以其实不是现在算法突然不好找工作了,而是之前太容易了。其实你说公司真的不缺算法工程师嘛?当然不是,公司也是有算法工程师的缺口的,那为什么出现这种情况?除了要劝退一部分盲目入行的同学;听到、遇到的好几个HR都说,收到几百份简历,但是没什么匹配的。所以说做算法的人多是真的,可是需要做算法的人也是真的,而主要的矛盾点在于 供需不匹配

所以在这个大背景下,加上最近看到好多关于C/C++的学习路线,以及若干大佬的面经,此外也有很多同学询问算法或者数据结构相关的资源,就有了这么一个博客。因为我也在学习,没有办法给出具体的方案,不过下面提到的这些相关的都是必备的,也就是必须要学习的。这个文章应该会是一个【资源】性质的文章,关于 准备学什么,需要学什么,希望和各位共勉。

1、编程能力

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

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

  • MATLAB 大家都懂的,做实验室研究确实很棒,高效方便的矩阵和数组运算,画图方面也相当不错,但是工业应用还没听过谁说是用 MATLAB 实现的呢。
  • python 你可能想问为什么,可以这么说,如果连 python 这样比较简单的语言还用不熟,那真是无话可说。

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

(1)熟练使用 linux

新手肯定都是用 Windows 起手的了,像我之前就是这样,但是在学习过程中发现在 Windows 上搞不定了,一般也会先忍几次,然后掉头就去学 linux 了,一定是这样的过程。哪些在 Windows 上真的搞不定呢?比如:最新论文中提出的视觉开源算法等等。

但是在条件上可能很多人都觉得不是太合适,比如实验室条件,电脑条件等等,不过对我们而言,linux 并不需要了解太深。装个 ubuntu 系统,常用的文件操作、程序编译等知道就OK了。剩下的完全是在使用的过程中现用现学,手边常备一本书 《鸟哥的linux私房菜》,神书,你可以百度或者Google一下自然就知道这个书的强大了。在或者现在的网络比较强大了,资源也是很多,实验楼 也是一个不错的选择,帮你搭配好的环境,直接使用就OK了。如果还是想自己搞一下,虚拟机也是一个不错的选择,不会影响你电脑本来的环境配置,但是还满足了要求。

(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 的详细的安装教程(图文并茂)。

(3)熟练使用C++

至于 C++,比较普遍的都是 《C++ primer》 或 《C++ primer plus》 这样的大块头书,如果是入门的话应该还可以,倒是不如 《王道程序员求职宝典》 这类书实用。大块头书优点在于全面,同时也往往导致了重点不突出。

直接看图说话:

怕吗?知道什么叫做恐惧吗?就这?没错,真的厚,,,我服了,但是你还是得看,可以关注我的CSDN,有笔记和课后题的更新。

如果想看视频课程的话,推荐中国慕课上北大的《程序设计与算法》,第1门课程是 C 语言程序设计,第2门课程是算法基础,第3门课程是 C++ 程序设计。看视频课程一般比较慢,如果没什么基础或者特别想把基础学好的话,强烈推荐。

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

(4)良好的算法基础

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

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

(5)良好的编程习惯

这里说的习惯有:多使用类,多利用函数封装,写好项目的目录结构,良好的变量或者函数命名,善用程序的注释功能。这可以帮助你更好的和同事或者同行沟通,而且看着也舒服,就算好久不看程序了,依然可以做到很好的回溯记忆。 这个真的是一个很重要的但是被好多人忽略的习惯,希望咱们能跳过这个坑,让自己更具有影响力。

2、C++的其他书籍

《STL源码剖析》是一本 STL 方面的神书,介于 STL 的地位,虽然是一个很老的书了,很多内容都过时了,比如空间配置器,但是面试官还是会问。。。可以跟面试官讲讲 ptmalloc 的实现,故而整本书都是重点,有没有回到高中或者上学的时候那种感觉,老师说划重点了,整本书都是(微笑)。 《深度探索C++对象模型》基础书籍,虽然基本只会问虚函数的实现,看一篇博客也能应付面试,但是还是建议多看几遍。比如某大佬(当然不是我)表明自己STL和对象模型我都看了3遍以上,因为太容易忘了,所以还没开始的我和你赶紧的吧。

3、g++, CMake和Makefile

python 是脚本语言,而当前大量的 AI 算法都部署在移动端嵌入式平台,需要使用 c / c++ / java 语言,g++,CMake 和 Makefile 正是 Linux 下编译 C系代码 的工具,也是必备的基础。实际上一些python,matlab开源项目也需要预编译,更多的等到了工作岗位自然懂。

4、shell,vim 和 git

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

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

5、操作系统

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

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

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

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

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

6、计算机网络

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

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

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

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

7、数据库

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

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

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

《高性能mysql》,这个书只要读前面索引和性能的部分即可,除非你有很多时间去准备,这样就随便了,我是不行了。。。

如果问了数据库的话,也不会太多,校招时间有限,所以建议基础先打好,后续再学习更深入的部分。

8、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上有人下载过,具体的忘了。

9、后台开发

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员管小亮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档