计算机的学习路线

news2025/1/16 2:47:57

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

适合有成为IT领域技术大牛的人参考。

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

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

什么是计算机?

用来做运算的机器

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

什么是冯诺依曼架构?

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

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

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

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

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

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

为什么要从一门高级语言-C语言学期,而不是底层?

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

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

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

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

如何学C语言?

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

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

实际上对于新手来说,只需要掌握最基本的语法,这本书过于严谨和全面。

你可以选择一本轻薄的教材,用一下午快速掌握一下基础语法,运算,循环,判断,函数,指针和数组。
有这些内容,你就可以去做任何事了。

什么是算法?

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

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

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

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

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

如何学习算法?

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

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

我建议从oi算法入手,参加一些蓝桥杯,CSP认证之类的比赛。能力强,有机会的可以去参加ACM。如果你能力一般,那就是以赛代练,训练能力。如果你能力强,可以去当赛棍。

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

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

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

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

了解IT的各个领域

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

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

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

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

学好核心内容

计算机核心课程

考研所考的内容是数据结构与算法,操作系统,计算机组成原理,计算机网络,这几门是计算机的核心。

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

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

核心课程

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

操作系统

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

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

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

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

计算机组成原理

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

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

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

计算机网络

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

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

物理学

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

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

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

数学

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[1.3_1]计算机系统概述——操作系统的运行机制

文章目录第一章 计算机系统概述操作系统的运行机制前提知识:程序是如何运行的内核程序与应用程序特权指令与非特权指令内核态与用户态小结第一章 计算机系统概述 操作系统的运行机制 操作系统的运行机制,也就是操作系统在计算机上是怎样运行的问题。 操…

Go语言的条件控制语句及循环语句的学习笔记

一、Go的条件控制语句 Go 语言提供了以下几种条件判断语句: 语句描述if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。if 嵌套语句你可以在 if 或…

C++概览:工具链、基础知识、进阶及总结

本篇写给C初学者,作为概览,文中仅包含各方面基础知识,无深入分析。 C基础概念简介 C编译过程示意图 关键词:源文件、预编译、编译、汇编、链接 C工具链总结 cmake项目工程文件是一种中介工程文件,可以转化成其他…

Python+Qt指纹录入识别考勤系统

PythonQt指纹录入识别考勤系统如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonQt指纹录入识别考勤系统>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学…

如何在 OpenEuler 系统中安装 Docker

Docker 是一种流行的开源容器化平台&#xff0c;它能够将应用程序与其依赖项打包成可移植的容器&#xff0c;从而简化了应用程序的部署和管理。本文将介绍在 OpenEuler 系统中安装 Docker 并使用 Docker 容器控制 5G 模块的具体步骤。 安装 Docker 安装 Docker 的具体步骤如下…

react动态路由组件的封装

react动态路由组件的封装 我这篇比较全面 首先下载包 npm i react-router-dom5 这里为什么要用5的版本为啥不用最新的&#xff0c;原因在于老版本跟新版本写法不一样 老版本 import { HashRouter, Route, Switch, Redirect } from react-router-dom;render() {return (<Ha…

JavaEE——何为线程及创建线程

文章目录一、认识线程1. 线程的概念2. 出现多线程的原因3. 进程与线程4. 对多线程的详细解释二、初次实现多线程代码1. 初步了解2. 使用 Java 中的工具查看当前的所有线程3. Java 中创建线程的多种方式一、认识线程 1. 线程的概念 所谓线程&#xff0c;就是指在一个 ‘执行流…

