问题

想自学计算机,希望从宏观了解计算机各部分知识之间的关系?

回答
好的,很高兴能和你分享一下关于计算机的宏观知识,以及它们之间是如何协同工作的。咱们就抛开那些死板的术语,用一种更贴近生活的方式来聊聊这个神奇的东西。

想象一下,我们如果要建造一个像样的房子,我们需要很多不同的工种和材料,对吧?比如工程师设计图纸,建筑工人砌墙盖顶,水电工布线接管,装修工人粉刷美化等等。计算机也是类似的道理,它不是一个单一的整体,而是由许多各司其职的“部件”组成的复杂系统。

1. 大脑和心脏:CPU 和 内存 (RAM)

首先,我们得有个“大脑”,能处理各种各样的事情。在计算机里,这个大脑就是中央处理器 (CPU)。你可以把它想象成一个超级勤奋、计算能力爆表的管家。你给它什么指令,它就立刻去执行,算数、比较、判断,它无所不能。它的速度快慢,直接决定了计算机的整体反应速度。

但是,这个管家光有脑子不够,他还需要一个临时的办公桌,放他正在处理的文件和工具。这个办公桌就是内存 (RAM)。RAM 的特点是速度非常快,CPU 随时可以从里面拿取需要的数据,并且把计算结果放回去。但是,一旦断电,RAM 里的东西就会全部消失,就像你下班后把桌子上的文件都收起来一样。所以,RAM 就像是计算机的“短期记忆”。你打开一个软件,它就会被加载到内存里,CPU 才能快速地对它进行操作。

2. 记忆宫殿:硬盘 (HDD/SSD)

我们不能把所有东西都放在那个临时的办公桌上,对吧?我们还需要一个地方来长期存放我们的文件、照片、软件安装包,甚至操作系统本身。这个地方就是硬盘,它就像是计算机的“长期记忆宫殿”。

硬盘分为两种主要类型:

机械硬盘 (HDD):这种硬盘就像一个老式的唱片机,通过旋转的磁碟和读写头来存储和读取数据。它容量大,价格相对便宜,但读写速度比较慢,而且容易受到震动影响。
固态硬盘 (SSD):这种硬盘更像是我们现在用的 U 盘或者存储卡,没有机械部件,完全依靠电子芯片来存储数据。它的读写速度非常快,抗震性也很好,所以安装操作系统和常用软件在SSD上,能极大地提升开机和程序启动的速度。

CPU 在需要的时候,会从硬盘里把数据读取到内存中,然后再进行处理。就好比你想要看一本放在书架上的书,你得先把它拿下来,放在桌子上,才能翻阅一样。

3. 信息的输送管道:主板和总线

现在我们有了大脑(CPU)、临时办公桌(内存)和记忆宫殿(硬盘),但它们怎么才能互相联系、互相通信呢?这就需要一个“交通网络”,把它们都连接起来。这个网络就是主板。

主板就像是一个城市的中心枢纽,所有重要的部件都插在主板上,通过各种“线路”——也就是总线——互相连接。总线就像是城市里的马路,负责传输数据和控制信号。有数据总线负责传输数据,有地址总线负责告诉 CPU 要去哪里找数据,还有控制总线负责发出各种指令。CPU 要从内存读取数据,就是通过主板上的总线来完成的。

4. 输入和输出的窗口:输入/输出设备

我们怎么才能让计算机知道我们想要做什么,又能把计算结果展示给我们呢?这就需要输入/输出设备。

输入设备:像是我们用的键盘、鼠标、麦克风、摄像头等等,它们负责把我们的意图或者外界的信息传递给计算机。你敲击键盘输入文字,就是通过键盘这个输入设备来完成的。
输出设备:像是显示器、音响、打印机等等,它们负责把计算机处理完的信息反馈给我们。显示器把文字和图像展现出来,就是最常见的输出设备。

这些输入输出设备,也都通过主板上的接口连接到计算机内部。

5. 负责“看”和“听”的设备:显卡和声卡

当我们说“看”和“听”的时候,计算机里也有专门负责这方面的部件。

