准大学生,如何预习计算机专业?

本文来自于我在知乎问题“准大学生,如何预习计算机专业?”下的回答,截至 2020-11-30,回答已经获赞超过 3400。
原回答链接

一、为什么要提前学习?

强烈建议提前学习了解计算机学科知识!

  • 计算机不同于传统学科(如理化生政史地等),这些学科大家都有一定的基础,先发优势不明显;
  • 也不同于高精尖学科(如医学冶金材料环境等),这些学科大家基本都没有基础,完全同一起跑线。

随着我国经济社会的不断发展,越来越多的计算机专业大学生在步入大学校园前就接触到了计算机,答主在步入大学后也发现身边很多在大学前有一定基础甚至有一定开发经验的同学都学习的很顺利,积极参与各类工程项目,科研项目。有很多大一的学弟都比我这样即将步入大四的学长动手能力强。(自闭、爆哭)

甚至「少儿编程」都成为了最近的一个风口。三十年前小平爷爷一句「计算机普及要从娃娃抓起」在现如今的浮躁社会变成了现实。

现在距离开学还有两个月,虽然时间不多但还是建议充分利用,不寻求学到太多知识只是力求对计算机学科的轮廓有一个大概的掌握,面对入学后接踵而来的各种概念能有自己的思考。

另外如果你是大一入学了或者大一都快结束了才看到本文也不用太担心,因为目前大学本科第一年基本都是基础学科的学习,大二后才深入学习专业知识,所以建议大家在大一期间一定保持自己对计算机学科的热爱,充分利用课余时间。你会发现一旦你比别人走得快,那么将走得越来越快。
即便你是大二才看到本文也不要担心,我差不多也算是大二下学期才慢慢学会自己去摸索~虽然很晚了但是只要能尽早找到感兴趣的方向做一些感兴趣的项目就会很棒。

二、学什么?怎么学?从哪学?

关于这个假期学什么,我的建议是:

  1. 编程语言(中级语言C、高级语言 Python 或 Java)
  2. 计算机基础知识(计算机专业导论)
  3. web技术栈
  4. 常用开发工具
  5. 关注计算机行业
  • 先学习编程语言并熟悉对应的开发工具,同时观看计算机专业导论MOOC视频
  • 学习web技术栈,边学边进行实践项目
  • 关注计算机行业则是作为一项长期的爱好来培养

1. 编程语言

国内计算机本科第一门专业课一定是一门编程语言,目前来看大部分学校还是先学C语言,少部分学校会先学习Python,我建议先学习C语言的基础知识,而后再学习Python。
这样安排的想法是:各种编程语言都有通用的一部分知识,如:

  • 数据类型
  • 变量
  • 常量
  • 运算符
  • 判断
  • 循环
  • 字符串
  • 数组
  • 函数

而C语言的这部分通用知识上手快易学习,也能为你入学后的学习打好基础。
学完了基础知识不建议继续学习C语言高级知识,因为如果缺少计算机基础知识的学习对那些高级的编程语言知识掌握也不到位(不能理解为什么编程语言是这样设计的);另外一个问题是学习了编程语言迟迟没有产出,不知道除了输出命令行还能干什么。你需要一些可视化的开发让你真真切切地感受到了自己开发的产物。
这个时候建议学习Python,各大Python教程都有很大实际应用的例子,你能很快做出一些小应用,这对激发学习兴趣,保持学习动力是有极大帮助的。

第二门语言如果不喜欢Python的话,Java也是一个非常棒的选择!这个也可以提前看一下你们学校的培养计划,如果是有Java必修课的话也可以学习Java。

2. 计算机基础知识

计算机基础知识的学习建议学习《计算机专业导论》

计算机专业导论可以帮助你对即将学习的学科有一个大致的了解,知识注重广度而非深度。
软件工程专业的同学也可以去看《软件工程导论》

3. web技术栈

web技术栈是最容易上手的计算机工程技术,如果能在开学前完成一个简单web应用的开发,相信这将予以你足够的学习信心。记住,这部分一定要多动手实践,学习以开发一个小网站结束(数据库的使用为可选项)
另外,然后你不想做PC端的网页而想做手机移动端的应用的话,微信小程序是一个很好的选择!
你需要学习

