计算机学习指北
[!NOTE] 本帖为个人经验,非面面俱到,请酌情参考!
前言: 在大学生活中获得了很多他人的帮助,所以很早以前就想写写自己的这一路,分享出去,对他人有帮助的话那就很棒了。索性就在保研结束后,总结这平淡却艰辛的一路。至于网络上已经有很多大神的帖子,为什么我还要写的这个问题?我想的是,第一,大神的帖子大多适用于同为大神的人,我想写写一个普通的大学CSer。第二,不管有没有人看我都要写,这是我曾经定好了的。如果你有兴趣并且也有时间的话,不妨继续往下看!
首先推荐一份计算机指南:https://csdiy.wiki/
推荐北大同学的整理入门书籍:https://github.com/ZangXuanyi/getting-started-handout
本人情况
高考结束后,发挥的不太好,最后在我姐的推荐下误打误撞选择了某211的计算机大类中的信息安全专业,当时的理由是计算机吃香,信息安全可以去政府部门或者厂里上班都行。现在来看专业选择,我仍是不后悔的,虽然目前计算机专业已经饱和,但是在我学计算机专业的路上我学到了很多,思维方式和解决问题是最受益的。关于对计算机的认识?那时候我只会电脑的开关机,仅此而已。
一切从电脑最基本的使用开始,从大一的c语言开始。其实大部分人刚开始都大差不差,只有小部分人是因为信息竞赛提前接触过,所以不必妄自菲薄,完全来得及。对于什么人适合学习计算机这个问题,其实我也不能一概而论。会考试会学习应试的人(我的大部分人格?)这种肯定是能过的,并且也应该也学得不错,但是实践能力往往不太强,也就是整体的思维以及coding能力。我最推荐’爱折腾的人‘学习计算机,没错就是喜欢折腾,我相信一定能学得很棒,即使纸面成绩可能一般,但ta对计算机的理解一定是最棒的。
记得大二时候数据结构老师说过,往往成绩好的学生反而不会从事计算机相关行业,会做例如公务员等。其实我觉得是有一定理解的,就正如上述的这种会考试的学生而言。因为对于这类学生而言,其实不管学什么,ta都不会太差,所以能够转变自己从事其他行业。对写代码有passion,后者说当完成一个项目或bug后很开心,就像高中数学解了一道很难的题很有成就感一样,只是现在的解决方法更偏向实践动手,而不是光用脑子。
除了大一时候的高数课我是全程跟着老师走的,大学其余的课我都是看网课自学。想取得一份不错的成绩,对于大学大部分课程都是有迹可循的,因为大部分课程几乎一成不变,只要知道去年试卷和考试重点,期末突击大都能不错结果。我不是推荐大家都不跟着老师学,大学也有很多不错的老师,找到自己的节奏最好。还有即使很多课没有听懂,你都能通过互联网学到,只要愿意花心力。所以我是一个零基础且跌跌撞撞地学习计算机,并且大多都没有良好的规划,我相信大家提早规划,能学得更好。
现在的我,还是很底层,跟优秀的人相比,相形见绌。写到这里,不想往下写了,因为我觉得我不是高手,写这个会有人看吗?就算有人看很可能也是喷这种水平还来写什么。高考时候梦校是NJU,其实我知道我考不上,高三那一年只有一次模拟成绩能够得着,但我还是很喜欢。现在保研也没去成NJU,其实差一点了,遗憾也还是有。失之毫厘,差之千里。其实现在的我早走出来了,只是曾经那个少年意气的自己太想要证明自己了。如果有看到这里的朋友高考失意,祝你能圆满遗憾。
课程学习
如下是我学过的大部分信息安全专业课程的网课,但有一些资源已经忘记或找不到。
有些课程没有完美的视频学习推荐,将就看最合适的!
备注:F 表示忘记具体资源,推荐其他替代。 表格中的课程点击都有链接,只是未显示。
| 课程名 | 课程链接 | 备注 |
|---|---|---|
| 高等数学I(1) | 兆筱小分队 | nice! |
| 高等数学I(2) | 兆筱小分队 | nice! |
| 程序设计(一) | 翁恺教你C语言 | nice! |
| 程序设计(二) | The Cherno | F |
| 线性代数 | 3Blue1Brown | nice! |
| 大学物理Ⅲ | 东北大学-马文蔚 | good! |
| 数据结构 | Harsha Suryanarayana and青岛大学-王卓 | nice! |
| 离散数学Ⅱ | 温柔老师 | nice!但不完整 |
| 计算机组成原理 | B姐 | nice |
| 算法设计与分析 | 2024南京大学 | good! |
| 概率论与数理统计Ⅱ | 翔翔的学习频道 | nice! |
| 计算机网络 | 湖科大教书匠 and B姐 | nice! |
| 信息论与编码理论 | 斐多课堂 and 主要知识点梳理 | good! |
| 密码学 | 可厉害的土豆 | nice! |
| 编译原理Ⅱ | 致爱意 | nice! |
| 数据库原理 | 没睡醒冬 | nice! |
| 操作系统 | B姐 | nice! |
实验推荐:
| 课程名 | 实验名 |
|---|---|
| 计算机缺失的一课 | missing-semester |
| 计算机系统概论 | csapp |
| 计算机网络 | cs144 |
| 操作系统 | mit6.828 |
每个人的习惯和品味不同,没有最好的课程,只有最适合自己的课程。还有很多的课程忘记看的课程,以及一些是没有合适的线上课程,所以我无法推荐,只能啃书自学。当然还有很多好的课程和实验我没有列举出来,比如jyy老师的os课等等。
实践动手
我很难命名这个小节标题,关于的是大学从零基础开始推荐动手的过程,加强动手能力,学习一些必要技能。网上已经有很多教程,而如果让我回到大一,我会这样推荐自己学:
- 1.科学上网,会正确Google提问搜索。科学上网,而该如何搜索,如何正确提问等等,我推荐提问的智慧。
- 2.通过missing- semester学会基本命令行的使用。学会基本使用git、vim、linux基本命令。
- 3.学会跟着教程动手配置vscode中c/c++的环境,简单GDB调试。大一学习c语言,网上搜索教程一步步配置。
- 4.基本了解GitHub、Kaggle、Huggingface等,是什么平台 有什么用 以及怎么简单使用。
- 5.学会用笔记软件管理做笔记或者写blog。笔记比如notion、obsidian或者typora都OK。
- 6.基本使用make或者cmake。当做类似图书管理系统大作业时候,学会用make或cmake管理编译运行。
- 7.学习数据结构和算法时候跟着刷leetcode,跟着代码随想录刷,csp考考多刷分。
- 8.作为队长参加大创或者比赛项目,做一个前后端结合的项目,收获管理和协调经验。
- 9.学会基本latex编写文档,用于作品报告等等,在线推荐overleaf。
- 10.使用conda等管理python环境,克隆下的项目可以自己动手配置环境。
- 11.zotero阅读文献论文,学会快速阅读英文论文、且适合自己的工作流。
上述是我暂时想到的,对我自己比较有用的基础技能。后续有补充再更新。
科研竞赛
笔者没什么科研竞赛,所以这部分介绍不多。
科研
大二的寒假可以发邮件联系老师做大创或者项目了,开开组会看看论文,这里建议找能力强的年轻老师。如果自己投入的多,并且运气也不错,最终有论文产出那是相当nice!当然如果像我啥也没有,大创草草结题也okay。学会了提前对研究生去魅了,研究生并不是什么高大尚的!现在并且对组会十分厌恶哈哈哈。
这里推荐一个从零自己学LLM的基本路线:
- 1.速读鱼书
- 2.刷rethinkfun的深度学习基础视频(时间紧可以先暂时跳过)
- 3.Andrej Karpathy大神的Neural Networks: Zero to Hero,最后手搓GPT2-124M
- 4.刷CS336
竞赛
关于竞赛,个人觉得含金量最高的就是ACM和打CTF,这个需要现场动手实践,而其余大部分比赛则是PPT水赛。在大一时候就可以花两三周时间了解和感受一下这两个竞赛,不一定真参加,可以看看自己感兴趣不,排斥不排斥。不要一上来就先入为主觉得自己不适合编程,先尝试过再下定结论。另外也要参加“水赛”,比如软件杯、计算机设计大赛等等之类的作品赛,拿两个奖就差不多,对于以后的简历和综测保研等等也很不错。
大学经验
我不太喜欢给别人建议,也不喜欢别人指着我说我应该干嘛,每个人的视角不一样,都有不同的局限性。但我还是分享一下我自己大学三年对自己最有价值的三条经验(仅供参考):
- 1.提前规划自己。这里的规划可以包括以后想做什么,以及想成为什么样的人。对于想做什么,可以是努力进大厂,可以是当计算机老师,可以是考研,可以是考公进体制等。至于想成为什么样的人,想发展什么样兴趣爱好,比如一个更强壮的身体,更流利的讲话,会唱歌弹吉他等等。我列举不了太多,因为实在是太多方面了。这里思考得具体一点更好,比如找工作目标就是腾讯什么什么岗或者哪个学校当老师,可以规划的稍微细一点,但也别太细了,只要大方向一致朝目标移动就好,用笔写在纸上。可以花一周时间想,花一个月时间想,甚至一年时间想,只要最后知道自己想要什么就好。这个我觉得比高数考98分重要多了!
- 2.联系上一届学长学姐,模仿是学得最快和最简单的方式。认识上一届的直系学长学姐,他们提前一年经历了你要经历的。跟学长学姐处好关系,问问学长学姐这个课有什么注意事项考什么,这个事怎么样,保研该怎么办等等。当然这样显得很功利,所以我觉得能和几个学长学姐处成好朋友就最好了,而不会显得很冒昧。并且要对学长学姐感谢,不要认为是理所当然的,他们也可以选择不回复。请吃吃饭,喝喝奶茶,发个小红包,时常保持联系,开开心心的!总之学长学姐就是你最大的经验。
- 3.是否太功利和卷?这里使用问句,是因为我不能说谁好谁坏,不是非黑即白的。关于卷和功利,我周围有同学,像贪心算法一样,每一步都要走当前最优解。一门课想高绩点,退了本专业固定老师的课,选其他专业的老师,因为给分更高。太过功利容易表现得太明显,让人难以相处,我觉得顺其自然就好。就像走弯路和走捷径,我觉得两者都要走,分情况选择。走弯路可以增加更多经历,走捷径可以耗时更短。最坏的结果就是走弯路,但后面回想起来有时候最大的捷径就是走弯路。醒悟暂时的失利也许是为了以后走向更好的全局最优,如果每一步都走当前最优,反而可能陷入局部最优。
总结
上述为我个人总结,但我也没有起到”授人以鱼,不如授人以渔“。我只是将信息收集展示出来,减少信息的密度和寻找所耗费的时间,减少信息的不确定性。理论上,拥有一台电脑,你能学到你所有想学的知识和技能。
我的看法和建议都是基于我自身的经历,而每个人的环境不同,不是所有人都适合。学习的路上,这里引用翁凯老师的一句话,“学计算机一定要有一个非常强大的心理状态,计算机的所有东西都是人做出来的,别人能想出来的,我也一定能想得出来。在计算机里头,没有任何黑魔法。所有的东西,只不过是我现在不知道而已。总有一天,我会把所有的细节,所有的内部的东西,全都搞明白的。“
大学并不是只有学习,还有身体健康、开心快乐,还有好多不同的生活方式。不要被困住。
最后感谢你能看到最后,祝好!
RedNote