计算机专业学生该如何提高自己?

作为机械专业自学转行,并拿过世界500强等一线大厂offer的我,给大家分享一下自己的一些看法,希望能给学弟学妹们答疑解惑。

要说「计算机专业学生如何提高自己」,我觉得应该是包括下面三大块:

  1. 计算机基础知识;
  2. 特定业务技能;
  3. 解决问题的能力。

计算机基础知识,是根本,是任何从事编程工作的工程师都应该具备的能力,包括:计算机组成原理、计算机操作系统、计算机编译原理、数据结构与算法、各种编程语言等等。

基础知识是基本功,你基础打扎实了从事任何一个领域的工作,都会游刃有余。

特定业务技能,就是你所从事的细分领域所应具备的业务及专业技能。比如,你做嵌入式,就需要学习一些硬件知识;做算法,就需要掌握比较深的数学及算法知识;做人工智能,就要学习更多专业技能了。

现在企业的业务各不相同,所以细分出来的领域也非常多。想要做到每个领域都精通,几乎不可能。所以大部分程序员只能挑选少数几个领域进行深耕。

解决问题的能力,这个应该是各个企业都非常看重。企业是请你来解决问题,不是吃干饭,更不是来创造问题。这是程序员的软实力,你是菜鸟程序员还是资深程序员,差别就在这。

在学校里,遇到程序问题还可以跟同学们甚至老师一起讨论,但在企业里,大家都很忙,遇到问题几乎都需要自己想办法解决。

业务技能及解决问题能力,需要自己长时间的积累,以及刻意训练,甚至贯穿程序员的整个职业生涯。

而计算机基础知识,大家学习的内容都差不多,下面我就给大家总结一下,作为计算机专业的学生,应该掌握哪些基础知识。

在开始之前,先提醒一下大家,算法非常重要,几乎每个公司面试的时候都会考到。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

冒死分享,面试必备!LeetCode 刷题神器,看完 BAT 随你挑!​mp.weixin.qq.com/s?__biz=MzU3NTgyODQ1Nw==&mid=100024059&idx=1&sn=442094f986b8f19d618895129bfe68f0&chksm=7d1fa67d4a682f6b7ae96f645eee072b93e2199bb3ab87091f0c10524f35edc6820e41f881b2#rd正在上传…重新上传取消​

本文较长,全是干货,7000字长文警告!!欢迎点赞收藏,便于下次阅读。

首先给大家看一张图,计算机专业学生大学四年一般课程安排:

各个学校可能会有些许的差异,但基本上都大同小异。

所以如果想自学计算机的话,可以按照上面学校的课程安排,自己去学习即可。

但是,上面的这些课程,很多又非常杂,如果你时间有限的话,可以先抓住计算机基础知识部分学习。

计算机基础知识部分,又分为:基础中的基础(数学/英语)、计算机组成原理、计算机操作系统、计算机编译原理、计算机网络、数据库、数据结构与算法、编程语言等等。

这几部分内容,我又都做成了思维导图,大家可以看看:

一、基础中的基础

俗话说,基础不牢,地动山摇。所以如果你想学好CS,一定要在学习编程语言、计算机组成、计算机操作系统、编译原理、数据结构/算法等等之前,先打好最基础部分。

最基础的部分一般包括以下内容:

  1. 数学
  2. 英语

这两块内容,对于任何想学习CS的专业课之前,是必修的基础课。

其实,等你工作到一定年限之后你就会发现,代码只是工具而已,不管你是用Java、Python、还是C++,其实这些语言都或多或少有相通性,最终的结果都是要用来解决实际问题的。

所以,为什么会有很多人非常擅长写代码,却成不了一个好的「软件工程师」。这也正是区别「码农」与「工程师」的关键之处。

而如果你想拥有非常好的业务能力,肯定会离不开数据结构和算法。而这两块都需要很强的数学功底。

而现在国外的计算机水平领先国内几十年,一些新技术、新框架往往都会先出现,所以你需要扎实的英文水平第一时间获取到这方面的信息。同时,如果编程过程中遇到问题,还可以在国外的论坛上得到更多的解答。

二、专业理论基础

在打好数学及英语基础之后,就可以开始学习计算机专业基础知识了。其中理论基础包括以下5门课程:

    1. 计算机组成原理
    2. 计算机操作系统
    3. 计算机编译原理
    4. 计算机网络
    5. 数据库基础

学好这几门课程,无论是你将来读研、读博,走学术路线,还是参加工作进入职场,走技术路线,升职加薪,都是非常非常关键的。

但是很可惜的是,现在太多人急于求成了,过于注重编程语言的学习,这5门课被严重忽略了,草草带过。

这是非常错误的行为!!如果你想成为一名优秀的软件工程师,这些课程一定要认真学习一遍!

很多人自学CS,一上来第一步就是开始学编程语言,比如Java/Python/C++,但实际上,学习编程语言不代表你就是学会了CS,编程语言只是一门工具而已。就比如,你学会了PS,并不代表学会了设计;你学会了打字,并不代表学会写作一样。