4. 常用开发工具

  • C:CLion (学习C语言时用到)
  • Python: PyCharm、Anaconda (学习Python语言时用到)
  • Java:Intellij IDEA、Maven (学习Java语言时用到)
  • web: VSCode、Git、Postman、Chrome webtool (开发web项目时用到)

上面提到的 CLion、PyCharm、Intellij IDEA都是 JetBrains 公司的 IDE 产品,该公司的产品是收费的,不过面向学生群体是免费的。
学生授权申请方式
此文教大家如何申请学生授权

5. 关注计算机行业

计算机本科生应该对本行业动态有足够的了解,建议阅读以下内容

  • 虎嗅网/虎嗅APP(侧重互联网等科技行业动态): 虎嗅网
  • 36氪网/36氪APP(与虎嗅同类型的产品(两个平台上的文章绝非今日头条上的那种营销号爽文,是有很高阅读价值的)): 36氪_让一部分人先看到未来
  • v2ex(一个有趣的程序猿论坛): V2EX
  • 掘金(看看大神们在做什么): 掘金 - juejin.im - 一个帮助开发者成长的社区
  • 知乎(对于我这种五线城市男青年,不失为一个开阔眼界的好选择): 知乎 - 有问题,上知乎
  • 阮一峰的网络日志(中文技术入门知识博客写的最好的人,对所有领域未知事物充满好奇心的终身学习者,阮一峰老师的博文可以把复杂难懂的知识点讲得很易懂,之后再深入学习就更容易上手;另外阮老师的《科技爱好者周刊》也是很值得一看): 阮一峰的网络日志

6. 关于怎么学?

  • 学习过程要多思考,多总结,建议多写博客,博客内容可以是『学习记录+知识点总结+进一步思考』
  • 另外要有探索精神,无论是学习还是开发,总会有很多IDEA突然闪现在脑海,不要犹豫,可以去尽情搜索

7. 时间线

上面有提到大一很少涉及专业课知识,更多地在学高数、线性代数、大学英语等公共课知识,所以我们姑且把从高考志愿出炉的七月末到大一下学期开学前都认为是在预习计算机专业。

以上推荐的学习内容,学得越快越好,因为在学习过程中你能不断地发现新问题,知道自己应该去学什么新知识。

  • 在开学前完成 编程语言入门 + 计算机基础知识
  • 大一上学期完成 web技术栈 + 认真读一本某编程语言的书籍(外国译作最好)
  • 大一下开学前的寒假完成 独立开发的一个项目 + 自己主动想学的知识
  • 大一下学期开学后可以试着联系学校实验室老师。实验室项目有偏科研和偏工程两种,早些加入可以两种项目都有尝试也有利于尽早确定自己未来的目标(读研or工作)

另外如果想先人一步在大二开始上专业课前对计算机四大基础学科有所基础,也可以暂缓加入实验室的计划(大二上再申请),而是在大一下学期去深入学习计算机底层知识(四大学科)

  • 计算机组成原理(比较抽象的一门课,相关的动手项目也比较少且抽象,建议多参考学习优秀的MOOC资源)
  • 计算机网络(动手实现一个爬虫,可以做本校教务系统的爬虫,配合你的web知识做第三方教务查询系统)
  • 操作系统(深入学习Linux相关知识,参照各种优秀的博客资源动手实现简单的Linux内核)
  • 数据结构与算法(可以买一本考研王道数据结构书,通读一遍后到一些算法题网站去做做题(下面给出了链接))

另外记住这一阶段不要再满足于百度搜到的各种教程,教程只能解一时之渴,要有计划地阅读计算机专业书籍,系统地深入地学习知识!

8. 为什么选择web作为入门领域?

长远来看,大家总会在某一个领域深入学习,这个领域可能是web开发,可能是后端架构,可能是算法工程师;当然也可能是计算机视觉,可能是NLP,可能是网络空间安全,可能是数据挖掘。只有在某一个领域学精才有可能有好的工作,有持续的科研产出。

