首页 > 搜索 > 计算机专业,暑假需要提前自学吗?

计算机专业,暑假需要提前自学吗?

互联网 2021-07-29 07:45:55 Tags:Scoop进阶
不需要。

今天收到一个读者的私信,他刚刚考上大学,选了计算机专业,想咨询一些暑假自学的事情。

首先是恭喜恭喜,选择了宇宙机,它存在不断内卷、需要时刻学习等诸多问题,但在当下,依旧是我心中最好的一个专业,也欢迎你加入程序员的行列。

一开始我不建议你去学 Python 、Java、C++ 这种编程语言,也不建议马上看计算机基础相关的内容,我反而建议你先看一本书----《浪潮之巅》。

这本书和技术并不搭边,但相信只要是 IT 相关的人员,看这本书都能引起共鸣。

书中重点讲述了我们熟知的许多著名公司的发展历程和变迁,它们不是从一开始就伟大,很多的创业都起于微末,顺着大时代的浪潮,几经挫折,登上王座。

不过短短几十年,计算机乃至互联网行业发生了如此翻天覆地的变化,如果你在学编程之前看这本书,那么在接下来学编程的过程大概能意气风发一些:见识过了星辰大海,编程遇到的那些问题就不值一提了

更为重要的一点是,我希望你也能从《浪潮之巅》中领悟一个观点:技术是为了解决问题而出现的。

某项技术并不是凭空出现,也不是无缘无故就流行,肯定是因为前面的技术约到了无法逾越的障碍,或者环境、时代迫使需要一项新的技术出现来解决问题。

当知道这一点的时候,应该就不会奇怪,为什么有些人会使用上古的编辑器、过时的语法,也不会随意的加入黑其它编程语言的队列。

看完这本书,接下来推荐看这个视频:《计算机科学速成课》,目的也是为了打基础。

“ 地址:https://www.bilibili.com/video/av21376839 ”

这套课程是 Crash Course 旗下的计算机科学相关的视频,早期发布在 Youtube 上,整个系列课程高达 12 亿的播放量, B 站上可以免费观看,有汉化有弹幕。

之所以建议看这个视频,是因为这个系列视频总时长 10 个小时,一共 40 集,基本上每集控制在 10 分钟左右,如果想完全看懂,得花费数倍于此的时间,这对于暑假打算自学的准计算机专业的大学生来说,十分合适。

也不要贪多,这个暑假看一本书和一套视频,足够在开学的时候成为最靓的仔,剩下的一些时间该玩还是得玩,上大学后没有那么多的时间去休息,更别提毕业走上了程序员的道路。

如果说实在是闲得慌,可以看看下面的学习路线,知道大学要学啥。

一、如何学习计算机基础

首先给大家看一张图,计算机专业学生大学四年需要学的课程。

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

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

这里特别强调,优先学好计算机基础知识部分!

计算机组成原理计算机操作系统计算机编译原理计算机网络数据库基础数据结构与算法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. 计算机操作系统

无论你学习什么编程语言,和都避免不了和操作系统打交道,比如你学习 Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的;比如你学习到内存分配的知识,c++里可以直接分配一段内存,此时实际上是调用操作系统提供的API进行内存分配。

如果不懂操作系统,你在未来学习编程语言的高级特效,涉及到线程进程调度,内存分配,或者是学习Linux相关的知识时,都会一头雾水,所以,只有学会了操作系统,我么才能够更好地学习其他语言和技术。

基于此,计算机操作系统的知识点频繁出现在笔试环节。 书籍推荐

入门系列

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

深入系列

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

书籍下载地址:程序员必备的书籍有哪些?(含下载方式)

视频教程推荐

1) 国外视频

MIT的操作系统公开课(http://pdos.csail.mit.edu/6.828)。MIT自己基于Unix v6开发的xv6类Unix系统。除了没有视频,课表,作业,考试等都有。youtube上有第四讲以后的所有视频https://www.youtube.com/watch?v=kDRHsNauoxk&list=PLfciLKR3SgqNJKKIKUliWoNBBH1VHL3APUdacity的Advanced OS公开课:Advanced Operating Systems from UdacityCoursera上北大操作系统原理公开课(15年3月17日开课):Advanced Operating Systems from Udacity

2) 国内视频

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

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

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

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

3. 计算机编译原理

首先正视一个问题:编译原理并非随随便便就能入门的

换言之,需要准备一些基础知识在学习。