实际上,你完全不需要学任何理论知识,都有可能使用编程语言实现一些很简单且很实用的功能。但是,一旦涉及到更多需要基础含量的工作,理论基础扎实不扎实就马上体现出来了。

1. 计算机组成原理

计算机组成原理介绍了计算机的基础知识,包括计算机的各子系统(运算器、存储器、控制器、外部设备和输入输出子系统等)的基本组成原理、设计方法、相互关系以及各子系统互相连接构成整机系统的技术。

学好了这门课程,你的七大姑八大姨,或者你暗恋很久的翠花,叫你修电脑的时候,就会游刃有余。

这门课程不仅介绍了计算机软硬件的相关知识,也介绍了计算机的各大基本部件的组成原理、设计方法及相互关系。

书籍推荐

  • 入门系列

《计算机是怎样跑起来的》
《程序是怎样跑起来的》
《Computer Organization》

  • 深入系列

《计算机组成与设计:硬件 / 软件接口》
《深入理解计算机系统》
《计算机组成:结构化方法》
《计算机体系结构:量化研究方法》

视频教程推荐

1) 国外视频

视频则推荐伯克利大学 Brian Harvey 的 SICP 课程,CS61A。建议至少学完 SICP 的前三章,并把练习题做完。

CS 61A: Structure and Interpretation of Computer Programs

如果你觉得 SICP 的课程太难,可以选择 How to Design Programs。

How to Design Programs

还有两门课也很经典:

  • Harvard的CS50

CS50: Introduction to Computer Science

  • MIT的6.001

mit-6.001

2) 国内视频

  • 清华大学刘卫东老师的课程:

https://www.bilibili.com/video/BV1c4411w7nd

  • 哈工大刘宏伟(135讲)

https://www.bilibili.com/video/BV1t4411e7LH

2. 计算机操作系统

即使不是程序员,每个人几乎每天都跟操作系统打交道(PC or phone)。简单来讲,操作系统是在为应用程序提供服务,比如:内存分配、进程调度、管理虚拟存储器,管理中断,管理磁盘,等等。

所以,对于程序员而言,你学了操作系统,你就会更加清楚如何去进行内存管理,如何进行进程调度。编写出来的程序也会比不懂操作系统的程序员更加优雅。

而且,不管对于大厂还是小公司,在面试或笔试的时候,都很经常考到操作系统,所以不管是工作还是为了应付面试,都需要好好学习一下操作系统。

书籍推荐

  • 入门系列

《现代操作系统》
《操作系统导论》

  • 深入系列

《深入理解计算机系统》
《自己动手写操作系统》
《操作系统真象还原》

视频教程推荐

1) 国外视频

2) 国内视频

  • 《操作系统原理》,清华大学老师的课程,讲得很浅显易懂。

https://www.bilibili.com/video/BV1uW411f72n

  • 《操作系统》,哈工大李治军老师,32讲

https://www.bilibili.com/video/BV1d4411v7u7

3. 计算机编译原理

编译简单来讲就是把高级语言翻译成计算机可识别的机器语言,但这个过程并不容易,而且,你理解这个过程也同样不容易。

编译原理是计算机技术中相当基础的一门技术,同时它也是计算科学中技术含量较高的一门学科,它和算法、数据结构、编程语言等都有非常密切的联系,对这些相关技术的深入学习提供基本的理论基础,所以学好编译原理不但对该技术非常重要,而且对于学习相关的技术也非常重要,掌握编译原理你才有机会掌握更多的技术。

编译原理非常难,而且非常枯燥,需要要很强的功底才可以入门学习。

书籍推荐

《编译器设计-第二版》
《编译原理》

视频教程推荐

1) 国外视频

2) 国内视频

  • 《编译原理》,哈工大,81集

https://www.bilibili.com/video/BV1zW411t7YE

  • 《编译原理》,东南大学,廖力老师主讲,全64讲

https://www.bilibili.com/video/BV1cW411B7DW

5. 计算机网络

在互联网如此发达的今天,几乎没有应用软件不连接网络的,所以对于一个程序员而言,不懂计算机网络的话简直寸步难行。

学习计算机网络,你需要懂得Socket编程,知道TCP/IP网络模型,了解OSI七层网络架构,知道一个数据包是如何层层包装,再层层拆包,从客户端发送到服务端。

计算机网络应该是除操作系统与算法之外,另一个面试常考的方向。所以,准备面试的小伙伴计网也一定需要好好准备一下。

书籍推荐

《网络是怎么连接的》
《计算机网络-自顶向下方法》
《图解HTTP》

视频教程推荐

1) 国外视频

2) 国内视频

  • 《计算机网络》(谢希仁第七版)-方老师

https://www.bilibili.com/video/BV1yE411G7Ma

  • 《计算机网络》,哈尔滨工业大学,李全龙老师