机器学习、数据挖掘和统计模式识别学习(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 机器学习是让计算机在没有明确编程的情况下采取行动的科学。在过去的十年中&#xff0c;机器学习为我们提供了自动驾驶汽车&…

【2021.12.25】xv6系统入门学习

【2021.12.28】为xv6系统添加一个开机密码 文章目录【2021.12.28】为xv6系统添加一个开机密码0、说明1、Ubuntu20上安装xv62、测试指令3、修改系统代码4、添加自己的程序命令0、说明 xv6 是 MIT 设计的一个教学型操纵系统。 记录Ubuntu上安装x86版本的xv6系统&#xff0c;为其…

Acwing---843. n-皇后问题——DFS

n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 …

ChatGPT介绍以及一些使用案例

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

AJAX 异步请求详细教程

文章目录AJAX 异步请求简介Jquery 版 Ajax$.ajax() -- Jquery提供的 ajax 函数注册验证用户名是否可用$.get() 与 $.post()Ajax 返回数据类型JSONjson 简介JSON 对象JSON 数组对象数组混合格式小结JSON 应用JSON 对象的使用JSON 数组的使用响应的 json 数组数组对象混合格式Jac…

八大排序算法之堆排序的实现+经典TopK问题

目录 一.堆元素的上下调整接口 1.前言 2.堆元素向上调整算法接口 3.堆元素向下调整算法接口 二.堆排序的实现 1.空间复杂度为O(N)的堆排序(以排升序为例) 思路分析: 代码实现: 排序测试: ​时空复杂度分析: 2. 空间复杂度为O(1)的堆排序(以排降序为例) 将数组arr调…

IGKBoard(imx6ull)-SPI接口编程-回环测试

文章目录1- 使能imx6ull开发板SPI驱动2- 回环测试imx6ull开发板物理连接3- 编程SPI回环测试4- 代码重难点分析&#xff08;1&#xff09;spi_device结构体&#xff08;2&#xff09;spi_ioc_transfer结构体&#xff08;3&#xff09;ioctl函数对于SIP不了解的可以参考这篇文章&…

GVRP-LNP-VCMP讲解

目录 GVRP讲解 动态创建Vlan并将端口加入Vlan GVRP消息类型 GVRP工作原理 LNP讲解 动态修改接口链路类型 VCMP讲解 动态创建Vlan 相关概念 Vlan同步 VCMP与GVRP的区别 GVRP讲解 动态创建Vlan并将端口加入Vlan GVRP&#xff08;GARR Vlan Registration Protocol&#xf…

28个案例问题分析---01---redis没有及时更新问题--Redis

redis没有及时更新问题一&#xff1a;背景介绍二&#xff1a;前期准备pom依赖连接Redis工具类连接mysql工具类三&#xff1a;过程使用redis缓存&#xff0c;缓存用户年龄业务对应流程图使用redis缓存用户年龄对应代码四&#xff1a;总结一&#xff1a;背景介绍 业务中使用redis…

【机器学习面试】百面机器学习笔记和问题总结+扩展面试题

第1章 特征工程 1、为什么需要对数值类型的特征做归一化&#xff1f; &#xff08;1&#xff09;消除量纲&#xff0c;将所有特征统一到一个大致相同的区间范围&#xff0c;使不同指标之间具由可比性&#xff1b; &#xff08;2&#xff09;可以加快梯度下降收敛的速度&#…

powershell-dns-txt远程加载

2022-10-30 参考原文&#xff1a; 远程下载的通用替代方案 &#xff5c; 红队攻防 https://mp.weixin.qq.com/s/9MAKZZfNB5YFT7jgln5lXQ实现过程 dns环境&#xff1a;kali bind9&#xff08;docker版&#xff09;&#xff0c;ip&#xff1a;192.168.161.128 靶机&#xff…

AD封装转Allego Cadence

AD封装转Allego CadenceAD封装转Allego Cadence软件版本转换步骤导出AD文件在PADS导入AD在cadence导入PADS在cadence导出library修改焊盘替换焊盘AD封装转Allego Cadence 有时候在网上下载的封装是AD格式的&#xff0c;但内容实在太多&#xff0c;为了快速便捷获得cadence格式…

梯度提升算法决策过程的逐步可视化

梯度提升算法是最常用的集成机器学习技术之一&#xff0c;该模型使用弱决策树序列来构建强学习器。这也是XGBoost和LightGBM模型的理论基础&#xff0c;所以在这篇文章中&#xff0c;我们将从头开始构建一个梯度增强模型并将其可视化。 梯度提升算法介绍 梯度提升算法&#x…