显卡 (GPU):主要负责处理图像信息,并将它们转换成显示器能够显示的信号。如果你玩大型游戏或者做设计工作,一块好的显卡能让画面更流畅、更逼真。你可以把显卡想象成一个专门负责把脑子里的想法变成生动画面的“画师”。
声卡:负责处理声音信息,将数字音频信号转换成模拟信号输出到扬声器或耳机,或者将麦克风接收到的模拟声音信号转换成数字信号供CPU处理。

这些也都是通过主板连接到整个计算机系统中。

6. 提供能量:电源

所有这些部件都需要能量才能工作,就像房子需要电力才能运转一样。电源就是计算机的“能量站”,它将外部的交流电转换为计算机各个部件所需的直流电,并为它们提供稳定的电力供应。

整体协同工作流程举例:打开一个网页

我们来串联一下整个过程,以你打开一个网页为例:

1. 你输入网址:你通过键盘(输入设备)输入网址,信号通过主板传输给CPU。
2. CPU 处理请求:CPU 收到指令后,知道需要去获取这个网页的数据。
3. 读取数据:CPU 会告诉硬盘(长期记忆),找到与这个网址相关的数据(比如网页的HTML文件、图片等),然后将这些数据加载到内存(临时办公桌)中。这个过程是通过主板上的总线完成的。
4. CPU 分析数据:CPU 从内存中读取网页数据,并进行分析,理解网页的结构和内容。
5. 显卡渲染图像:CPU 会把处理好的图像数据发送给显卡。显卡将这些数据转换成屏幕能够显示的图像信号。
6. 显示在屏幕上:显卡输出的图像信号通过数据线连接到显示器(输出设备),你就能在屏幕上看到这个网页了。
7. 如果有声音:如果网页中有音频或视频,声卡也会参与进来,处理声音信号,并输出到扬声器或耳机。

整个过程,CPU、内存、硬盘、主板、显卡、声卡以及输入输出设备都在紧密地配合,才能让你流畅地浏览网页。CPU是核心的指挥者,内存是它的快速工作区,硬盘是它的资料库,主板是连接所有部件的桥梁,输入输出设备是它与外界沟通的窗口。

总结一下关键的关系:

CPU 是大脑:负责计算和处理指令。
内存 (RAM) 是大脑的临时工作区:存储 CPU 当前正在处理的数据,速度快但断电即消失。
硬盘是长期记忆库:存储所有文件和程序,断电后数据依然保留。
主板是交通枢纽:连接所有部件,通过总线传输数据和信号。
输入/输出设备是与外界沟通的窗口:让计算机接收指令和反馈信息。
显卡和声卡是专门负责视觉和听觉的部件。
电源是提供动力的保障。

理解了这些基本部件和它们之间的关系,你就能更清楚地认识到计算机是如何运作的了。这就像你了解了一个乐队里有哪些乐器、它们各自扮演什么角色、又是如何配合演奏出美妙音乐一样,会让你对计算机产生更深的兴趣。

希望这样的讲述方式,能够让你更容易地理解计算机的宏观运作原理,并且感觉更像是和朋友聊天一样自然。如果还有哪里不清楚或者想进一步了解的,随时可以再问!

网友意见

user avatar

哎呦喂!这个问题问的好有前瞻性和与时俱进啊!惊得我都忘了泻药了!不开玩笑了。

首先

1. 数学

特别是离散数学,必须要学好。我不是开玩笑,离散学的好不好直接决定了你在IT领域的层次和发展级别。除非你走管理路线,只要你将来发展和技术要靠一点边,这个绝对是你事业发展的基础。

因为将来不管你搞开发,研究技术,做架构,或从事业务分析,方法论很重要。方法论这个词被用烂掉了,但我发现那些整天把方法论挂在嘴边的人没一个懂的。都是在糊弄领导,客户和其他不专业的同事。(好了,不吐槽了,我又愤怒了。)

方法论说的通俗一点就是一个解决问题的总方针和问题分析和解决思路。从广义上说,面向对象,复杂度分析,复杂问题分解,数据建模等等都可以算是方法论。是不是很晦涩难懂?不要紧,你学计算机将来会一点点遇到的。