https://www.bilibili.com/video/BV1Up411Z7hC

6. 数据库基础

数据库当然就是存储数据的地方,很多人自称CRUD工程师,但如果你连数据库都不懂,恐怕连这个称号都担不起。

一个软件在运行过程中,需要保存大量的输入信息,同时也会产生很多中间信息,所以数据库是必不可少的一个组成部分。它无所不在,网站的背后、应用的内部,单机软件,区块链里,甚至在离数据库最远的Web浏览器中,都有它的身影。

数据库分为关系型数据库和非关系型数据库,但近年来又出现了个NewSQL的东东,也需要稍微了解一下。学习数据库,你不仅要懂得SQL语句,表设计结构这些基础部分,还要懂索引、慢查询优化,配置参数调优,更深入的还要学习SQL优化、备份与恢复、架构优化等等进阶内容。

书籍推荐

  • 入门系列

《MySQL必知必会》
《SQL学习指南(第2版 修订版)》

  • 深入系列

《MySQL技术内幕——InnoDB存储引擎》
《Redis设计与实现》
《ZooKeeper:分布式过程协同技术详解》

视频教程推荐

1) 国外视频

2) 国内视频

  • 《数据库系统概论》,王珊老师,中国人民大学

https://www.bilibili.com/video/BV1pW411W7Do

三、编程语言

现在网上关于第一门编程语言的选择有很多不同的看法,主要都在争论是C还是python。虽然现在很多大V能说出很多理由选python,但是我在这里比较推荐C。

因为像python这样的高级编程语言更多的是面向API编程,或者说就是熟悉API,很容易给人造成一种假象:计算机就是调包然后各种花里胡哨。

然而C这种更偏向“底层”的语言更注重的是逻辑,可以帮你培养出非常良好的编程思维和习惯,尤其是指针章节,虽然的确新手不好理解,但是这块知识非常适合给新手初窥一下计算机系统的门径,后面学习其他语言和理论知识也是事半功倍。

而且C也没有OOP(面向对象)的特性,刚上手不推荐学很多很杂的理念,很容易把人的思维搞乱。

书籍推荐

《C程序设计语言》
C语言三剑客(《C和指针》,《C专家编程》,《C陷阱与缺陷》)
《C primer plus》
不推荐谭浩强的书,写得很烂,里面还各种错误。

视频教程推荐

1) 国外视频

如果听得懂澳大利亚的口音的话,这门课是从C语言入门编程最好的公开课。
讲课的教授幽默风趣,知识丰富。面向的学生也是大一新生。绝对值得一学。
C programming by Richard Buckland UNSW 2008

2) 国内视频

强烈推荐翁恺老师的这门公开课,讲得浅显易懂,口碑十分好!
https://www.bilibili.com/video/BV1sJ411E7St

四、数据结构与算法

大家或多或少都听说过,在企业面试的时候,数据结构与算法是必考的一部分内容。所以,你如果想要进入一个心仪的公司,一定要学好数据结构与算法。

但是,难道除了面试,数据结构与算法就没有用武之地了吗?肯定不是的!即使你整天的工作就是CRUD,但是如何你不懂时间、空间复杂度,你如何更合理调用那些API?如何降低功耗,提高程序运行效率?

而且,作为业务开发,我们会用到各种框架、中间件和底层系统,比如 Spring、RPC 框架、消息中间件、Redis 等等。在这些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。

如果你能弄明白这些底层原理,你就能更好地使用它们。即便出现问题,也很容易就能定位。因此,掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。

书籍推荐

  • 入门系列

《算法图解》
《大话数据结构》

  • 深入系列

《算法-第四版》
《算法导论》

视频教程推荐

1) 国外视频

这门课由斯坦福大学计算机科学系教授Tim Roughgarden授课,适合至少掌握一种编程语言的编程学习者。斯坦福的课强调理论和概念上的理解。学完这门课后,对你今后面对技术面试时将会非常有利。

Daniel M Kane、Pavel Pevzner等五位老师共同授课,这门课程的最大特点是理论和实践的结合,你将学习到解决各种计算问题的算法技巧,并实现大约100个算法编码问题。

Kevin Wayne和Robert Sedgewick共同授课,涵盖了有关算法和数据结构的基本信息,重点是Java实现的应用程序和科学性能分析。第一部分包括基本数据结构、排序和搜索算法。第二部分重点讨论了图形和字符串处理算法。

2) 国内视频

  • 《数据结构》,浙江大学陈越和何钦铭教授联合授课,其大名在计算机领域可谓耳熟能详了。

https://www.bilibili.com/video/BV1JW411i731

  • 《数据结构与算法C++版》,由由北京大学张铭教授等七位授课老师全力打造,国家精品公开课。

https://www.bilibili.com/video/BV1R741117bK

  • 《数据结构》,武汉大学李春葆教授

https://www.bilibili.com/video/BV1gb411C71L


再次强调,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值