一个供参考的计算机的学习路线

简介: 写给大一新生的计算机学习路线,供批判性参考

 

本文是介绍如何成为一个Geek,一个真正的计算机高手。

适合开始入门并想成为IT领域技术大牛的人参考。

写给大一新生和所有向深耕IT领域的人,避免走一些弯路。

仅代表个人想法,供批判性参考。

第一门入门的必备功课-语法与算法

我认为这一部分的内容适合大一新生去做

什么是计算机?

用来做运算的机器

电子计算机在运算方面和廉价的计算器原理并没有区别。

什么是冯诺依曼架构?

冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

核心的内容只有两点:存储运算

我们可以将输入的数据进行运算,还能将运算结果进行存储。

而且能利用存储的数据进行判断,按照判断的结果实现程序流程的改变,就是循环和判断。

按照这样一个架构,我们就可以编写程序了,可以将很多运算和跳转的指令存储在计算机中(存储代码的这一段内存称为代码段),在运算过程中用产生的结果改变内存中的数据。

执行到判断跳转的指令时,根据内存中的数据修改PC寄存器的值(这个值是一个地址,这个寄存器始终将要运行的指令的地址),来修改程序执行流程。这样我们就实现了判断的逻辑和循环的逻辑,这两种逻辑可以将人类逻辑转换成程序执行流。

为什么要从一门高级语言-C语言学起,而不是计算机的底层?

上一个问题中描述的是运算,跳转两种指令指的是汇编语言的主要指令。

这种操作是很细节的,直接操作寄存器,CPU和内存。

我们在学习计算机入门需要培养的是什么,是逻辑。如果太关注硬件细节,对新手太不友好,当我们通过高级语言来训练好逻辑之后,再去学汇编语言,就已经具备了逻辑能力,学起来才会容易,这是一个循序渐进的过程。

为什么要选C语言而不是别的高级语言来入门,这是因为C的灵活是其他编程语言无法比拟的。设计一个编程语言其实是融入了设计者的哲学思考,C语言的基础语法很简单,但是真正的设计是博大精深的,所以在这里很难完整地阐述为什么选择C语言的原因。

这就是为什么计算机应该从C语言开始学起的原因。

何学C语言?

这时你可能会去找一本C语言的书来读

你可能会看到这本,觉得C语言太复杂了,书这么厚。

实际上对于新手来说,只需要掌握最基本的语法,这本书过于严谨和全面。这本书最后还添加了一些简单的算法,导致篇幅增加,但是很少有人会认为一本语法书适合学习算法。

你可以选择一本轻薄的教材,或者在线学习资源也足够,用一下午快速掌握一下基础语法,运算,循环,判断,函数,指针和数组。

刚开始学习C语言的同学可能有一个误区,会去卷各种库函数的记忆。这是没有用的,一个熟练的程序员在使用库函数时也是会选择查找,别人写的接口你需要查找使用即可,常用的自然会记住。不要在这里浪费你学习你接下来学习核心内容的时间。

有这些内容,你就可以去做任何事了。

什么是算法?

你接触过什么算法,欧几里得算法,秦九韶算法...

他们就是一套计算的方法,可以解决某个特定的问题,步骤比较机械,特别适合计算机来执行。

在计算机的世界中,除非你是过于底层的设计,嵌入式开发,芯片设计,别的所有领域里这里提到的算法都是核心。

我们编写一个程序一般是为了解决一个问题,过程中用到一套算法。统计数据库中学生的数量需要一套算法。张一鸣正是发明了一套推送算法,创立了字节。图灵奖得主中因为在算法领域取得突出贡献而得奖的占多数。

一个思想上有深度的算法的诞生,标志着一类人类社会中的问题可以用计算机来实现了。

如何学习算法?

算法是核心,而且软件领域只有两种事情,别人的代码,我们要读懂,还有自己要写的代码,要有编码能力。

当你学了算法后对编程逻辑就有了驾驭能力。

我建议从oi算法入手,参加一些蓝桥杯,CSP认证之类的比赛。能力强,有机会的可以去参加ACM。如果你能力一般,那就是以赛代练,训练能力。如果你能力强,可以去当赛棍。CSP也是很有价值的,但是很多学术机构对CSP都有要求,清华原则上不录取CSP低于300的。