编译原理的学习和实践通常基于对计算机编译过程、计算机基本工作原理、甚至一定的数学知识有一定积累,这些知识分别分布并应用在了编译原理的不同阶段。没有这些基本知识的积累,很快就会在某个阶段由于功底不够而无法再继续后面的学习。

编译原理非常难,而且非常枯燥,需要要很强的功底才可以入门学习,所以,先认认真真的积累上述的一和二在入门学习吧。 书籍推荐

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

书籍下载地址:程序员必备的书籍有哪些?(含下载方式)

视频教程推荐

1) 国外视频

CS143: Introduction to CompilersCS243 - Program Analysis and OptimizationsCS 343https://www.cs.cmu.edu/~410/15-411: Compiler Design (Fa'12)15-440/640, Spring 2015: Distributed Systems

2) 国内视频

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

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

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

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

4. 计算机网络

计算机网络的相关知识在工作时使用的频率还是挺多的,毕竟,所谓的CURD工程师总是在处理 API 相关的业务。

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

计算机网络应该是除操作系统与算法之外,另一个面试常考的方向。

面试资料推荐:

300 页图解网络 PDF 下载!​mp.weixin.qq.com图标

书籍推荐

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

书籍下载地址:程序员必备的书籍有哪些?(含下载方式)

视频教程推荐

1) 国外视频

http://www-net.cs.umass.edu/wireshark-labs/https://lagunita.stanford.edu/cStanford的CS144

2) 国内视频

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

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

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

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

5. 数据库基础

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

学习数据库,你不仅要懂得SQL语句,表设计结构这些基础部分,还要懂索引、慢查询优化,配置参数调优,更深入的还要学习SQL优化、备份与恢复、架构优化等等进阶内容。

书籍推荐

入门系列

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

深入系列

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

书籍下载地址:程序员必备的书籍有哪些?(含下载方式)

视频教程推荐

1) 国外视频

斯坦福的数据库公开课Introduction to Databases:http://www.db-class.org伯克利的 CS168 课程https://archive.org/details/UCBerkeley_Course_Computer_Science_186

2) 国内视频

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

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

6.数据结构与算法

相信无论是已经毕业的同学还是正在学校学习的同学,都或多或少地被数据结构与算法这门课给折磨过。数据结构与算法这门课开篇就讲了一个非常重要的概念:程序 = 数据结构 + 算法,对于初学者可能还不能完全地理解这句话,不过对于已经工作两三年的同学相信对这句话是深信不疑的。

对于数据结构与算法的学习,我个人认为应该分层三个步骤:首先先大致了解什么是算法,可以通过一些科普读物来入门,这个过程我称之为入门阶段;接着可以尝试实现一些比较容易的数据结构和算法,这样可以更加深对数据结构和算法的了解,这个过程我称之为实践阶段;最后去了解数据结构与算法背后的相关数学原理等,这个过程我称之为原理阶段。

具体的学习过程可以阅读我之前的一篇回答:

程序员必须掌握哪些算法?​www.zhihu.com图标

不管你认为数据结构与算法重要与否,你都必须有所了解,因为在面试环节肯定会问的!

书籍推荐

入门系列

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

深入系列

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

书籍下载地址:程序员必备的书籍有哪些?(含下载方式)

视频教程推荐 1) 国外视频

Stanford: Algorithms

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

UCSD:数据结构与算法

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

Prin:Algorithms, Part I

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

同时再推荐清华计算机系邓工的课:

曝光了,清华计算机系最牛的课!​mp.weixin.qq.com图标

算法面试的话可以提前看看这一份刷题笔记:

Star 7K+! 谷歌师兄的刷题笔记火了!​mp.weixin.qq.com图标

如果你还是感觉学习算法很吃力,可以借助这几个网站来辅助学习。

1、https://visualgo.net/en

目前网站支持中文,印尼文,日文等多语言版本。

2、Data Structure Visualization

目前已经有很多常用的数据结构与算法的可视化,如:常见的数组、链表、队列、二叉搜索树、红黑树、各种排序等,如下图所示:

二、一些建议

这里给出一些自学编程过程中容易陷入的误区。

误区一:计算机专业就是学习编程技术

有些人即使没有这个想法,潜在还是有这种意识,以为学会了一门编程语言,就是学会了计算机技术。

甚至许多计算机学院的学生也有这样的念头,认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程统统都不管,极端的学生只要书上没带“编程”两个字他就没兴趣看。

