阅读本文大概需要9分钟。
今天一个大一读者找我咨询,这位同学显得特别焦虑,愿意是他觉得就读的学校不够好,担心未来无论是考研还是找工作都有问题。
其实才大一完全不用焦虑,学校差也不是什么问题,无论是备战研究生考试还是找工作都还有几年的时间。
另外计算机这个专业很吃自学能力,学校能给予的东西并不起决定性作用。
核心是做好未来几年年的自学规划,和他聊完后,也想跟大家分享下大学必须攻克的一些东西(如果已经工作的但基础较差的同学也有参考价值)。
重点讲讲需要攻克的七个方向:
1.掌握C语言
虽然你只有很小概率在工作之后用到它,但它依然无比重要。C Primer反复看,然后一行行在电脑上敲出来。
C语言最难懂的是指针,希望你在读大一的时候就征服它,内存是什么,指针的本质是什么,程序为什么会崩溃,这些问题弄懂了基本就通了。
其实C语言网上的资料特别多,我给大家收集了一波入门必备,学习以下四个资源即可:实验楼——C语言入门教程、gitbook——笨方法学C、菜鸟教程——C 语言教程、慕课网——C语言入门。
书籍方面可以看看洋哥之前写的一篇:卧槽,还有985大学在大一上C语言课??
2.掌握一门高级语言
大学期间除了牢牢掌握C语言之外,还需要掌握最少一门高级语言。可以是C 、Java、Python、HTML CSS JS中的任意一个。
但学习高级语言并不是只学会语法和特性就行了,最好是拿这门高级语言去学习其他课程。
比如C ,科班出身最好牢牢掌握C :
- C 语言高级特性:运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载)、多继承及其二义性、虚继承、多态、函数模板、类模板,模板的继承、程序编译链接机制、内存布局(memory layout)、对象模型、各种容器的实现(vector、map、hashmap)等等;
- 算法和数据结构:尤其是和C 结合的算法能力及数据结构的应用能力,hash map、B /B-树、算法在C 容器中的效率应用、DP(动态规划)等;
- 网络底层:HTTP、HTTPS、DNS、ARP、TCP、IP、ICMP、UDP、FTP、SMTP、的实现底层;
- 多进程/多线程编程:进程通信的方式(共享内存、pipe、Socket编程等)、同步、死锁及解决方案、线程池的实现、进程/线程的操作系统实现原理、进程的状态及切换和调度等;
如果选择其他语言也是类似的,要用这门语言去理解去实现其他计算机课程的知识点,比如算法/数据结构、计算机网络等等。
3.尽早确定主攻的应用方向
如果没有读研的计划,那就要尽早确定主攻的应用方向。
是选Java后端还是windows C 前端,或者是安卓开发,还是需要尽快定下来。这样有的放矢的做全面准备,包括平时的实践和找实习的目标,等到春招秋招之际你才不会慌乱。
同时,自己确定主攻方向,还可以有筛选,挑出自己真正感兴趣的方向,拿我自己举例,我在读书期间选择的方向就是:C 游戏开发,所以无论是平时的学习还是实习,都在刻意往这个方向靠,最终在毕业之际也成功加入腾讯游戏。
很多朋友会随波逐流,没有确定主攻方向,这样不仅不能获得额外的优势,还会导致工作后发现不是自己喜欢的方向,这就太尴尬了!
说下目前技术岗竞争的难易程度: 算法 >>> 后台/后端开发 > 前端 > 客户端 > 测试开发。
如果不是特别优秀,不推荐走算法方向,基本都是神仙打架普通人很难参与进去。
大家要评估下自身的实力,如果是双非也没有获奖经历,那就不要去挤热门了。试想一下BAT的热门岗位的竞争得有多激烈,凭什么最终录取你?前一段时间BAT的机器视觉和推荐算法爆出100:1的录取比例。。。重点是先加入大厂先上岸,这个时候客户端和测试开发也是很好的选择。
工作后大家就知道了,岗位的差距其实并没有那么大,但大厂和小厂之间的差距真的巨大且很难弥补。
4.夯实算法
算法挺难,但无论是学习计算机专业还是未来找工作,它都无比重要。
推荐一本高中生都能看懂的算法书:《我的第一本算法书》:
这本书介绍了数据结构、排序、图、安全算法、聚类和其他算法,这里安全算法的内容如果不是安全专业可以直接跳过。这本书还配有APP,方便初学者快速入门。
入门后可以尝试去Leetcode上刷刷题,一开始感觉比较艰难,千万别灰心。
我最初刷北大ACM网站,easy级别的都很费力,反复提交之后才能勉强通过,但坚持刷了半年之后,hard类型的都可以挑战一把。
刷题非常符合「刻意练习」的范畴,多练习就会建立更多的解题思路,这些思路积累的越多刷起来就越容易。
LeetCode的题目非常多,不光要按照一定顺序,还需要有一些取舍。
如果你的时间比较多,你可以这样来刷题:
- 按从低到高的难度分组刷
- 按题型分类刷
- 做笔记,记录重难点,定期重刷
- 寻找一些大佬的刷题笔记,参考大佬的解题思路
有一个非常重要的诀窍:一个个题型去攻克,而不是广撒网,Leetcode的题型包括:数组、链表、二叉树、动态规划等等,比如说先练习数组,那就尽可能多的找数组类的问题,直到数组类型的都难不到你,再换其他题型。
刷题刷到一定程度之后,大家可以挑战下《算法导论》,但这本书的确有一定的深度和难度,如果觉得太困难不用强迫自己。
另外我的公众号上有一份很不错的算法刷题笔记,大家可以回复【01】直接获取:
5.数据结构
数据结构的重要性相信不需要强调了,不仅是工作后必备的技能,如果未来要参加研究生考试也是必考科目和拉分项。
入门的话推荐《大话数据结构》。
这本书诙谐有趣,在不知不觉中让你掌握了数据结构
再推荐一本稍稍难一点的《数据结构和算法分析》。
6.操作系统
只要我们使用计算机,就会和操作系统打交道,接受它的审核与反馈。很多“热门”的技术话题,背后都离不开操作系统。比如:
- Nginx 的高并发性为什么能实现?
- MySQL 的 I/O 性能到底怎样提升?
- Redis 中经典的 Reactor 设计模式由什么技术支撑?
- Node.js 的 I/O 模型长什么样?
甚至,在一个数十万行代码的大项目中,仍然会遇到一些基础性的问题,比如内存为什么会泄漏,服务进程为什么会 dang 掉,文件为什么打不开等等。
要真正解决这些问题,深入理解操作系统就是关键,这也是大厂为什么要考核操作系统的本质原因
如果有能力和条件建议动手做一个小的操作系统(ucore)!
清华大学的陈渝老师和向勇老师的操作系统课,强烈推荐,清华计算机系本科的操作系统课程就是这两个老师教的,而他们推出的网课基本和授课内容一致。
这个课程非常赞,是用实验的方式从0到1搭建一个小的操作系统(ucore),虽然小但是五脏俱全。
7.计算机网络
如果未来想加入互联网行业,计算机网络这门课程就需要重视起来,HTTP、HTTPS、DNS、ARP、TCP、IP、ICMP、UDP、FTP、SMTP等概念要牢牢掌握。
网络有两个大模块:HTTP和TCP/IP。
入门HTTP,首推《图解 HTTP》:
这本书通过图解的方式诙谐有趣的介绍了HTTP协议,学习难度相当低。
如果要入门TCP/IP 网络模型,强烈推荐《图解 TCP/IP》:
读完这本书,你将会对路由选址、 ATM 网络、令牌环等概念融会贯通。
另外看书之余还可以做一些小应用,比如用Socket编程实现一个最简单的聊天对话窗口等等。
以上七个方向如果攻克的差不多,相信无论是考研还是找工作都会有一个不错的前途。
今天就写这么多了,我们下期见,最后祝洋哥所有读者在读书的都能每日精进,在工作的都能升职加薪!