当然算法竞赛和实际问题区别是很大的,你不能短时间用算法编写程序不代表你比竞赛选手在计算机实际应用中的能力就差。参加比赛可以训练一定的编码能力。大一的计算机新生适合做一些算法竞赛具备这个必备能力。

这里可以简单介绍一下常见的算法竞赛。

蓝桥杯

这是一个工业信息化部门承办的算法竞赛,是一个普及性的比赛,希望大量计算机专业学生参加,而不是专门的算法竞赛选手。报名费有点小贵,300。但是很多弱省,省奖是很好拿的。一般拿到省奖会有单项奖学金或者学校报销报名费。虽然是一个普及性的比赛,但是题目质量开始越来越高,值得每个想学技术的人去参加一下。

ACM

这是门槛较高的国际编程竞赛。想要参加一般需要加入你们学校的校队。比赛一个队伍3个人,每个学校只有几个队伍有线下赛的资格。大一零基础的一般是有希望参加的,还有大二猛肝从零基础到夺金的情况。ACM含金量就比较高,如果你夺得区域赛银牌以上,很多大厂会有免除笔试,面试的绿色通道。当然这个比赛也有不同的声音,有大牛认为算法竞赛和实际问题区别很大,没有必要在ACM这个比赛上面浪费精力,学到技术是最重要的。

CSP认证

这是一个中国计算机协会举办的软件能力认证,题面趋向于越来越长。很多学术机构对这个认证是有要求的,清华考研CSP低于300分的原则上不录取。CSP的高分是简历上很好看的一笔。

我建议学习资源可以选择acwing网站和《算法竞赛进阶指南》

如果上面这些两种学习资源对与你来说还是比较困难的,可以阅读一下《啊哈算法》。啊哈算法是很详细很直观地讲解算法,配有有趣的插图,为了所有人都能看懂。

建议上述资源结合起来使用。

我们没必要一上手就是数据结构,看着冗长的代码,用算法竞赛的写法培养一下能力最重要。

你可以打一些在线的比赛,牛客网周赛,acwing周赛,还有比较著名的codeforces网站。

当你有了对基础算法的掌控能力后,要仔细学习数据结构。

了解IT的各个领域

当你可以驾驭一门编程语言之后,你就可以几个小时内学习一门高级语言。Java,Python,Go,Rust有能力的话都可以速成一下,只需要看最基础的语法就可以上手了。要在实践中学习。要有查阅技术社区博客和官方文档的能力

IT领域中别人开放过的项目的代码你是不可能全部读完的,要想去认识,只有培养去理解的能力和查阅资料的能力,按照需求出发去选择性学。

可以学一下别的编程语言和数据库,相信你这时学习这些内容并不需要多长时间。

这样你已经提升了认知,打开了计算机的潘多拉魔盒。你可以了解任何一个方向,选择你所喜欢的方向进行深耕,网络安全,云计算,后端开发,前端开发,游戏开发,人工智能。你有自学看懂这些书籍的能力,因为你有了编码能力。

因为计算机很多领域都有相通的特性,都是代码实现的,所以一窍通,百窍通。所以你一开始没必要深入学习各个方向,可以几个月时间你就能在各个方向都玩一玩,了解自己喜欢什么,想做什么,扩展自己的认知。

如果你想在极短的时间内了解计算机的各个方向,可以看一下计算机科学速成课。只有40节课,一节课10分钟,但是从很好的角度高屋建瓴地阐述了计算机的大部分主流领域。

学好核心内容

计算机核心课程

考研所考的内容是数据结构与算法,操作系统,计算机组成原理,计算机网络,这几门是计算机的核心。为了考研和学术的需求,认真学习概念也是有必要的。

至于编程语言和数据库等知识,实操永远是第一位的。就像没有每天看游戏角色数据而不去玩的电竞选手。核心的是编码能力和认知,这些学科概念没任何用处,会实操即掌握。因为计算机世界中一部分是别人写的代码,一部分是自己写的。自己写需要逻辑能力,而这些学科是别人写的代码,给了你一个接口,你可以用你的编码能力来认识,来使用。但是发明者起的名词只需要灵活掌握。千万不要把是时间浪费在机械记忆上。

