编程就是操作数据,所以任何代码都由数据操作和数据本身组成。
代码其实就是纯文本,和我们平时书写的文字没任何区别,所以可以用任意文本编辑器实现编程,比如记事本。
执行代码
计算机只读得懂机器语言(二进制语言),所以代码必须得先转换为机器指令才能交给计算机执行,除非你能手搓 CPU 指令。
负责把代码转换为机器指令的工具称为编译器(Compiler)或解释器(Interpreter),比如 Python 的 CPython 解释器、C 的 gcc 编译器。当然还有混合体,比如 JavaScript 的 V8 引擎。
在实际开发中,“编译”不一定表示把代码只转换为机器指令,也有可能转换为中间产物或其他语言。 “编译”表示的是一种转换操作,类似于自然语言的“翻译”。
一种语言可以有多种转换工具,比如 Python 解释器就有 CPython、Jython、IronPython、PyPy 等。
实操
- 新建一个文本文件,在其中写入
<script>alert("Hello World")</script>
- 保存文件,把文件扩展名改为
.html
- 用浏览器打开该文件,应该会弹出一个提示框显示
Hello World
当你用浏览器打开 .html
文件时,浏览器会把其中的内容转换为机器指令,然后交给计算机执行。
你看到的所有网页都是基于这个过程形成的,只不过是使用别人的 .html
文件而已。
开发环境
开发环境主要指开发中需要用到的软件工具和配置数据。
一般来说,各语言开发团队提供了官方的开发环境,通常可以直接下载安装。
- 编译器或解释器
- 代码编辑器,比如 Visual Studio Code
- 调试工具,比如 debugpy
- 版本控制系统,比如 Git
- ...
调试
版本控制
程序设计
至少得熟练掌握一种编程语言,才能开始接触程序设计。
编程范式(Programming Paradigm)是指编程的基本方法论,是指程序设计的基本原则、模式和风格。 比如面向对象(Object-Oriented,OOP)、函数式编程(Functional,FP)等,实际开发中往往会使用多种范式。
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编制的、代码设计经验的总结。
程序架构(Architecture)是指软件系统的结构、功能和关系。
网络通信
通信就是数据传输,比如下载文件就是把别人的数据复制到你的计算机上。
计算机网络就是指把很多台计算机连接在一起,实现数据的共享和传递,在网络中的计算机也被称为主机(Host)或服务器(Server)。
通信
通信的过程可以分为发送和接收,也被称为请求(Request)和响应(Response)。
你在网络上做的任何事,实际上都是在与其他计算机进行通信。 比如你给一个视频点赞,实际上就是你在向视频网站服务器发送一段数据,告诉它你向某个视频点赞了,然后它把这个信息记录到数据库中,完成后再告诉你点赞成功了。
对于 HTTP 协议,请求数据需要包括请求行、请求头、空行和请求体四部分。但在实际开发中,我们只需要关心请求头(Request Header)和请求体(Request Body)。响应数据同理。
打开浏览器,按下
F12
,切换到Network
面板,刷新页面,可以看到浏览器发出所有的请求和响应。 捕获这些数据的过程称为抓包(Packet Sniffing),通常用于网络安全领域。
网址
网址的结构是 协议://域名:端口/路径
。
协议决定数据传输的规则,比如 file 协议可以用于访问本地文件系统。
试试在浏览器地址栏输入
file:///C:/
,或在资源管理器地址栏输入https://bluebones.fun/
目录。
域名指向一个计算机(服务器)的 IP 地址,比如 localhost
就是指向本机的 IP 地址。 这种指向称为域名解析,通常由 DNS 服务器完成。 所以在访问网址时,浏览器会先把域名发送给 DNS 服务器,拿到 IP 地址后再进行访问。
其实直接访问 IP 地址也行,但多数人不会允许这种方式访问他们的计算机。比如
https://159.226.242.62/
端口表示在这台计算机上运行的某个程序。
路径就是一段普通的文本。
我们平时看到的网址通常会省略端口,比如 https://www.example.com
,这是因为 https 协议默认使用 443 端口。