查看原文
其他

麻了...才大一啊!

findyi findyi 2022-05-12

阅读本文大概需要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编程实现一个最简单的聊天对话窗口等等。

以上七个方向如果攻克的差不多,相信无论是考研还是找工作都会有一个不错的前途。


今天就写这么多了,我们下期见,最后祝洋哥所有读者在读书的都能每日精进,在工作的都能升职加薪!


其他原创:



人生第一个5000万!


程序员需要天赋吗?


豆瓣9.8!这三本计算机书籍太牛逼了!


PS:最近弄了一个新微信号,欢迎大家围观,洋哥是个不错的段子手、鸡汤大师:



你好,我是findyi,毕业于华科、清华,在腾讯做过码农,在360做过技术总监,在独角兽公司做过技术VP,点击蓝字查看我的成长之路
创业五年虽未获成功,但心中的小火苗一直还在燃烧,看尽南山&西北旺的风光,但依然有着内心执着的追求。
目前我是一位大厂的业务负责人,同时,也是一位信奉终身成长的职场人。
同时,我也是知乎博主:findyi,日常分享高质量职场认知、技术干货欢迎围观。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存