我们知道清华姚班的姚期智教授,删除了老化课程,加强了核心学习,引导学生在本科阶段培养自己的专长。

核心课程

回到核心课程中,这些核心课程相对有必要按照科班教科书式地学习。而且也是考研所需要的内容,所以我们也不得不系统学习概念来获得一定的应试能力。

操作系统

程序员必须对操作系统掌握好,操作系统就是一个大程序,一般书会从抽象层次来开始讲述,什么是抽象,就是不给你具体代码,来讲述想要写的程序的逻辑。这个过程需要慢慢来理解。

程序使用的操作系统和服务器使用的操作系统是Linux,我们必须熟练掌握Linux的命令

这里推荐MIT的CS计算机操作环境导论,学会Linux的命令才能进行开发。学Linux系统的操作和学习操作系统理论知识不存在先后关系,根据需求来学。

学好操作系统基础知识之后去看Linux的内核源代码,从具象层次将操作系统理解透彻,才能成为大牛。推荐《深入理解LINUX内核》。

计算机组成原理

可能是考研专业课中的瓶颈,涉及硬件层次的计算机架构,操作系统处于硬件和应用程序之间。

要想学好计算机组成原理,可以学一点数字电路,如果不做硬件开发的话,数字电路理解即可,简单涉略,没必要进行设计。也要学习一定汇编语言,这对于操作系统和计算机组成原理都是很有必要的。

当然直接拿计算机组成原理和操作系统的书来学也是可以的,但是这样可能就需要就好的抽象理解能力了。

编译原理

编译原理是相对比较难的一门学科,虽然不在408的范畴,但是也是技术人员必备的知识。

计算机网络

网络的基础知识是比较简单的。理解网楼哦层次架构,记忆协议就可以。

计算机与基础自然科学的关系

物理学

其实目前技术应用上并没有关系,我们最底层研究到数字电路,但是数字电路是逻辑门的设计,用不到电压和电流等电学知识,哪怕你是嵌入式开发者,芯片设计者,也是不需要电学的。跟别说力学,相对论和量子力学了。

物理对于计算机毫无意义吗,也不是,摩尔定律失效是因为芯片设计碰到了量子力学,时代是向前发展的,基础自然科学对于你认知的提升有帮助。可能有些人也有计算机与物理结合方面的志向,但是物理学与目前真正的计算机核心毫无关系,根据自己需要完全可以不学。计算机早已从电子学科中分离。

生物,化学与计算机的联系是更小。

数学

如果你的目标只是进厂,那么也许对于你来说更重要是业务能力,后端开发,前端开发,游戏开发,是最基础的工作都是具备编码能力,工作经验就可以胜任的。这时候很多普通码农就提出了数学无用论

但是你要想自己设计一套算法,研究密码学,人工智能,做一个真正的高级人才,而不是码农,数学的要求是相当的。最核心的是线性代数,概率论,离散数学。当然你需要的不是应试能力,是真正的数学能力。

我们常说计算机行业饱和了,其实不然,现在的世界是不缺少码农的,码农是可以社会培训几个月速成的,但是高级人才在我国都是缺口。BAT都没有实力养一套自己的加密算法。中国的第三代黑客也是处于断档,网络安全人员急缺。

