我是科班毕业,但学校里什么都没教会,编程都是我自学的
现在工作近十年,辗转几个大厂,也算活出来个模样,这里把我的经验告诉你
学好计算机只需要两步:
第一:选一门语言学习
其次:学好四大基础课
一、语言的选择
目前而言,linux C++服务端开发、Java后端开发、web前端开发,就业岗位都很多,都是不错的方向。
我曾经整理过linux C++服务端的学习路线图,这里分享给大家
这里需要注意的是,这条路线图是Linux C++从入门到架构师的完整路径,如果单纯找工作,学完第三步:征服linux就已经超过了90%的毕业生。
包括计算机基础(组成原理、计算机网络、操作系统、编译原理、数据结构、算法、设计模式)、开发环境及编译器的使用、第一阶段(C++入门)、第二阶段(C++进阶)、第三阶段(征服Linux)、第四阶段(高级进阶)、第五阶段(架构师)及近五十个优秀开源工程汇总、及程序员所需具备的软技能。
这份路线图是绝对是每个C++工程师的必备经典,大家可以根据自己的能力水平,根据路线图去看自己还需要补齐哪些知识,并且向高级进阶时,又需要哪些知识点。
这份路线图,是我跟两个大厂朋友共同完成的,为了不给大家造成误导,连续勘校了一个月。大家帮我点个赞吧。
我把所有子主题、子子主题都缩了进去,再给大家看一下详细主题
需要高清无水印思维导图源文件的小伙伴,可以点击这里获取:
linux C++技术路图及推荐学习资料下载初学,一定要跟着视频学,可以减轻很大的负担,也可以走很多的弯路。
视频强推侯捷老师的C++面向对象程序设计,我当前入门C++就是跟着侯老师学的,讲的非常仔细,现在候老师在B站上开源他的讲课视频,大家可以去看:
候捷-C++面向对象高级开发(上)_哔哩哔哩_bilibili候捷-C++面向对象高级开发(下)_哔哩哔哩_bilibili但候老师的课,一如即往的每节都非常长,短的也要三十分钟……着实很难坚持。
对于定不住的同学,可以看小甲鱼的《C++快速入门》,每个视频十分钟左右,共49集,看完以后,再看候老师的课会轻松很多。
【C++语法】《C++快速入门》_哔哩哔哩_bilibili配置书籍首推《C++ Primer》
本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。
《Effective C++:改善程序与设计的55个具体做法》(中文版)
一共组织55个准则,每一条准则描述一个编写出更好的C++的方式。每一个条款的背后都有具体范例支撑,教你怎样才能写出优雅的C++代码。这里也是很多关于C++方面面试问题的出处。
这些内容看完,C++已经入门了,接下来就进阶的内容了。
C++进阶
有关STL标准库的使用是比较难的,同样推荐大家以视频入手。
再次感谢侯捷老师,他录制了46集的系列视频讲解了《C++ STL标准库和 C++ 泛型编程》
【高清完整版】侯捷-C++ STL标准库和 C++ 泛型编程_哔哩哔哩_bilibili配置书籍推荐《C++ 标准程序库》
这本书给我感觉就是既适合初期入门,又适合当字典用,因为里面的内容比较多,好多第一次记不住。
所以也可以大致看一遍,以后用时再具体记,这样根据实际去学习我个人觉得效果会更好。
《STL源码剖析》
学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品位都会获得快速的成长。
这些内容学完以后,基本上具有了工作两年的水平,别说校招,就是社招找工作都是非常简单的。
为了方便大家,我把以上推荐的所有书籍、工程文件、开源工程地址,都已经整理好了,需要的同学可以去下载。
linux C++技术路图及推荐学习资料下载接下来是计算机四大基础课的学习。
- 数据结构与算法,
- 计算机操作系统,
- 计算机网络,
- 计算机组成原理。
这几门科目,是考研408科目,也是校招必考内容。无论是新入校园的萌新,还是工作多年的老鸟。都离不开这几门知识点。
有些同学上学时候不好好学,到进阶的时候,就出现问题了
出来混总是需要还的!
无论学习什么,最关键是要找一个风评还不错的课程,就从头到尾学一遍,千万别东学一点,西来一些的。这样的效果肯定不会太好。
这里给大家推荐一些我看过的,比较认可的课程,跟着学即可。
数据结构与算法
关于数据结构,我想说的是,它是这四大件中最简单、最基础的一个。离开了数据结构,几乎任何的程序都会失效,所以在讨论数据结构的时候,常常要把算法也连带着说一说。
要单纯地掌握常见的数据结构,就如同拆解一个个精妙的仪器件一样有趣和简单。正因为数据结构这个东西在程序中的作用,和仪器部件特别相像,不同的数据结构有着不同的特性,因此要想学好数据结构,图解是必备武器!
这里强推中国大学上,浙江大学的开设的《数据结构》课程,涵盖了常用的数据结构和算法。
数据结构_浙江大学_中国大学MOOC(慕课)辅以教材参考书,强推《大话数据结构》,光看封面你就知道这本书的风格了
没错,这就是大名鼎鼎的《大话设计模式》的作者出的,绝对顶。
算法课常常和数据结构课放在一起,在有些高校中,会存在“数据结构与算法”和“算法设计与分析”这样的两门课。
但很多同学搞不明白,数据结构与算法有什么区别,甚至有些同学以为数据结构中就包含了算法。
其实,是字面意思就能知道个大概,数据结构主要讲解数据的组织形式,换句话说,我就是我们要怎样把这些数据存储起来,所以有列表、堆、栈、树、图,这是数据结构的重点。
而算法,则注重的是思想,比如列表里的元素怎么排序、怎么在当前的存储结构中找到最大的数和最小的数?等等,说白了就是解决现实中问题的思想。所以才会有分治思想、贪心思想、动态规划这三大算法。
学习算法的套路很简单,多看、多写、多上机,既然是思想的集合,看得多了,自然无师自通。
至于刷题,很多同学都知道要刷LeetCode。
LeetCode题库:(2123题)
题库 - 力扣 (LeetCode)总共两千多道题,而且有些题,非常难,就算每天10题,也至少刷半年。这显然不适合绝大部分同学。
所以,我们要找到最核心、最重要的题集,即可
比如,如果时间紧张,可以先刷《程序员面试宝典》里的题目,总共109题。
《程序员面试宝典》刷完以后,有时间,可以再刷《剑指offfer》的题目,共75题。
《剑指offer》因为这两本书,都是面向面试的高频题汇总,自然有很多题目是重合的。这也正能说明这两本书的重要性。
当然,我也有一本谷歌师兄总结的高频面试算法习题集,包含了常见的数据结构和算法汇总,无论是排版还是内容,都是非常棒。
Star 7K+! 谷歌师兄的刷题笔记火了!具体地,我也专门写过一篇如何学习算法的文章,五天破千赞,有兴趣的同学可以去仔细研究。
为什么有人说弄懂了《算法导论》的 90%,就超越了 90%的程序员?计算机操作系统
无论你学习什么语言,都避免不了和操作系统打交道。所有语言的最后执行,都是靠操作系统。
比如,你用C++可以使用new创建一个变量来存储数据,也可以通过malloc创建一块空间。
但你真的知道他们的区别吗?无论用什么操作符来操控程序,最终真正分配内存空间的其实还是操作系统,所以,想真正了解他们的区别,就必须深入操作系统内部原理。
这就是为什么,我们学习语言时比较简单,而真正深入起来,却很多地方不懂的原因。
操作系统是程序员进阶必会的基础知识。
刚开始学操作系统,不建议闷头看书。相信我,用不了几分钟,你就会打瞌睡。学不了一星期,你就想打退堂鼓。
这里推荐B站清华大学的操作系统课程。这是我见过最简单易懂的操作系统课程了。
【清华大学】操作系统 陈渝 全113讲(上)_哔哩哔哩_bilibili【清华大学】操作系统 陈渝 全113讲(下)_哔哩哔哩_bilibili在看视频的同时,如果你还想要教材,在看上部分时,可以搭配《操作系统导论》辅助入门,在看到具体的操作系统理论时,可以搭配业界经典《现代操作系统》深入学习。这样相比直接啃书会容易很多。
计算机网络:
计算机网络,提供的是管道服务,像自来水管一样单纯,发送方Bob向管道里注入一吨液体,接收方Alice就接收到整整一吨液体,不多一滴也不少一滴。当然这是完美的理想,而现实往往并不是这样的。
真实的情况是这样的:Bob与Alice之间自来水管,每隔几公里都有一个蓄水池(增压泵),这个蓄水池有若干个进水管,也有若干个出水管,如果进入管的整体流速 > 出水管的整体流速,那么这两者的流量差就会被临时缓存在蓄水池里。稍后如果进入管的整体流速 < 出水管的整体流速,那么蓄水池里的水就可以乘机流走。
但是如果进入管的整体流速 > 出水管的整体流速一直持续,多出来的水蓄水池容不下了,多出来的水就溢出了。这溢出的水是永远都无法到达目的地的,对吗?
这个蓄水池有一个专业的名字:路由器,由于蓄水池无法补偿溢出的水,自然就需要有一个流量补偿机制,来补偿流量丢失,那么谁来补偿呢?
肯定不能网络来补偿,网络一直以无状态(Stateless)为首要目标,如果让网络来补偿流量,自然就需要网络来记忆状态,这点是难以接受的!
最终流量补偿机制的重担就落在了流量发送方Bob的身上,实现这个流量补偿机制的代码赫赫有名,它的名字就是TCP!
TCP大佬实现流量补偿机制,其实很简单,就一句话:确认机制!
一旦流量到达接收方,需要接收方Alice明确确认到达,否则TCP大佬会周期性使用流量补偿(重传)机制。
所以TCP是一个需要记忆状态(State)的代码,它本质是Stateful的!
从上面的例子也可以看出,计算机网络相比操作系统好学非常多,因为计算机网络不抽象,在现实生活中,都能找得到例子。而且,如果我们想知道网络中的细节,完全可以通过抓包来分析。
课程推荐哈工大的计算机网络系列课程:
哈尔滨工业大学 计算机网络_哔哩哔哩_bilibili这里需要说明的是,计算机网络中的细节非常多,李老师讲的也很全面。但这些细节是无需关注的,比如Http协议的错误码分类,我们记不住,而且记住也没任何意义,知道有这个玩意即可,需要的时候,百度一下,它不香吗?(如果考研用,当我没说,考研考……)
关于计算机网络,我们真正需要了解的是osi 7层协议和Tcp四层协议的产生原因和具体使用场景,就足够了。
关于图书,绝大部分高校都用的谢希仁的《计算机网络》,这本书讲的很好,很浅显易懂,它也是考研408的常用教材
计算机组成原理
组成原理应该是所有课程里最难的课了,它是一门衔接数电和汇编的一门课。整个课程的核心就是使用数字逻辑电路和触发器搭建一个可以运行汇编指令的机器.
单纯看书、看视频的学习,会极其枯燥,必须搭配实验性小游戏,才更容易理解并坚持下去。
如果你需要提前感受一下可以去玩一个叫人力资源机器的游戏.代码区就是ROM,中间箱子是寄存器,两边输入和输出的会和并到一起装到RAM,小人就是运算器.
这篇文章里有这个游戏的简介和玩法:
人力资源机器:Human Resource Machine你可以从这个游戏做为一个开始。
再回来问题上来,我们先推荐学习资料,最后再推荐一些实验性游戏。
视频首推卡内基梅隆大学的《深入理解计算机系统》系列课程,英语不好?没关系,有中英文字幕,看完这套视频,不仅能学到知识,指不定六级顺带也给过了。
【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频_哔哩哔哩_bilibili配套教材建议选用《深入理解计算机系统》,这个视频应该也是用的这个教材。
组成原理游戏推荐:
Oxygen Not Included 里面的逻辑电路相关的内容可以提供具体案例,提高对逻辑门的感性认知.同时可以衍生出很多机制相关的思考,比如 具体的问题转化为数理逻辑,小人作业并发冲突,随机地图生成,权限管理,复杂功能分区规划等等.
- Human Resource Machine 这个可以最直观的展示指令和运算的关系,上文也说过了和组原大作业有千丝万缕的联系.另外通过关卡提供了较为平稳的曲线,可以提前规避因为理解力不足带来的挫败感. 这个游戏还有一个多线程版本:7 Billion Humans=
- Opus Magnum 前置知识要求低,极为艺术的逻辑呈现,完成之后真的会有炼金一般的快感.
- Silicon Zeroes 一次性解决触发器!!!
- TIS-100 汇编王中王
把这些内容学会,通过校招笔试,完全不是问题。
但校招不光有笔试,还有面试环节,面试考的就是项目实战能力了。
有关校招的内容非常多,这里我就不一一列举了。我把我这些年的所知所得,整理成了一本书,开源到github上了。相信会对大家很有帮助,大家可以去看.
目前还在持续更新,欢迎大家star。
地址:https://github.com/harvic/FightingCoder
好了,这篇就到这了,希望大家毕业都能找到好工作。
我是 @启舰 ,原创不易,帮我点个赞吧。
本人所有文章皆为原创,著作权归@启舰 所有,未经授权,转载必究 |