各行各业都是高端人才供不应求,中端人才供需平衡,初级人才供大于求的

我们的职业发展目标就是成为领域专家,领域专家是创造者而非搬砖的码农,要不然你和培训班的同学又有什么区别呢?
web算是门槛很低很容易上手的一个领域,选择该领域作为对计算机软件行业的探索可以短时间内看到效果,且该过程涉及的计算机知识较广,有助于提高未来学习的信心。而后我们再去挑战难度更大更适合自己的领域!

三、题外话

1. 英语及数学

怎么学都不过分,对于目标比较远大的同学来说(我就不是这种),虽然我不是大佬,但是还是可以根据自己的一些经验提些建议。

  • 大一通过四六级是基本要求(不过有些学校可能不允许大一参加,没关系,尽快通过就行)
  • 建议每天背单词(墨墨背单词 + 对应的单词书(根据自己的未来规划选择对应的单词书,托福/雅思,四六级,考研等等))
  • 数学科目一定要拿高分(下面也有提到,数学科目学分高比重大,对四年总成绩影响极大(我就是因为考了好多门70多分的数学课导致目前处于保研边缘)。不过我觉得我认为我没考好其实不是没努力而是没找到正确的学习方法,或者说没能跟上老师的讲课思路(所以后面有建议去看考研数学视频,课程有趣不枯燥,老师总结的知识点比较凝练))
  • 千万要重视 数学英语 在计算机专业的重要性!即便你曾经数学或英语不好,但现在一切都来得及,找到正确的学习方法,遇到问题及时向老师同学或网络求助。

2. 计算机软件专业推荐参加的竞赛

  • 专业类
    • ICPC国际大学生程序设计竞赛(ACM)
    • “挑战杯”全国大学生课外学术科技作品竞赛/“创青春”全国大学生创业计划大赛
    • “互联网+”中国大学生创新创业大赛
    • 中国大学生计算机设计大赛
    • “英特尔杯”全国大学生软件创新大赛
    • RoboMaster机器人大赛
    • 全国大学生智能汽车竞赛
    • 全国大学生信息安全竞赛
    • “蓝桥杯”全国软件和信息技术专业人才大赛
    • CCCC 中国高校微信小程序开发大赛
    • 华为软件精英挑战赛
  • 数学类
    • 全国大学生数学建模竞赛
    • 国际大学生数学建模竞赛(美赛)
    • 全国大学生数学竞赛
  • 英语类
    • “外研社杯”全国大学生英语辩论赛/全国大学生英语演讲比赛
    • 全国大学生英语竞赛

3. 信息检索能力的重要性

大学很多事情都是靠自己来争取来得到的,信息检索能力尤为关键,分享几个我探索出来的比较好用的方法:
(1)QQ寻人:有时候我们经常想联系一下某位学长学姐咨询一些事情,这个时候如果你平常加了很多QQ群就很有帮助,你可以直接在QQ搜索栏搜索学长学姐的名字,相信你和TA一定会至少有一个共用的群。这个方法我几乎百试百灵,每次都能加到很nice的学长学姐。
(2)百度高级搜索
我们经常想搜索一下学校历年发布的某项通知,这个时候可以利用百度的站内搜索来完成。
如下图所示,在搜索内容后加上 site:网站地址 就可以实现站内搜索,当然你也可以点击百度搜索那里的搜索工具来完成此操作。
迅速搜索到大量有价值的信息。

百度站内搜索我校2015级推免(保研)名单

(3)整理好你的收藏夹
下面提到过我的Chrome收藏夹(这里建议大家平常就用Chrome浏览器吧,甚至选课还有速度加成)存了五百多个网站链接,我自觉还是挺有用的,我分别按照以下几类进行了存储:

  • 编程
    • 论坛
    • 博客
    • 技术
    • 工具
    • 教程
    • 其他
  • 学习
    • 竞赛
    • 课程
    • 美赛
    • 论文
    • 英语
  • 校内
    • 常用校内网站
    • 信息量巨大的通知
  • 生活
    • 娱乐
    • 办公

