mirror of
https://github.com/1c7/Crash-Course-Computer-Science-Chinese.git
synced 2024-12-21 20:30:12 +08:00
df6991e7cd
Thanks for the hard work of all translator!
663 lines
22 KiB
Plaintext
663 lines
22 KiB
Plaintext
This episode is brought to you by CuriosityStream.
|
||
本集由 CuriosityStream 赞助播出
|
||
|
||
Hi, I'm Carrie Anne and welcome to Crash Course Computer Science!
|
||
(。・∀・)ノ゙嗨,我是 Carrie Anne,欢迎收看计算机科学速成课!
|
||
|
||
So far, for most of this series, we've focused on hardware
|
||
之前我们把重点放在硬件 - 组成计算机的物理组件
|
||
|
||
-- the physical components of computing --
|
||
之前我们把重点放在硬件 - 组成计算机的物理组件
|
||
|
||
things like: electricity and circuits, registers and RAM, ALUs and CPUs.
|
||
比如电,电路,寄存器,RAM,ALU,CPU
|
||
|
||
But programming at the hardware level is cumbersome and inflexible,
|
||
但在硬件层面编程非常麻烦
|
||
|
||
so programmers wanted a more versatile way to program computers
|
||
所以程序员想要一种更通用的方法编程
|
||
|
||
- what you might call a "softer" medium.
|
||
- 一种"更软的"媒介
|
||
|
||
That's right, we're going to talk about Software!
|
||
没错,我们要讲软件!
|
||
|
||
In episode 8, we walked through a simple program for the CPU we designed.
|
||
第 8 集我们一步步讲了一个简单程序
|
||
|
||
The very first instruction to be executed, the one at memory address 0, was 0010 1110.
|
||
第一条指令在内存地址 0:0010 1110
|
||
|
||
As we discussed, the first four bits of an instruction is the operation code,
|
||
之前说过,前 4 位是操作码
|
||
|
||
or OPCODE for short.
|
||
简称 OPCODE
|
||
|
||
On our hypothetical CPU, 0010 indicated a LOAD_A instruction
|
||
对于这个假设 CPU,0010 代表 LOAD_A 指令
|
||
|
||
-- which moves a value from memory into Register A.
|
||
- 把值从内存复制到寄存器 A
|
||
|
||
The second set of four bits defines the memory location,
|
||
后 4 位是内存地址,1110 是十进制的 14
|
||
|
||
in this case, 1110, which is 14 in decimal.
|
||
后 4 位是内存地址,1110 是十进制的 14
|
||
|
||
So what these eight numbers really mean is "LOAD Address 14 into Register A".
|
||
所以这 8 位表达的意思是 \N "读内存地址 14,放入寄存器 A"
|
||
|
||
We're just using two different languages.
|
||
只是用了两种不同语言
|
||
|
||
You can think of it like English and Morse Code.
|
||
可以想成是英语和摩尔斯码的区别
|
||
|
||
"Hello" and ".... . .-.. .-.. ---" mean the same thing -- hello! --
|
||
"你好" 和 ".... . .-.. .-.. ---" 是一个意思:你好
|
||
|
||
they're just encoded differently.
|
||
只是编码方式不同
|
||
|
||
English and Morse Code also have different levels of complexity.
|
||
英语和摩尔斯码的复杂度也不同
|
||
|
||
English has 26 different letters in its alphabet and way more possible sounds.
|
||
英文有 26 个字母以及各种发音
|
||
|
||
Morse only has dots and dashes.
|
||
摩尔斯码只有"点"和"线"
|
||
|
||
But, they can convey the same information, and computer languages are similar.
|
||
但它们可以传达相同的信息,计算机语言也类似.
|
||
|
||
As we've seen, computer hardware can only handle raw, binary instructions.
|
||
计算机能处理二进制,二进制是处理器的"母语"
|
||
|
||
This is the "language" computer processors natively speak.
|
||
计算机能处理二进制,二进制是处理器的"母语"
|
||
|
||
In fact, it's the only language they're able to speak.
|
||
事实上,它们*只能*理解二进制
|
||
|
||
It's called Machine Language or Machine Code.
|
||
这叫"机器语言"或"机器码"
|
||
|
||
In the early days of computing, people had to write entire programs in machine code.
|
||
在计算机早期阶段,必须用机器码写程序
|
||
|
||
More specifically, they'd first write a high-level version of a program on paper, in English,
|
||
具体来讲,会先在纸上用英语写一个"高层次版"
|
||
|
||
For example "retrieve the next sale from memory,
|
||
举例:"从内存取下一个销售额,
|
||
|
||
then add this to the running total for the day, week and year,
|
||
然后加到天、周、年的总和
|
||
|
||
then calculate any tax to be added"
|
||
然后算税"
|
||
|
||
...and so on.
|
||
等等...
|
||
|
||
An informal, high-level description of a program like this is called Pseudo-Code.
|
||
这种对程序的高层次描述,叫 "伪代码"
|
||
|
||
Then, when the program was all figured out on paper,
|
||
在纸上写好后
|
||
|
||
they'd painstakingly expand and translate it into binary machine code by hand,
|
||
用"操作码表"把伪代码转成二进制机器码
|
||
|
||
using things like opcode tables.
|
||
用"操作码表"把伪代码转成二进制机器码
|
||
|
||
After the translation was complete, the program could be fed into the computer and run.
|
||
翻译完成后,程序可以喂入计算机并运行
|
||
|
||
As you might imagine, people quickly got fed up with this process.
|
||
你可能猜到了,很快人们就厌烦了
|
||
|
||
So, by the late 1940s and into the 50s,
|
||
所以在 1940~1950 年代
|
||
|
||
programmers had developed slightly higher-level languages that were more human-readable.
|
||
程序员开发出一种新语言, 更可读 更高层次
|
||
|
||
Opcodes were given simple names, called mnemonics,
|
||
每个操作码分配一个简单名字,叫"助记符"
|
||
|
||
which were followed by operands, to form instructions.
|
||
"助记符"后面紧跟数据,形成完整指令
|
||
|
||
So instead of having to write instructions as a bunch of 1's and 0's,
|
||
与其用 1 和 0 写代码,程序员可以写"LOAD_A 14"
|
||
|
||
programmers could write something like "LOAD_A 14".
|
||
与其用 1 和 0 写代码,程序员可以写"LOAD_A 14"
|
||
|
||
We used this mnemonic in Episode 8 because it's so much easier to understand!
|
||
我们在第 8 集用过这个助记符,因为容易理解得多!
|
||
|
||
Of course, a CPU has no idea what "LOAD_A 14" is.
|
||
当然,CPU 不知道 LOAD_A 14 是什么
|
||
|
||
It doesn't understand text-based language, only binary.
|
||
它不能理解文字,只能理解二进制
|
||
|
||
And so programmers came up with a clever trick.
|
||
所以程序员想了一个技巧,写二进制程序来帮忙
|
||
|
||
They created reusable helper programs, in binary,
|
||
所以程序员想了一个技巧,写二进制程序来帮忙
|
||
|
||
that read in text-based instructions,
|
||
它可以读懂文字指令,自动转成二进制指令
|
||
|
||
and assemble them into the corresponding binary instructions automatically.
|
||
它可以读懂文字指令,自动转成二进制指令
|
||
|
||
This program is called
|
||
这种程序叫
|
||
|
||
-- you guessed it --
|
||
你可能猜到了
|
||
|
||
an Assembler.
|
||
汇编器
|
||
|
||
It reads in a program written in an Assembly Language
|
||
汇编器读取用"汇编语言"写的程序,然后转成"机器码"
|
||
|
||
and converts it to native machine code.
|
||
汇编器读取用"汇编语言"写的程序,然后转成"机器码"
|
||
|
||
"LOAD_A 14" is one example of an assembly instruction.
|
||
"LOAD_A 14" 是一个汇编指令的例子
|
||
|
||
Over time, Assemblers gained new features that made programming even easier.
|
||
随着时间推移,汇编器有越来越多功能,让编程更容易
|
||
|
||
One nifty feature is automatically figuring out JUMP addresses.
|
||
其中一个功能是自动分析 JUMP 地址
|
||
|
||
This was an example program I used in episode 8:
|
||
这里有一个第8集用过的例子:
|
||
|
||
Notice how our JUMP NEGATIVE instruction jumps to address 5,
|
||
注意, JUMP NEGATIVE 指令跳到地址 5
|
||
|
||
and our regular JUMP goes to address 2.
|
||
JUMP 指令跳到地址 2
|
||
|
||
The problem is, if we add more code to the beginning of this program,
|
||
问题是,如果在程序开头多加一些代码
|
||
|
||
all of the addresses would change.
|
||
所有地址都会变
|
||
|
||
That's a huge pain if you ever want to update your program!
|
||
更新程序会很痛苦!
|
||
|
||
And so an assembler does away with raw jump addresses,
|
||
所以汇编器不用固定跳转地址
|
||
|
||
and lets you insert little labels that can be jumped to.
|
||
而是让你插入可跳转的标签
|
||
|
||
When this program is passed into the assembler,
|
||
当程序被传入汇编器,汇编器会自己搞定跳转地址
|
||
|
||
it does the work of figuring out all of the jump addresses.
|
||
当程序被传入汇编器,汇编器会自己搞定跳转地址
|
||
|
||
Now the programmer can focus more on programming
|
||
程序员可以专心编程,不用管底层细节
|
||
|
||
and less on the underlying mechanics under the hood
|
||
程序员可以专心编程,不用管底层细节
|
||
|
||
enabling more sophisticated things to be built by hiding unnecessary complexity.
|
||
隐藏不必要细节来做更复杂的工作
|
||
|
||
As we've done many times in this series,
|
||
我们又提升了一层抽象
|
||
|
||
we're once again moving up another level of abstraction.
|
||
我们又提升了一层抽象
|
||
|
||
However, even with nifty assembler features like auto-linking JUMPs to labels,
|
||
然而,即使汇编器有这些厉害功能,比如自动跳转
|
||
|
||
Assembly Languages are still a thin veneer over machine code.
|
||
汇编只是修饰了一下机器码
|
||
|
||
In general, each assembly language instruction converts directly
|
||
一般来说,一条汇编指令对应一条机器指令
|
||
|
||
to a corresponding machine instruction - a one-to-one mapping -
|
||
一般来说,一条汇编指令对应一条机器指令
|
||
|
||
so it's inherently tied to the underlying hardware.
|
||
所以汇编码和底层硬件的连接很紧密
|
||
|
||
And the assembler still forces programmers to think about
|
||
汇编器仍然强迫程序员思考 用什么寄存器和内存地址
|
||
|
||
which registers and memory locations they will use.
|
||
汇编器仍然强迫程序员思考 用什么寄存器和内存地址
|
||
|
||
If you suddenly needed an extra value,
|
||
如果你突然要一个额外的数,可能要改很多代码
|
||
|
||
you might have to change a lot of code to fit it in.
|
||
如果你突然要一个额外的数,可能要改很多代码
|
||
|
||
Let's go to the Thought Bubble.
|
||
让我们进入思考泡泡
|
||
|
||
This problem did not escape Dr. Grace Hopper.
|
||
葛丽丝·霍普博士 也遇到了这个问题
|
||
|
||
As a US naval officer, she was one of the first programmers on the Harvard Mark 1 computer,
|
||
作为美国海军军官,她是哈佛1号计算机的首批程序员之一
|
||
|
||
which we talked about in Episode 2.
|
||
这台机器我们在第 2 集提过
|
||
|
||
This was a colossal, electro-mechanical beast
|
||
这台巨大机电野兽在 1944 年战时建造完成,帮助盟军作战
|
||
|
||
completed in 1944 as part of the allied war effort.
|
||
这台巨大机电野兽在 1944 年战时建造完成,帮助盟军作战
|
||
|
||
Programs were stored and fed into the computer on punched paper tape.
|
||
程序写在打孔纸带上,放进计算机执行
|
||
|
||
By the way, as you can see,
|
||
顺便一说,如果程序里有漏洞
|
||
|
||
they "patched" some bugs in this program
|
||
顺便一说,如果程序里有漏洞
|
||
|
||
by literally putting patches of paper over the holes on the punch tape.
|
||
真的就 直接用胶带来补"漏洞"
|
||
|
||
The Mark 1's instruction set was so primitive,
|
||
Mark 1 的指令集非常原始,甚至没有 JUMP 指令
|
||
|
||
there weren't even JUMP instructions.
|
||
Mark 1 的指令集非常原始,甚至没有 JUMP 指令
|
||
|
||
To create code that repeated the same operation multiple times,
|
||
如果代码要跑不止一次
|
||
|
||
you'd tape the two ends of the punched tape together, creating a physical loop.
|
||
得把带子的两端连起来 做成循环
|
||
|
||
In other words, programming the Mark 1 was kind of a nightmare!
|
||
换句话说,给 Mark 1 编程简直是噩梦!
|
||
|
||
After the war, Hopper continued to work at the forefront of computing.
|
||
战后,霍普继续在计算机前沿工作
|
||
|
||
To unleash the potential of computers,
|
||
为了释放电脑的潜力
|
||
|
||
she designed a high-level programming language called "Arithmetic Language Version 0",
|
||
她设计了一个高级编程语言,叫"算术语言版本 0"
|
||
|
||
or A-0 for short.
|
||
简称"A-0"
|
||
|
||
Assembly languages have direct, one-to-one mapping to machine instructions.
|
||
汇编与机器指令是一一对应的
|
||
|
||
But, a single line of a high-level programming language
|
||
但一行高级编程语言 可能会转成几十条二进制指令
|
||
|
||
might result in dozens of instructions being executed by the CPU.
|
||
但一行高级编程语言 可能会转成几十条二进制指令
|
||
|
||
To perform this complex translation, Hopper built the first compiler in 1952.
|
||
为了做到这种复杂转换 \N Hopper 在 1952 年创造了第一个编译器
|
||
|
||
This is a specialized program
|
||
编译器专门把高级语言 转成低级语言
|
||
|
||
that transforms "source" code written in a programming language into a low-level language,
|
||
编译器专门把高级语言 转成低级语言
|
||
|
||
like assembly or the binary "machine code" that the CPU can directly process.
|
||
比如汇编或机器码(CPU 可以直接执行机器码)
|
||
|
||
Thanks, Thought Bubble.
|
||
谢了 思想泡泡
|
||
|
||
So, despite the promise of easier programming,
|
||
尽管"使编程更简单"很诱人
|
||
|
||
many people were skeptical of Hopper's idea.
|
||
但很多人对霍普的点子持怀疑态度
|
||
|
||
She once said, "I had a running compiler and nobody would touch it.
|
||
她曾说"我有能用的编译器,但没人愿意用
|
||
|
||
they carefully told me, computers could only do arithmetic;
|
||
他们告诉我计算机只能做算术,不能运行程序"
|
||
|
||
they could not do programs."
|
||
他们告诉我计算机只能做算术,不能运行程序"
|
||
|
||
But the idea was a good one,
|
||
但这个点子是好的
|
||
|
||
and soon many efforts were underway to craft new programming languages
|
||
不久,很多人尝试创造新编程语言
|
||
|
||
-- today there are hundreds!
|
||
- 如今有上百种语言!
|
||
|
||
Sadly, there are no surviving examples of A-0 code,
|
||
可惜的是,没有任何 A-0 的代码遗留下来
|
||
|
||
so we'll use Python, a modern programming language, as an example.
|
||
所以我们用 Python 举例(一门现代编程语言)
|
||
|
||
Let's say we want to add two numbers and save that value.
|
||
假设我们想相加两个数字,保存结果
|
||
|
||
Remember, in assembly code,
|
||
记住,如果用汇编代码
|
||
|
||
we had to fetch values from memory, deal with registers, and other low-level details.
|
||
我们得从内存取值,和寄存器打交道,以及其他底层细节
|
||
|
||
But this same program can be written in python like so:
|
||
但同样的程序可以用 Python 这样写:
|
||
|
||
Notice how there are no registers or memory locations to deal with
|
||
不用管寄存器或内存位置
|
||
|
||
-- the compiler takes care of that stuff, abstracting away a lot of low-level and unnecessary complexity.
|
||
- 编译器会搞定这些细节,不用管底层细节
|
||
|
||
The programmer just creates abstractions for needed memory locations, known as variables,
|
||
程序员只需要创建 代表内存地址的抽象,叫"变量"
|
||
|
||
and gives them names.
|
||
给变量取名字
|
||
|
||
So now we can just take our two numbers, store them in variables we give names to
|
||
现在可以把两个数 存在变量里
|
||
|
||
-- in this case, I picked a and b but those variables could be anything -
|
||
这里取名 A 和 B, 实际编程时你可以随便取名
|
||
|
||
and then add those together, saving the result in c, another variable I created.
|
||
然后相加两个数,把结果存在变量 C
|
||
|
||
It might be that the compiler assigns Register A under the hood to store the value in a,
|
||
底层操作时,编译器可能把变量 A 存在寄存器 A
|
||
|
||
but I don't need to know about it!
|
||
但我不需要知道这些!
|
||
|
||
Out of sight, out of mind!
|
||
眼不见心不烦
|
||
|
||
It was an important historical milestone,
|
||
这是个重要历史里程碑
|
||
|
||
but A-0 and its later variants weren't widely used.
|
||
但 A-0 和之后的版本没有广泛使用
|
||
|
||
FORTRAN, derived from "Formula Translation",
|
||
FORTRAN,名字来自 "公式翻译"
|
||
|
||
was released by IBM a few years later, in 1957,
|
||
这门语言数年后由 IBM 在 1957 年发布
|
||
|
||
and came to dominate early computer programming.
|
||
主宰了早期计算机编程
|
||
|
||
John Backus, the FORTRAN project director,
|
||
FORTRAN 项目总监 John Backus 说过
|
||
|
||
said: "Much of my work has come from being lazy.
|
||
"我做的大部分工作都是因为懒
|
||
|
||
I didn't like writing programs,
|
||
我不喜欢写程序
|
||
|
||
and so ... I started work on a programming system to make it easier to write programs."
|
||
所以我写这门语言,让编程更容易"
|
||
|
||
You know, typical lazy person.
|
||
你懂的,典型的"懒人"
|
||
|
||
They're always creating their own programming systems.
|
||
(白眼)创造自己的编程语言
|
||
|
||
Anyway, on average, programs written in FORTRAN
|
||
平均来说,FORTRAN 写的程序
|
||
|
||
were 20 times shorter than equivalent handwritten assembly code.
|
||
比等同的手写汇编代码短 20 倍
|
||
|
||
Then the FORTRAN Compiler would translate and expand that into native machine code.
|
||
然后 FORTRAN 编译器会把代码转成机器码
|
||
|
||
The community was skeptical that the performance would be as good as hand written code,
|
||
人们怀疑性能是否比得上手写代码
|
||
|
||
but the fact that programmers could write more code more quickly,
|
||
但因为能让程序员写程序更快,所以成了一个更经济的选择
|
||
|
||
made it an easy choice economically:
|
||
但因为能让程序员写程序更快,所以成了一个更经济的选择
|
||
|
||
trading a small increase in computation time for a significant decrease in programmer time.
|
||
运行速度慢一点点,编程速度大大加快
|
||
|
||
Of course, IBM was in the business of selling computers,
|
||
当时 IBM 在卖计算机
|
||
|
||
and so initially, FORTRAN code could only be compiled and run on IBM computers.
|
||
因此最初 FORTRAN 代码只能跑在 IBM 计算机上
|
||
|
||
And most programing languages and compilers of the 1950s
|
||
1950 年代大多数编程语言和编译器
|
||
|
||
could only run on a single type of computer.
|
||
只能运行在一种计算机上
|
||
|
||
So, if you upgraded your computer,
|
||
如果升级电脑
|
||
|
||
you'd often have to re-write all the code too!
|
||
可能要重写所有代码!
|
||
|
||
In response, computer experts from industry,
|
||
因此工业界,学术界,政府的计算机专家 \N 在 1959 年组建了一个联盟
|
||
|
||
academia and government formed a consortium in 1959
|
||
因此工业界,学术界,政府的计算机专家 \N 在 1959 年组建了一个联盟
|
||
|
||
-- the Committee on Data Systems Languages, advised by our friend Grace Hopper --
|
||
- 数据系统语言委员会,Grace Hopper 担任顾问
|
||
|
||
to guide the development of a common programming language
|
||
开发一种通用编程语言,可以在不同机器上通用
|
||
|
||
that could be used across different machines.
|
||
开发一种通用编程语言,可以在不同机器上通用
|
||
|
||
The result was the high-level, easy to use,
|
||
最后诞生了一门高级,易于使用,
|
||
|
||
Common Business-Oriented Language, or COBOL for short.
|
||
"普通面向商业语言",简称 COBOL
|
||
|
||
To deal with different underlying hardware,
|
||
为了兼容不同底层硬件
|
||
|
||
each computing architecture needed its own COBOL compiler.
|
||
每个计算架构需要一个 COBOL 编译器
|
||
|
||
But critically, these compilers could all accept the same COBOL source code,
|
||
最重要的是,这些编译器都可以接收相同 COBOL 代码
|
||
|
||
no matter what computer it was run on.
|
||
不管是什么电脑
|
||
|
||
This notion is called write once, run anywhere.
|
||
这叫"一次编写,到处运行"
|
||
|
||
It's true of most programming languages today,
|
||
如今大多数编程语言都是这样
|
||
|
||
a benefit of moving away from assembly and machine code,
|
||
不必接触 CPU 特有的汇编码和机器码
|
||
|
||
which is still CPU specific.
|
||
不必接触 CPU 特有的汇编码和机器码
|
||
|
||
The biggest impact of all this was reducing computing's barrier to entry.
|
||
减小了使用门槛
|
||
|
||
Before high level programming languages existed,
|
||
在高级编程语言出现之前
|
||
|
||
it was a realm exclusive to computer experts and enthusiasts.
|
||
编程只是计算机专家和爱好者才会做的事
|
||
|
||
And it was often their full time profession.
|
||
而且通常是主职
|
||
|
||
But now, scientists, engineers, doctors, economists, teachers,
|
||
但现在,科学家,工程师,医生,经济学家,教师
|
||
|
||
and many others could incorporate computation into their work .
|
||
等等,都可以把计算机用于工作
|
||
|
||
Thanks to these languages,
|
||
感谢这些语言
|
||
|
||
computing went from a cumbersome and esoteric discipline
|
||
计算机科学从深奥学科 变成了大众化工具
|
||
|
||
to a general purpose and accessible tool.
|
||
计算机科学从深奥学科 变成了大众化工具
|
||
|
||
At the same time, abstraction in programming allowed those computer experts
|
||
同时,编程的抽象也让计算机专家
|
||
|
||
- now "professional programmers" -
|
||
现在叫"专业程序员"
|
||
|
||
to create increasingly sophisticated programs,
|
||
制作更复杂的程序
|
||
|
||
which would have taken millions, tens of millions, or even more lines of assembly code.
|
||
如果用汇编写可能要上百万行
|
||
|
||
Now, this history didn't end in 1959.
|
||
当然,计算机的历史没有在 1959 年结束
|
||
|
||
In fact, a golden era in programming language design jump started,
|
||
编程语言设计的黄金时代才刚刚开始
|
||
|
||
evolving in lockstep with dramatic advances in computer hardware.
|
||
和硬件一起飞速发展
|
||
|
||
In the 1960s, we had languages like ALGOL, LISP and BASIC.
|
||
在 1960 年代,有 ALGOL, LISP 和 BASIC 等语言
|
||
|
||
In the 70's: Pascal, C and Smalltalk were released.
|
||
70年代有:Pascal,C 和 Smalltalk
|
||
|
||
The 80s gave us C++, Objective-C, and Perl.
|
||
80年代有:C++,Objective-C 和 Perl
|
||
|
||
And the 90's: python, ruby, and Java.
|
||
90年代有:Python,Ruby 和 Java
|
||
|
||
And the new millennium has seen the rise of Swift, C#, and Go
|
||
新千年 Swift, C#, Go 在崛起
|
||
|
||
- not to be confused with Let it Go and Pokemon Go.
|
||
不要把 Go 和\N 《冰雪奇缘》的 Let it Go 和游戏 Pokemon Go 弄混
|
||
|
||
Anyway, some of these might sound familiar
|
||
有些语言你可能听起来耳熟 - 很多现在还存在
|
||
|
||
-- many are still around today.
|
||
有些语言你可能听起来耳熟 - 很多现在还存在
|
||
|
||
It's extremely likely that the web browser you're using right now
|
||
你现在用的浏览器很可能是 C++ 或 Objective-C 写的
|
||
|
||
was written in C++ or Objective-C.
|
||
你现在用的浏览器很可能是 C++ 或 Objective-C 写的
|
||
|
||
That list I just gave is the tip of the iceberg.
|
||
我刚才说的编程语言名字 只是冰山一角
|
||
|
||
And languages with fancy, new features are proposed all the time.
|
||
新的编程语言在不断诞生
|
||
|
||
Each new language attempts to leverage new and clever abstractions
|
||
新语言想用更聪明的抽象
|
||
|
||
to make some aspect of programming easier or more powerful,
|
||
让某些方面更容易或更强大
|
||
|
||
or take advantage of emerging technologies and platforms,
|
||
或利用新技术和新平台带来的优势
|
||
|
||
so that more people can do more amazing things, more quickly.
|
||
让更多人能快速做出美妙的事情
|
||
|
||
Many consider the holy grail of programming to be the use of "plain ol' English",
|
||
许多人认为编程的"圣杯"是直接用英文
|
||
|
||
where you can literally just speak what you want the computer to do,
|
||
直接对计算机说话,然后它会理解并执行
|
||
|
||
it figures it out, and executes it.
|
||
直接对计算机说话,然后它会理解并执行
|
||
|
||
This kind of intelligent system is science fiction for now.
|
||
这种智能系统目前只存在于科幻小说
|
||
|
||
And fans of 2001: A Space Odyssey may be okay with that.
|
||
"2001:太空漫游" 的粉丝可能没什么意见
|
||
|
||
Now that you know all about programming languages,
|
||
现在你理解了编程语言,
|
||
|
||
we're going to deep dive for the next couple of episodes,
|
||
接下来几集 我们会深入了解
|
||
|
||
and we'll continue to build your understanding
|
||
接下来几集 我们会深入了解
|
||
|
||
of how programming languages, and the software they create,
|
||
编程语言和用语言写的软件
|
||
|
||
are used to do cool and unbelievable things.
|
||
是怎么做到那些酷事
|
||
|
||
See you next week.
|
||
下周见
|
||
|
||
(给 Curiosity Stream 打广告)
|
||
|