我们是使用微信的时候,用户只需要用它提供给我的一些“接口”例如发送功能,而程序员就是写这些接口的,那么这么多语言(例如,C,html,java )到最后是如何运行的? 把这些语言看成这些语言开发者提供给程序员的接口,让我们去使用,在这些语言开发者之上还有什么? 脑洞:计算机硬件的一些“规则”,然后语言开发者根据这些“规则”写出了各种各样的语言. 是这样吗?有这一类更底层的博文或者书籍吗? for example:超市里出售的葡萄酒,只需要打开瓶盖就可以喝了(用户层),而这些酒需要酿酒厂用葡萄酿酒,检查品质等等一系列工作(程序员层),那么在网上一层,这些葡萄是如何长成的? (感觉自己是个老千层饼了~)
1
lhx2008 2020-04-04 14:28:50 +08:00 via Android
这些就是计算机组成原理和操作系统原理,就像高楼大厦是由混泥土钢筋慢慢建造起来,再装修使用是一个道理,不同层的人干不同的事
|
2
qq316107934 2020-04-04 14:30:26 +08:00
了解下汇编语言指令机器码,还有编译原理
|
3
nakes 2020-04-04 14:31:03 +08:00
|
4
leonard916 2020-04-04 14:31:27 +08:00 1
去看 計算機原理 TCP/IP 原理 數據庫原理 等一系列“本科教材”
|
5
luckyrayyy 2020-04-04 14:33:50 +08:00 via iPhone 17
你这像是完全没了解过计算机相关知识的人问的……不然至少也得知道计算机组成原理,操作系统,编译原理这些关键字
|
6
yanqiyu 2020-04-04 14:40:24 +08:00 via Android
涉及课程:编译原理,计算机体系结构
觉得还是不够的话就加上数字电路,离散数学 |
9
Mrzhs OP @leonard916 就是准备去国外读本。。
|
10
Mrzhs OP @luckyrayyy 的确,没有更深层的了解过。所以就过来问问
|
11
Jooooooooo 2020-04-04 15:06:07 +08:00
先学单片机
|
12
Sanko 2020-04-04 15:08:09 +08:00 via Android
微程序 在底层就与门或门非门电路 触发器之类的
|
13
masker 2020-04-04 15:09:48 +08:00 via Android 17
哈哈,算是看明白了。。。就是来炫耀出国留学的。。
|
14
adminii 2020-04-04 15:09:55 +08:00 via iPhone
尝试用汇编写几个程序,大概你懂的 70%了
|
15
Arzu 2020-04-04 15:11:56 +08:00
你沿着 OSI 七层模型捋一遍,捋清楚了,就全明白了。
|
16
alsas 2020-04-04 15:24:14 +08:00
高级语言往低级语言一层层翻译,最终变成一连串的 1 和 0 的数字
|
17
maemual 2020-04-04 15:25:23 +08:00 via iPhone
可以看看《穿越计算机的迷雾》微信读书就有
|
19
reedthink 2020-04-04 15:35:26 +08:00
一层一层,千层饼
|
22
alphatoad 2020-04-04 15:44:23 +08:00 2
晶体管,flip flop, latch, registers, ALU, 内存,汇编,外存,操作系统,编译器,网络栈
要回答这个问题就是本科的任务,能答出来就毕业了,耗时四年 |
23
kamilic 2020-04-04 15:47:33 +08:00
https://item.jd.com/11116026.html
不那么学术的话,这本书也说得挺好的 |
24
alphatoad 2020-04-04 15:48:37 +08:00
有句话怎么说的来着,一个合格的本科生至少要能(理论上)用一坨原子搭建出我们现在在用的计算机
|
25
wenzhoou 2020-04-04 16:04:18 +08:00 via Android
之前有个视频讲得挺好的。crash course computer science
可以去看看,通俗易懂。 |
26
danbai 2020-04-04 16:05:10 +08:00 via Android 1
推荐楼主去看看这个 https://b23.tv/BV1EW411u7th/p1
|
29
crella 2020-04-04 16:21:33 +08:00 via Android
crud 码农
sdk 程序员 |
30
lzyliangzheyu 2020-04-04 16:22:06 +08:00 via Android
把 EE 的课程学了,就能从物理上理解底层的运转方式
|
31
lzyliangzheyu 2020-04-04 16:26:26 +08:00 via Android
物理世界是模电,数字世界是数电,这两者之间的转换又涉及到采样调制解调,然后这里又细分为通信工程的领域,经过这一环,各种电信号才会变成计算机处理的二进制信号
|
32
leoleoasd 2020-04-04 16:33:07 +08:00 2
安利一个 Coursera 上的公开课, "从与非门到俄*斯方块", From nand to tetris.
不需要任何基础, 完整听完就能做到 在自己写的 cpu 上跑自己的操作系统上跑自己的俄*斯方块 |
33
leoleoasd 2020-04-04 16:33:31 +08:00
?????? 俄罗 asdasd 斯居然是关键词
|
34
smyle 2020-04-04 16:37:25 +08:00 via Android 1
严重推荐你一本《编码: 隐匿在计算机软硬件背后的语言》(code: the hidden language of computer hardware and software),作者是 Windows 编程界传奇人物 Charles Petzold
书从两个小孩用手电筒一亮一暗打暗号给你讲起,你会逐渐明白代码是如何转换成电信号,这些电信号又如何存储、作用在硬件上 |
35
ljpCN 2020-04-04 17:06:34 +08:00
刚想推荐 code 发现楼上推荐了,那就推荐一个深入理解计算机系统吧😜
|
36
StefanJ 2020-04-04 17:11:32 +08:00
|
40
1KN6sAqR0a57no6s 2020-04-04 17:39:04 +08:00 via Android
|
41
noparking188 2020-04-04 17:58:34 +08:00
学习下计算机科学系本科几门核心课程大概就了解了呀,好奇心很好啊!
|
42
dreamapple 2020-04-04 18:02:41 +08:00 via Android
本科电类的上来就是三极管(当然继电器也能用),用三极管可以造与非门、触发器,这些基础原件可以造加法器、控制电路,控制电路和加法器造 ALU,也就是 CPU 的核心,然后加点外围设备就能当计算机跑了
|
43
lijialong1313 2020-04-04 18:04:08 +08:00
就我不是看不起或者啥的,但是我觉得楼主是非科班的吧……你可能要学习一下科班的关于计算机的资料……
|
44
EminemW 2020-04-04 18:26:19 +08:00 via iPhone
微信用 socket 的吧
|
45
971586331 2020-04-04 18:28:27 +08:00
嵌入式欢迎你
|
46
Mrzhs OP @noparking188 生命不息,折腾不止
|
47
yolee 2020-04-04 18:38:42 +08:00
从门电路开始学吧。
|
48
Mrzhs OP @YuxiangLuo 还有中文字幕。
|
49
souths 2020-04-04 18:43:37 +08:00
你需要看书《深入理解计算机系统》
|
50
zzzzzzggggggg 2020-04-04 18:47:22 +08:00 via iPhone
有本书叫《编码》可以粗略的了解一下
|
51
chiu 2020-04-04 19:06:05 +08:00 via Android
|
52
charlie21 2020-04-04 19:07:26 +08:00
语无伦次的样子还挺可爱的呢
|
53
cigarzh 2020-04-04 19:09:31 +08:00
自己焊个 cpu,再写个 OS 就懂啦
|
54
C1mple 2020-04-04 19:25:35 +08:00 via Android
简单的说最底层就都是逻辑电路实现的,不过中间有很多层封装抽象。具体可见 computer architecture 。
|
55
1OF7G 2020-04-04 19:40:20 +08:00
思而不学则殆。真想知道的话就停止凭空想象、类比,找点相关的正经书读一读吧。
|
56
xieyudi2 2020-04-04 19:43:14 +08:00 via Android
@alphatoad 没有 tapeout 过 GDSII 的程序员不是好的程序员(话说我还有软件工程学位,当年还亲自画过 GDSII 然后流片…)
|
57
limbo0 2020-04-04 19:57:21 +08:00 via Android
由下到上机器码 汇编 c 语言
没有什么问题是层解决不了的 |
58
yeqizhang 2020-04-04 20:06:59 +08:00 via Android
说实话,怎么处理同一光纤里面的那么多的光信号都够复杂了吧……
|
59
abutter 2020-04-04 20:17:27 +08:00
|
60
axxahut233 2020-04-04 20:24:56 +08:00
这就是 CS 的知识呀,其实底层的东西没必要太深入,但一定要掌握基本的知识
|
63
ai277014717 2020-04-04 20:55:12 +08:00
最开始是用打点计时器来写程序的。了解一下。
|
64
DOLLOR 2020-04-04 21:03:45 +08:00 via Android 1
科班四大必修课可以解决这些问题:
计算机体系结构 计算机组成原理 操作系统 编译原理 如果还想了解更底层的,可以继续学: 单片机原理 模拟电路 数字逻辑电路 |
66
koebehshian 2020-04-04 21:21:22 +08:00
先理解到数字层,很好理解,就是二进制01;然后物理层,推荐看 the art of electronics
|
67
imdong 2020-04-04 21:21:54 +08:00 3
|
68
zhuangzhuang1988 2020-04-04 22:05:36 +08:00
|
69
Geeker 2020-04-04 22:12:37 +08:00
推荐《编码》
|
70
Kiota 2020-04-04 22:28:17 +08:00
可以去看一下计算机专业考研的课本以及一些前置课程,模电数电计算机组成原理操作系统之类的,只是想稍微了解不想入行的话找几本课本简单看看,没必要全学会,大体理解了就行
|
71
1109599636 2020-04-04 23:01:42 +08:00
别看楼上回复什么晶体管 ,操作系统,编译器,网络栈,真要说其实也没几个能说上来的,大家都知道是那么回事,至于具体到某个细节全拉胯。这些东西要学一辈子(学一辈子忘一辈子)
|
72
HangoX 2020-04-05 00:11:28 +08:00
楼主要是计算机专业的学生应该会知道,我们大一大二就在这上面爬,被虐得跟狗一样,可以了解一下上面几层楼说的那几本书
|
73
Perry 2020-04-05 00:17:17 +08:00 via iPhone
楼主本科估计会学到自己设计做出来一个 CPU,这种硬核的成就感是很难再享受到的,一定要珍惜!
|
74
xabc 2020-04-05 00:23:17 +08:00 via iPhone
恩,这事应该从法拉第发现电磁感应说起 😄
|
75
vevlins 2020-04-05 00:35:56 +08:00
全明白很难,但是了解基本原理并不难。
每一层的代码都会被转成更底层的代码,比如 j2ee(开发框架)转成 java(基本编程语言)、java 转成 jvm 字节码(字节码),jvm 字节码运行时转成汇编(这个说法不对,姑且这么以为把)。 到汇编以下,就是机器语言的范畴,汇编就是某种型号的 cpu 的一些指令集的代码表示(不同的 cpu 有不同的指令集,比如 arm 、x86,这些指令集就是 cpu 的一些基本操作单元,好比规定 010101 是寄存器 1 和寄存器 2 的值交换,当然这是我胡说,类似 arm 这种指令集是 cpu 生产厂家自己或者联合起来定义的,是一种约定),这些代码实际上被转换成一些高(1)低电平(0)送到 cpu 内部,cpu 再操作存储器、运算器等冯诺伊曼体系的其他组成部分,这里可以找最简单的加法器看看就能明白大概了。 屏幕也好、音响也好,都是 cpu 通过 IO 总线(也许是?计算机原理没听过课)向外部 io 发送了一串 01 序列,这些 io 设备也有一些预设的规则,内部有些电路可以根据不同的 01 序列指示哪个像素点发光哪个不发光(这个规则转换要经过 io 总线-显卡-显示器)。 我的理解就这个层面,至少对于理解编程的含义自认为够用了,当然我只是一个应用开发工程师,如果你有志于从事更底层的工作,要学好计算机组成原理、操作系统、汇编原理等课程,最好再了解一些单片机等偏电子类的知识,上面也有不少人列举了很多有名的好书和课程。 代码是怎么运行的是个大问题,也是一个多数人不太好提升高度去看的宏观问题,虽然很多学生课程学的很好,但写代码时完全没有高屋建瓴的意识,如果时刻保持“编码”意识我想应该算是大牛了。 |
76
mumbler 2020-04-05 00:43:12 +08:00 via Android
计算机是人类几千年来的智慧积累,要追根溯源就从 2000 年前亚里士多德时代说起
|
77
20015jjw 2020-04-05 00:50:23 +08:00 via Android
Cs61c 呗
|
79
verrickt 2020-04-05 01:48:25 +08:00 via Android 2
从程序员的角度看,
自己的代码->其他用户的库函数->语言的标准库->sys call->OS 以 sys call 为分界线跨越了一层边界进入 OS 。进入 os 后你看到了 vmm,cpu/资源调度,文件系统的所有细节。 从 OS 的角度看,loader 加载二进制到内存后,instruction pointer 指向的指令被加载到 cpu 内部执行,此时又跨过一道边界。分界线是指令集(汇编语言) 进入指令集后你失去了数据类型和建立在其上的任何抽象,你所能看到的是极少数 register 和 ram(巨大的一维数组) 来到 cpu 层面,你所面对的是 alu,cu,fpu,register 四大金刚,他们内部的走线,相互间的连接方式,还有其他的一些物理特征称为架构。机器指令送入 cu 后,cu 产生对应的控制信号,协调各部件从而使指令得以执行。在 cu 内部,机器指令被转化为微指令。此时又跨越一道边界。 这时就到了数字电路的领域。我不是很熟悉就不献丑了。 总之,程序的执行跨过了好几道边界,最终来到逻辑门电路。之所以弄这么多边界是为了让两侧的东西互不影响的发展下去,即解耦。 上面写的省略了很大一部分的内容,有兴趣可以看看 os,组成原理,数字电路的导论课,会比这详细得多。 |
81
oooolongtea 2020-04-05 04:38:25 +08:00
@kamilic 我买了这本书,但是一直都没有看。
|
82
ekuso 2020-04-05 06:10:22 +08:00
|
83
hankai17 2020-04-05 07:52:22 +08:00
晶体管组成与或非电路组成 cpu 跟存储器 cpu 电路只认特定格式的二进制指令从而操作数据
|
84
sunnybird 2020-04-05 08:03:37 +08:00 via Android
《程序员的自我修养》
|
85
anubu 2020-04-05 08:23:49 +08:00
从顶层到底层涉及多层抽象和多种实现,一时半会应该很难搞懂。建议花几十块钱搞一个单片机加上几个 LED,花上两三天时间就能很直观的感受到所谓的底层二进制 0101 在现实世界是怎么展示的,不用太深奥的数电和汇编知识,通过 LED 能够快速直观的看到你编写的几个汇编或 C 语句给你的反馈。
这种体验真的很神奇,推荐尝试一下。 |
86
shenqi 2020-04-05 09:14:52 +08:00
我能肯定,楼主 100%的非计算机类专业程序员。或者说完全没上课的计算机类专业
|
87
nevin47 2020-04-05 09:23:41 +08:00 via Android
LZ 如果真的有兴趣,可以读一下《 Modern Processor Design-Fundamentals of Superscalar Processor 》。
|
88
koalabearguo 2020-04-05 09:34:56 +08:00 via Android
可以买一本计算机结构体系的书看一看
|
89
star7th 2020-04-05 09:48:22 +08:00
最底层是高低电平,对应计算机世界的二进制。翻一番计算机原理就懂啦
|
90
feiffy 2020-04-05 10:25:36 +08:00 via Android
楼上的推荐很好,你看下《穿越计算机的迷雾》差不多就明白了
|
91
leonard916 2020-04-05 10:30:21 +08:00
@Mrzhs 那雅思 /托福分數 高一點就可以去申請了
|
92
WhatIf 2020-04-05 10:50:51 +08:00
基础是门电路 , 这个可以去看《通灵芯片》或者《编码》 ,这两本书写的非常浅显易懂,了解这块,那么至少可以知道如何构造一个简单的 cpu,支持逻辑运算与数学运算(浮点数不考虑)。
如果上面的太底层,想要忽略, 那么汇编可能也不合适, 高级语言又是太过抽象, 唯一能解答的就是编译原理了。 |
93
tairan2006 2020-04-05 11:25:11 +08:00 via Android
好好学习
|
94
zenwong 2020-04-05 13:55:18 +08:00
别人四年大学学习的东西是不可能一张帖子就学会的
|
95
chihiro2014 2020-04-05 16:41:57 +08:00
推荐先从编译原理看起啊: https://www.bilibili.com/video/BV1cE411f78c
|