我私以为收藏夹还是很有帮助的。

(4)学会科学上网

此处省略500字…

4. 转专业

很多同学都在评论区里询问有关转专业的事情,首先我认为对于想转入计算机专业的同学,大一一定要努力学习拿到转专业资格,另外也不用太担心关于大一学年少学了计算机知识课程的问题,很多学校大一学年基本上都在学公共课程,专业课涉及的很少。
另外我还想放出一张比较有代表性的表格,我统计了我们学校今年刚刚完成的2018级的转专业结果,大家可以一窥整个转专业的趋势,热门专业都是用脚投票投出来的。

我校2019年部分学院转专业情况一览

大部分转专业的学霸选择了我校最强的自动化以及计算机、软件、机器人这样的热门专业,这些信息学科的热门程度在我校已经超过了另一热门领域(经济工商管理等)。
而像冶金、资土、机械、材料这些我校实力也很强的学院在转专业季节或许有些尴尬。
这种情况还是非常普遍的,再来让我们一窥清华的转专业情况。

清华2019年转专业报名人数大于计划接收人数的专业有:
计算机科学与技术、计算机科学与技术(姚班)、信息管理与信息系统、软件工程、车辆工程(机械航空动力方向)、工业工程、建筑学;经济学、经济与金融、会计学、政治学经济学与哲学(新雅书院)、法学、心理学、汉语言文学、社会学。
看专业名盲猜我们也知道当今的热门就是「信息技术 + 经济管理」

5. 人工智能

人工智能绝对是目前计算机行业最最热门的方向,不过对于学习方法我了解不多,可以移步至下面问题的回答:

另外不得不说地是人工智能里的某些方向,例如计算机视觉已经内卷到过于夸张,如果 2020 年才开始读大一,我倒是觉得可以考虑下一个风口了~

6. Macbook Pro 值得入手吗?

对于计算机相关专业的你,绝对值得
我是大三转投 macOS 阵营的,真的是用上后就再也回不去了。

7. ACM

有做过一些入门题后来就放弃了,我对ACM的看法是有些人比如我应该就是智商不适合吧,如果觉得自己能力不够的话就不要浪费时间了,下面这个博文是当初一位学长分享给我们的,干货满满。

8. 实习与工作

答主在大四十月份申请到了某大厂的实习,还顺道在此完成了毕业设计,对于读研的同学来说,因为研究生实验室很有可能不让实习,所以利用大四去实习是很好的选择。

实习信息可以直接关注各大厂招聘官网以及牛客网、BOSS直聘等渠道,在内推泛滥的年代,在牛客网上随便找找都能找到各家的内推码。

如果想直接就业的话当然是越早出来实习越好,最早的话可以在大三上学期就开始了,如果这个时候就能找到一份很不错的实习,证明你的实力和潜力是绝对很不错的!

如果很明确想本科毕业之后就工作,可以早早地就为面试做准备,下面这篇经典博文讲的很好:

结合文中所列,我也整理出一份必读书单(有些书真的不适合初学者阅读,不必硬啃,可以先选择容易上手的书)

  • 操作系统
    • 鸟哥的LINUX私房菜
    • UNIX 环境高级编程
    • Unix 编程艺术
    • Linux内核设计与实现
    • 现代操作系统
  • 计算机网络
    • 网络是怎样连接的
    • 图解TCP/IP
    • TCP/IP 详解
    • 计算机网络自顶向下方法
    • Unix 网络编程
  • 计算机体系结构
    • 深入理解计算机系统
    • 计算机体系结构精髓
  • 数据结构与算法
    • 剑指Offer
    • 编程之美
    • 计算机程序设计艺术
    • 算法导论
    • 算法
  • 设计模式
    • 程序员修炼之道
    • 代码大全
    • Head First 设计模式
    • 编程珠玑
  • 软件工程
    • 人件
    • 你的灯亮着吗
    • 人月神话
  • 编译原理
    • 计算机程序的构造和解释
    • 编译原理
  • 数据库
    • 数据库系统概念
    • 高性能 MySQL