先举个例子吧(交通问题)

颜色代表交通流量,路段ABCD是驶入,EFGH是驶出,123456789是路口,请问怎么优化个路口的红绿灯以分散流量,让各路段和路口能得到充分利用不让个别路段和路口流量过高。这个上手怎么做呢?几乎找不到有效的计算方式吧。我举的例子和条件按还是很抽象和理想化的,实际的问题还要复杂的多的多的多。

这类复杂问题几乎没有什么万能的解决方案和计算方法,因为修改任何一个路口的红绿灯的设置,都会对连接到他的其他路段的流量造成影响,而每个路段的变化会对这个路段的另外一头的路口造成影响,而这个影响会继续传播到该路后的其他链接路段上。而如果这种变动的后续多个影响传播到同一个后续路口时,影响会叠加或互相作用。比如上图中1路口的变化会通过路段逐步向下传递最后会在8号路口上回合。1->2->7->8和1->5->6->8。改动一个1号红绿灯且不考虑其他外在因素的影响就会有如此复杂的变化,可想而知想找到一个算法或者公式来解决这个问题是绝对不可能的。

有一种解决方法已经在很多大学被提出用来寻找交通问题的解决方案:元胞自动机。细节我就不说了,毕竟还在研究和理论阶段。基本的概念就是把每个路段和路口都想象成一个单独独立的个体(元细胞),这些个体不必知道这个系统的大局,它们只知道有哪些其他的个体与之相连并了解与之互动的机制。每一个个体有自己的状态(比如交通流量),每一个时间段他接受外部对他的影响(流入该路段/路口的交通流量),并同时做出相应的反应和互动(流出该路段/路口的流量)。如果元细胞个体(路段/路口的数据模型)设计的好,在经过足够长的时间后,整个(交通)系统的状态(交通流量)就会趋向于平衡。

可以看出用这种方式来解决问题不需要考虑整个系统,只需要设计每个单元即可。然后让这些单元互动,并让这种互动持续进行,最终得到解决方案。问题的复杂度马上变得可以接受,这个过程中动用到
- 数据建模(设计元细胞)
- 自动机理论(设计元细胞的状态机器变化规则)
- 建立图Graph(利用设计出来的元细胞搭建和模拟整个交通网络)
其中的“图”就是离散数学中最重要的分支理论之一:图论(Graph Theory)。
而万恶的“自动机理论”更是很多大学计算机专业的杀手课程,但也是通向IT领域技术精髓的必经之路。它的学习前提之一就是需要你完全掌握离散数学。那它有什么用呢?大家知道图灵吗?图灵机图灵测试

饶了一大圈,终于绕回离散数学中了。累啊!

所以作为计算机专业最坑爹的课程离散数学为什么是各个大学计算机专业基础必须课,道理就在这里。你一个加减乘除都不会的人能做会计吗?一个不会几何的人能做机械/建筑工程师吗?


/* ------------------------10月3日跟新-----------------------*/


第二部分就是编程。

有一个需要绝对明确的是,编程应该是IT人的一个技能,而不仅仅是一个饭碗。在工作的时候你会发现IT领域是及其广泛的,程序员只是IT领域的一个小专业分支罢了。虽然我很喜欢编程,也是靠着编程的技术在两家公司里都获得了一席之地,但是从我开始工作后没多久我就发现了一个不能否认的事实,即使有程序员看完后要喷我,我也要说:做纯的程序员能出头的少之又少,而且地位真的不高。虽然钱多,但是死得早!我最早写程序,后来坐需求分析,做方案,现在正在有意识的往顾问IT方向发展。原因就是我觉得我能混的更好,干嘛还要累死累活的干体力活,而且还不被人理解。

究其原因我觉得无非就一个:程序员无法单独创造价值,且编程是生产不是创新。