数学课程推荐

    僧多粥少,很多人忙于过度无意义内卷来试图通过分数更高来获得竞争力。其实也可以换一个思路,重剑无锋,在绝对的实力面前一切技巧都是徒劳,艰难之业当累日月。你可以选择一个自己愿意沉下心来钻研的方向进行深耕,会学到真正的技术,随大流是必不讨好的。

    计算机科学丛书(黑皮书)

    所谓计算机黑皮书,指的机械工业出版社引进的计算机科学丛书,其封面都是黑色的大理石纹理式样,体现了直男审美计算机工业的品位和格调:冷峻而不失高雅。

    这些黑皮书都是从国外引进的,很多都是国外的教材,作者都是业界顶尖的大牛。

    本科除了保证一定的代码量,还应该读一些黑皮书进行积累。大学时间也很长,制定计划,日积月累,总会读完。

    深入理解计算机系统(CSAPP)

    这是被誉为等量黄金的黑皮书,每个计算机学生有必要读完

    是黑书中最有必要读的书之一。

    书的前言说的也很清楚,读完这本书的时候,你已经成为了为数不多的大牛。

    这本书从程序员的视角出发,详细介绍底层知识,涉及计算机组成原理和操作系统的知识。

    现代操作系统

    是操作系统的最经典的书籍,作为如此核心的学科,这本书也很有价值。

    可以作为学习操作系统的第一本书。

    算法导论

    算法导论对经典的算法进行了原理层面的剖析,虽然是一本巨作,但是可能不适合计算机新手阅读,入门计算机只需要熟练传统的算法和数据结构。人的精力有限,这样一本巨作不适合过早地读。很多ACM高手也不会去研究这本书。

    但是对于想钻研算法的原理的同学,这本书是很适合的。

    汇编语言:基于x86处理器

    本书是个人感觉比较好啃的黑书,几天就可以看完。

    汇编语言的学习对于理解编译原理,操作系统和计算机组成原理的学习都很有必要。否则很多概念会有些抽象。

    其他黑书可以根据自己的需求去选择

    计算机别的竞赛

    除了算法竞赛之外,计算机还有很多别的竞赛。ACM有年龄限制,往往很多人因为考研工作等原因会在大三后退役。

    计算机还有别的竞赛。喜欢的话可以参加。

    CTF

    这是网络安全的招牌。起源于黑客大会。称为夺旗赛(Capture the flag)。

    分为Web,Pwn,Reverse,Misc,Crypto等方向

    有解题模式和攻防模式。

    Web

    进行Web渗透测试,扫描漏洞,进行入侵,进入靶机,取出靶机中的flag

    Pwn

    利用二进制漏洞,进行StackOverflow等攻击手段进行攻击,取得shell,取得shell之后就可以随心所欲处理靶机中的任何文件,取出flag

    Reverse

    对一个可执行文件进行分析,取出其中的flag。比如我们熟悉的exe文件,exe文件和dll文件属于PE文件,是Windows系统中的可执行文件。题解模式会给一个执行文件,但是不给出代码,可以用逆向分析工具获取反汇编和反编译的代码。进行调试分析,取出flag,在现实生活中的引用有软件破解,恶意代码分析。

    Misc

    CTF中的杂项,涉及图片隐写,音频隐写等内容。隐写就是在一个文件隐藏数据,但是不影响原来文件的功能,比如,可以在一个图片文件中藏一个压缩包,但是图片文件看起来还是那个图片文件。比赛中我们要将隐藏的数据获取。

    学习CTF的条件

    只要有一定的编码能力就可以参加,最好对于别的核心学科有一定认知。但是不需要系统学习。

    CTF入门过程是在实操中补充知识点来学的。

    真正的CTF没有套路,需要查阅官方文档,自己学习。

    区块链比赛

    区块链是比较新的一个方向,也是资本喜欢的一个话题。与之有关的比赛也很多,奖金池也比较丰厚。

    别的比赛在这里不一一列举了。

    如果你把每一天当成最后一天来活的话,你就会轻松自在。        ——Steve jobs





    相关文章
    |
    云安全 存储 安全
    一文看全数据跨境合规
    于9月1日正式实施的《数据安全法》再次加码数据出境安全。 基于8月27日《数据安全法》解读与阿里云三大合规方案线上直播活动,阿里云解决方案架构师锅涛分享的《数据跨境流转安全》主题内容,整理出数据出境安全的九问九答,为企业数据跨境流转送上安全锦囊。
    1551 0
    一文看全数据跨境合规
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    如何将模糊照片人脸恢复清晰,GFPGAN机器学习开源项目使用 | 机器学习
    如何将模糊照片人脸恢复清晰,GFPGAN机器学习开源项目使用 | 机器学习
    如何将模糊照片人脸恢复清晰,GFPGAN机器学习开源项目使用 | 机器学习
    |
    9月前
    |
    网络架构
    精品网络时代:联通AS9929与10099的强强联合
    中国联通的网络架构由AS4837、AS9929和AS10099三张骨干网组成,形成独特服务体系。常见组合如“AS4837(国内)+AS4837(国外)”适合普通需求,而“AS9929(国内)+AS10099(国外)”则针对高品质用户。通过识别AS编号可判断线路类型。未来,联通将持续优化,构建更智能灵活的网络体系,支持创新应用发展。
    772 0
    |
    6月前
    |
    存储 数据安全/隐私保护 开发者
    Python深浅拷贝全解析:从原理到实战的避坑指南
    在Python开发中,深浅拷贝是处理对象复制的关键概念。直接赋值仅复制引用,修改副本会影响原始数据。浅拷贝(如切片、copy方法)创建新容器但共享嵌套对象,适用于单层结构或需共享子对象的场景;而深拷贝(copy.deepcopy)递归复制所有层级,确保完全独立,适合嵌套结构或多线程环境。本文详解二者原理、实现方式及性能考量,帮助开发者根据实际需求选择合适的拷贝策略,避免数据污染与性能浪费。
    367 1
    |
    10月前
    |
    机器学习/深度学习 人工智能 算法
    MIDI-3D:单图秒变3D场景!40秒生成360度空间,多实例扩散黑科技
    MIDI-3D 是一种先进的 AI 3D 场景生成技术,能够将单张图像快速转化为高保真度的 360 度 3D 场景,具有强大的全局感知能力和细节表现力,适用于游戏开发、虚拟现实、室内设计等多个领域。
    402 18
    MIDI-3D:单图秒变3D场景!40秒生成360度空间,多实例扩散黑科技
    |
    存储
    计算机基础(4)——原码、补码、反码
    计算机为了区分数值的正负提出了符号位的设定,计算机用最高位存放符号,这个被称为符号位。正数的符号位为0, 负数的符号位为1。 例如,1的二进制表示形式为`0000 0001`,而-1的二进制表示形式为`1000 0001`。在计算机中,一个字节为8个位,最大值为0111 1111,十进制为127。最小值为1000 0000,十进制为-128。因此一个字节的取值范围为-128~127之间。
    2968 4
    |
    Kubernetes 架构师 Java
    史上最全对照表:大厂P6/P7/P8 职业技能 薪资水平 成长路线
    40岁老架构师尼恩,专注于帮助读者提升技术能力和职业发展。其读者群中,多位成员成功获得知名互联网企业的面试机会。尼恩不仅提供系统化的面试准备指导,还特别针对谈薪酬环节给予专业建议,助力求职者在与HR谈判时更加自信。此外,尼恩还分享了阿里巴巴的职级体系,作为行业内广泛认可的标准,帮助读者更好地理解各职级的要求和发展路径。通过尼恩的技术圣经系列PDF,如《尼恩Java面试宝典》等,读者可以进一步提升自身技术实力,应对职场挑战。关注“技术自由圈”公众号,获取更多资源。
    |
    编解码 自然语言处理 数据可视化
    阿里云百炼产品月刊【2024年10月】
    阿里云百炼产品月刊【2024年10月】上线,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。本月推出开源图片解析模型qwen2-vl-7b-instruct和qwen2-vl-2b-instruct,提升图片理解能力;主流模型qwen-max、qwen-turbo和qwen-plus升级至快照0919版本,支持8千字长文本输出;新增应用观测功能,实时查看调用次数和应用时延。此外,还发布了《阿里云百炼产品动态》电子书以及阿里云百炼产品最新规划电子刊,汇集最新产品动态和实践案例。
    1105 0
    |
    机器学习/深度学习 数据可视化 数据挖掘
    构建可复用的 Jupyter 模板和插件:提高工作效率的最佳实践
    【8月更文第29天】Jupyter Notebook 是一个广泛使用的交互式计算环境,支持多种编程语言。它不仅用于数据分析、可视化和机器学习项目,也是教学和科研的理想工具。然而,随着使用频率的增加,重复编写相似的代码和设置变得既耗时又低效。通过创建可复用的 Jupyter 模板和插件,我们可以显著提高工作效率。
    478 1
    |
    前端开发 算法 网络协议
    计算机专业学习路线及经验
    计算机专业学习路线及经验
    422 0