前言
这是什么
这是一个写给计算机专业学生的一本指南,如果你只是单纯的喜欢计算机而学习的话,也可以在这里找到一些可圈可点之处,包含了对学习计算机的一些建议和一些公共认可度比较高的学习链接,受到我创办 开源x计算机x二次元 同好会的启发,阅读了CSDIY与我个人的一些胡思乱想而写的。如果有更好的建议和想法,欢迎在评论区提醒我讨论并更新,文字比较多,善用目录跳转。
一些吐槽
由于我国庞大的人口基数,对开源的态度与行为因人而异。开源开发者对软件供应链做出的贡献使得他们应当得到最基本的尊重,然而,他们辛勤的劳动成果被转手倒卖或者修改文本并标榜自研之类“佳话”屡见不鲜。这是令人遗憾的,但在生活中也并不少见。随着中国全社会物质生活的巨大进步,相信一些落后的思想会紧随其后跟上物质领域的深刻变化。
如何学习
计算机科学是一门系统性的科学,计算机科学并不是说,你会写几行代码,调用几个第三方库就代表你懂得Computer Science了。你需要多方面知识体系的综合支撑才能自豪的宣称你是一个计算机科学家/工程师。
我在下面提供一些资料的传送门,此外在浅谈一下我个人的学习心得。对于本文或者本文包含的资料如果有建议和想法都可以提出并贡献给他们。
课堂内
首先,学校内的课程有没有必要去听呢,这里要分两种情况去讨论,一种是各种基础科学所构成的通识课,一种是计算机科学相关的专业课。
在大一,首先接触到的就是高等数学,线性代数之类,数学很优美,数学很有趣,数学是有用的,比如我们常见的图片/音频压缩算法就是基于线性代数的矩阵变换,高等数学对于人工智能来说也是必不可少的,此外ACM的竞赛对离散数学,数论等要求也是耳熟能详。虽然我个人高考数学只有55,高等数学上下全挂(有很大的原因是我自己几乎没怎么学)。至少对于普通高校而言,校内的课程可以让你应对学校的考试,让你能够做题,无论是对于考研还是保研来说都很重要,自己要多练习解题,如果学有余力的话可以去看一些额外的数学视频,我相信他会让你对数学之美有一个更加深刻的领悟,比如3Blue1Brown的相关视频。
英语很重要!英语可以说是计算机界的Lingua Franca,编程语言基本都是以英语的很多单词作为关键字,即使你不是计算机专业,你也可以通过英语来获取直接的信息,不依赖于经过翻译而加工过的渠道(有可能会为了达成某些目的来歪曲事实)
其余之外的很多所谓通识类课程,诸如大学物理之类,在国外通常属于“EE”课程,而不是“CS”课程,计算机专业的学生可以根据自己的爱好来进行选修这些课程,应该把更多精力放在计算机专业的核心课程上。比如2023年普林斯顿大学明确表示物理方面的课程不再归为计算机专业的课程。我自己也受过工程制图的折磨,挂科重修很麻烦,能不挂科就不要挂科,即使我们对考试的现状无能为力,也不能让他给我们增添更多负担了。学会考试做题就行,如果你感兴趣的话,也许可以去加以了解。至于水课,你应该知道那些都是什么,没有必要去理会。
接下来,涉及到计算机相关的课程,这里需要你擦亮眼睛来分辨课程水平,即使是现在,还是有很多教的不错的老师,如果有老师教你用Git,如何问问题和用现代IDE,那就给他磕一个吧,对于国内的课程不能一棒子打死,我转专业时补修的C语言老师就很不错,会带你深入了解内存的一些底层原理。那位老师本身就是做嵌入式的,所以C语言的知识也很牢固。如果有些老师只是来混时长,念着年龄比你都大的ppt,或者沉浸科研,无心教学的话,那就需要你自己自学了,自学是好的,计算机是与时俱进,不断更新的,我们不可能在2023年还用汇编语言与PC98来开发Galgame。
课堂外
加入一些科技类学生社团,那些社团是有很多可以量化的好处的,除了作为一个交流的地方,也可以了解很多比赛,该领域的新鲜事。同学一般也很乐于回答你的问题,不过首先,你得学会如何提问,将一些百度就能搜到的问题抛给同学是很不礼貌的,这是在浪费他们宝贵的时间,你可以阅读这本书来学习如何提问。另外,还请不要忘记初心,很多科技类学生社团的创办者或负责人都是一些很好的人,他们愿意付出时间来带动有兴趣的同学一同进步。我也希望大家可以成为一个善良且有着理想的人。再者,来而不往,非礼也。请不要成为另一个只会盯着屏幕随时准备下载资料的人。如果可以的话,也帮助一些其他遇到困难的同学。时不时水个群,即使是计算机高手也有很多兴趣爱好,适当在群里转发些meme,讨论些游戏动漫都是可以的。一个死气沉沉的交流群是很令人沮丧的。
对于我们学校的科技类学生社团,算法协会,网络安全协会都是很不错的社团,现任负责人就是我认为的那种同学,热心且理想,如果对这一领域有相关兴趣的话可以考虑加入。你如果想过把官瘾去什么社联,学生会之类当我没说,不对,估计他们压根不会看到这儿。
算法协会的交流群Q群号:771966520
计算机科学也是重实践的科学,想要提高自己的编程/工程能力,可以用心做好你的每份课设,如果有实验室的话,找专业老师报名参与一些开发,更高级的话,也可以考虑去GitHub上对自己喜欢的项目贡献一些代码了(即使是issue也是可以的√),每年还有各种免费的训练营,可以切切实实学习到系统的知识/提升工程实践能力
例如字节跳动青训营/开源操作系统训练营,这是我自己参加过的,也是很不错的训练营(不是培训班,不收钱)
语言的学习路线
对于一个新手来说,比较合适的是从C语言开始学起作为他的第一个入门语言,这样有助于了解大部分语言的语法基础以及用编程解决问题的实践,除此之外,作为一门介于低级语言与高级语言之间的编程语言,你还可以通过它操作一些计算机的底层内容,例如内存,文件指针,CPU寄存器之类。
第二个语言可以是Java,虽然网络上充斥着学Java不如进厂之类的言论,对于普通学生来说,Java可以作为了解面向对象过程范式的高级语言,此外,还可以用Java丰富的第三方库来实现一些自己想要的东西,我就曾在大一上学期苦于吃饭吃什么,用Javalin框架写了个RestFUL风格的小后端来随机生成菜单,脱离万物SpringBoot论,用大炮打蚊子是不优雅的,什么东西解决什么问题是对应的。在学习这两个语言之后,后面不管是什么语言学习起来都会很快的(Rust的话,emm我不好说)
此外,语言说到底只是实现目的的工具,并不存在所谓的“万能语言”,遇到什么问题用什么工具来解决就是,你需要有的是解决问题的思想。
你应该少看/不看什么
首先,我建议直接屏蔽CSDN,除了新添的仅VIP可阅读之外,先前就充斥着各种复制粘贴的文档,非常浪费你要解决问题搜索时造成的无效搜索。在中文互联网搜索不到你想要的结果时,可以试试别的搜索引擎,比如Bing,Google
此外,很多微信公众号个人比较反感,首先,他们无法被搜索引擎检索,这就与“共享”的初衷违背,其次,这里面通常夹带私货,同时公众号也开始收费,会劝退更多在这上面分享信息的个人开发者,导致整体质量进一步下降。
其次,远离培训班,无论他说的有多好听,他一开始就打着“赚大钱/高新”的旗号面向文科转码,CS0基础的非科班生人群报名,报名费往往上万先不提,同时也和这篇文章的目标读者大概率不符,我个人也看过一些免费视频,节奏真的很慢,就像是从1+1=2开始教起,当然这里不是夸她细致,你这样想,如果技术足够优秀的开发者,他更可能在大厂而不是在xx培训班开设课程教你们,此外,很多优秀开发者都会写博客/开源书,你更应该看这些而不是培训班的免费视频/课程,对于ACM也是一回事(对于ACM,除非真的是认证过的ICPC金牌选手的课也许有帮助(虽然出发点也存疑))
学习资料
首先是总的学习路线,这里包含了非常多的可靠课程的引流与指引
我个人喜欢阅读书本(纸质/电子介质),视频一般都是期末突击/补考的时候才看的,不过也只是个人观点,自己适合什么就看什么
CS自学指南 (csdiy.wiki) <-很多基础知识(搜索,Git,上网方式也囊括其中,因此本文不多做赘述)
接着是对于某一特定的领域
操作系统
除了上述路线推荐的操作系统课程外,我个人非常推荐这本,摩登又有思维(需要Rust和计组的一些基础,我个人在学习之前是刷了rustlings100道再开始的,学习难度较大,但是绝对值得)(我本人因为学校许多繁忙又无意义的事情而被迫放弃了学习,日后再说)
rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档 (rcore-os.cn)
Golang
Gin Web Framework (gin-gonic.com) <-Web轻量框架,项目实例可以参考一下我的GitHub:)
Java
Java我建议可以淘宝直接搜索“Java四大名著”,在淘宝“新华文轩旗舰”店上可以买到
或者也可以去图书馆借书,其中最常用的两本ISBN号为,978-7-111-63666-3,978-7-111-64343-2(Java核心技术 卷I与卷II,第十一版是蓝色封面的)
之后对于Web开发就可以尝试接触SpringBoot与Mybatis框架的学习(推荐这些是因为国内公司基本都在用这些…)
C++
Stroustrup: The C++ Programming Language (4th Edition) (第四版为C++11)
C++程序设计:原理与实践 类似Rust圣经那种大而全的
C++之旅(最新版C++20)
cppreference.com <- C++速查表
Rust
简介 – Rust 参考手册 中文版 (rustwiki.org.cn)
ACM
OI Wiki – OI Wiki (oi-wiki.org)
Vue
多种类开发人员速查表
(中文版不是英文版的简单翻译,有一些内容可能在A上但不在B上,反之成立)
Quick Reference & Quick Reference (wangchujiang.com) <-英文版
CheatSheets.zip – Quick Reference Cheat Sheet <-中文版
Quick Reference & Quick Reference (shanwer.top) <-本站中文版镜像,最后更新于2023/10/18 16:08:07
个人开发者独立博客
除此之外,我还推荐一些开发者的个人博客,也可以了解到很多知识(所以说顶着二次元头像的一般都是计算机高手)
HikariLan’s Blog – 兰草凋荡,星辰璀璨 (minecraft.kim)
樱花庄的白猫 | ねこ・しろ・ましろ (2heng.xin)
后记
当你在学习这些资料的时候,找一段连续不受干扰的时间,无关考试与绩点,只有一个信念:你在变强,你会变得更强。
我在上大学前抱着很多美好却不切实际的幻想,富有激情的同学一同解决问题,做着实验与小组合作,甚至还能与老师一起投身科研为国家和社会做贡献。虽然现实与理想相差甚远,我还是认为,茫茫人海中隐藏着眼中有光,心中有理想,热爱计算机且富有开源精神的同学,如果恰好就是正感到无比孤独的你,你不是一个人!
三个字,骂得好
额啊,我居然看完了
好好好
英语😭😭
顺带一提,国内版bing好像是百度合作的搜到的全是
tmdCSDN