9. 高质量代码

  • 原则
    • 提前设计(想好了再写,不要急于开始)
    • 精简为上(能用一行绝对不用两行。当然也要把握好“度”,有时候适当的冗余也会让语义更清晰)
    • 积累经验(写得少肯定不行)
    • 学习他人(多看看优秀项目的源码。FreeRTOS,Nginx,Redis, Git)
  • 实践
    • 利用版本控制工具,自动化部署与监控等工具管理项目
    • 注重代码风格,遵守一定的规范
    • 配置风格检查,单元测试,测试覆盖率等工具对项目质量做出硬性管理
  • 可以参考 Google 的 code style

10. 保研

相比考研,保研还是非常香的,很大概率去到更好的学校,优先选择更喜欢的老师,拿更高的新生奖学金。
有关如何保研简要概括就是

  • 大一就得卷起来~成绩在前列;
  • 大二开始找老师做做研究;
  • 暑假及大三上收割论文专利和竞赛;
  • 大三下联系老师参加夏令营预推免;
  • 大四上爽玩半年,岁月静好,人生值得;
  • 大四下提前进组做做毕设或者出去实习。

11. 转载

我在知乎简单搜索后发现至少有50多条与本问题相似的问题,看来的确计算机相关专业的同学都很有竞争意识,也知道热门行业也更大。当然从中我也发现了不少其他答主的优秀回答,列一下让我产生一定共鸣且认同的回答:

最后一个链接是一位华科学长从就业角度对我的答案的评价。
随着本回答的赞数越来越多我也感到很惶恐,生怕误导大家。总之我认为学长说的很对,经验教程永远都是光鲜亮丽的,可是人与人的执行力不同,我就是执行力很低的人也因此错过了很多机会。千万不要只是收藏了本文然后就没有然后了,希望大家能真正通过本文知道我所想传达的核心理念:

  • 培养兴趣,学会用电脑
  • 关注行业,你所处的行业是一个无与伦比的潜能在不断释放的行业
  • 多与前辈交流,找到引路的学长学姐,少走弯路
  • 提高自己的执行力,越早出发你会有更多试错成本,一旦步入正轨你将跑得越来越快(而本文第一点所列出的预习方案就是为大家在本专业的探索做一个初步指引,未来的路还需各自努力)

四、网站推荐

我的Chrome收藏夹大概收藏了500多个网站链接,我选出我认为比较好的且比较通用的网站如下

1. 程序员必备

曾经一度以为别人鼓吹 Google 和 Stack Overflow 是在装B,不过在两者帮助我解决了一个又一个 bug 后才发现是自己太年轻。

2. MOOC

另外在油管或多或少地会接触一些『皿煮滋油』的视频,我只能说三年来在油管上的所见所闻加上去认真检索很多历史资料、与身边同学交流等等,这些都没有让我羡慕西方那套理论,而更加发觉我们的社会,国家,政党的优越性。

  • 爱启航(考研视频)

    对爱启航等考研视频做一个补充。大学期间数学科目的成绩对你的总体成绩影响很大,可以说高数线代概率论离散数学等数学科目的学习决定了你大学的成败(成绩排名、能否进入实验室,能否保研)。所以一定要万分重视数学科目的学习!
    而恰巧我发现考研数学的这些视频讲解得极其精炼,例如张宇的视频,如果你的高数老师讲课讲得云里雾里,完全可以同步利用这些视频来学习!!!

3. 在线编程练习(主要是算法题)

4. 小工具(总有一天这些工具会有用武之地)

5. 学术论文

6. 大学生活

7. 影音文学

毕竟是假期,还是高考结束后的悠长暑假,休息好才能更好地迎接开学~


总而言之,我选择计算机专业是因为我认为它是最有可能实现我「改变世界」梦想的专业,至少未来能有不错的薪资~
祝愿各位能在这个暑假,乃至整个大一期间培养起自己对计算机的兴趣,利用课余时间自己做一些很酷的项目,尽快为自己的未来发展做以规划。
相信我,未来的四年一定会很美好!有缘再见~