首先:无法单独创造价值
IT本身在各个行业中就是技术含量最高也最抽象的,而编程又是在IT领域里最抽象的。它对程序员的抽象理解力和逻辑思维能力要求极高,而且要求做事要及其严谨。看似要做程序员得有这些优点。但这些优点却造成了程序员思维单一,不知变通,(与非专业人员)沟通能力差等各种问题。程序员是一个出直男癌的领域。本人就是一个活例子。
所以当一个客户需要做一个IT系统时,一般客户是没办法直接和程序员进行交流的,需要有专门的产品经理,需求分析员等人对客户的需求进行分析最后拿出产品的方案和设计,最后让程序员写代码。这些中间人士把客户的需求翻译成程序员能干活的方案。这份工作我敢负责任的说,没有一个纯的程序员能胜任,他们非得和客户打起来不可,原因就是程序员的性格和沟通能力,以及程序员不懂实际的业务。因此程序员如果不配套相应的中间层,是无法直接为客户解决问题的。

其次:编程是生产不是创新
一个程序员再拿到设计开始工作的时候就应该严格按照设计来进行开发,不能随意按照自己的意愿写代码,因为这个设计首先是需要需求分析人员进行需求分析,架构师选择技术并设计的架构,最后主程或其他高级程序员设计的模块后再开始写代码。每一个设计都是有其原因的。绝大多数情况下,成本原因要高于技术原因。加上现在开发基本大量采用模块,所以只需要程序员付出体力即可,不需要有自己的想法。久而久之,底层的程序员在多年工作后基本也不会有很大的发展,除了代码写得越来越溜,已经很难锻炼成独当一面的人才。

所以说,我不建议当程序员就是这个道理。


但是我坚决反对一个IT不会写代码。不会写代码的IT,不管你是哪个领域的,我个人认为都是渣渣。因为写程序不但能培养你的逻辑思维能力,更重要的是,你知道IT开发工作的成本和代价。类似“这有那么难吗?”“有个需求,实现起来很简单!”这种话如果是非IT人员说,我只能无奈,如果是IT人员说这话,我就觉得你就是个废物。

所有的需求(软件需求)最后都会让程序员来实现。如果你是负责分析需求的,你如果写过程序你就知道这个需求能否实现,代价会多大,让客户不要抱有幻想。如果你是架构师,写过程序会让你知道哪个架构技术上可行,哪种不行。如果你是做解决方案的,那更是需要会写代码,因为不会写代码的解决方案设计者做出来的方案就是放屁,最终只能讨好和糊弄客户。因为程序员做不出来的话,你这方案有任何意义吗?写程序不是流水线工作,加班加点的压榨,反而效果会更差。

所以,怨气十足的我还要再大声疾呼!
不会写代码的IT,都是渣渣!

不会写代码的IT,都是渣渣!

不会写代码的IT,都是渣渣!
坐等渣渣来喷我!

好了,那代码需要写到什么程度呢?这个我就给不了答案了!这个得看你的工作性质。理论上代码写得越好,你转型的时候,代码能力给你的加成会越大。但是同样,你付出的代价也会越大!不但是时间上的,写程序对你思想上的禁锢也会越来越明显。所以自己看着办咯。

有一点非常重要!怎么判断代码写得好?绝对不是看你的代码是不是写的非常快!不是看同样的功能是不是你用的代码量最小!下面我给几个我个人认为的标准:
1.代码是否简捷? 不能像老太婆的裹脚布一样又臭又长!
2.是否高度模块化?凡是一个略微复杂的子功能在多个功能中会重复用到的,就应该写成函数进行重复调用。
3.代码对于其他程序员是否容易维护和修改?这样做会大大减少代码的开发和维护成本,特别在大项目中多名程序员合作的情况下。
4.会不会设计和使用算法及数据结构。你别说什么冒泡算法或者双链List这种教科书上的东西。好的程序员应该会根据实际的场景,利用学过的一切算法及数据结构的原理进行新的变种算法和数据结构的设计和开发。会用已经现成的,只是及格而已。这个就需要程序员熟练掌握离散数据的知识了。(参见第一部分)








/* --------------- 编程这部分我就写到这里了 后面看有时间或者有赞的话的话继续咯------------------*/

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有