实际上,编程是一门手艺。

误区二:数学英语不好就学不会计算机

计算机专业里确实有一些专业基础课程,像数据库原理、算法、操作系统和计算机组成原理等,这些计算机理论和原理级别的课程确实需要以数学为基础,特别是算法,数学不好的话很难搞明白那些高深的算法。

但是这些课程毕竟只是少部分,大多数的专业基础课和专业课程(像软件工程,计算机网络、Java语言等)是用不到很高深的数学知识的。

编程几乎 99% 的场景用不上很高深的数学知识,99% 的场景是 CURD 做需求,而这些需求都是可以用别人封装好的算法、方法、模块解决,真正需要你用数学知识的基本上为零,除非你是做算法工程师。

同样的,英语也是如此,高中英语及格水平就足以。

误区三:想学最好的编程语言

在计算机学习的过程中容易产生的另一个误区就是想要学习最好的语言或者说是担心自己学习的不是最好的语言。

其实计算机编程语言并没有好坏之分,存在即合理。

一个编程语言既然存在,而且到现在还有很多人运用它,那它肯定是有其他编程语言无法取代的独特之处,所以说编程语言只有自己喜不喜欢,运用的场景适不适合的区别,并没有好坏之分。

最好的编程语言是不存在的。

误区四:学习时喜欢抄代码

程序员学的知识分为两种,一种是偏理论的,例如计算机原理,计算机网络、数据库原理、以及操作系统原理,这些知识都是以理论为基础,注重的理解能力,代码量不多。

另一部分主要以实践为主,比如我们学习具体的编程语言 C++、Java、Python,都包含大量的代码需要敲。

而有些同学学习是喜欢抄代码,虽然程序员在工作过程中很多时候就是 ctrl c ctrl v,不过在学习的初期就抄代码那和没学一样,如果理解就照着视频或者博客教程抄代码,那叫瞎抄,就跟上学的时候差等生抄别人作业没啥区别,哪怕抄 100 遍,都有可能隔几天默写不出一个冒泡排序。

程序员吴师兄:开心点,你的同龄人写不出冒泡排序

如果非得抄,那么在抄的过程中一定要思考,带着怀疑的精神去验证每一行代码,很多时候我们就算照着抄也有可能会抄错,也许别人的代码有错,如果最后输出结果跟预期理解的不一致,这就考验你解决问题的能力了。

误区五:只顾自学钻研,不顾交流沟通

一个人跑的很快,但一群人走得很远。

就像英雄联盟、王者荣耀,一个人再秀,如果不去和队友交流沟通,最终也是双拳难敌四手,做不到 1v5 导致游戏失败。

同样的,学习编程也是如此,你一定要刻意的给自己营造一个学习的氛围,和一些同样学习编程的人一同成长,你帮帮我,我帮帮你,你的问题解决了,他的问题解决了,这样才能一同成长。

相反,如果闭门造车,一个人拿着教程死磕,最终会积累大量的问题,甚至很多问题都无法用文字去描述,想百度谷歌都行不动,最终放弃编程。

有效的交流沟通往往能在大学生学习过程中起到莫大的作用,它能让你的学习效率和工作效率大大提升。

同时再推荐一些优秀程序员的博客。

1、美团技术团队地 址: 美团技术团队简 介:美团技术团队的博客,干货满满。推荐指数:⭐⭐⭐⭐⭐2、阮一峰的网络日志地 址: 阮一峰的网络日志简 介:大神阮一峰,博客风格真正做到深入浅出。推荐指数:⭐⭐⭐⭐⭐3、廖雪峰的官方网站地 址: 廖雪峰的官方网站简 介:廖雪峰老师的网站,有一些不错的入门教程。推荐指数:⭐⭐⭐4、酷壳地 址: 酷壳简 介:可以了解陈皓,是个很有个性的人。推荐指数:⭐⭐⭐5、五分钟学算法地 址: 五分钟学算法-一个不错的算法网站!简 介:程序员学习网站,收集了和程序员学习相关的各种教程和资料,致力于将数据结构与算法讲清楚!推荐指数:⭐⭐⭐⭐6、AlgoMooc地 址: AlgoMooc-一个专属于程序员的平台,和大家一起刷题简 介:图解 LeetCode 算法题推荐指数:⭐⭐⭐

觉得不错的话,记得点个赞,祝大家都学有所成。

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。