AI编程之前的那些事儿

All You Need before Vibe Coding

AI写代码,你心里得有数

编程是一种修行,要知行合一

作者:阿色

( AI辅助编写 )



2026.5 @大庆

大系统观开放论坛





送给AI时代怀揣梦想的人

个人英雄主义的时代又回来了

加油吧,梦想家!



作者简介

阿色,网名阿色树新风(ArthurTreeNewBee),真名王权,1968年生,大庆油田资深老程序猿,本地区第一个软件著作权获得者,教授级正高级工程师。

1987年开始写代码,从Fortran起步,近四十年断断续续,最近重新上路。

1999年提出"数字油田"概念,并不懈坚定践行。

2016年完成开源著作《大系统观》。

现在还在编程,还在学习,还在折腾AI。

前言

这本书写给谁?

一位依然怀揣梦想的老哥

前段时间刷抖音,阿色看到有个老哥,看样子他年纪应该比我大,应该是老哥。

他找到一个程序员说:

你帮我个小忙。 我花了一个月时间,开发了一个非常有用的A批批,能造福全人类。 程序都编完了,在豆包里。 但是我不知道怎么运行,你帮我一下。

注意,他用了一个“小”字,他觉得这个事情很容易。

那个程序员,瞬间石化了!

阿色看后哈哈大笑。然后,这事就过去了。

一位初生牛犊不怕虎的小哥

又过了几天,2026年5月10日周日上午9点左右,我躺在家里沙发上刷手机。

是的,阿色也天天刷手机。阿色认为刷手机没什么不好,除了对眼睛不好。

关键在于你刷的是什么?现在很多新媒体的内容比纸质书更方便、更新鲜,也越来越系统。

OK,阿色刷到一个很有梦想的小伙子,他正在用AI编程序。

但是,他不懂AI和IT的基础知识,程序怎么都弄不过去,非常烦恼。

我突发一念,我得给这个孩子写本书。

这本书也顺便写给那位老哥吧。

那些想跟AI做朋友的朋友们

So,这本书是写给:

• 那些想用AI写代码,但又不太懂计算机基础的普通朋友。

• 那些曾经会用AI写代码,但在新时代掉队了的老程序猿朋友。

• 那些遇到报错就懵圈,只会反复问AI的朋友。

• 那些想学点计算机基础,但不想看枯燥教材的朋友。

这本书讲什么?

讲那些你在AI编程之前应该知道的事儿——计算机是啥、程序怎么跑、网络咋连的、数据咋存的、报错咋看、问题咋查……

不讲高深的,就讲基础的。基础打牢了,AI编程才能玩得转。

最重要的:帮你建立编程思维。

这本书啥风格?

简单、幽默、大白话,东北味儿,看着不累。

没有公式推导,没有术语堆砌,就像跟你唠嗑一样,但是,不太严谨,请注意。

这本书有啥用?

看完这本书,你用AI写代码的时候就能心里有数。

AI给的代码,你能看懂;AI报的错,你能排查;AI给的方案,你能判断好不好。

这本书是咋写出来的?

这本书是在AI的辅助下写出来的。

在我决定给那个小伙子写一本书之后,我打开微信,说了二三百字,描述一下我想写一本什么样的书,然后发给AI(QwenPaw + GLM5)——写书开始了!

AI马上列了一个提纲。

我对提纲提了一些要求。

AI先写了初稿,用了大约10分钟,写了大约4万字,MarkDown格式。

我让他转成Word格式发给我。

2分钟后我收到了Word格式的文档。

我用10分钟左右浏览了这个文档。

我又提出了一些要求。

AI重新编写。

10分钟后,新版出来了,就是现在你看到的这个Word文档。

上面我与AI的整个互动都是通过微信进行的,直到现在我用电脑对这个Word文件进行修改和审定。

我在电脑上一节一节看、改,有 AI帮我润色,听着我让AI生成的歌曲《天堂的密码》,还有老同学春阳大哥用AI创作的《听诊大地的人》。

这本书需要仔细看么?

阿色认为,不需要。

当然如果你想仔细看,也没人拦着你。

这本书是个入门扫盲读物,不是教材,不是参考书,也不是速成秘籍。

阿色先要提醒你,这本书可能存在细节上的错误。一是,AI生成的东西不能保证全部正确;二是,阿色对很多新东西也已经不太懂了,不能保证完全纠正AI的错误。

但是,大系统观讲全息思维,局部的小问题不影响系统的整体功能。

建议你先浏览一遍再说。

你可以:

• 通读一遍,对计算机基础知识有个整体了解

• 遇到不懂的概念,问问豆包

• 结合AI编程实践,边写代码边理解原理

• 推荐给同样想学AI编程的朋友

你不应该:

• 指望看完就能成为编程高手

• 把它当教材,里面没有考试重点

• 期望学到具体的编程技巧,那些得自己练,这个只是前奏

再唠两句儿

这本书,是一个老程序员的碎碎念。

我写得不深,但都是我觉得重要的东西。

我写得比较白话,因为我觉得技术不应该只有专家能懂。

我写得带点东北味儿,因为我是东北人,这么写比较自然。

如果这本书能帮你少走点弯路,能让你用AI写代码的时候更有底气,那就值了。

来吧,咱们开始。

第一章:计算机软硬件的那点事儿

开场白

在开始聊AI编程之前,咱们先得搞清楚一个最基本的问题:计算机这玩意儿,到底是啥?

计算机这个词的含义比电脑更宽一些,电脑一般是指个人用的桌面计算机。除电脑之外,计算机还包括其他类型的计算机,比如,大型计算机、服务器、手机,甚至量子计算机,等等很多。

你天天用电脑、用手机,但你知道它里面是咋工作的吗?你知道为啥它能算数、能放视频、能打游戏吗?

这一章,咱们就用大白话唠唠计算机的基本原理。不整那些复杂的电路图和公式,就讲你能听懂的东西。

理解了计算机的基本原理,你才能理解程序是咋回事,才能理解AI给你的代码在干啥。

1.1 计算机能干啥,不能干啥?

1、计算机不是神仙

先说个大实话:计算机不是神仙,它就是个工具。

很多人觉得计算机很聪明,能干很多事儿。其实计算机一点都不聪明,它只会做一件事儿:算数。

加减乘除,0和1,就这些。

但它算得特别快,快到你感觉不到它在算。

举个例子:

你看视频,计算机在干啥?在算。把视频文件里的数据解码成图像和声音。

你打游戏,计算机在干啥?在算。算画面咋显示、人物咋动、碰撞咋处理。

你上网,计算机在干啥?还在算。算数据咋传输、网页咋渲染。

你用AI写代码,计算机在干啥?还是在算。算你输入的文字、算模型的参数、算输出的代码。

所以,计算机本质上就是个"算得快的铁盒子"。

2、计算机能干啥?

计算机能干的事儿,都是能转化成计算的事儿,能算的它都能干:

存储信息

把数据变成0和1存起来。你存的文档、照片、视频,在计算机眼里都是0和1。

处理数据

对数据进行各种计算。加加减减、比较大小、逻辑判断,都是计算。

显示图像

把数据变成图像输出到屏幕。每个像素点的颜色,都是计算出来的。

播放声音

把数据变成声音输出到扬声器。每个时刻的音量、频率,都是计算出来的。

联网通信

把数据通过网络传给别人。怎么打包、怎么传输、怎么校验,都是计算。

这些事儿,说到底都是算。

3、计算机不能干啥?

计算机不能干的事儿,是那些没法转化成计算的事儿。

在没有大语言模型之前,计算机肯定干不了下面的事情,但现在能不能有点不好说,如果通用人工智能实现了,下面这些就能干了。暂且还是认为不能吧。

不能创造

计算机不会"发明"东西,它只能按你给的规则处理数据。

你给它一堆数据,它能帮你分析、总结、预测。但它不会凭空创造出新东西。

有人说AI不是能创作吗?能写文章、能画图、能编代码吗?

是的,但AI本质上也是在算。它看了大量数据,学到了规律,然后按规律生成新东西。它不知道自己在创作,只是在执行算法。

不能理解

计算机不知道"意义"是啥,它只是在处理符号。

你让它翻译"我爱你",它把这三个字翻译成"I love you"。但它不知道"爱"是啥意思,不知道这句话背后的情感,只是在做符号替换。

不能判断

计算机不会"觉得"好坏对错,它只是按条件执行。

你给它一个判断条件,它返回True或False。但它不知道这个判断有什么意义,只是在执行逻辑运算。

4、人工智能也是计算

没有现代计算机技术,人工智能是不可能实现的,因为人工智能也是基于计算的。

从几十年前开始的最简单的判断式人工智能,到现在基于大语言模型的人工智能,计算都是它的基础。

小结一下

• 计算机不是神仙,它就是个算得快的工具

• 计算机能干的事,都是能转化成计算的事

• 计算机不能干的事,是那些没法转化成计算的事

• 用计算机,得懂它、会用它

• 人工智能是基于计算的

1.2 CPU、内存、硬盘、GPU——都是干啥的?

计算机的四大件儿:

打开一台计算机,里面有很多零件。但最核心的,基本就四个:CPU、内存、硬盘、GPU(可以没有)。

这哥四个各有分工,配合工作,计算机才能跑起来。

咱们一个一个唠。

1、CPU:大脑

CPU,全叫"中央处理器",你可以把它理解为计算机的大脑。

CPU干啥活儿?

它负责执行指令、进行计算、控制其他零件干活。

你打开一个软件,CPU读取软件的指令,然后一条一条执行。你点击一个按钮,CPU处理你的点击,然后告诉屏幕显示啥。

CPU的特点:

啥都能干,但一次干不了太多。

就像一个人,啥活儿都能接,但一次只能干一件事。你想让它同时干十件事?它得一件一件来,或者切换来切换去。

CPU好不好,看几个指标:

核心数:几个大脑。双核就是俩大脑,四核就是四个大脑,八核就是八个大脑。大脑多,能同时干的活儿就多。

主频:大脑转多快。3.0GHz就是每秒30亿次。转得快,干活就快。

缓存:大脑旁边的小本本。记着最近常用的数据,不用每次都去翻仓库。缓存大,效率就高。

举个例子:

假设你要算1000道数学题。

单核CPU就像一个人,一道一道算。8核CPU就像8个人,每人算125道,同时算。

哪个快?当然是8个人同时算快。

但不是所有任务都能拆成8份。有些任务有先后顺序,必须一道一道来,这时候8核也不比单核快多少。

2、内存:工作台

内存,全叫"随机存取存储器",你可以把它理解为计算机的工作台。

内存干啥活儿?

它临时存放正在使用的数据和程序。

你打开一个软件,软件的代码和数据就被加载到内存里。CPU从内存里读取数据,处理完了再把结果写回内存。

内存的特点:

快,但不持久。

快到啥程度?

比硬盘快几十倍到上百倍。CPU从内存读数据,眨眼就完;从硬盘读数据,得等半天(在计算机的时间尺度上)。

不持久是啥意思?

断电就没了。你正在写的文档没保存就断电了?内存里的数据全没了,找不回来。

内存好不好,主要看容量:

容量:工作台多大,用字节做衡量单位。

8GB就是8吉字节,16GB就是16吉字节,32GB就是32吉字节。

G是10的9次方,也就是10亿;B是字节,简单可以理解为一个字母、一个汉字。

工作台大,能同时放的程序就多,开很多软件也不卡。

你有没有遇到过这种情况:

开了好多网页和软件,电脑变慢了,甚至提示"内存不足"?

那就是工作台满了,CPU没地方放新东西了。这时候,操作系统会把一些暂时不用的数据挪到硬盘上(这叫"虚拟内存"),腾出工作台空间。但硬盘比内存慢多了,所以电脑就变卡了。

3、硬盘:仓库

硬盘,你可以把它理解为计算机的仓库。

硬盘干啥活儿?

它永久存储数据和程序。

你下载的电影、存的照片、装的软件,都在硬盘里。关机了也不会丢。

硬盘的特点:

持久,但慢。

持久是啥意思?

断电了数据还在,放几年也没事。你2010年存的文档,现在还能打开,这就是硬盘的功劳。

慢到啥程度?

比内存慢几十倍到上百倍。这就是为什么计算机工作的时候,会把常用的数据从硬盘搬到内存里,让CPU从内存里读取,而不是每次都从硬盘读。这样干活才快。

硬盘分两种:

机械硬盘(HDD)

有转动的盘片,像老式唱片机。读写数据的时候,磁头要在盘片上移动。

优点:便宜、容量大。几百块能买好几TB。

缺点:慢、有噪音、怕震动。

像老式仓库,东西多但取货慢。

固态硬盘(SSD)

没有转动部件,用芯片存数据,像U盘放大版。

优点:快、静音、抗震。

缺点:贵、容量相对小(不过现在也越来越大了)。

像新式仓库,取货快但租金高。

现在新电脑基本都是SSD了,速度快了很多。开机从几分钟变成几秒,打开软件也是秒开。

4、GPU:原本是个画画的高手,现在变成了人工智能大力士

GPU,全叫"图形处理器"。

GPU干啥活儿?

它专门处理图像和视频。

你打游戏、看视频、做3D建模,都是GPU在干活。CPU把图像数据给GPU,GPU算出每个像素点该显示啥颜色,然后输出到屏幕。

GPU的特点:

擅长同时干很多简单活儿。

CPU是一个大脑,一次干一件事(或者切换着干多件事)。GPU是成千上万个"小大脑",每个小大脑都很弱,但能同时干活。

举个例子:

你要算100万个简单加法题。

CPU的做法: 一个大脑,一道一道算。虽然算得快,但100万道也得算一会儿。

GPU的做法: 1000个小大脑,每人算1000道,一起算,瞬间搞定。

这就是GPU的优势: 并行计算。

所以,GPU不光用来打游戏、画图,现在跑AI模型也靠它。AI模型需要大量简单计算(矩阵乘法),GPU正好擅长这个。

没有GPU行不行?

行,但很多事儿干不了或者干得很慢。

打游戏?没GPU,画面卡成PPT。

跑AI?没GPU,等上一天也出不来结果。

GPU好坏看啥?

显存:相当于GPU自己的工作台。显存大,能处理更大的图像、更大的模型。

核心数:小大脑的数量。核心多,算得快。

5、哥四个咋配合?

打个比方:

就像一个工厂:

• 硬盘是原料仓库,东西多但取货慢

• 内存是工作台,取货快但放不下太多

• CPU是总工程师,啥都懂但一次干不了太多

• GPU是一群流水线工人,每人干一点,加起来干得快

一个具体的例子:

你用电脑玩《原神》:

1. 游戏程序和资源(地图、人物、声音等)存在硬盘里

2. 你双击打开游戏,游戏被加载到内存里

3. CPU负责处理游戏逻辑(移动、攻击、碰撞等)

4. GPU负责渲染画面(算出每帧图像)

5. 你退出游戏,进度被保存到硬盘里

任何一个环节出问题,游戏都会受影响:

• 硬盘慢?加载时间长

• 内存小?开不了高画质

• CPU弱?人多的时候卡

• GPU差?画面不流畅

小结一下

• CPU:大脑,负责执行指令和计算,啥都能干但一次干不多

• 内存:工作台,临时放数据,快但断电就没了

• 硬盘:仓库,永久存数据,持久但慢

• GPU:画画高手,计算大力士,擅长同时干很多简单活儿,图像和AI靠它

1.3 操作系统:计算机的大管家

1、操作系统是干啥的?

你打开电脑,看到的是Windows、macOS或者Linux的界面。这就是操作系统。

操作系统是计算机的大管家,它管理着计算机的所有资源,让各种软件能正常运行。

没有操作系统,你的电脑就是一堆零件,啥也干不了。有了操作系统,你才能安装软件、打开文件、上网冲浪。

打个比方:

计算机硬件就像一栋大楼,有房间、水电、电梯。但没有物业,大楼就是乱的,谁也不知道咋用。

操作系统就是物业,它管理着大楼的方方面面:

分配房间(内存管理)

管理水电(硬件管理)

维护秩序(进程管理)

提供服务(系统调用)

2、操作系统管啥?

操作系统主要管这几件事儿:

管理硬件

CPU、内存、硬盘、GPU,这些硬件资源由操作系统统一分配。哪个程序用多少内存、用多少CPU时间,都是操作系统说了算。

打个比方: 操作系统像个调度员,安排各个程序使用硬件资源。

管理文件

你的文件存在硬盘上,操作系统负责组织文件、建立目录、管理权限。你能看到文件夹、能复制粘贴文件,都是操作系统的功劳。

打个比方: 操作系统像个图书管理员,帮你整理和查找文件。

管理进程

你同时打开好几个软件,每个软件都是一个"进程"。操作系统决定哪个进程先运行、哪个后运行、哪个暂停。

打个比方: 操作系统像个交通警察,指挥各个进程有序运行。

提供接口

操作系统给软件提供统一的接口,让软件不需要关心硬件细节。软件开发者只需要调用操作系统的功能,不需要自己去控制CPU和内存。

打个比方: 操作系统像个翻译,软件说"我要存文件",操作系统翻译成硬件能懂的指令。

3、常见的操作系统

Windows

微软家的,全球用得最多。

优点:

• 界面友好,容易上手

• 软件丰富,啥都有

• 游戏支持好,大作基本都有Windows版

缺点:

• 容易中毒,安全差一点

• 系统臃肿,用久了会变慢

macOS

苹果家的,只用在Mac电脑上。

优点:

• 界面漂亮,设计感强

• 系统稳定,不容易崩溃

• 设计和视频工作首选,软件优化好

缺点:

• 软件没Windows多

• 游戏支持差,大作很多没有Mac版

• 电脑贵,性价比低

Linux

开源免费的系统,有很多发行版(Ubuntu、CentOS、Debian等)。

优点:

• 安全稳定,不容易中毒

• 免费,不用花钱买

• 程序员喜欢,开发环境好

缺点:

• 上手难,需要学习

• 桌面软件少,日常使用不太方便

Android

谷歌家的,用在手机和平板上。基于Linux,开源,手机厂商都能用。

全球手机市场占有率最高。

iOS

苹果家的,用在iPhone和iPad上。封闭系统,只能用在苹果设备上。

优点:

• 流畅、安全、软件质量高

缺点:

• 不够灵活,啥都得听苹果的

4、选哪个操作系统?

看你干啥:

用途推荐系统原因
编程、日常办公、打游戏Windows软件多,游戏多
编程、设计、音视频制作macOS软件优化好,显示好
编程、服务器、学习技术Linux开发环境好,免费
手机日常使用Android或iOS看个人喜好

Linux在服务器领域是绝对主流,想学编程的话,早晚得接触Linux。

虚拟机和双系统:

如果你又想用Windows打游戏,又想学Linux,可以装虚拟机或者双系统。

虚拟机:在Windows里装一个Linux虚拟机,两个系统同时跑。

双系统:电脑里装两个系统,启动的时候选进哪个。

小结一下

• 操作系统是计算机的大管家,管理硬件、文件、进程

• 常见操作系统:Windows、macOS、Linux、Android、iOS

• 不同操作系统适合不同用途,看你干啥选啥

1.4 软件是咋回事儿?

1、软件是啥?

硬件是看得见摸得着的,软件是看不见摸不着的。

软件就是一堆代码和数据,让硬件干活的指令集合。

没有软件,计算机就是一堆废铁。有了软件,计算机才能干各种各样的事儿。

打个比方:

硬件是人的身体,软件是人的思想和技能。

没有思想,身体就是行尸走肉。有了思想,人才能干各种事儿。

2、软件分几种?

系统软件

操作系统就是系统软件,它管理整个计算机。

还有驱动程序,让操作系统能控制硬件。比如显卡驱动、声卡驱动、打印机驱动。

应用软件

你日常用的软件:微信、浏览器、播放器、办公软件、你单位用的各种系统……这些都是应用软件。

应用软件跑在操作系统上,操作系统管理着硬件。

开发工具

写代码用的软件:VS Code、PyCharm、Git……这些是开发工具。

开发工具也是一种应用软件,只是专门给开发者用的。

3、软件是咋来的?

软件是人写出来的。

程序员用编程语言写出代码,代码经过编译或解释,变成计算机能执行的指令,就成了软件。

一个软件,可能只有几百行代码,也可能有几百万行代码。比如Windows,据说有几千万行代码。

举个例子:

你用的微信:

• 前端(手机App):可能是几百万行代码

• 后端(服务器):可能是几千万行代码

• 各种库和框架:又是几百万行

• 加起来,可能上亿行代码

当然,大部分代码不是从零写的,而是用别人写好的库和框架组装起来的。

4、软件的运行

软件要运行,得经过这几步,以微信为例:

1. 安装:你下载微信安装包,双击安装,微信的文件被复制到硬盘上。

2. 加载:你点击微信图标,操作系统把微信的程序加载到内存里。

3. 执行:CPU开始执行微信的代码,显示登录界面。

4. 交互:你扫码登录,微信显示聊天界面,你跟朋友聊天。

5. 关闭:你点击关闭,微信退出,内存里的数据被释放。

5、为啥有的软件装不上?

你有没有遇到过这种情况:下载了个软件,安装的时候提示"不兼容"或者"缺少依赖"?

这通常是因为:

操作系统不兼容

Windows软件装不了Mac,32位软件跑不了64位系统。

就像你买了德国电器,却发现插头是欧洲标准的,插不到中国插座上。

缺少运行环境

有些软件需要特定的运行库,比如.NET Framework、Java Runtime、Visual C++ Runtime。

就像你买了个需要电池的玩具,但没配电池,得自己买。

版本不对

软件版本和系统版本不匹配。比如某软件只支持Windows 10及以上,你用的是Windows 7。

硬件不满足

软件要求8GB内存,你电脑只有4GB。软件要求独显,你电脑是集显。

小结一下

• 软件是一堆代码和数据,指挥硬件干活

• 软件分系统软件、应用软件、开发工具

• 软件是人用编程语言写出来的

• 软件装不上,可能是系统不兼容、缺环境、版本不对、硬件不满足

1.5 计算机咋跟人交流:输入输出那些事儿

1、人咋跟计算机说话?

你想让计算机干事儿,得跟它说话。但计算机不懂人话,咋办?

输入设备就是让你跟计算机说话的工具。

常见的输入设备:

• 键盘:输入文字、命令

• 鼠标:点击、选择、拖拽

• 触摸屏:用手直接点

麦克风:输入声音(语音输入)

• 摄像头:输入图像(视频通话、人脸识别)

• 扫描仪:输入纸质文档

2、计算机咋跟人说话?

计算机干完活儿,得告诉你结果。它咋跟你说?

输出设备就是计算机跟你说话的工具。

常见的输出设备:

• 显示器:显示图像、文字

• 扬声器:播放声音

• 打印机:打印文档

• 投影仪:投影画面

• 手机

• 头盔

3、标准输入输出

在编程里,有个概念叫"标准输入输出"。

标准输入:默认是键盘

标准输出:默认是显示器

标准错误输出:也是显示器,但专门输出错误信息

举个例子:

你写一个Python程序:

name = input("请输入你的名字:") # 标准输入 print("你好," + name) # 标准输出

运行的时候:

请输入你的名字:张三 ← 你从键盘输入

你好,张三 ← 程序输出到显示器

4、终端和控制台

标准输入输出是程序与外部世界沟通的“数据流”,需要一个具体的“窗口”来承载这些交互。这个窗口就是终端或控制台。

终端:通常指一个软件程序(如macOS的“终端”应用、Windows的命令提示符或Windows Terminal),它是你输入命令和看到文字输出的那个界面。它是你与Shell(命令解释器,如Bash、PowerShell)直接交互的“前端”。

控制台:在日常编程中,常与“终端”混用,但更侧重于指代程序输出的显示区域。例如,你在IDE里运行代码,结果就显示在“运行控制台”里。

5、重定向

有时候,你想把输入输出换个地方。这叫"重定向"。

输出重定向:

把本来要显示在屏幕上的内容,存到文件里。

python hello.py > output.txt

本来要显示在屏幕上的内容,现在存到了output.txt文件里。

输入重定向:

不从键盘读输入,从文件读。

python hello.py < input.txt

本来要从键盘输入的内容,现在从input.txt文件里读。

小结一下

• 输入设备让人跟计算机说话:键盘、鼠标、触摸屏等

• 输出设备让计算机跟人说话:显示器、扬声器、打印机等

• 标准输入默认是键盘,标准输出默认是显示器

• 重定向可以改变输入输出的来源和去向

本章小结

这一章,咱们唠了计算机的基本概念:

计算机不是神仙,它就是个算得快的工具。能干的事儿都是能转化成计算的事儿。

计算机四大件儿:

部件比喻作用特点
CPU大脑执行指令、计算啥都能干,一次干不多
内存工作台临时存数据快,但断电就没了
硬盘仓库永久存数据持久,但慢
GPU画画高手,AI计算处理图像、大规模计算擅长并行计算

操作系统是大管家,管理硬件、文件、进程,让软件能正常运行。

软件是代码集合,是人写出来的,指挥硬件干活。

输入输出设备让人和计算机能交流。

把这些搞清楚,你就对计算机有了基本的认识。

接下来,咱们唠唠程序是咋跑起来的。

第二章:编程序的那点事儿

开场白

上一章咱们唠了计算机是啥,这一章唠唠程序是咋回事儿。

你用AI写代码,代码写出来了,然后呢?

代码是怎么变成能跑的程序的?这一章就唠这个。

搞清楚程序是咋跑起来的,你才能理解AI给你的代码在干啥,遇到问题才知道往哪个方向排查。

2.1 编程语言是个大家族

1、啥是编程语言?

计算机只认识0和1,但你不能每次都写0和1跟它交流,那太累了。

所以,人类发明了编程语言。编程语言就是人类和计算机之间的翻译。

你用编程语言写出代码,代码被翻译成计算机能懂的0和1,计算机就能执行你的指令。

打个比方:

你和老外交流,你说中文,他说英语,互相听不懂。咋办?找个翻译。

编程语言就是翻译,你用编程语言写代码,翻译把它变成计算机能懂的0和1。

2、编程语言的演变

编程语言的发展,经历了三代:

第一代:机器语言

最早的时候,程序员直接写0和1。比如:

10110000 01100001

这啥意思?只有计算机知道,人看着就是天书。

你想想,写个简单的程序得敲多少个0和1?还容易敲错。一个数字错了,整个程序都不对。

第二代:汇编语言

后来,有人发明了汇编语言,用简单的符号代替0和1。比如:

MOV AL, 61h

比0和1好理解了——把61h这个数移动到AL寄存器里。但还是很难懂,而且不同CPU汇编语言不一样。

你在Intel的CPU上写的汇编,在ARM的CPU上可能就跑不了。

第三代:高级语言

再后来,高级语言出现了。比如:

age = 25

这就容易理解多了——把25赋值给变量age。

高级语言让编程变得简单,普通人也能学会。你不用关心CPU的寄存器、内存地址这些底层细节,写代码就像写英语一样。

3、高级语言有啥好处?

易读易懂

接近自然语言,容易理解。

你看Python代码,基本能猜出它干啥:

if age >= 18: print("成年人") else: print("未成年")

不需要懂计算机,就能看懂这段代码的意思。

移植性好

同一份代码可以在不同电脑上运行。

你用Python写的代码,在Windows上能跑,在Mac上也能跑,在Linux上还能跑。不需要为每个操作系统写不同的代码。

效率高

程序员写代码更快,不用关心底层细节。

以前用汇编语言写一个功能,可能要写几百行。现在用高级语言,几行就搞定。

4、常见的高级语言

现在有几百种编程语言,常用的也有几十种。以下是最常见的:

语言用途特点难度
Python数据分析、AI、Web、脚本简单易学,库丰富★☆☆☆☆
JavaScript(简称JS)Web前端、Node.js后端浏览器原生支持,无处不在★★☆☆☆
Java企业应用、Android开发跨平台,稳定,生态好★★★☆☆
C/C++系统开发、游戏、嵌入式性能高,但难学★★★★★
Go云原生、微服务简洁高效,谷歌出品★★☆☆☆
Rust系统开发安全高性能,但学习曲线陡★★★★☆
C#Windows开发、游戏(Unity)微软出品,Windows生态好★★☆☆☆
SwiftiOS/macOS开发苹果出品,开发苹果应用首选★★☆☆☆
KotlinAndroid开发谷歌推荐的Android开发语言★★☆☆☆
PHPWeb后端简单,但有点过时了★★☆☆☆
RubyWeb后端优雅,但用的人少了★★☆☆☆
TypeScriptWeb前端JavaScript的超集,加了类型★★★☆☆

5、咋选语言?

很多新手问:我想学编程,选哪个语言?

这个问题没有标准答案,因为不同语言适合干不同事儿。

按用途选:

用途推荐语言
数据分析、AI、机器学习Python
Web前端JavaScript
Web后端Python、Java、Go、Node.js(JavaScript)
企业应用Java
手机App(Android)Kotlin、Java
手机App(iOS)Swift
跨平台AppFlutter(Dart)、React Native(JavaScript)
游戏开发C++(大型游戏)、C#(Unity)
系统开发、嵌入式C、Rust
云原生、微服务Go

按难度选:

最容易上手:Python

Python语法最接近自然语言,新手学起来不痛苦。代码读起来像读英语。

中等难度:JavaScript、Java、Go

语法比Python复杂一些,但也不算难。JavaScript的异步概念需要理解一下。Java的面向对象概念需要学一学。

较难:C、C++、Rust

需要管理内存、理解指针,容易出错。学这些语言需要耐心。

我的建议:

如果你是纯新手,想快速入门,推荐从Python或JavaScript开始。

学完Python或JavaScript,理解了编程的基本概念(变量、函数、循环等),再学其他语言就容易多了。

如果你有明确的目标(比如想搞前端),直接学那个领域的语言就行。

如果想做网站的话就先学HTML和JavaScript。很多程序员不把HTML看作一种编程语言,因为它是做网页的。但它也是一种去分析语言,叫做“超文本标记语言”。

小结一下

• 编程语言是人类和计算机之间的翻译

• 从机器语言到汇编语言到高级语言,越来越容易理解

• 高级语言易读易懂、移植性好、效率高

• 常见语言:Python、JavaScript、Java、C/C++、Go、Rust等

• 新手推荐从Python开始

2.2 代码咋变成行动的?

1、写完代码就能跑吗?

你写了一段代码,然后呢?直接双击能运行吗?

不一定。这取决于你用的是啥语言、啥方式。

2、编译型语言

有些语言需要先编译,把代码翻译成计算机能直接执行的文件。

举个例子:

C语言的编译过程:

你写完代码,用编译器编译,生成一个.exe文件(Windows)或可执行文件(Linux/Mac)。双击这个文件就能运行。

编译型语言的特点:

优点:

• 运行速度快(已经是计算机能直接执行的代码)

不需要运行时环境(可以直接跑)

缺点:

• 每次修改代码都要重新编译

• 不同操作系统需要重新编译

常见的编译型语言:C、C++、Go、Rust

3、解释型语言

有些语言不需要编译,运行的时候一行一行解释执行。

举个例子:

Python的执行过程:

你写完代码,直接用Python解释器运行就行,不需要先编译。

解释型语言的特点:

优点:

• 不需要编译,改完代码直接运行

跨平台方便(只要有解释器就行)

缺点:

• 运行速度比编译型慢(边翻译边执行)

常见的解释型语言:Python、JavaScript、Ruby、PHP

4、中间派:Java

Java有点特殊。它先编译成"字节码",然后由Java虚拟机(JVM)解释执行。

这样既有编译型语言的优点(跨平台),又有解释型语言的灵活性。

Java的特点:

• 写一次,到处运行(只要有JVM)

• 比纯解释型语言快,比纯编译型语言慢

• JVM会做优化(JIT编译),热点代码会被编译成机器码

5、你的AI代码咋运行?

你用AI写的代码,运行方式取决于语言:

语言运行方式你需要做啥
Python解释执行安装Python解释器
JavaScript浏览器或Node.js执行有浏览器就行,或装Node.js
JavaJVM执行安装Java(JDK)
C/C++先编译再执行安装编译器(gcc/g++)
Go先编译再执行安装Go

所以,用AI写代码之前,你得先搞清楚:这个代码需要啥运行环境?

AI给你一段Python代码,你得有Python环境;给你一段JavaScript代码,你得有浏览器或Node.js;给你一段C++代码,你得有编译器。

小结一下

• 代码不能直接运行,需要翻译成计算机能懂的指令

• 编译型语言先编译成可执行文件,运行快但每次要重编译

• 解释型语言逐行解释执行,方便但运行慢

• Java是中间派,先编译成字节码,再由JVM执行

• 不同语言需要不同的运行环境

2.3 变量、条件、循环、函数——编程就其实那么几下子

1、编程的核心概念

不管啥语言,编程都有几个核心概念。搞懂这些,编程的大门就推开一半了。

这些概念是:

• 变量

• 数据类型

• 条件

• 循环

• 函数

咱们一个一个唠。

2、变量:给数据起个名字

变量就是个"容器",用来存数据。你给这个容器起个名字,以后用这个名字就能找到数据。

举个例子:

name = "张三" age = 25 height = 1.75 is_student = True

这里,name、age、height、is_student都是变量名,存了不同的数据。

你可以把变量想象成一个个盒子,盒子上贴着标签,盒子里放着数据。

变量的命名规则:

• 名字要有意义,少用`a`、`b`、`c`这种,多用`userName`、`totalPrice`这种

• 不同语言命名规则不同,但大多不允许空格和特殊符号

• 别用语言的关键字(比如`if`、`for`、`while`)当变量名

• 建议用英文,别用中文(虽然有些语言支持。对了,别相信中文编程,真正的程序员都觉得那是个笑话。)

命名风格:

风格是建议,不是规则,对计算机执行没有任何影响。

你可以有你的风格,

我可以有我的风格,

阿色没有风格,也是一种风格。

风格例子常用于
小驼峰userNameJavaScript、Java
大驼峰UserName类名
下划线user_namePython

3、数据类型:数据有啥种类

变量存的数据,有不同类型:

类型说明例子
整数整数25, -10, 0
浮点数小数1.75, 3.14
字符串文本"张三", "Hello"
布尔值真假True, False
列表多个数据[1, 2, 3]
字典键值对{"name": "张三"}

不同类型的数据,能干的事儿不一样:

【整数能加减乘除】

a = 10 b = 3 print(a + b) # 13 print(a / b) # 3.333...

注释:

上面的#是注释,就是你在程序当中做的笔记,计算机会忽略它,所以注释不参与程序的执行。

不同的语言使用不同的符号表示注释。比如:

Python使用#;

JavaScript使用//或/* */;

C语言、Java、Go等很多语言都是用//或/* */。

【字符串能拼接】

s1 = "你好" s2 = "世界" print(s1 + s2) # "你好世界"

但整数和字符串一般不能直接相加(有的可以,但也要尽量避免使用)

print("年龄:" + 25) # 报错! print("年龄:" + str(25)) # 正确,先把25转成字符串

【动态类型和静态类型】

动态类型:变量类型可以变。Python、JavaScript是动态类型。

x = 10 # x是整数 x = "hello" # x变成字符串,没问题

静态类型:变量类型不能变。Java、C++是静态类型。

int x = 10; // x是整数 x = "hello"; // 报错!不能把字符串赋给整数变量

4、条件:让程序有判断力

条件语句让程序能做判断,根据不同情况执行不同代码。

举个例子:

【判断是否成年】

age = 18 if age >= 18: print("成年人") else: print("未成年")

程序会判断age >= 18这个条件:

• 如果是True,执行`print("成年人")`

• 如果是False,执行`print("未成年")`

更复杂的条件:

【判断是否及格】

score = 85 if score >= 90: #如果… print("优秀") elif score >= 80: #否则,如果… print("良好") elif score >= 60: print("及格") else: #否则… print("不及格")

条件语句是程序"智能"的基础,没有它,程序只能傻傻地顺序执行。

组合的条件:

组合的条件能让判断更精细,常用and、or、not连接多个判断。

比如判断一个人是否可以考驾照:

【判断是否可以考驾照】

if age >= 18 and has_id_card and not is_blind: print("可以报名考试")

这里必须同时满足年龄够、有身份证且非盲人,才会进入分支。

若用or,则满足任一条件即可;

not用于取反,让原本为真的条件变假。

这样程序就能根据多维度信息灵活决策,像现实中的规则一样层层筛选。

掌握条件的组合写法,是写出“聪明”代码的第一步。

5、循环:让程序能重复干活

循环语句让程序能重复执行一段代码。

常见的循环包括for循环和while循环等方式。

for循环:已知要循环几次

【打印1到5】

for i in range(1, 6): print(i)

输出:

1

2

3

4

5

while循环:不知道要循环几次,满足条件就继续

【猜数字游戏】

import random target = random.randint(1, 100) guess = 0 while guess != target: guess = int(input("猜一个数字(1-100):")) if guess < target: print("太小了") elif guess > target: print("太大了") print("恭喜你猜对了!")

循环是程序批量处理数据的基础。没有循环,你要打印1000个数字就得写1000行代码。

循环控制:

• `break`:跳出循环

• `continue`:跳过本次,继续下次

【找到第一个能被7整除的数就停止】

for i in range(1, 100): if i % 7 == 0: print(i) break

【打印1-10的奇数】

for i in range(1, 11): if i % 2 == 0: continue # 跳过偶数 print(i)

6、函数:打包一段功能

函数就是把一段代码打包起来,给它起个名字,以后想用这段代码,直接叫名字就行。

举个例子:

【定义一个函数,计算两个数的和】

def add(a, b): return a + b

【使用这个函数】

result = add(3, 5) print(result) # 8

这里,add就是一个函数,接受两个参数a和b,返回它们的和。

函数的好处:

复用:写一遍,到处用。

你写了一个计算器,里面有加、减、乘、除四个函数。以后任何地方需要计算,直接调用这些函数就行,不用重复写。

清晰:把复杂功能拆成小函数,代码更好懂。

一个程序有1000行代码,如果全写在一起,看晕你。但如果你拆成10个函数,每个函数100行,就容易理解多了。

维护:改一个地方,所有调用的地方都生效。

你发现加法函数有个bug,修好之后,所有调用加法的地方都自动修好了。

函数的组成部分:

包括函数声明关键字、函数名、形参列表、函数体、返回值。

以Python为例:

def add(a, b): res = a + b return res

逐部分拆解:

1. 定义函数的关键字

def,Python 定义函数的专属关键字,必须用def开头。

2. 函数名

add ,用来调用函数,命名遵循变量规则。

3. 参数列表

(a, b) 括号里的a、b,接收外部传进来的数据,可以没有参数。

4. 函数体

缩进里面的代码,res = a + b,实现具体功能逻辑。

5. 返回值

return res 把结果往外传出,可以没有返回。

6. 调用演示

c = add(3, 5) print(c) # 输出 8

小结一下

编程的五个核心概念:

概念是啥咋用
变量存数据的容器`name = "张三"`
数据类型数据的种类整数、字符串、列表等
条件让程序做判断`if...else...`
循环让程序重复执行`for...`、`while...`
函数打包一段代码`def add(a, b): return a + b`

搞懂这五个概念,编程的基础就有了。

你用AI写的代码,基本就是这些概念的组合。

2.4 程序是咋组织的?

1、代码文件

你写的代码,通常存在文件里。不同的语言,文件后缀名不一样:

语言文件后缀
Python.py
JavaScript.js
Java.java
C.c
C++.cpp
HTML.html
CSS.css

一个文件可以放一个程序,也可以放一个模块(一组相关的功能)。

2、模块和包

当程序变大,一个文件放不下,就需要拆成多个文件。

模块就是一个文件,包含一组相关的功能。

包就是多个模块放在一起的文件夹。

举个例子:

my_project/

├── main.py # 主程序

├── utils.py # 工具模块

├── models.py # 数据模型模块

在main.py里,可以导入其他模块:

import utils from models import User from config import DATABASE_URL

使用导入的内容

result = utils.calculate(1, 2) user = User("张三")

3、库和框架

库是别人写好的代码,你可以直接用。

框架是半成品程序,你填空就能用。

大多程序员都乐于分享自己的成果。你用他的库和框架,他会很高兴的。

但是还是要注意,有版权的一般不允许免费使用。

举个例子:

库:requests库(发送HTTP请求)

import requests response = requests.get("https://www.baidu.com") print(response.text)

你不用自己写发送HTTP请求的代码,直接调用requests库就行。

框架:Django框架(Web开发)

from django.urls import path from . import views urlpatterns = [ path('', views.home), path('about/', views.about), ]

框架给你搭好了架子,你只需要写视图函数(views)和配置路由(urlpatterns),一个网站就出来了。

常用库和框架:

语言常用库常用框架
Pythonrequests, pandas, numpyDjango, Flask, FastAPI
JavaScriptlodash, axiosReact, Vue, Express
JavaApache CommonsSpring
Go标准库很强大Gin, Echo

小结一下

• 代码存在文件里,不同语言后缀名不同

• 模块是一个文件,包是多个模块的集合

• 库是别人写好的代码,框架是半成品程序

• 用库和框架可以大大提高开发效率

本章小结

这一章,咱们唠了程序的基本概念:

编程语言是人类和计算机之间的翻译,从机器语言到汇编到高级语言,越来越容易理解。

不同语言适合不同用途,但也不是一定的:

• 数据分析/AI选Python

• 前端选JavaScript

• 企业应用选Java

代码运行方式:

• 编译型语言先编译后运行

• 解释型语言边解释边运行

编程核心概念:变量、数据类型、条件、循环、函数,搞懂这些,编程就入门了。

程序组织方式:文件、模块、包、库、框架,合理组织才能写出大程序。

下一章,咱们唠唠数据那些事儿。

第三章:数据、库和算法的那点事儿

开场白

计算机天天处理数据,但你真的懂数据吗?

数据是啥?数据咋存的?文件格式有啥讲究?数据库是干啥的?

这一章,咱们唠唠数据那些事儿。理解了数据,你才能理解程序在干啥,才能理解AI给你的代码在处理啥。

3.1 啥都能变成数字!

1、计算机的世界观

在计算机眼里,一切都是数字。

文字?数字。

图片?数字。

声音?数字。

视频?数字。

程序?还是数字。

计算机只会处理数字,所以啥都得变成数字才能让计算机处理。

这就像啥呢?

就像一个只会说数字语言的怪人。你跟他说"你好",他听不懂。你得把"你好"翻译成数字,比如"123 456",他才能理解。

计算机就是这样的怪人。

2、二进制:计算机的语言

我们平时用的是十进制,0到9十个数字。

计算机用的是二进制,只有0和1两个数字。

为啥用二进制?

因为计算机是用电信号工作的,电压高就是1,电压低就是0。

用二进制最简单可靠。

如果用十进制,就得有10种电压状态,太复杂了,容易出错。

对了,现在不是有人要搞三进制计算机吗?阿色认为没什么太大意义。

十进制和二进制咋对应?

十进制二进制解释
000就是0
111就是1
2102 = 1×2 + 0×1
3113 = 1×2 + 1×1
41004 = 1×4 + 0×2 + 0×1
51015 = 1×4 + 0×2 + 1×1
61106 = 1×4 + 1×2 + 0×1
71117 = 1×4 + 1×2 + 1×1
810008 = 1×8 + 0×4 + 0×2 + 0×1

不用你手算,计算机自己会转换。但你要知道,计算机内部用的是二进制。

bit和byte:

• bit(位):二进制的最小单位,0或1

• byte(字节):8个bit,可以表示0-255的整数

1 byte = 8 bits

比如:

00000000 = 0

11111111 = 255

存储单位:

单位换算大约
KB1024 bytes一段文字
MB1024 KB一首歌
GB1024 MB一部电影
TB1024 GB一个硬盘

3、文字咋变成数字?

文字怎么变成数字?用编码。

ASCII编码:

最早的编码叫ASCII,用数字表示英文字母和符号。

字符ASCII码二进制
A6501000001
B6601000010
a9701100001
04800110000
空格3200100000

ASCII只有128个字符,够英文用,但中文怎么办?

Unicode编码:

后来有了Unicode,可以表示世界上所有的字符。

字符Unicode说明
20013中文
25991中文
A65英文
😊128522emoji符号

你看到的文字,在计算机里其实是一串数字。显示的时候,计算机查表把数字转成对应的字形显示出来。

UTF-8:

Unicode规定了每个字符的编号,但存到文件里还需要一种方式。UTF-8就是最常用的存储方式。

它用1-4个字节表示一个字符:

• 英文:1个字节(兼容ASCII)

• 中文:通常3个字节

• emoji:通常4个字节

如果一个英文字母对应一个汉字的话,同样字符数的中文文件比英文文件大。

但是,因为一般一个英文单词包含多个字母,而一个单词才能对应一两个汉字,所以总体上,如果表达的意思相同,往往中文文件更小。

4、图片咋变成数字?

图片是由很多小点组成的,每个小点叫一个像素。

每个像素有颜色,颜色用数字表示。

RGB模式:

用红(R)、绿(G)、蓝(B)三种颜色混合出各种颜色。每个颜色分量是0-255。

颜色 = (R, G, B)

比如:

• 纯红色 = (255, 0, 0)

• 纯绿色 = (0, 255, 0)

• 纯蓝色 = (0, 0, 255)

• 白色 = (255, 255, 255)

• 黑色 = (0, 0, 0)

• 黄色 = (255, 255, 0)

• 紫色 = (255, 0, 255)

一张图片,就是一堆像素的集合,每个像素都是三个数字。

举个例子:

一张1920×1080的图片,有1920×1080 = 2,073,600个像素。

每个像素3个数字(RGB),每个数字1个字节。

总共:2,073,600 × 3 = 6,220,800字节 ≈ 6MB。

所以原图很大,需要压缩。

图片压缩:

• JPEG:有损压缩,丢弃一些不重要的细节,文件小但画质下降。适合照片。

• PNG:无损压缩,画质不变但文件大。适合图标、截图。

• GIF:最多256色,文件小但画质差。支持动画。

• WebP:新一代格式,画质好文件小。但兼容性差点。

5、声音咋变成数字?

声音是波,连续的波。

但计算机只能存离散的数字,所以要把连续的波变成离散的点。这叫采样。

采样过程:

每隔一小段时间记录一个点的值。

采样率:

每秒采样多少次。

• 电话:8000次/秒(8kHz)

• CD:44100次/秒(44.1kHz)

• 专业音频:96000次/秒(96kHz)或更高

采样率越高,声音越真实,文件也越大。

位深度:

每个采样点用多少位存储。

• 8位:256个级别

• 16位:65536个级别(CD质量)

• 24位:1600万个级别(专业质量)

位深度越高,音质越好,文件也越大。

6、视频咋变成数字?

视频就是图片加声音。

一秒钟24张图片(或更多),配上声音,连起来播放,就是视频。

帧率:

每秒多少张图片(帧)。

• 电影:24帧/秒

• 电视:25或30帧/秒

• 游戏:60帧/秒或更高

帧率越高,画面越流畅。

视频为什么这么大:

一张1920×1080的图片约6MB。

一秒30帧就是180MB。

一分钟就是10.8GB。

太大了!

所以视频必须压缩。视频压缩技术非常复杂,能把文件压缩到原来的几十分之一甚至几百分之一。

小结一下

• 在计算机眼里,一切都是数字

• 计算机用二进制,只有0和1

• 文字用编码变成数字(ASCII、Unicode、UTF-8)

• 图片由像素组成,每个像素用RGB数字表示颜色

• 声音通过采样变成数字

• 视频是图片加声音,数据量最大,必须压缩

3.2 文件格式那点秘密

1、文件后缀名是干啥的?

你肯定见过各种文件后缀名:.txt、.doc、.jpg、.mp4……

后缀名是告诉操作系统和软件:这个文件是啥类型的,该用啥软件打开。

比如:

• .txt → 用记事本打开

• .doc → 用Word打开

• .jpg → 用图片查看器打开

• .mp4 → 用播放器打开

但后缀名只是个标识,改后缀名不会改变文件内容。

你把.jpg改成.txt,图片还是图片,只是系统可能用文本编辑器打开它,然后看到一堆乱码。

2、常见文件格式

文本文件:

格式说明特点
.txt纯文本最简单,啥软件都能打开
.mdMarkdown轻量级标记语言,写文档常用
.csv逗号分隔的数据表格数据,Excel能打开
.jsonJavaScript对象表示法数据交换常用,Web开发必备
.xml可扩展标记语言配置文件常用,有点啰嗦
.html网页文件浏览器能直接打开
.yaml另一种数据格式配置文件常用,比json简洁

文档文件:

格式说明特点
.doc/.docxWord文档微软Office,最常用
.pdfPDF文档跨平台通用,不能编辑
.xls/.xlsxExcel表格电子表格,数据处理
.ppt/.pptxPowerPoint演示文稿

图片文件:

格式说明特点
.jpg/.jpeg有损压缩照片常用,文件小
.png无损压缩支持透明背景,图标常用
.gif动图最多256色,支持动画
.bmp无压缩文件大,不常用了
.svg矢量图放大不失真,图标logo常用
.webp新格式画质好文件小,兼容性差点

音频文件:

格式说明特点
.mp3有损压缩最常用,音乐标配
.wav无压缩音质好但文件大
.flac无损压缩发烧友喜欢
.aac有损压缩比mp3好一点
.ogg开源格式游戏常用

视频文件:

格式说明特点
.mp4最通用各种设备都支持
.avi老格式现在用得少
.mov苹果格式Mac/iPhone常用
.mkv开源格式支持多音轨字幕
.webm网页格式HTML5视频

代码文件:

格式说明
.pyPython代码
.jsJavaScript代码
.javaJava代码
.c/.cppC/C++代码
.htmlHTML代码
.cssCSS样式
.jsonJSON数据
.sqlSQL脚本

* 代码文件都是文本格式的,都可以用文本编辑器打开。

3、压缩文件

压缩文件是把多个文件打包成一个,同时压缩体积,方便传输与备份。

格式说明特点
.zip最通用各系统都支持
.rarWinRAR专用压缩率高但软件收费
.7z7-Zip格式压缩率最高,开源免费
.tar.gzLinux常用tar打包,gzip压缩

4、文件格式选择建议

场景推荐格式
写文档.docx或.md
存照片.jpg
存截图/图标.png
存音乐.mp3
存视频.mp4
存数据.json或.csv
存代码看语言

小结一下

• 文件后缀名标识文件类型,告诉系统用啥软件打开

• 不同类型文件有不同格式,各有特点

• 文本、文档、图片、音频、视频、代码,都有各自的常用格式

• 选择格式要看场景

3.3 数据库:比Excel高级的大表格

1、啥是数据库?

你用过Excel吧?Excel就是一个表格,存数据的。

数据库就是更强大的"表格系统"。

它能存更多数据、更快查询、多人同时用、保证数据安全。

2、为啥需要数据库?

Excel的问题:

数据多了就慢(几万行就开始卡)

• 多人同时用容易冲突

没有权限控制(谁能看、谁能改)

没有事务(转账一半失败了咋办)

• 查询不方便(想查"销售额最高的前10个产品"得写公式)

数据库的优点:

存得多

数据库能存几百万、几千万甚至几亿条数据,查询还是很快。

查得快

数据库有索引,就像书的目录,查询速度快几个数量级。

多人用

10个人同时查数据、改数据,不会冲突。数据库有锁机制,保证数据不会乱。

保证安全

突然断电,数据库能恢复到断电前的状态。这叫"事务",要么全成功,要么全失败。

控制权限

谁能看、谁能改、谁能删,都能控制。财务数据只有财务能看,人事数据只有人事能看。

复杂查询

多表关联、聚合统计、排序分组,一条SQL命令搞定。

3、关系型数据库

最常用的是关系型数据库,数据存在"表"里,像Excel一样。

一张表有"列"(字段)和"行"(记录)。

比如,用户表:

idnameagecity
1张三25北京
2李四30上海
3王五28广州

每一列是一个字段(属性),每一行是一条记录(实体)。

多张表可以关联:

用户表:

idnamecity_id
1张三1
2李四2

城市表:

idname
1北京
2上海

通过city_id关联,就能查到"张三住在哪个城市"。

这就是"关系型"的含义——表之间有关系。

4、SQL:和数据库对话的语言

SQL(Structured Query Language)是操作关系型数据库的语言。

基本操作:增删改查

查(SELECT)

SELECT * FROM users; -- 查所有用户 SELECT * FROM users WHERE city = '北京'; -- 查北京的用户 SELECT name, age FROM users; -- 只查名字和年龄

增(INSERT)

INSERT INTO users (name, age, city) VALUES ('赵六', 35, '深圳');

改(UPDATE)

UPDATE users SET age = 26 WHERE name = '张三';

删(DELETE)

DELETE FROM users WHERE name = '王五';

复杂查询:

• 查询用户数量

SELECT COUNT(*) FROM users;

• 查询平均年龄

SELECT AVG(age) FROM users;

• 按城市分组统计

SELECT city, COUNT(*) FROM users GROUP BY city;

• 多表关联查询

SELECT users.name, cities.name FROM users JOIN cities ON users.city_id = cities.id;

• 排序

SELECT * FROM users ORDER BY age DESC;

• 分页

• 从 users 表,跳过前 20 条,只取出接下来的 10 条数据

SELECT * FROM users LIMIT 10 OFFSET 20;

学会这几个命令,基本操作就够用了。

5、常见的关系型数据库

数据库说明适用场景
MySQL最流行的开源数据库,免费Web应用、中小项目
PostgreSQL功能更强大的开源数据库,免费需要高级功能的项目
SQLite轻量级数据库,单文件,免费小型应用、移动应用
Oracle商业数据库,功能强大,收费大企业、关键系统
SQL Server微软的数据库,收费/免费Windows环境、企业应用

6、NoSQL数据库

除了关系型数据库,还有一些NoSQL数据库,适合特定场景:

文档数据库:

存JSON文档,灵活,不需要固定字段。

代表:MongoDB

{ "name": "张三", "age": 25, "hobbies": ["游泳", "读书"], "address": { "city": "北京", "street": "朝阳路" } }

适合:内容管理、日志、用户数据

键值数据库:

存键值对,简单高效。

代表:Redis

SET user:1:name "张三" GET user:1:name

适合:缓存、会话、计数器

列族数据库:

按列存储,适合大数据分析。

代表:HBase、Cassandra

适合:大数据、时间序列数据

图数据库:

存节点和关系,适合社交网络、推荐系统。

代表:Neo4j

适合:社交网络、知识图谱、推荐系统

7、JSON和数据交换格式

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,易于读写和解析。它基于键值对结构,支持字符串、数字、布尔值、数组、对象和null等数据类型。

举例:

{ "name": "张三", "age": 30, "hobbies": ["阅读", "编程"] }

常用的数据交换格式还包括XML、YAML等。

它们各有特点:XML适合复杂数据结构,YAML便于人工读写。

JSON因其轻量和易解析,在Web API中应用最广泛。

小结一下

• 数据库是比Excel强大的数据存储系统,能存大量数据、快速查询

• 关系型数据库用"表"存数据,用SQL操作

• 常见关系型数据库:MySQL、PostgreSQL、SQLite、Oracle

• NoSQL适合特殊场景:MongoDB(文档)、Redis(键值)、Neo4j(图)

3.4 数据结构和算法:程序员的内功

1、啥是数据结构?

数据结构是数据在计算机里的组织方式。

不同的数据结构,适合不同的场景。选对了数据结构,程序效率能提高几十倍甚至几百倍。

常见的数据结构:

数组(列表)

一排连续的格子,每个格子存一个数据。

[1, 2, 3, 4, 5]

• 优点:按位置访问快(直接算出位置)

• 缺点:插入删除慢(后面的都得移动)

链表

一串珠子,每颗珠子指向下一颗。

1 → 2 → 3 → 4 → 5

优点:插入删除快(改指针就行)

缺点:访问慢(得从头找)

一摞盘子,只能从上面拿。

├───┤ ├───┤ ├───┤ ├───┤

特点:后进先出(LIFO)

• 用途:函数调用、撤销操作

队列

排队买票,先来先买。

→ → → → → 1 2 3 4 5 ↑ ↑ 出 进

特点:先进先出(FIFO)

• 用途:任务队列、消息队列

哈希表

用键找值,像字典。

{ "张三": 25, "李四": 30, "王五": 28 }

优点:查找快(O(1))

• 用途:缓存、索引

有层级关系的数据,像家谱。

根 / \ A B / \ \ C D E

• 用途:文件系统、数据库索引、HTML结构

节点和边,像地图。

A —— B C —— D

• 用途:社交网络、导航、推荐系统

2、啥是算法?

算法是解决问题的方法和步骤。

就像菜谱:第一步切菜,第二步放油,第三步炒……

算法描述的是解决问题的步骤。

常见的算法:

排序算法:

把一堆乱序的数据排成有序的。

• 冒泡排序:简单但慢

• 快速排序:快,常用

• 归并排序:稳定

查找算法:

在一堆数据里找目标。

• 线性查找:从头找到尾,慢

• 二分查找:折半找,快(但数据得先排好序)

图算法:

• 最短路径:导航用

• 深度优先搜索:走迷宫

• 广度优先搜索:社交网络

3、算法复杂度

咋衡量算法好不好?看复杂度。

时间复杂度:

运行时间跟数据量的关系。

• O(1):常数时间,跟数据量无关

• O(log n):对数时间,很快

• O(n):线性时间,数据量翻倍时间翻倍

• O(n log n):比线性慢一点

• O(n²):平方时间,数据量翻倍时间翻四倍

空间复杂度:

占用内存跟数据量的关系。

举个例子:

在一个有序数组里找一个数:

线性查找: 从头找到尾

• 时间复杂度:O(n),最坏情况找n次

二分查找: 折半找

• 时间复杂度:O(log n),100万个数最多找20次

差距大了!

4、你需要学吗?

如果你只是用AI写小程序,不需要深入学数据结构和算法。AI会帮你选合适的。

但如果你想成为专业程序员,数据结构和算法是必修课。面试必考。

初学者建议:

• 了解基本概念就行

• 知道啥时候用啥数据结构

• 遇到性能问题,往这方面想

小结一下

• 数据结构是数据的组织方式,选对了效率高

• 常见数据结构:数组、链表、栈、队列、哈希表、树、图

• 算法是解决问题的方法和步骤

• 复杂度衡量算法效率:时间复杂度和空间复杂度

• 初学者了解基本概念就行

本章小结

这一章,咱们唠了数据那些事儿:

一切都是数字:文字、图片、声音、视频,在计算机里都是数字。

文件格式:后缀名标识文件类型,不同类型有不同格式。

数据库:比Excel强大的数据存储系统,用SQL操作,能存大量数据快速查询。

数据结构和算法:程序员的内功,了解基本概念就行。

数据是计算机处理的对象,理解数据的概念,才能更好地理解编程。

下一章,咱们唠唠网络那些事儿。

第四章:网络的那点事儿

开场白

你天天上网,但你知道网络是咋连的吗?

你点一下链接,网页就出来了——背后发生了啥?

你发一条微信,朋友就收到了——数据是怎么过去的?

这一章,咱们唠唠网络的基本原理,让你知道点一下鼠标,背后发生了啥。

理解网络原理,你才能理解Web开发、API调用、云服务这些概念。

4.1 两台电脑咋说话?

1、网络的本质

网络的本质,就是让电脑能互相说话。

两台电脑连一根网线,就能组成最简单的网络。它们可以互相传文件、发消息。

很多电脑连在一起,就是大网络。全世界的电脑连在一起,就是互联网。

打个比方:

网络就像电话系统。每台电脑是一部电话,网线是电话线。你拨号(发请求),对方接听(响应),你们就能交流。

2、网络协议:电脑的"语言"

电脑之间咋说话?得用统一的"语言",这就是网络协议。

就像人与人交流,得说同一种语言。你说中文,我说英语,咱俩没法交流。

电脑之间也一样,得用统一的协议,才能正确传输数据。

最常见的协议是TCP/IP,它是互联网的基础协议。

TCP/IP不是单个协议,是一组协议的统称,成员很多,而且更新、升级、新增、废止也较频繁,主要包括:

• IP:网际协议,负责寻址和路由

• TCP:传输控制协议,负责可靠传输

• UDP:用户数据报协议,负责快速传输

• HTTP:超文本传输协议,负责网页传输

• FTP:文件传输协议,负责传文件

• SMTP:邮件传输协议,负责发邮件

这些协议各司其职,配合工作,让互联网能正常运行。

3、数据咋传输?

你在电脑上发个文件给另一台电脑,数据是怎么过去的?

不是一下子过去的,是被"切"成很多小包,每个包单独传,到了目的地再拼起来。

这叫分组交换。

这样做的好处:

• 某个包丢了,重传那个包就行,不用全部重传

• 多个数据可以同时传,共享网络资源

• 出错了容易定位和修复

就像你寄一本书:

不是整本寄,而是撕成很多页,每页单独装信封寄出去,对方收到后再拼成一本书。

虽然听起来麻烦,但效率更高、更可靠。

小结一下

• 网络的本质是让电脑能互相说话

• 网络协议是电脑交流的"语言",TCP/IP是基础

• 数据被切成小包传输,到目的地再拼起来

4.2 IP地址:网络世界的门牌号

1、啥是IP地址?

你要寄信,得知道对方地址。电脑之间传数据,也得知道对方地址。

IP地址就是网络世界的门牌号。

比如:192.168.1.100

这四个数字组成一个IP地址,每台联网的电脑都有一个IP地址。

2、IP地址长啥样?

IPv4地址:

4个数字,用点分隔,每个数字0-255。

192.168.1.100

每个数字是8位,即1个字节。8位2进制数最大为11111111,等于10进制的255。

4个数字总共32位,能表示的地址数量:2³² ≈ 43亿个。这就是全球所有IP地址的总量。

IPv6地址:

八组十六进制数字,用冒号分隔。

2001:0db8:85a3:0000:0000:8a2e:0370:7334

总共128位,能表示的地址数量多到用不完。

3、IPv4和IPv6

v就是vision,版本的意思。v4就是第4版,v6就是第6版。

IPv4的问题:

地址不够用了!全世界只有40多亿个,不够分。

你想想,全世界有多少设备要联网?电脑、手机、平板、智能手表、智能家电……早超过43亿了。

IPv6的解决方案:

地址数量多到几乎无穷大(2¹²⁸ ≈ 3.4×10³⁸个),够用到地老天荒。

现状:

IPv4还在用,但地址不够,所以有了各种技术(NAT、动态分配、内网)来省着用。IPv6是未来的趋势,但普及还需要时间。

4、公网IP和内网IP

公网IP:

能在互联网上被访问的IP地址,全世界唯一。

就像你的家庭住址,全世界只有一个,别人可以通过这个地址找到你。

内网IP:

只在内部的局域网内有效的IP地址,不同局域网可以重复。

就像你小区里的门牌号,"3号楼502室",很多小区都有这个地址,但在你小区里是唯一的。

常见的内网IP段:

• 192.168.x.x(最常见,家用路由器都用这个)

10.x.x.x(大公司常用)

• 172.16.x.x - 172.31.x.x

你家的网络:

你的电脑、手机,用的都是内网IP。它们通过路由器(有公网IP)连上互联网。

这就是NAT(网络地址转换):多台设备共享一个公网IP。

5、怎么查自己的IP?

查内网IP:

Windows:打开命令行,输入ipconfig

Mac/Linux:打开终端,输入ifconfig或ip addr

查公网IP:

浏览器访问:https://www.ip.cn/

或者百度搜索"IP",会显示你的公网IP。

不一定准确。

小结一下

• IP地址是网络世界的门牌号

• IPv4地址快用完了,IPv6是未来趋势

• 公网IP全球唯一,内网IP只在局域网有效

• 家庭网络通过NAT让多设备共享一个公网IP

4.3 域名和DNS:好记的名字

1、域名是啥?

IP地址太难记了,192.168.1.100这种,谁记得住?

于是有了域名,比如www.baidu.com,好记多了。

域名就是IP地址的"别名",方便人记忆。

2、域名的结构

域名从右往左看:


www.baidu.com

com → 顶级域名(.com表示商业机构)

baidu → 二级域名(公司名)

www → 三级域名(主机名)

常见顶级域名:

顶级域名含义
.com商业机构
.org非营利组织
.net网络服务商
.edu教育机构
.gov政府机构
.cn中国
.jp日本

3、DNS:域名翻译官

你输入域名,电脑怎么知道对应的IP地址?

靠DNS(Domain Name System),域名系统。

DNS就像电话本,记录着域名和IP地址的对应关系。

查询过程:

域名查询是一个逐级扩散的过程,叫做域名解析:

用户输入域名后,本地计算机先查本地缓存,无结果就请求本地DNS服务器;本地DNS查自身缓存,没有则逐级向根域名服务器、顶级域名服务器、权威域名服务器查询,最终获取对应IP地址,回传给用户设备,本地计算机凭IP访问目标服务器。

也就是说,虽然你使用了域名,但计算机最后还是通过IP地址完成访问的。

DNS缓存:

为了加快速度,电脑和DNS服务器都会缓存(记住)之前查过的结果。

下次再访问同一个域名,直接用缓存的IP,不用再查了。

4、hosts文件

在DNS之前,还有一个地方可以配置域名和IP的对应关系:hosts文件。

位置:

• Windows:`C:\Windows\System32\drivers\etc\hosts`

• Mac/Linux:`/etc/hosts`

内容示例:

127.0.0.1 localhost

192.168.1.100 myserver

用途:

• 本地开发测试

• 屏蔽某些网站(比如把广告域名指向127.0.0.1)

• 绕过DNS污染

小结一下

• 域名是IP地址的好记别名

• 域名从右往左:顶级域名 → 二级域名 → 三级域名

• DNS把域名翻译成IP地址,像电话本

• hosts文件可以手动配置域名和IP的对应关系

4.4 网站是咋打开的?

1、浏览器访问网站的过程

你在浏览器输入网址,按下回车,发生了啥?

完整的过程:

• 浏览器先进行域名解析,把网址换成IP

• 建立TCP三次握手,和服务器连通

• 发送HTTP/HTTPS请求(浏览网页使用的是HTTP/HTTPS协议)

• 服务器处理请求,返回响应数据(HTML、CSS、JS、图片等)

• 浏览器解析HTML、渲染页面、加载资源、执行JS

• 浏览结束后TCP四次挥手断开连接

2、三次握手:建立连接

TCP建立连接需要三次握手。所谓握手,就是要在正式通讯之前联络好。

为啥要三次?

确保双方都能收、能发。就像打电话:

"喂,听得到吗?"(第一次)

• "听到了,你能听到我吗?"(第二次)

"听到了,你说吧。"(第三次)

3、HTTP请求和响应

HTTP请求:

浏览器发给服务器的消息,是这样的:

GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0... Accept: text/html

它包含的主要信息:

• 方法:GET(获取)、POST(提交)、PUT(更新)、DELETE(删除)

• 路径:/index.html

• 协议版本:HTTP/1.1

• 请求头:主机、浏览器信息、接受的内容类型等

HTTP响应:

服务器返回给浏览器的消息:

HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 <!DOCTYPE html> <html> ... </html>

它包含的主要信息:

• 状态码:200(成功)、404(未找到)、500(服务器错误)

• 响应头:内容类型、长度等

• 响应体:实际的HTML内容

服务器返回的常见状态码:

状态码含义说明
200OK成功
301Moved Permanently永久重定向
302Found临时重定向
304Not Modified未修改,用缓存
400Bad Request请求格式错误
401Unauthorized未授权
403Forbidden禁止访问
404Not Found未找到
500Internal Server Error服务器内部错误
502Bad Gateway网关错误
503Service Unavailable服务不可用

网络上的404这个梗就是从这里来的哦。

4、HTTP和HTTPS

HTTP(HyperText Transfer Protocol):网页传输协议,明文传输。

HTTPS:HTTP的加密版本,更安全。

区别:

HTTPHTTPS
传输方式明文加密
安全性不安全安全
端口80443
证书不需要需要SSL证书

现在大多数网站都用HTTPS了,你看看地址栏,有个小锁图标,就是HTTPS。

为啥HTTPS安全?

HTTP是明文传输,你发的内容可能被中间人截获看到。

HTTPS加密传输,中间人截获了也看不懂。

HTTPS的加密过程:

• 浏览器请求服务器的证书

服务器返回证书(包含公钥)

• 浏览器验证证书(是不是可信机构颁发的)

• 浏览器生成一个随机密钥,用服务器的公钥加密,发给服务器

• 服务器用自己的私钥解密,得到这个随机密钥

• 之后双方用这个随机密钥加密通信

小结一下

• 访问网站的过程:DNS解析→建立连接→发送请求→响应→渲染→断开

• TCP三次握手确保双方都能收发

• HTTP请求和响应是浏览器和服务器交流的方式

• 状态码告诉你是成功还是失败

• HTTPS比HTTP安全,因为加密传输

4.5 常见网络概念扫盲

1、端口:一栋楼的房间号

IP地址找到了服务器,但服务器上有多个程序,怎么区分?

用端口。

端口就像房间号。IP地址是楼栋地址,端口是房间号。

IP地址:192.168.1.100

端口号:80

完整的网络地址:192.168.1.100:80

常见端口:

端口服务
80HTTP(网页)
443HTTPS(加密网页)
22SSH(远程登录)
21FTP(文件传输)
25SMTP(邮件发送)
3306MySQL数据库
5432PostgreSQL数据库
6379Redis
27017MongoDB

端口范围:

• 0-1023:知名端口,系统占用

• 1024-49151:注册端口,应用程序用

• 49152-65535:动态端口,临时用

2、URL:统一资源定位器

URL(Uniform Resource Locator)是统一资源定位符的简称,用于在互联网上定位和访问资源。

每个URL都指向一个特定的网页、文件或服务,是网络寻址的基础。

URL通常包含协议、域名、路径等部分,例如:

http://www.example.com/page

其中http是协议,www.example.com是域名,/page是路径。

通过URL,浏览器能准确获取并显示目标内容。

3、防火墙:网络保安

防火墙是网络安全系统,控制哪些数据能进出。

就像小区门卫,检查每个进出的数据包,符合规则的放行,不符合的拦截。

防火墙规则:

• 允许某些端口的流量

• 禁止某些IP的访问

• 限制某些协议

举个例子:

服务器上运行着网站(端口80)和数据库(端口3306)。

防火墙配置:

• 允许外网访问80端口(用户能访问网站)

• 禁止外网访问3306端口(数据库不对外开放)

这样,即使数据库有漏洞,外网也攻击不到。

4、代理服务器:中间人

代理服务器是位于客户端和服务器之间的中间服务器。

正常访问:

客户端 → 服务器

通过代理:

客户端 → 代理服务器 → 服务器

代理的用途:

正向代理:

客户端的代理,帮客户端访问服务器。

翻墙(访问被屏蔽的网站)

• 隐藏真实IP

加速访问(代理服务器有缓存)

反向代理:

服务器的代理,帮服务器接收请求。

• 负载均衡(把请求分发到多台服务器)

• 隐藏真实服务器IP

• 缓存静态资源

Nginx是最常用的反向代理服务器。

5、VPN:虚拟专用网络

VPN(Virtual Private Network)可以在公网上建立加密的专用通道。

正常上网:

你 → 互联网 → 网站

用VPN:

你 → VPN加密通道 → VPN服务器 → 互联网 → 网站

VPN的用途:

远程办公(安全访问公司内网)

• 保护隐私(流量加密,运营商看不到)

• 访问地区限制的内容

注意: 在国内使用VPN需要遵守法律法规。

6、CDN:内容分发网络

CDN(Content Delivery Network)把内容缓存到各地的服务器上,用户就近访问。

没有CDN:

用户(北京) → 源服务器(美国) → 延迟高

有CDN:

用户(北京) → CDN节点(北京) → 延迟低

CDN的好处:

• 加快访问速度

• 减轻源服务器压力

• 提高可用性(一个节点挂了还有其他节点)

常见CDN服务商:

• 国外:Cloudflare、Akamai

• 国内:阿里云CDN、腾讯云CDN、百度云CDN

小结一下

• 端口区分服务器上的不同程序,像房间号

• URL是网上的统一资源定位器

• 防火墙控制网络流量,像门卫

• 代理服务器是中间人,正向代理帮客户端,反向代理帮服务器

• VPN建立加密通道,保护隐私

• CDN把内容分发到各地,加快访问速度

本章小结

这一章,咱们唠了网络的基本原理:

网络的本质是让电脑能互相说话,用协议传输数据。

IP地址是网络世界的门牌号,IPv4快用完了,IPv6是未来。

域名是IP地址的好记别名,DNS把域名翻译成IP地址。

访问网站的过程:DNS解析→建立连接→发送请求→响应→渲染→断开。

常见概念:端口、防火墙、代理、VPN、CDN。

理解网络原理,你才能理解Web开发、API调用这些概念。

下一章,咱们唠唠网页那点事儿。

第五章:网页和前端的那点事儿

开场白

你天天刷网页,但你知道网页是咋做出来的吗?

一个网页,看着花里胡哨的,有图有字有动画,点按钮还能跳转。这都是咋整的?

这一章,咱们唠唠网页的基本原理。弄明白了,你才能理解AI给你生成的前端代码在干啥。

5.1 网页的三驾马车

1、HTML、CSS、JavaScript

打开一个网页,你看到的是一张完整的"画"。但这幅画是怎么画出来的?

是由三样东西配合画出来的:

• HTML:骨架,决定网页有啥内容

• CSS:衣服,决定网页长啥样

• JavaScript:动作,决定网页能干啥

2、HTML:搭骨架

HTML(HyperText Markup Language),超文本标记语言。

听着挺高大上,其实就是用"标签"来定义网页上的各种元素。

看看一段HTML代码:

<!DOCTYPE html> <html> <head> <title>我的第一个网页</title> </head> <body> <h1>这是一个标题</h1> <p>这是一个段落。</p> <img src="photo.jpg" alt="一张图片"> <a href="https://www.baidu.com">这是一个链接</a> <ul> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> </ul> </body> </html>

你打开记事本,把这段代码复制进去。

然后保存为HTML格式,就是文件名后缀为.html。双击这个文件就看到效果了。

这些标签都是啥意思?

标签含义作用
<html>整个网页包裹所有内容
<head>头部存放标题、样式等信息
<body>主体存放可见的内容
<h1>一级标题显示大号标题
<p>段落显示一段文字
<img>图片显示图片
<a>链接点击跳转
<ul>无序列表显示项目列表
<li>列表项列表中的每一项

HTML就是用这些标签,把网页的骨架搭起来。

当然,不仅仅只有这些标签,还有其他更多功能的标签。

3、CSS:穿衣服

HTML只有骨架,那页面得多丑啊。全是黑字白底,跟记事本似的。

CSS(Cascading Style Sheets),层叠样式表,就是给网页"穿衣服"的。

看看一段CSS代码:

h1 { color: red; font-size: 24px; text-align: center; } p { color: gray; line-height: 1.5; margin: 10px; } body { background-color: #f0f0f0; font-family: "微软雅黑", sans-serif; }

这段CSS在干啥?

• 标题变成红色,24像素大,居中显示

• 段落变成灰色,行高1.5倍,周围有10像素间距

• 页面背景变成浅灰色,字体用微软雅黑

CSS的基本语法:

选择器 {

属性: 值;

属性: 值;

...

}

• 选择器:选中你要修饰的元素(比如`h1`选中所有标题)

• 属性:你要改变啥(比如`color`改变颜色)

• 值:改成啥样(比如`red`改成红色)

4、JavaScript:让网页动起来

HTML和CSS组合起来,页面是好看了,但还是"死"的,啥也干不了。

JavaScript就是让网页"活"过来的语言。

看看一段JavaScript代码:

// 找到按钮元素 var button = document.getElementById("myButton"); // 给按钮添加点击事件 button.onclick = function() { alert("你点了我!"); };

这段JavaScript在干啥?

• 找到页面上id为myButton的按钮

• 给这个按钮添加一个点击事件

• 当用户点击按钮时,弹出一个提示框

JavaScript能干的事儿多了去了:

• 用户点击按钮,执行某个动作

• 用户填写表单,验证输入是否合法

• 用户滚动页面,加载更多内容

定时执行某些操作(比如轮播图)

• 发送网络请求,获取数据

• 操作页面元素,改变样式或内容

5、三者怎么配合?

一个完整的网页,HTML、CSS、JavaScript是这样配合的:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>示例网页</title> <!-- CSS写在style标签里,或者引入外部CSS文件 --> <style> body { font-family: sans-serif; background-color: #f5f5f5; } #myButton { padding: 10px 20px; background-color: #007bff; color: white; border: none; border-radius: 5px; cursor: pointer; } #myButton:hover { background-color: #0056b3; } #message { margin-top: 10px; font-size: 18px; color: green; } </style> </head> <body> <!-- HTML定义页面结构 --> <h1>欢迎来到我的网页</h1> <p>这是一个示例网页,点击下面的按钮试试。</p> <button id="myButton">点我试试</button> <div id="message"></div> <!-- JavaScript写在script标签里,或者引入外部JS文件 --> <script> // 找到按钮和消息区域 var button = document.getElementById("myButton"); var message = document.getElementById("message"); // 点击按钮时执行 button.onclick = function() { message.textContent = "恭喜你,按钮被点击了!"; }; </script> </body> </html>

这个网页的效果:

• 显示一个标题和一段文字

• 显示一个蓝色的按钮

• 鼠标悬停按钮时,按钮颜色变深

• 点击按钮,下方显示一条消息

小结一下

技术作用比喻
HTML定义网页结构人的骨架
CSS美化网页样式人的衣服
JavaScript添加交互功能人的动作

搞懂这三样,前端的大门就推开了。

5.2 前端和后端是啥关系?

1、啥是前端?

前端就是用户能看到的网页部分。

你在浏览器里看到的一切——文字、图片、按钮、动画——都是前端。

前端代码运行在你的浏览器里,不需要服务器参与(除了获取数据的时候)。

前端开发要做的事儿:

• 设计和实现网页界面

• 处理用户交互(点击、输入、滚动等)

• 发送请求给后端,获取或提交数据

• 把后端返回的数据展示出来

2、啥是后端?

后端就是服务器上的程序,用户看不见。

后端运行在服务器上,处理业务逻辑、操作数据库、返回数据给前端。

后端开发要做的事儿:

• 设计和实现业务逻辑

操作数据库(增删改查)

• 提供API接口,给前端调用

• 处理用户认证和授权

• 处理并发、安全、性能等问题

3、前后端怎么配合?

用一个例子来说明:

场景:用户登录

• 用户输入账号密码,前端校验格式

• 加密后传给后端

• 后端查询数据库,校验账号密码是否匹配

• 验证通过,生成会话返回前端,否则拒绝登录

前后端分工明确:

步骤谁干干啥
显示登录页面前端HTML+CSS渲染
接收用户输入前端JavaScript处理
发送请求前端JavaScript发送HTTP请求
验证用户后端查数据库、验证密码
返回结果后端返回JSON数据
显示结果前端根据返回数据显示成功或失败

4、打个比方

前端 = 饭店的前厅

• 服务员接待客人

• 展示菜单

• 接受客人点菜

• 把菜端上桌

后端 = 饭店的后厨

• 厨师做菜

• 从仓库取食材

• 按订单准备

• 把做好的菜给服务员

客人 = 用户

只看到前厅(前端),看不到后厨(后端),但菜是从后厨做出来的。

实际上,前端、后端的这个叫法也就是从这里来的。

5、前后端分离

很久以前,前端和后端经常混在一起。网页由后端生成,前端只是显示。

现在,前后端分离是主要形态:

• 前端独立开发、独立部署

• 后端只提供API接口,不关心界面

• 前后端通过HTTP接口通信

好处:

• 前后端可以并行开发,效率高

• 前端可以用任何框架(React、Vue等)

• 后端可以用任何语言(Python、Java、Go等)

• 同一个后端可以服务多种前端(网页、App、小程序)

6、AI编程时代的前后端

AI编程时代,前后端又反过来走向融合了。

基于AI的全栈编程又火起来了。这也是阿色写这本小册子的主要原因。

你如果想全栈编程,那你就得前后端都明白。

前端界面可基于自然语言描述自动生成,后端逻辑则由AI根据业务需求直接架构和填充代码。

开发者的角色逐渐从编写者演变为需求定义者、审核者和优化引导者。

全栈能力被重新定义,重心转向对系统整体智能体的协调与把控。

未来,前后端的界限将变得模糊,融合在统一的智能开发流中。

小结一下

• 前端:用户能看到的网页部分,运行在浏览器

• 后端:服务器上的程序,用户看不见

• 前后端配合:前端发请求,后端返回数据

• 分工:前端管显示和交互,后端管业务和数据

• 分离:前后端独立开发,通过API通信

5.3 API接口:前后端的传话筒

1、啥是API?

API(Application Programming Interface),应用程序编程接口。

听着挺拗口,其实就是一种"约定"——前端发什么,后端返回什么。

打个比方:

你打电话叫外卖:

• 你说:"来一份宫保鸡丁,送到XX小区。"

• 店里说:"好的,30分钟送到,一共25元。"

这就是一个接口:

• 你发的信息 = 请求

• 店里回复的信息 = 响应

• "叫外卖"这个行为 = 调用接口

2、接口长啥样?

一个API接口,通常包含这些信息:

请求信息:

• URL:接口地址,比如`/api/user/login`

• 方法:GET、POST、PUT、DELETE等

• 参数:要传递的数据

响应信息:

• 状态码:成功还是失败

• 数据:返回的内容,通常是JSON格式

举个具体的例子:

接口:用户登录

请求:

POST /api/user/login Content-Type: application/json { "username": "zhangsan", "password": "123456" }

响应:

{ "code": 200, "message": "登录成功", "data": { "token": "eyJhbGciOiJIUzI1NiIs...", "userId": 123, "username": "zhangsan" } }

3、常见的请求方法

HTTP协议定义了几种请求方法,对应不同的操作:

方法用途例子
GET获取数据获取用户信息
POST创建数据新增一条记录
PUT更新数据修改用户信息
DELETE删除数据删除一条记录
PATCH部分更新只修改某个字段

RESTful风格:

现在流行的接口设计风格叫RESTful,规则是:

用URL表示资源(名词)

用HTTP方法表示操作(动词)

• 例如:

GET /api/users # 获取用户列表 GET /api/users/1 # 获取id为1的用户 POST /api/users # 新增一个用户 PUT /api/users/1 # 更新id为1的用户 DELETE /api/users/1 # 删除id为1的用户

4、接口文档

后端开发完接口,得告诉前端怎么用。这就需要接口文档。

接口文档一般包含:

接口名称:用户登录

接口地址:POST /api/user/login

请求参数:

• username: 用户名(必填)

• password: 密码(必填)

返回数据:

• code: 状态码

• message: 提示信息

• data: 返回数据

• token: 登录凭证

• userId: 用户ID

• username: 用户名

错误码:

• 200: 成功

• 400: 参数错误

• 401: 用户名或密码错误

常用接口文档工具:

• Swagger / OpenAPI

• Apifox

• Postman

• YApi

5、怎么调用接口?

调用接口,是指调用一种请求方法,而一个请求方法就是一个功能。

前端调用接口的方式:

方式一:用fetch(浏览器原生)

【调用登录接口】

fetch('/api/user/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: 'zhangsan', password: '123456' }) }) .then(response => response.json()) .then(data => { console.log(data); });

方式二:用axios(第三方库)

axios.post('/api/user/login', { username: 'zhangsan', password: '123456' }) .then(response => { console.log(response.data); });

虽然浏览器原生的 fetchAPI 已经成熟,但 axios 在易用性、功能完整性和兼容性上有显著优势,在实际商业项目中广泛应用。

小结一下

• API接口是前后端通信的桥梁,前端请求,后端响应

• 请求包含:URL、方法、参数

• 响应包含:状态码、数据(通常是JSON)

• RESTful风格:用URL表示资源,用HTTP方法表示操作

• 接口文档告诉前端怎么调用接口

• 前端用fetch或axios调用接口

5.4 前端框架:别再手写原生代码了

1、为啥要框架?

你可能会想:用原生的HTML、CSS、JavaScript就能写网页,干嘛还要学框架?

确实能写,但项目一大,问题就来了:

问题一:代码乱

HTML、CSS、JavaScript混在一起,改一处牵一发而动全身。

问题二:重复劳动

很多功能要反复写:按钮、表单、弹窗……每次都从头写?

问题三:难以维护

别人写的代码看不懂,自己写的代码过两天也看不懂。

问题四:效率低

写一个简单的功能要写很多代码,累死人。

框架就是来解决这些问题的。

2、三大前端框架

现在前端最火的三大框架:

框架出品特点
ReactFacebook组件化、虚拟DOM、生态最强
Vue尤雨溪渐进式、易上手、中文社区活跃
AngularGoogle大而全、企业级、学习曲线陡

React

// React组件示例 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } // 使用组件 ReactDOM.render( <Welcome name="张三" />, document.getElementById('root') );

Vue

<!-- Vue组件示例 --> <template> <h1>Hello, {{ name }}</h1> </template> <script> export default { data() { return { name: '张三' } } } </script>

3、框架的好处

组件化

把页面拆成一个个组件,每个组件可以独立开发、测试、复用。

数据驱动

框架帮你处理数据和视图的同步。你只需要改数据,视图自动更新。

// 原生JavaScript:改数据还要手动改DOM document.getElementById('name').textContent = '李四'; // Vue:改数据,视图自动更新 this.name = '李四';

生态丰富

框架有丰富的生态:UI组件库、路由、状态管理、构建工具……

不需要从零造轮子,拿来用就行。

其实,阿色作为一个老程序员,不习惯使用框架,还是不自觉地使用原生代码,但这是不对的。得改啊!

4、选哪个框架?

新手入门:Vue

Vue上手最简单,语法直观,中文文档齐全,社区活跃。

生态最强:React

React生态最丰富,大公司用得多,学了找工作机会多。

企业项目:Angular

Angular大而全,适合大型企业项目,但学习成本高。

阿色建议:

先学Vue入门,理解组件化、数据驱动这些概念,再学React拓宽视野。

小结一下

• 框架解决原生开发的痛点:代码乱、重复劳动、难维护、效率低

• 三大框架:React、Vue、Angular

• 框架好处:组件化、数据驱动、生态丰富

• 新手建议:从Vue开始,再学React

5.5 用AI写前端代码

1、AI能帮你写啥?

写HTML结构

你说:帮我写一个登录页面的HTML结构,包括用户名、密码输入框和登录按钮。

AI回答:

<div class="login-container"> <h2>用户登录</h2> <form class="login-form"> <div class="form-group"> <label for="username">用户名</label> <input type="text" id="username" name="username" required> </div> <div class="form-group"> <label for="password">密码</label> <input type="password" id="password" name="password" required> </div> <button type="submit" class="login-btn">登录</button> </form> </div>

写CSS样式

你说:帮我给上面的登录页面写CSS样式,要居中显示,现代简约风格。

AI回答:

.login-container { width: 400px; margin: 100px auto; padding: 30px; background: white; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } .login-container h2 { text-align: center; margin-bottom: 30px; color: #333; } .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 5px; color: #666; } .form-group input { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 5px; } .login-btn { width: 100%; padding: 12px; background: #007bff; color: white; border: none; border-radius: 5px; cursor: pointer; } .login-btn:hover { background: #0056b3; }

写JavaScript交互

你说:帮我给登录页面添加JavaScript,点击登录按钮时发送请求到/api/login。

AI回答:

document.querySelector('.login-form').addEventListener('submit', function(e) { e.preventDefault(); const username = document.getElementById('username').value; const password = document.getElementById('password').value; fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }) .then(response => response.json()) .then(data => { if (data.code === 200) { alert('登录成功'); // 跳转到首页 window.location.href = '/'; } else { alert('登录失败:' + data.message); } }) .catch(error => { console.error('Error:', error); alert('网络错误,请重试'); }); });

2、怎么让AI给你写好代码?

一次只说一件事

别一次性让AI写整个网站,一个模块一个模块来。

给清晰的描述

差:

帮我写个网页。

好:

帮我写一个产品列表页面,显示产品的图片、名称、价格,每行显示4个产品,响应式布局,使用Flexbox。

提供上下文

如果要让AI接着之前的代码写,要把之前的代码发给AI。

指定技术栈

告诉AI你用什么框架、什么UI库。例如:

帮我用Vue3和Element Plus写一个用户管理页面,包括用户列表、搜索、新增、编辑、删除功能。

3、小心AI的坑

坑一:样式不统一

AI每次生成的样式可能不一样,导致页面风格不一致。

解决: 让AI用一个统一的CSS框架(如Tailwind CSS、Bootstrap),或者让AI写一个公共样式文件。

坑二:代码有bug

AI写的代码可能有错误,比如变量名写错、逻辑有问题。

解决: 代码拿来要检查、要测试,别直接上线。

坑三:不兼容

AI可能用了某些新特性,在旧浏览器上跑不了。

解决: 问AI兼容性问题,或者指定要兼容的浏览器版本。

小结一下

• AI能帮你写HTML、CSS、JavaScript

• 要给AI清晰的描述和上下文

• 要指定技术栈和风格

• AI的代码要检查、要测试

本章小结

这一章,咱们唠了网页那点事儿:

网页三要素:HTML骨架、CSS衣服、JavaScript动作。

前后端关系:前端是门面,后端是厨房,通过API通信。

API接口:前后端的传话筒,请求+响应,RESTful风格。

前端框架:React、Vue、Angular,解决原生开发的痛点。

AI写前端:能帮你写,但要给清晰的描述,代码要检查。

下一章,咱们唠唠后端那些事儿。

第六章:服务器和后端的那点事儿

开场白

上一章唠了前端,这一章唠唠后端。

后端,就是服务器上的那些活儿。用户看不见,但事儿都在这儿干。

你点击"登录"按钮,前端把用户名密码发过来,后端得验证、得查数据库、得返回结果。这些都是后端的活儿。

这一章,咱们唠唠后端开发的基本概念。

6.1 后端是干啥的?

1、后端的职责

后端就像是饭店的"后厨",用户点菜(发请求),后厨做菜(处理请求),然后把菜端出来(返回数据)。

具体来说,后端要干这些活儿:

处理业务逻辑

这是后端的核心。比如:

• 用户登录:验证用户名密码

• 购物下单:检查库存、计算价格、生成订单

• 发表评论:检查内容、保存数据库

操作数据库

增删改查(CRUD),大部分后端工作都是在跟数据库打交道。

提供API接口

给前端调用的接口,返回JSON格式的数据。

用户认证和授权

验证用户是谁、能干啥。比如普通用户只能看,管理员能改。

处理并发

多个用户同时访问,服务器得扛得住。

保障安全

防止SQL注入、XSS攻击、CSRF攻击等各种安全问题。

2、后端处理的流程

处理流程:接收请求→解析参数→验证权限→业务处理→操作数据库→返回响应。

小结一下

• 后端处理业务逻辑、操作数据库、提供接口

• 后端还负责认证授权、处理并发、保障安全

• 处理流程:接收请求→解析参数→验证权限→业务处理→操作数据库→返回响应

6.2 后端语言哪家强?

1、常见的后端语言

后端可以用很多语言写,各有特点:

语言特点适用场景
Python简单易学,框架丰富快速开发、数据处理、AI
Java稳定可靠,生态强大企业级应用、大型项目
Go高性能,并发强微服务、云原生
Node.js(JavaScript)前端也能写后端全栈开发、实时应用
PHP简单,部署方便中小型网站
C#微软全家桶Windows环境

2、Python:简单就是美

优点:

• 语法简单,上手快

• 框架丰富:Django、Flask、FastAPI

• 生态强大:数据处理、AI都行

缺点:

• 性能不如编译型语言

• 并发处理相对弱一些

适合谁:

• 初学者

• 快速开发原型

• 数据驱动的应用

一个Flask例子:

from flask import Flask, jsonify, request app = Flask(__name__) @app.route('/api/hello', methods=['GET']) def hello(): name = request.args.get('name', 'World') return jsonify({ 'message': f'Hello, {name}!' }) if __name__ == '__main__': app.run(debug=True)

几十行代码就能跑起来一个API服务,简单吧?

3、Java:稳就是赢

优点:

• 稳定可靠,久经考验

• 生态强大,啥都有

• 企业首选,找工作容易

缺点:

• 语法啰嗦,代码多

• 启动慢,内存占用大

适合谁:

• 大型企业项目

• 银行、电商等关键系统

• 追求稳定的应用

一个Spring Boot例子:

@RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public Map<String, String> hello(@RequestParam(defaultValue = "World") tring name) { Map<String, String> result = new HashMap<>(); result.put("message", "Hello, " + name + "!"); return result; } }

比Python啰嗦点,但类型安全,IDE支持好。

4、Go:快就是强

优点:

• 性能强,接近C

• 并发原生支持

• 部署简单,一个二进制文件搞定

缺点:

• 生态相对年轻

• 错误处理有点麻烦

适合谁:

• 高性能服务

• 微服务架构

• 云原生应用

一个Go例子:

package main import ( "net/http" "encoding/json" ) func hello(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") if name == "" { name = "World" } result := map[string]string{"message": "Hello, " + name + "!"} json.NewEncoder(w).Encode(result) } func main() { http.HandleFunc("/api/hello", hello) http.ListenAndServe(":8080", nil) }

简洁高效,一看就懂。

5、Node.js:前端也能干后端

优点:

• JavaScript全栈,前后端用同一门语言

• 异步IO,高并发友好

• npm生态丰富

缺点:

• CPU密集型任务不太行

• 回调嵌套容易晕(虽然async/await解决了)

适合谁:

• 前端转全栈

实时应用(聊天、游戏)

• 快速原型开发

一个Express例子:

const express = require('express'); const app = express(); app.get('/api/hello', (req, res) => { const name = req.query.name || 'World'; res.json({ message: Hello, ${name}! }); }); app.listen(3000, () => { console.log('Server running on port 3000'); });

前端看了都亲切。

6、选哪个?

新手入门:Python

简单易学,快速上手,能快速看到成果。

找工作:Java

企业用得多,岗位多,学了不愁找工作。

追求性能:Go

高性能场景,微服务架构,Go是好选择。

前端转全栈:Node.js

前后端同一门语言,学习成本低。

我的建议:

先从Python开始,理解后端开发的基本概念,再根据需要学其他语言。

小结一下

• 后端语言各有特点:Python简单、Java稳定、Go快速、Node.js全栈

• 新手建议从Python开始

• 不同场景选不同语言

6.3 Web框架:造轮子不如用轮子

1、啥是Web框架?

Web框架,就是你接到一个HTTP请求之后帮你干后端活的工具箱。

如果没有框架,你得自己处理:

• 解析HTTP请求

• 路由分发

• 参数验证

• 数据库连接

• 会话管理

• 错误处理

• ...

一堆事儿,累死人。

有了框架,这些它都帮你干了,你只需要写业务逻辑。

2、常见的Web框架

语言框架特点
PythonDjango大而全,开箱即用
PythonFlask小而精,灵活自由
PythonFastAPI快速,自动生成文档
JavaSpring Boot企业级,功能强大
GoGin轻量高性能
Node.jsExpress简单灵活
Node.jsKoa现代优雅

3、Django:大而全

Django是Python的"重量级"框架,内置了很多功能:

ORM(数据库操作)

• 后台管理

• 用户认证

• 表单处理

• 缓存

• ...

适合: 快速开发功能齐全的网站。

一个Django例子:

【views.py】

from django.http import JsonResponse def hello(request): name = request.GET.get('name', 'World') return JsonResponse({'message': f'Hello, {name}!'})

【urls.py】

from django.urls import path from . import views urlpatterns = [ path('api/hello', views.hello), ]

4、Flask:小而精

Flask是Python的"轻量级"框架,只提供最核心的功能,其他自己选。

适合: 小项目、微服务、需要灵活定制。

一个Flask例子:

from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/hello') def hello(): name = request.args.get('name', 'World') return jsonify({'message': f'Hello, {name}!'}) if __name__ == '__main__': app.run()

5、FastAPI:又快又好

FastAPI是Python的新星框架,特点:

性能强(比Flask快)

• 自动生成API文档

• 类型提示支持好

• 异步支持好

适合: 现代API服务。

一个FastAPI例子:

from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class HelloResponse(BaseModel): message: str @app.get('/api/hello', response_model=HelloResponse) def hello(name: str = 'World'): return {'message': f'Hello, {name}!'}

访问/docs还能看到自动生成的API文档,舒服!

小结一下

• Web框架帮你处理底层细节,你只写业务逻辑

• Django大而全,Flask小而精,FastAPI又快又好

• 选框架要看项目需求和个人喜好

6.4 数据库操作:ORM还是SQL?

1、啥是ORM?

ORM(Object-Relational Mapping),对象关系映射。

简单说,就是用代码操作数据库,不用写SQL。

不使用ORM:

import sqlite3 conn = sqlite3.connect('test.db') cursor = conn.cursor()

写SQL查询

cursor.execute("SELECT * FROM users WHERE age > 18") users = cursor.fetchall() conn.close()

使用ORM(Django):

from myapp.models import User

用代码查询

users = User.objects.filter(age__gt=18)

不用写SQL,用Python代码就能操作数据库,直观多了。

2、ORM的好处

代码更清晰

SQL是字符串,不直观。ORM是代码,类型安全,IDE能提示。

跨数据库

换个数据库,代码不用改。MySQL换成PostgreSQL,ORM帮你搞定。

防止SQL注入

ORM会自动处理参数,不用担心SQL注入攻击。

提高效率

常用操作一行代码搞定,不用写重复的SQL。

3、ORM的缺点

性能问题

ORM生成的SQL可能不是最优的,复杂查询性能可能下降。

学习成本

得学ORM的语法和概念。

灵活性差

有些复杂SQL,ORM写不出来,还是得写原生SQL。

4、常见的ORM

语言ORM
PythonDjango ORM、SQLAlchemy
JavaHibernate、MyBatis
GoGORM
Node.jsSequelize、TypeORM、Prisma

5、建议

新手:用ORM

ORM简单直观,不用学SQL也能操作数据库。

进阶:ORM+SQL

简单操作用ORM,复杂查询写SQL。

高级:根据场景选

性能敏感的地方,手写SQL优化。

小结一下

• ORM让你用代码操作数据库,不用写SQL

• ORM好处:清晰、跨数据库、防注入、效率高

• ORM缺点:性能可能差、学习成本、灵活性差

• 新手用ORM,进阶ORM+SQL

6.5 用户认证:你是谁,能干啥?

1、啥是用户认证?

用户认证就是解决两个问题:

1. 你是谁?(认证 Authentication)

2. 你能干啥?(授权 Authorization)

认证: 验证用户身份。比如登录时验证用户名密码。

授权: 给用户分配权限。比如管理员能删除,普通用户只能看。

2、传统的认证方式:Session

流程:

• 登录成功后,服务器生成并保存 Session

• 服务器将 Session ID 通过 Cookie 返回给浏览器

• 浏览器后续请求自动携带此 Cookie

• 服务器通过 Cookie 中的 Session ID 找到对应 Session 以验证用户身份

• 验证成功后,处理请求并返回数据

Session存在哪:

服务器内存里,或者Redis里。

缺点:

• 服务器要存Session,多服务器时得共享Session

• 扩展性差

• Cookie容易被CSRF攻击

3、现代的认证方式:Token

流程:

• 登录成功,服务器生成 Token

• 服务器将 Token 返回给客户端

• 客户端将 Token 存储在本地(如 localStorage)

• 下次请求时,在 Header 中带上 Token

• 服务器验证 Token,通过则返回数据

Token的好处:

• 服务器不用存Session,无状态

• 天然支持多服务器

• 可以前后端分离

最常见的Token:JWT

JWT(JSON Web Token)是现在最流行的Token格式。

JWT长啥样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuW8oOS4iSIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

看着乱七八糟,其实是三段:

Header.Payload.Signature

• Header:算法信息

• Payload:用户信息(用户ID、过期时间等)

• Signature:签名,防止篡改

小结一下

• 用户认证解决"你是谁"和"你能干啥"

• 传统用Session,服务器要存状态

• 现代用Token(如JWT),无状态,适合分布式

本章小结

这一章,咱们唠了后端开发那点事儿:

后端的职责:处理业务逻辑、操作数据库、提供接口、认证授权等。

后端语言:Python简单、Java稳定、Go快速、Node.js全栈。

Web框架:Django大而全、Flask小而精、FastAPI又快又好。

数据库操作:ORM让代码更清晰,新手推荐用ORM。

用户认证:Session传统,Token现代,JWT最流行。

第七章:云、部署和运维的那点事儿

开场白

你用AI写了代码,在自己电脑上跑得挺好。然后呢?

你朋友想用,得咋整?发给他源代码?那他得装环境、配依赖……

要是几百万人想用呢?总不能一个一个发吧?

这就需要把程序放到服务器上,让大家通过网络访问。这就是"部署"。

现在流行"上云",那"云"又是啥?

这一章,咱们唠唠云和部署的事儿。

7.1 "上云"不是真上天

1、啥是云计算?

"云"这个词,听着挺玄乎,其实就是互联网上的服务器。

你自己买服务器放家里,得操心一堆事儿:

买硬件(花钱)

找机房放(地方)

接网络、配电源(折腾)

维护、维修(烦人)

• 还得担心断电、断网、被盗……

"上云",就是把这些破事儿交给专业的人干。你只管租他们的服务器用就行。

打个比方:

• 以前:自己买发电机发电(自己建机房)

现在:用电业局的电(上云)

不用自己发电,插上插座就有电,按度数交钱。多省心!

2、云服务商有哪些?

国外:

厂商说明
AWS(亚马逊)全球老大,啥都有
Azure(微软)企业用户多
Google CloudAI能力强
Oracle Cloud数据库强

国内:

厂商说明
阿里云国内老大,电商基因
腾讯云游戏、社交生态好
华为云政企客户多
百度云AI能力突出

选哪个?看你的需求。国内用户多,选国内的;有海外需求,选AWS或Azure。

3、云服务的三种类型

云服务分三层:基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。

IaaS提供虚拟化的计算资源,如服务器和存储;

PaaS为开发者提供应用开发和部署平台;

SaaS则直接向用户提供可用的应用程序。

这三层构成了云服务的核心架构,逐层抽象,使用户能按需获取相应服务。

你该选哪个?

• 想学运维、追求灵活:IaaS(云服务器)

• 只想写代码、不想管环境:PaaS(云平台)

• 只想用软件、不想开发:SaaS(在线软件)

4、云服务的计费方式

按量付费

用多少算多少,像交水电费。

• 优点:灵活,随时停

• 缺点:长期用下来比包年贵

• 适合:临时测试、不稳定的业务

包年包月

提前买一段时间的使用权,像租房子。

• 优点:长期用便宜

• 缺点:中途不用也花钱

• 适合:稳定业务

竞价实例

用云厂商空闲的资源,便宜但不稳定。

• 优点:便宜,可能只要一折

• 缺点:随时可能被收回

• 适合:不重要的后台任务

小结一下

• "云"就是租别人的电脑,省去维护硬件的麻烦

• 国内有阿里云、腾讯云、华为云,国外有AWS、Azure

• 云服务分三层:IaaS(虚拟机)、PaaS(平台)、SaaS(软件)

• 计费方式:按量付费、包年包月、竞价实例

7.2 服务器:程序的安身之处

1、啥是服务器?

服务器,说白了就是一种专门给别人服务的计算机。

你的电脑是给你自己用的,服务器是给别人用的——别人通过网络访问它,它提供服务。

服务器和普通电脑的区别:

对比项普通电脑服务器
用途个人使用给别人提供服务
稳定性偶尔重启没事要7×24小时运行
性能够用就行要强悍
网络普通网线专线、大带宽
显示有显示器很多没显示器(远程管理)
环境办公室、家里专业机房

2、服务器的类型

按外形分:

类型特点适用场景
塔式服务器像大号台式机小企业、办公室
机架式服务器扁平,能塞机柜数据中心、大企业
刀片服务器很薄,密度高大规模数据中心

按用途分:

类型特点
Web服务器放网站、跑Web应用
数据库服务器存数据、跑数据库
文件服务器存文件、做网盘
应用服务器跑各种应用程序
游戏服务器跑游戏服务端

3、虚拟服务器和云服务器

现在很少人自己买实体的物理服务器了,大多是租虚拟服务器或云服务器。

虚拟服务器(VPS):

把一台物理服务器切成多份,每份都是独立的"小服务器"。

你租其中一份,就像有了一台自己的服务器。

云服务器:

比VPS更高级。资源可以弹性伸缩,今天要2G内存,明天可以升到4G。

还能做快照备份、自动扩容、负载均衡等高级功能。

4、服务器的操作系统

服务器大多用Linux,细分为Ubuntu、CentOS、Debian等发行版。

为啥不用Windows?

• Linux免费,Windows要钱

• Linux稳定,不容易崩

• Linux资源占用少,省内存

• Linux命令行强大,远程管理方便

• Linux开源,安全漏洞修复快

当然,如果你的程序只能在Windows上跑,那就得用Windows Server。

小结一下

• 服务器是专门给别人服务的电脑,要稳定、高性能、7×24运行

• 现在大多租虚拟服务器或云服务器,不买物理机

• 服务器系统多用Linux,稳定免费

7.3 部署:把程序送上战场

1、啥是部署?

你在自己电脑上写好了程序,别人怎么用?

得把程序放到服务器上,让它跑起来,这就是部署。

部署就像把你的程序送上战场,让它真正为用户服务。

2、部署的基本步骤

• 准备服务器(购买或使用云服务器)

• 安装运行环境(Python、Node.js等)

• 上传代码到服务器

• 配置环境变量和数据库连接

• 启动程序,测试是否能访问

• 配置域名和SSL证书

3、连接服务器

买了服务器,怎么操作它?用SSH。

SSH是啥?

SSH(Secure Shell)是一种安全的远程登录协议。

你在家,用SSH就能远程操作服务器,就像操作自己电脑一样。

怎么连?

Windows:

用PuTTY或Xshell工具。步骤如下

• 下载安装PuTTY

• 打开PuTTY

• 输入服务器IP地址

• 点Open

输入用户名(通常是root)

• 输入密码

Mac/Linux:

用终端。执行命令:

ssh root@服务器IP

然后输入密码就行。

连上之后,你就可以在终端里敲命令操作服务器了。

4、上传代码

代码怎么传到服务器上?

方式一:Git

最推荐的方式。Git是啥?后面会讲,先别管它。

你的代码托管在GitHub或Gitee上,服务器上用git clone拉下来。

git clone https://github.com/yourname/yourproject.git

方式二:FTP/SFTP

用FileZilla等工具,像操作文件管理器一样上传。

方式三:SCP

用命令行传文件。

scp -r 本地文件夹 root@服务器IP:/目标路径

方式四:专门的运维系统

比如宝塔面板。它就是安装在服务器上的 Web 服务,专门用于运维服务器,上传代码是其中最轻松的一件事。后面会讲。

5、启动程序

代码传上去了,怎么运行?

答:在服务器终端执行命令。

简单方式:直接运行

python app.py

但这样有个问题:你关掉终端,程序就停了。

好一点的方式:后台运行

nohup python app.py &

这样关掉终端,程序还在跑。

更专业的方式:用进程管理器

【用supervisor或pm2】

pm2 start app.py

进程管理器能帮你监控程序,程序挂了自动重启。

最专业的方式:用systemd

写一个服务文件,让操作系统管理你的程序。

【/etc/systemd/system/myapp.service】

[Unit] Description=My Application After=network.target [Service] User=root ExecStart=/usr/bin/python /path/to/app.py Restart=always [Install] WantedBy=multi-user.target

然后:

systemctl start myapp # 启动 systemctl enable myapp # 开机自启 systemctl status myapp # 查看状态

6、域名和HTTPS

用IP访问太丑了,得配个域名。

买域名

去阿里云、腾讯云、GoDaddy等平台买。

便宜的几十块一年,贵的几百几千都有。

域名解析

买了域名,得把它指向你的服务器IP。

你要在域名服务商的域名管理后台添加解析记录:

记录类型主机记录记录值
A@服务器IP
Awww服务器IP

这样,example.com和www.example.com都会指向你的服务器。

配置HTTPS

现在HTTPS是标配了,没有小绿锁,浏览器会报警告。

怎么搞HTTPS证书?

• 免费:Let's Encrypt,自动签发,3个月自动更新一次,设置好就不用管了。

• 收费:阿里云、腾讯云等平台都有证书卖,有更高的信誉和更多的功能。

用Nginx配置证书:

server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://127.0.0.1:8000; } }

小结一下

• 部署就是把程序放到服务器上,让别人能访问

• 步骤:买服务器→连服务器→配环境→传代码→启动程序→配域名→监控维护

• 用SSH连接服务器,用Git上传代码,用systemd管理程序

• 域名解析指向IP,配置HTTPS证书

7.4 Docker:把环境打包带走

1、环境不一致的烦恼

你在自己电脑上写好的程序,放到服务器上跑不了,报各种错。

为啥?环境不一致。

• 你的电脑是Python 3.10,服务器是Python 3.8

• 你的电脑装了某某库2.0版本,服务器是1.0版本

• 你的电脑是Ubuntu,服务器是CentOS

这些差异,会导致程序跑不起来或者行为不一致。

这就是"在我机器上能跑"的经典问题。

2、Docker是啥?

Docker解决了这个问题。

Docker把你的程序和它需要的所有环境都打包成一个"容器"。

这个容器在任何电脑上都能跑,因为它自带了所有依赖。

打个比方:

• 普通部署:你搬家,到新家重新买家具

• Docker部署:你开房车,到哪都是那个环境

Docker的核心概念:

Docker是一个容器技术,把程序+运行环境打包成一个镜像。

镜像可以在任何机器上运行,运行的镜像叫容器 。

容器之间相互隔离。

3、Docker的基本使用

安装Docker

去官网下载安装:https://www.docker.com/

Windows和Mac有桌面版,Linux用命令安装。

拉取镜像

docker pull python:3.10

这会从Docker Hub下载Python 3.10的镜像。

运行容器

docker run -it python:3.10 bash

这会启动一个Python 3.10的容器,并进入bash。

查看容器

docker ps # 查看运行中的容器 docker ps -a # 查看所有容器

停止容器

docker stop 容器ID

4、Docker的好处

环境一致

开发、测试、生产环境完全一样,再也不会有"在我机器上能跑"的问题。

快速部署

一个命令就能启动,不用每次都装环境。

隔离运行

多个程序互不干扰,你用Python 3.8,我用Python 3.10,各跑各的容器。

方便迁移

容器可以轻松迁移到其他服务器,打包带走就行。

版本管理

镜像可以打标签,版本管理很方便。出问题可以快速回滚。

小结一下

• Docker解决环境不一致问题,把程序和环境打包成容器

• 核心概念:镜像(模板)、容器(运行的实例)、仓库(存镜像的地方)

• Dockerfile是构建镜像的"配方"

• Docker让部署更简单、更可靠

7.5 运维:让程序稳定跑下去

1、运维是干啥的?

程序部署好了,不是就完事了。你得保证它一直能跑,别动不动就崩了。

运维,就是维护程序的稳定运行。

包括:监控程序状态、处理故障、备份数据、更新版本、优化性能、安全防护……

2、运维的两种方式

方式一:命令行(硬核派)

用SSH连上服务器,敲各种Linux命令。

• 查看日志:tail -f /var/log/nginx/access.log

• 查看进程:ps aux | grep python

• 查看磁盘:df -h

• 查看内存:free -m

• 查看网络:netstat -tuln

这种方式很灵活,但门槛高,容易敲错命令把服务器搞崩。

方式二:图形化面板(懒人派)

用Web界面操作服务器,像操作Windows一样简单。

最流行的就是宝塔面板。

3、运维的核心任务

监控

要随时知道程序跑得怎么样。

• 监控CPU、内存、磁盘、网络:看资源够不够用

• 监控服务状态:看程序是不是在跑

• 监控日志:看有没有报错

• 监控访问量:看业务是否正常

宝塔面板有监控功能,也可以用专业的监控工具(如Prometheus+Grafana)。

备份

数据是无价的,一定要定期备份。

• 备份代码:Git本身就有版本管理,但最好再打个包存到别处

• 备份数据库:每天自动导出SQL文件,存到对象存储或另一台服务器

• 备份文件:用户上传的图片、文件等

宝塔可以设置计划任务,定时备份网站和数据库。

更新

程序要定期更新,修复漏洞、增加功能。

• 代码更新:Git pull拉取最新代码

• 依赖更新:pip install -r requirements.txt --upgrade

• 系统更新:yum update 或 apt update

更新前一定要备份,测试没问题再上线。

安全

服务器安全很重要,别被黑客搞了。

• 改SSH默认端口(22改成别的)

• 用密钥登录,不用密码

• 防火墙只开放必要端口(80、443、SSH端口)

• 定期更新系统补丁

• 安装安全防护软件(如fail2ban)

• 宝塔面板改默认端口(8888改成别的),强密码

4、运维工具推荐

• 宝塔面板:Web管理面板,新手友好

• Prometheus+Grafana:专业监控,画图好看

• Jenkins:自动化部署,代码提交自动构建发布

• Ansible:批量管理多台服务器

• ELK/EFK:日志收集和分析

5、宝塔面板:运维神器

宝塔面板是啥?

一个安装在服务器上的Web管理面板,让你不用敲命令就能管理服务器。

就像给你的服务器装了个“桌面”,点点鼠标就能搞定大部分运维工作。

为啥推荐宝塔?

• 免费版功能足够个人和小团队用

• 图形化操作,不用记命令

• 一键安装环境(Nginx、MySQL、PHP、Python等)

• 一键部署网站、FTP、数据库

• 可视化文件管理,像操作网盘一样

• 监控CPU、内存、磁盘、网络

• 安全防护、防火墙配置

• 计划任务、备份管理

怎么安装宝塔?

连上服务器(用SSH),执行一行命令就行(CentOS示例):

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装完会显示面板地址、用户名和密码。要立即修改密码,并记住。

怎么用宝塔?

1)浏览器打开面板地址(如http://服务器的IP:8888)

2)输入用户名密码登录

3)首次登录会推荐安装环境套件(LNMP或LAMP),勾选需要的软件,点一键安装

4)等待安装完成,就可以在面板里管理网站、数据库、文件了

宝塔的核心功能

• 网站管理:添加网站、配置域名、SSL证书(一键申请Let's Encrypt免费证书)、伪静态、反向代理

• 数据库管理:创建数据库、用户、导入导出SQL文件

• 文件管理:上传下载文件、在线编辑代码、修改权限

• 软件商店:一键安装WordPress、Discuz、Node.js、Redis等应用

• 安全:防火墙、SSH端口修改、IP黑名单、木马扫描

• 监控:实时查看CPU、内存、磁盘、网络流量

• 计划任务:定时备份网站、数据库、执行脚本

• 日志:查看网站访问日志、错误日志

宝塔的优缺点

优点:

• 极大降低运维门槛,新手也能轻松管理服务器

• 功能全面,覆盖了大部分日常运维需求

• 可视化操作,效率高,不容易出错

缺点:

占用服务器资源(内存、CPU)

• 有安全风险(Web面板容易被攻击,要改默认端口、强密码)

• 太依赖面板,不利于学习Linux命令

小结一下

• 运维就是让程序稳定跑下去,包括监控、备份、更新、安全

• 宝塔面板是运维神器,图形化操作,新手也能轻松管理服务器

• 核心任务:监控资源、定期备份、安全防护、版本更新

• 工具推荐:宝塔(日常管理)、Prometheus(监控)、Jenkins(自动化)

本章小结

这一章,咱们唠了云和部署的事儿:

云计算就是租别人的电脑,不用自己维护硬件。云服务商有阿里云、腾讯云、AWS等。

服务器是专门给别人服务的电脑,要多稳定、高性能。现在大多租云服务器。

部署是把程序放到服务器上,让别人能访问。步骤:买服务器→配环境→传代码→启动→配域名→监控。

Docker把程序和环境打包,解决了"在我机器上能跑"的问题,让部署更简单。

运维是确保程序稳定运行的活儿。宝塔面板就是个Web管理界面,让你能用鼠标点点就装软件、管网站、看监控,大大降低了服务器运维的门槛。

理解了云、部署和运维,你才能把AI写的代码真正用起来,让别人也能访问。

下一章,咱们唠唠AI和大语言模型的那点事儿。

第八章:AI和大语言模型的那点事儿

开场白

前面几章,咱们聊了计算机、编程、数据、网络、前端、后端、部署这些硬核话题。

现在,终于轮到AI了。

你可能已经在用AI写代码了——用ChatGPT、Claude、文心一言什么的。你发现AI能写代码、能解释代码、能找bug,挺好用的。

但你有没有想过这些问题:

AI到底是咋工作的?它真的“理解”代码吗?它为啥有时候特别聪明,有时候又特别傻?大语言模型和之前的AI有啥区别?

这一章,咱们就唠唠AI和大语言模型的那点事儿。不用公式,不扯玄学,就当听故事。

8.1 AI是个啥?跟传统程序有啥不同?

1、啥是人工智能?

人工智能,Artificial Intelligence,简称AI。听着高大上,说白了就是:让机器干点需要人脑才能干的事儿。

比如认字、识图、说话、翻译、下棋、开车、写代码……这些事儿,以前只有人能干。现在机器也能干了,这就是AI。

但“智能”这词儿容易让人想多了。很多人(包括阿色)认为AI是有意识的、能思考的、有感情的——但这可能是想多了。你让他编程序的时候,最好不要这样想。

阿色打个比方:

你养了一条狗,它会坐下、握手、打滚。你觉得这条狗“通人性”。但你真的觉得它有哲学思考能力吗?没有。它会变程序吗?不会。

现在的AI差不多也是这样——它表现得像是会思考,但本质上是个超级复杂的“找规律机器”。 不管AI到底有没有思想,有没有感情,你编程序的时候最好把它当成一个机器看待。

2、图灵测试:你怎么知道对面是人是机器?

1950年,英国数学家艾伦·图灵提出了一个测试:一个人通过键盘和对面聊天,如果这人分辨不出对面是人是机器,那这台机器就通过了图灵测试。

这其实是个很有哲学意味的问题:啥叫“能思考”?如果表现得像在思考,算不算会思考?

到了2025、2026年,你随便打开一个AI聊天,基本已经分不清对面是人是机器了。尤其是那些大语言模型,聊天水平已经远超当时的想象。

但图灵测试有个问题:它测试的是“能不能骗过你”,不是“有没有真正的理解”。

这话题有点深了,咱们点到为止。

3、AI和传统程序的区别

传统程序:程序员写好规则,计算机按规则执行。输入A,通过规则算出来B。一切都在程序员的预料之中。

AI程序:程序员不写具体规则,而是让程序从数据中“学”会规则。输入一堆例子,程序自己总结出规律。

打个比方:

传统程序:你给孩子写一本详细的菜谱,每一步都写清楚——“把鸡蛋打在碗里,搅拌30下……”孩子照着做。

AI程序:你给孩子看1000个做番茄炒蛋的视频,孩子自己琢磨出“哦,大概是这样做的”,然后自己发挥。

能看出来区别了吧?

传统程序确定性高——同样的输入,永远同样的输出。AI有“创意”——同样的提示词,每次给你的答案可能都不一样。

传统程序好调试——出错了你能追着逻辑链找bug。AI是黑盒子——它给你一个答案,但说不清是咋得出的。

4、机器学习和深度学习

机器学习(Machine Learning,ML)是AI的一个分支。核心思想:不写规则,让程序从数据中学。

深度学习(Deep Learning)是机器学习的一个分支。它用“神经网络”来学习,网络层数多、参数大,所以叫“深”。

神经网络是啥?说白了就是模仿人脑的神经元结构。人脑有几百亿个神经元,互相连接。人工神经网络就是模拟这个结构——用数字化的“神经元”一层层传递信息。

大语言模型(Large Language Model,LLM),就是基于深度学习的、专门处理语言的大模型。它是深度学习在自然语言处理领域的最新成果。

它们的关系是这样的:

AI(最大)→ 机器学习(子集)→ 深度学习(子集)→ 大语言模型(子集)

你现在用的ChatGPT、Claude、通义千问、文心一言,都属于大语言模型。

小结一下

• AI就是让机器干脑力活儿

• 图灵测试测的是“像不像人”,不测“有没有意识”

• 传统程序靠规则,AI程序靠数据学习

• 机器学习→深度学习→大语言模型,是一个比一个具体的概念

8.2 大语言模型是咋工作的?

1、大语言模型的“大”是啥意思?

大语言模型,关键是“大”和“语言”。

先说“大”:以前的AI模型参数少,几百几千万就算大了。现在的LLM,参数动辄几百亿甚至上万亿。GPT-4据说有1.8万亿参数。

啥是参数?你可以理解为模型的“记忆细胞”或者“旋钮”。每个参数就是一个可以调节的数字,模型就是靠几亿几百亿个这样的数字来“记住”它学到的东西。

参数越多,模型能记住的规律就越复杂、越精细。但参数多也不全是好处——训练成本高、运行速度慢、容易“死记硬背”。

再说“语言”:这些模型是专门处理语言的。它们读海量的文本,学习语言的规律、知识、逻辑、甚至某种程度的“常识”。

2、预测下一个词的核心玩法

大语言模型的核心玩法,简单得让你不敢相信:

给它一段文字,让它预测下一个最可能出现的词。

就这么简单。

比如你输入:“今天天气真”,模型会预测下一个词大概率是“好”或者“不错”或者“热”。

然后模型把预测出的词接上去,继续预测下一个:“今天天气真好” → 预测“啊” → “今天天气真好啊” → 预测“,” → “今天天气真好啊,” → 预测“我” → ……

整个对话过程,就是这样一个词一个词“挤”出来的。看起来像在思考,其实是在做高速的“猜词游戏”。

你可能会说:这不就是个高级输入法吗?

对,也没错。但这个“输入法”看了整个互联网的数据(几万亿个词),所以它“猜”得极其准,看起来就像真的懂了一样。

当这个“猜词游戏”做到极致,猜出来的内容就不再是简单的词语接龙,而是一段段有逻辑、有知识、甚至看起来有思想的文字。

3、训练和推理

大语言模型有两个阶段:训练和推理。

训练阶段:

拿海量数据(互联网上的各种文字——网页、书籍、论文、代码、对话……)给模型看,让模型不断练习“猜词”。

猜错了,模型就调整自己的参数(那几百亿个“旋钮”)让下次猜得更准。

这个过程需要巨大的算力——成千上万块GPU同时跑几个月,电费都要几千万。

推理阶段:

训练好的模型,就可以用来回答问题了。你把提示词发给模型,模型运行一次,输出答案。

推理不需要那么大的算力,一块GPU甚至CPU就能跑(当然速度慢些)。

你每次用ChatGPT或者Claude聊天,都是在进行推理——模型根据你的输入,一个词一个词地生成回答。

4、Token是啥玩意儿?

你可能会注意到,AI聊天界面下面有时会显示“已使用X个tokens”或者提示“最大token数限制”。

Token(词元)是大语言模型处理文本的基本单位。它不是“字”也不是“词”,而是一个更灵活的分片。

比如:“今天天气真好”可能被分成[“今天”, “天气”, “真好”]三个token,也可能分成[“今天”, “天气”, “真”, “好”]四个token。

英文类似:“I love programming”可能是[“I”, “love”, “pro”, “gramming”]这样分的。

不同模型的分词方式不一样,但大致遵循“常用词完整保留,生僻词拆成小块”的原则。

一般来说:

• 1个汉字 ≈ 1-2个token

• 1个英文单词 ≈ 1-2个token

• 1000个token ≈ 750个英文词,或约500个汉字

了解token的概念很重要,因为:

AI有上下文窗口限制(比如8K、32K、128K token),超出就“记不住”前面的内容了。

计费也是按token算的,输入输出都花钱。所以长短问题直接影响钱包。

5、幻觉:AI为啥会胡说八道?

用AI多了你就会发现:AI有时候会特别自信地给出完全错误的信息。

你问它“2025年NBA总冠军是谁?”它可能给你一个煞有其事的回答——球员名字、比分、MVP都有——但全是编的。

这就是“幻觉”(Hallucination)。

为啥会这样?因为模型本质上就是在做“猜词游戏”。它学到的规律是:“当被问到XX问题时,通常的回答格式是XXX。”所以它会按照这个格式生成内容。

但它并不“知道”事实是什么。它没有知识库,没有数据库,只有从训练数据中学到的统计规律。

所以:

• AI说的不一定对——永远要核实

• AI越自信越要小心——它没有“不确定”的概念

• 代码也要测试——AI写的代码可能看起来对,但运行起来报错

小结一下

• 大语言模型的“大”指参数多,“语言”指处理文本

• 核心玩法:预测下一个词,一个词一个词地生成回答

• 训练需要海量数据和算力,推理就是日常使用

• Token是AI处理文本的基本单位,影响上下文长度和费用

• 幻觉是AI会自信地胡说八道,要学会核实

8.3 常见的大语言模型

1、国外的选手

ChatGPT / GPT-4 / GPT-4o(OpenAI)

AI界的当红炸子鸡。2022年底ChatGPT发布,直接引爆了这一波AI热潮。GPT-4和GPT-4o能力很强,支持文本、图片、音频多模态。

优点:能力强、生态好、插件多。缺点:贵、国内访问不方便。

Claude(Anthropic)

由前OpenAI员工创立,主打“安全”和“可靠”。Claude在编程方面口碑很好,上下文窗口巨大(200K tokens),写长文、分析大项目很爽。

优点:编程能力强、上下文长、安全可靠。缺点:知名度不如ChatGPT。

Gemini(Google)

Google的AI模型,跟Google生态深度整合。多模态能力强,能处理视频、图片、文字。

优点:跟Google产品集成好。缺点:更新有点乱,版本多。

还有Llama(Meta开源)、Mistral(法国开源)等,这里就不一一展开了。

2、国内的选手

通义千问(阿里)

阿里出品,综合能力不错,有开源版本。跟阿里云、钉钉等产品集成。

文心一言(百度)

百度出品,基于文心大模型。中文理解能力强,跟百度搜索、文库等产品打通。

智谱清言(智谱AI / GLM)

清华系创业公司,GLM模型。在学术界和工业界口碑都不错,也有开源版本。

豆包(字节跳动)

字节跳动出品,集成在抖音、飞书等产品中。用户体验做得不错。

DeepSeek(深度求索)

国货之光!主打极致推理、代码编写与深度逻辑思考能力,专业领域实力突出,开源生态完善,长文本处理、数理解题、工程实操表现亮眼,深受技术开发者与专业人群青睐。

还有讯飞星火、360智脑、腾讯混元、百川智能等。国内的大模型百花齐放,各有特色。

3、选哪个好?

没有“最好”的模型,只有“最适合”你的。

写代码:Claude和ChatGPT都不错,很多程序员觉得Claude更靠谱。

日常问答:各家差异不大,挑个顺手的。

中文支持:国内模型在中文上通常更好一些。

需要联网功能:ChatGPT和国内模型都有联网选项。

要性价比:试试国产模型,很多有免费额度或者很便宜。

阿色的建议:别纠结,先拿一个用起来。用熟了再换,反正切换成本不高。

【注意】关于Claude:

说起Claude,大家容易混淆两个意思。

Anthropic这个公司有两个产品,一是Claude大语言模型;二是Claude Code编程环境,它是个智能体。

Claude大语言模型因为受控制我们用不了。

Claude Code作为一个智能体和编程环境,我们是可以使用的,可以用国内的大语言模型支撑它。

阿色自己常用的就是Claude Code + (Kimi Code或DeepSeek),编程及修改这本书都使用了它。效果感觉非常好。

现在你看到的这个第八章,实际上是阿色最后临时加进来的。

我要求Claude Code插入第八章,并遵守原书的格式。

它照原样做到了,完成的非常好。能达到这样的效果主要有两个原因:一是Claude Code这个智能体确实非常棒;二是DeepSeek作为支撑它的大模型表现也非常出色。

小结一下

• 国外主流:ChatGPT、Claude、Gemini

• 国内主流:DeepSeek、通义千问、文心一言、智谱清言、豆包

• 写代码推荐DeepSeek、Kimi Code、Claude、 ChatGPT

• 没有最好,只有最适合,先用起来再调整

8.4 跟AI聊天:提示词那点学问

1、啥是提示词?

提示词(Prompt),就是你对AI说的话。你告诉AI你要啥,AI根据这个生成回答。

别小看提示词。同一个AI,提示词写得好,答案质量天差地别。

这就好比你跟一个超级聪明但完全没主见的助手说话——你说得越清楚,他干得越好;你含含糊糊,他就瞎猜。

2、写提示词的基本技巧

第一:说清楚你要啥。

不好的问法:“帮我写个程序。”

好的问法:“帮我用Python写一个计算器程序,支持加减乘除,命令行交互式的,用户输入两个数和运算符,输出结果。”

第二:给角色设定。

让AI扮演特定角色,回答会更专业。“你是一个资深Python开发者,请帮我review以下代码……”

第三:给示例。

你想让AI输出什么格式,给它一个例子。它就会照着你的格式来。

第四:分步骤说。

复杂任务别一口气全扔给AI。先让它做第一步,审核没问题了再做第二步。

第五:要求AI一步步思考。

遇到逻辑问题,在提示词里加上“请一步步思考”或者Let’s think step by step,AI的回答质量通常会提升不少。

3、进阶技巧

使用系统提示词(System Prompt):有些AI(如Claude、ChatGPT)支持设置系统提示词,相当于给AI一个“背景设定”,让它从头到尾都按这个风格回答。

对话上下文管理:AI能记住当前对话的内容,但记不住别的对话。所以遇到复杂问题,保持在一个对话里,别开新对话。

文件上传:很多AI现在支持上传图片、PDF、代码文件等。直接上传文件让它分析,比复制粘贴方便。

工具使用:AI可以调用插件、搜索网页、运行代码等。善用这些工具能大幅提升AI的能力。

4、别把AI当神仙

虽然AI很强大,但它不是万能的。你得清楚它的底线:

AI不理解代码,它只是见过很多代码。“像”正确不等于“是”正确的。

AI会出错,而且有时候错得离谱。永远保持警惕。

AI没有隐私概念。不要给AI发送密码、密钥、身份证号等敏感信息。

AI有知识截止日期。它不知道它训练完之后发生的事情。

把AI当成一个“聪明但不太靠谱的助手”,而不是“万能的神”。这个心态很重要。

小结一下

• 提示词就是你对AI说的话,说得越清楚,AI干得越好

• 基本技巧:说清楚需求、给角色设定、给示例、分步骤、要求一步步思考

• 进阶:系统提示词、上下文管理、文件上传、工具使用

• AI不是神仙,会出错、没隐私、有知识截止期

8.5 AI编程的正确姿势

1、AI能帮咱干啥?

AI编程现在已经是很多程序员的日常了。它能做的事情真不少:

写代码:从零写一个功能、写测试、写脚本,AI都能干。

解释代码:看不懂的代码扔给AI,让它解释。比自己查文档快。

找bug:把报错信息贴给AI,它能帮你定位问题。

重构代码:让AI帮你优化代码结构、提高可读性。

写文档:自动生成注释、README、API文档。

学习新东西:想学新技术、新语言,让AI当你的私人老师。

更重要的是:AI编程极大地降低了编程的门槛。不需要背语法、不需要记API、不需要深究细节,你只需要知道你要啥,AI帮你实现。

2、AI不能干啥?

了解AI的边界,才能用好AI:

AI不能保证正确性。它写的代码看起来对,但不一定真的对。测试和审查还是得你来。

AI不能理解业务需求。你告诉它做个电商网站,它真给你写一个。但业务逻辑对吗?符合你的商业模式吗?这些得你来判断。

AI不能做架构决策。用啥数据库、怎么拆分服务、要不要微服务……这些得你来定。AI的建议可以听,但不能照搬。

AI不能处理你没有描述清楚的需求。你给了模糊的提示词,它就给你模糊的答案——看起来对,但总差那么点意思。

AI不擅长版本升级、依赖冲突、环境配置这些“脏活累活”。这些还是得靠人。

3、怎么用好AI编程?

阿色总结了几条经验:

第一条:先想清楚再让AI写。

别一上来就让AI写代码。你得先想清楚你要啥——功能需求、输入输出、边界条件。想清楚了,AI写的代码才对路。

第二条:分解任务,逐个击破。

别让AI一次性写一个几千行的程序。拆成小任务:先写用户登录,再写商品展示,再写购物车……每一步都验证。

第三条:复审AI的代码。

AI写的代码,你一定要看一遍。看不懂的让AI解释给你听。不理解的就别用。

第四条:学会问对的问题。

“帮我用Python写一个下载文件的脚本” —— 不如 —— “帮我用Python写一个下载文件的脚本,从URL下载到本地指定目录,支持进度显示,支持断点续传。”

第五条:保持迭代。

AI写第一版,你审核、测试,反馈给AI修改。来回几轮,代码质量就上去了。

4、AI编程的未来

很多人担心:AI这么强了,程序员是不是要失业了?

阿色的看法:程序员不会失业,但“只会写代码的程序员”可能会被淘汰。

AI时代,编程的门槛在降低,但“解决问题”的能力更重要。

以前:你得懂语法、懂算法、懂API才能写代码。

现在:你只要知道你要啥,AI帮你写。

未来:你需要的能力不再是“怎么写代码”,而是:

• “要做什么”——分析和拆解需求的能力

• “这么做对不对”——判断和审查AI输出的能力

• “出了问题咋办”——排错和Debug的能力

• “能不能更好”——优化和迭代的能力

换句话说,程序员的工作从“技术劳动”变成了“脑力劳动+技术劳动”,对综合能力要求更高了。

好消息是:不懂编程的人也能用AI做些基础的开发了。这对于非技术人员来说,是巨大的解放。

小结一下

• AI能写代码、解释代码、找bug、重构、写文档、当老师

• AI不能保证正确、不能理解业务、不能代替架构决策

• 用好AI:先想清楚、分解任务、复审代码、问对问题、保持迭代

• 程序员不会失业,但需要的能力在不断升级

8.6 OpenClaw及各种龙虾

1、什么是龙虾?

最近爆火的各类“龙虾”,本质都是AI智能体框架。

OpenClaw是开源通用智能体框架,也是所有龙虾产品的底层鼻祖。

它能操控电脑、识别界面、自动执行各类电脑操作,给AI装上眼睛和手,不局限于聊天,能实打实本地操作电脑完成任务。

所以它也非常危险。使用它的时候要注意个人信息、隐私、涉密事项、财产等安全问题。

市面上带Claw后缀的工具,大家通俗统称为龙虾工具,目前各大互联网公司都在扎堆研发,掀起了“养虾”热潮。

2、其他龙虾产品

阿里QwenPaw:

这本书最开始的初稿就是由QwenPaw编写完成。

它前身是阿里开源的CoPaw,是最早一批基于OpenClaw开发的本土化智能体,深度适配通义千问模型,主打本地部署、数据安全,操作简洁、上手门槛低,偏向日常办公、简单自动化操作,也是大众接触最多的入门级龙虾。

腾讯WorkBuddy:

腾讯推出的桌面智能龙虾工具,深度贴合微信、腾讯办公生态,主打办公自动化、文件整理、日常辅助操作,适配国内办公场景,联动腾讯全系软件,办公兼容性拉满。

智谱AutoClaw:

主打一键本地安装,开箱即用,内置大量现成技能,适配零基础用户,偏向内容创作、简单批量操作,通用性强,无需复杂配置就能上手。

其他常见龙虾:

除此之外,还有字节、百度等大厂推出的同类智能体工具,比如百度红手指、HiClaw等。所有龙虾共性都是通用型智能体,功能杂、覆盖面广,主打全能通用,适配多种日常电脑操作场景。

3、龙虾适不适合做AI编程?

直白说:绝大多数龙虾不适合专业AI编程。

龙虾的优势是通用全能,能操作桌面、处理文件、完成简单自动化任务,但短板也很明显:编程专业性不足、代码逻辑优化差、复杂项目适配度低,还容易出现冗余代码、逻辑漏洞,甚至误删文件、错误执行指令。

它们主打综合通用,不是为编程量身打造。

4、编程该怎么选工具?

写代码、做开发,不要盲目跟风用各类龙虾。

编程最好选择专门化的编程智能体。

这类专业工具聚焦代码场景,适配开发逻辑,语法精准、bug排查能力强,支持项目重构、工程优化、代码调试,专门针对编程场景深度优化,比通用龙虾靠谱得多。

总结:龙虾适合玩一玩、做办公自动化、简单杂活;专业编程开发,优先选专精编程AI,不要混用通用龙虾工具。

本章小结

这一章,咱们唠了AI和大语言模型的事儿:

AI是让机器干脑力活儿的工具,本质是“找规律机器”而不是“思考者”。

大语言模型的核心是预测下一个词,靠海量数据和巨大算力训练出来的。

LLM有很多:ChatGPT、Claude、Gemini、DeepSeek、通义千问、文心一言、豆包……各有特色。

提示词是跟AI交流的关键,说得越清楚,AI干得越好。

AI编程很强大,但不是万能的。你得会审核、会判断、会迭代。

龙虾是功能强大的智能体,但它不一定适合做AI编程。

学会了这些,你就能更从容地用好AI,而不是被AI带着跑。

下一章,咱们唠唠编程工具的那点事儿。

第九章:编程工具的那点事儿

开场白

前面几章讲了计算机、程序、网络、部署、运维这些概念,这一章咱们唠唠编程工具。

工欲善其事,必先利其器。工具选好了、环境配好了,写代码才能顺手。

这一章,咱们唠唠你需要哪些工具、怎么选、怎么用。

9.1 编程环境是啥玩意儿?

1、啥是编程环境?

编程环境就是你写代码、跑代码的地方。

编程环境的组成:

• 操作系统:Windows/Mac/Linux

• 运行环境:Python/Node.js/Java等

• 编辑器:VS Code/PyCharm等

• 命令行终端:Terminal

• 版本控制:Git

• 调试和分析工具:IDE内置调试器/Chrome DevTools/pprof等

2、环境咋配?

不同语言、不同项目,环境配置不一样。但大体的步骤是:

第一步:安装操作系统

如果你是新手,用Windows就行,熟悉的界面,操作方便。

如果你想深入学编程,可以试试Linux或macOS。

第二步:安装运行环境

根据你要学的语言,安装对应的运行环境:

去官网下载安装包,一路下一步就行,很简单。

第三步:安装编辑器

推荐VS Code,免费、插件丰富、跨平台,新手老手都用它。阿色一直都用它。

第四步:安装Git

版本控制必备,后面会细说。

第五步:安装包管理器

Python自带pip,Node.js自带npm,一般不用单独装。

3、环境变量是啥?

安装完运行环境,有时候还要配置环境变量。

啥是环境变量?

环境变量就是操作系统记录的一些全局变量,程序运行时会读取这些变量。

最常见的场景:

你装了Python,但命令行输入python提示找不到命令。

为啥?因为操作系统不知道Python装在哪。

你需要把Python的安装路径添加到PATH环境变量里,操作系统才能找到它。

Windows怎么配环境变量:

• 右键此电脑 → 属性

• 点击高级系统设置

• 点击环境变量

• 在系统变量里找到Path,点击编辑

• 点击新建,添加路径

• 一路确定,重启命令行生效

Mac/Linux怎么配:

编辑~/.bashrc或~/.zshrc文件:

export PATH="/path/to/python:$PATH"

然后执行:

source ~/.bashrc

小结一下

• 编程环境包括操作系统、运行环境、编辑器、命令行等

• 安装步骤:系统→运行环境→编辑器→Git→包管理器

• 环境变量告诉操作系统程序在哪,有时需要手动配置

9.2 代码编辑器:VS Code为啥这么火?

1、啥是代码编辑器?

代码编辑器就是写代码的软件,就像写文档用Word,写代码用编辑器。

你可能会问:记事本不能写代码吗?

能,但太原始了。没有语法高亮、没有智能提示、没有自动补全……写起来累死人。

代码编辑器就是为写代码优化的,有各种贴心功能。

2、常见编辑器

记事本(Notepad):系统自带,啥也没有

Notepad++:轻量,只有Windows版

VS Code:目前最火,免费开源

Sublime Text:轻量快速,收费

Vim/Emacs:老牌编辑器,学习曲线陡峭

3、IDE和编辑器的区别

你可能还听说过IDE(Integrated Development Environment,集成开发环境)。

编辑器:主要功能是写代码,轻量、灵活。插件丰富,想要啥功能装啥。

IDE:功能更全面,集成了编辑、调试、编译、运行等功能。重量级,开箱即用。

选哪个?

• 新手:VS Code,轻量好上手

• Python开发:VS Code或PyCharm

• Java开发:IntelliJ IDEA

• 前端开发:VS Code

不想折腾:IDE(开箱即用)

4、VS Code为啥这么火?

免费开源

微软出品,不花钱就能用,而且开源。

插件丰富

各种语言的插件、主题插件、功能插件,想装啥装啥。插件也叫扩展。

常用的插件:

• Python:Python插件(微软官方)

• JavaScript/TypeScript:ES7+ React/Redux等

• Git:内置Git支持

• AI编程:通义灵码、GitHub Copilot、Claude Code等

• 中文:中文语言包

跨平台

Windows、macOS、Linux都能用,体验一致。

5、怎么用VS Code?

安装:去官网code.visualstudio.com下载安装包,一路下一步。

基本使用:

• 打开文件夹:File → Open Folder

• 新建文件:Ctrl+N

• 保存文件:Ctrl+S

• 打开终端:Ctrl+`(反引号)

• 安装插件:点击左侧扩展图标,搜索插件,点击安装

常用快捷键:

• Ctrl+Shift+P:打开命令面板

• Ctrl+P:快速打开文件

• Ctrl+`:打开终端

• Ctrl+Shift+`:新建终端

• Alt+↑/↓:移动当前行

• Ctrl+/:注释/取消注释

小结一下

• 代码编辑器就是写代码的软件,比记事本强大得多

• IDE功能全面但重,编辑器轻量灵活

• VS Code免费、开源、插件丰富、跨平台,是目前最火的编辑器

• 常用快捷键能大幅提升效率

9.3 终端和命令行:别怕黑窗口

1、啥是终端?

终端(Terminal)就是一个黑乎乎的窗口,你在里面输入命令,计算机执行。

很多新手看到终端就害怕——黑乎乎一片,全是英文,敲不对还报错。

其实终端没那么可怕。你不需要记住所有命令,常用的就那么几个。

为啥要用终端?因为有些事情用鼠标点不了——比如装包、运行脚本、查看日志。终端效率更高。

终端和命令行的关系:

• 终端:软件本身,那个窗口

• 命令行:你输入命令的环境,在终端里运行

• Shell(壳):命令行的解释器,比如Bash、Zsh、PowerShell

2、打开终端

Windows:

• 按Win+R,输入cmd,回车

• 或者搜索命令提示符或PowerShell

• 或者在VS Code里按Ctrl+`

macOS:

• 打开启动台→其他→终端

• 或按Cmd+空格,搜索终端

Linux:

• 按Ctrl+Alt+T

3、常用命令

文件操作:

• ls:列出当前目录的文件(Linux/Mac)

• dir:列出当前目录的文件(Windows)

• cd 目录名:进入某个目录

• cd ..:回到上级目录

• mkdir 目录名:创建新目录

• rm 文件名:删除文件(Linux/Mac)

• del 文件名:删除文件(Windows)

• cp 源 目标:复制文件

• mv 源 目标:移动/重命名文件

查看文件:

• cat 文件名:查看文件内容(Linux/Mac)

• type 文件名:查看文件内容(Windows)

其他:

• pwd:显示当前目录路径

• clear:清屏(Linux/Mac)

cls:清屏(Windows)

• echo 文字:输出文字

4、路径是啥?

路径就是文件或文件夹在电脑上的地址。

绝对路径:从根目录开始写。比如:

Windows:C:\Users\你的名字\Documents

Mac/Linux:/Users/你的名字/Documents

相对路径:从当前位置开始写。比如:

如果你在Documents目录下,要访问test.txt,直接写test.txt就行。

./ 表示当前目录,../ 表示上级目录。

几个特殊符号:

• .:当前目录

• ..:上级目录

• ~:用户主目录(Linux/Mac)

5、小技巧

按Tab键自动补全命令和路径

按↑↓键切换历史命令

按Ctrl+C终止正在运行的命令

多个命令可以用&&连接:cmd1 && cmd2

命令太长可以用\换行继续写

小结一下

• 终端是黑窗口,在里面输入命令让计算机干活

• 常用命令不多:cd、ls/dir、mkdir、rm/del、cp、mv

• 路径分绝对和相对,.是当前目录,..是上级目录

• Tab补全、↑↓翻历史、Ctrl+C终止,这几个小技巧很实用

9.4 Git:版本控制的王者

1、啥是版本控制?

版本控制就是记录文件修改历史的系统。

你写论文的时候是不是这样:

论文_v1.docx、论文_v2.docx、论文_最终版.docx、论文_最终版2.docx……

写代码也是一样——改来改去,想回退找不到之前的版本。

版本控制就是解决这个问题的。它能:

• 记录每次修改:谁、啥时候、改了啥

• 回退到任意历史版本:改坏了也不怕

• 多人协作:各改各的,最后合并

• 分支管理:同时开发多个功能

2、Git是啥?

Git是目前最流行的版本控制工具,没有之一。

Linux之父Linus Torvalds开发的,原本是为了管理Linux内核代码。

Git的特点:

• 分布式:每个人电脑上都有完整的代码仓库

• 快速:大部分操作都在本地,不依赖网络

• 强大:分支管理非常灵活

• 开源免费:不用钱

3、Git的基本操作

安装Git:

去git-scm.com下载安装包,一路下一步。

配置身份:

git config --global user.name "你的名字" git config --global user.email "你的邮箱"

基本流程:

初始化仓库:git init 添加文件到暂存区:git add 文件名 或 git add .(添加所有) 提交到仓库:git commit -m "提交说明" 查看状态:git status 查看历史:git log

Git的核心概念:

• 仓库(Repository):存放代码的地方

• 暂存区(Staging):提交前的临时存放区

• 提交(Commit):一次保存,生成一个版本

• 分支(Branch):独立的开发线

4、Git的工作流程

单人开发:

git init → 写代码 → git add → git commit → 重复

多人协作:

克隆远程仓库:git clone 仓库地址 创建分支:git branch 分支名 切换到分支:git checkout 分支名

在分支上修改、提交

合并到主分支:git merge 分支名 推送到远程:git push 拉取最新代码:git pull

5、GitHub是啥?

GitHub是一个代码托管平台,帮你把代码存到云端。

它提供:

• 代码托管:把你的代码存在上面

• 协作开发:多人一起开发项目

• 开源社区:很多开源项目在上面

• 其他功能:Issue(问题跟踪)、Wiki、Actions(自动化)等

类似平台:

平台特点
GitHub全球最大,被微软收购
GitLab可以自己搭建
Gitee国内平台,访问快
BitbucketAtlassian出品,与Jira集成好

小结一下

• 版本控制帮你记录每次修改,随时可以回退

• Git是最流行的版本控制工具,分布式、快速、强大

• 基本概念:仓库、提交、分支、暂存区、远程仓库

• 基本操作:init、add、commit、push、pull

• GitHub是托管Git仓库的平台,也是程序员社区

9.5 AI编程助手:你的随身参谋

1、啥是AI编程助手?

AI编程助手是用AI帮你写代码的工具。

你描述需求,AI给你代码;你写了一半,AI帮你补全;你报错了,AI帮你分析。

就像有个参谋在旁边,你不懂的可以问它。

2、国外AI编程助手

GitHub Copilot

微软出品,集成在VS Code里。

• 自动补全:写代码时自动提示

• 根据注释生成代码:写个注释,AI给你代码

• 收费,但有免费试用

Cursor

AI原生编辑器,基于VS Code改的。

• 深度集成AI,能在编辑器里直接跟AI对话

• 免费版有限制,付费版功能更强

Claude Code

强大的AI智能体。阿色主要使用它。

Anthropic出品,命令行工具,可以以插件形式嵌入到VS Code。

• 能帮你写代码、改bug、解释代码

• 还能做环境部署、系统安装、日常办公等其他工作

• 需要大语言模型API密钥支持

3、国内AI编程助手

通义灵码

阿里出品,免费。

• 支持多种语言

• 集成在VS Code和JetBrains IDE里

豆包MarsCode

字节跳动出品,免费。

• 支持多种语言

• 有VS Code插件,也有在线IDE

CodeGeeX

清华出品,免费开源。

• 支持多种语言

• 有VS Code插件

TRAE

• 字节跳动出品,个人版永久免费。

• AI原生IDE,支持IDE模式(AI辅助)与SOLO模式(AI自主完成)

• 支持多语言、设计稿转代码、自动调试与修复

• 有独立客户端(Windows/macOS/Linux)、在线IDE,也可作为VS Code插件

4、怎么用AI编程助手?

安装插件

以VS Code为例:

• 打开VS Code

• 点左侧"扩展(俗称插件)"图标

• 搜索想要使用的插件,如:’Claude Code”、"通义灵码"、"Copilot"等

• 点"安装"

• 按提示登录或配置

使用方式

• 自动补全:写代码时AI自动提示,按`Tab`接受

• 聊天:在侧边栏跟AI对话,问问题

• 代码解释:选中代码,让AI解释

• 生成代码:描述需求,让AI生成代码

5、使用建议

AI给的代码,别直接复制粘贴

先看懂,理解每行在干啥,再用。

AI也会犯错

尤其是一些细节、边界情况,AI可能处理不好,要检查。

学会提问

把背景、需求、约束说清楚,AI才能给好答案。

把AI当参谋,不是老板

AI给你建议,你来判断要不要采纳。

小结一下

• AI编程助手能帮你写代码、改bug、解释代码

• 国外:GitHub Copilot、Cursor、Claude Code

• 国内:通义灵码、豆包MarsCode、CodeGeeX

• AI给的代码要检查,别盲目相信

本章小结

这一章,咱们唠了编程工具:

编程环境包括操作系统、运行环境、编辑器、命令行等,配好了才能顺畅写代码。

VS Code是最火的编辑器,免费、插件丰富、轻量快速。

命令行没那么吓人,学会几个常用命令就行。

Git是版本控制的王者,帮你记录修改、协作开发。

AI编程助手能帮你写代码,国内外都有好用的工具,选一个顺手的就行。

下一章,咱们唠唠怎么跟AI打交道。

第十章:与bug作斗争的那点事儿

开场白

用AI写代码,难免会出问题。

报错了,跑不通,结果不对……这些问题,每个程序员都会遇到。

这一章,咱们唠唠怎么排查问题,怎么解决问题。

别慌,有问题就有办法。

10.1 报错信息咋看?

1、报错信息是啥?

报错信息,就是程序告诉你:出问题了。

报错信息一般包含:

• 错误类型:啥类型的错误

• 错误位置:在哪个文件的哪一行

• 错误原因:为啥出错了

2、常见的错误类型

语法错误(Syntax Error)

代码写错了,程序根本跑不起来。

比如括号没闭合、冒号漏写了、缩进错了。

【错误示例】

if x > 0 print("正数") # if后面忘了冒号

对于中国人而言,要特别注意标点符号半角和全角的问题,特别是分号和冒号。编程使用的标点符号都是半角的,写全角的就会报语法错误。

运行时错误(Runtime Error)

代码语法没问题,但跑的时候出错了。

比如除以零、访问不存在的索引、打开不存在的文件。

【错误示例】

x = 10 / 0 # 除以零

逻辑错误(Logic Error)

代码能跑,但结果不对。

这是最难查的,因为程序不报错,你得自己发现结果不对。

【错误示例】:想算平均值,但写错了

average = a + b / 2 # 应该是 (a + b) / 2

3、怎么看报错信息?

第一步:看错误类型

先搞清楚是啥类型的错误,心里就有谱了。

第二步:看错误位置

找到出错的文件和行号,去那行看看。

第三步:看错误原因

理解为啥出错,才能改对。

第四步:看上下文

有时候问题不在报错的那一行,在前面几行。

4、实例:看一个Python报错

Traceback (most recent call last): File "test.py", line 5, in <module> result = divide(10, 0) File "test.py", line 2, in divide return a / b

ZeroDivisionError: division by zero

咱们来拆解:

• `File "test.py", line 5`:在test.py的第5行调用divide函数

• `File "test.py", line 2`:在test.py的第2行,a / b出错了

• `ZeroDivisionError: division by zero`:除以零错误

这下就知道问题在哪了:除数是零,不能除。

小结一下

• 报错信息告诉你问题出在哪

• 先看类型,再看位置,再看原因

• 语法错误最容易改,逻辑错误最难找

10.2 常见错误类型

1、TypeError:类型错误

操作的对象类型不对。

【错误示例】

"hello" + 123 # 字符串不能直接加数字

解决方法:转换类型。

"hello" + str(123) # 把数字转成字符串

2、NameError:名字错误

用了一个不存在的变量或函数。

【错误示例】

print(username) # username没定义过

解决方法:检查变量名,是不是拼写错了,是不是没定义。

3、IndexError:索引错误

访问了不存在的索引。

【错误示例】

list = [1, 2, 3] print(list[5]) # 列表只有3个元素,没有索引5

解决方法:检查列表长度,确保索引在范围内。

4、KeyError:键错误

访问了不存在的字典键。

【错误示例】

person = {"name": "张三"} print(person["age"]) # 没有age这个键

解决方法:用get方法,或者先检查键是否存在。

print(person.get("age", "未知")) # 如果没有,返回"未知"

5、FileNotFoundError:文件不存在错误

要打开的文件找不到。

【错误示例】

with open("data.txt") as f: # data.txt不存在 content = f.read()

解决方法:检查文件路径,确保文件存在。

6、AttributeError:属性错误

对象没有这个属性或方法。

【错误示例】

num = 123 num.append(4) # 数字没有append方法

解决方法:检查对象类型,确认它有这个方法。

7、IndentationError:缩进错误

Python对缩进很敏感,缩进不对就报错。

【错误示例】

if x > 0: print("正数") # 没有缩进

解决方法:统一用4个空格缩进,别混用空格和Tab。

小结一下

• TypeError:类型不对

• NameError:变量没定义

• IndexError:索引越界

• KeyError:字典键不存在

• FileNotFoundError:文件找不到

• AttributeError:属性或方法不存在

• IndentationError:缩进不对

10.3 Debug的基本招数

1、啥是Debug?

Debug,就是找bug、改bug。

Bug,就是程序里的错误。

Debug的方法有很多,咱们说几个常用的。

2、打印调试

最简单的方法,就是打印。

在可能出问题的地方,打印变量的值,看看是不是你预期的。

x = 10 y = 0 print(f"x = {x}, y = {y}") # 打印看看 result = x / y # 这里会报错

打印调试的优点:

• 简单,不需要额外工具

• 直观,能看到变量的值

缺点:

• 要手动加print,调试完还得删

• 打印多了,输出会很乱

3、用调试器

调试器能让你一步步执行代码,查看变量的值。

以VS Code为例:

• 在代码行号左边点一下,打红点断点

• 按F5开始调试

• 程序会在断点处停下来

• 可以查看变量、一步步执行

调试器的优点:

• 不用改代码

• 能精确控制执行过程

• 能看到所有变量的值

缺点:

• 要学习怎么用

• 对于复杂问题,可能比较耗时

4、二分法定位

问题不知道在哪?用二分法。

在代码中间加个打印,看看程序有没有执行到这。

如果执行到了,问题在后半段;没执行到,问题在前半段。

继续二分,直到找到问题所在。

5、注释法

把一部分代码注释掉,看问题还在不在。

问题消失了,说明在被注释的代码里;问题还在,说明在其他地方。

6、搜索错误信息

把报错信息复制到搜索引擎里搜一下。

很多错误别人都遇到过,网上有解决方案。

小结一下

• 打印调试:最简单,加print看变量

• 用调试器:设断点,一步步执行

• 二分法:从中间开始,缩小范围

• 注释法:注释掉部分代码,定位问题

• 搜索:网上找答案

10.4 怎么问AI?

1、问AI的姿势

用AI编程,最重要的技能之一:会问AI。

问得好,AI给你好答案;问得不好,AI给你瞎答案。

2、错误的问法

"我的代码报错了,怎么办?"

这种问题,AI没法回答,因为它不知道:

• 你的代码是啥

• 报错信息是啥

• 你想干啥

3、正确的问法

提供完整的上下文:

你想干啥(需求)

• 你的代码是啥

• 报错信息是啥

• 你已经尝试了啥

• 还可以给它发截图

示例:

我想读取一个CSV文件,计算某列的平均值。 我的代码: import pandas as pd df = pd.read_csv("data.csv") avg = df["price"].mean() print(avg) 报错信息: KeyError: "price" 我已经检查了文件,确实有price这一列。 请问问题出在哪?

这样问,AI就知道怎么帮你了。

4、问AI的技巧

分步骤问

问题很复杂?拆成小问题,一个个问。

让AI解释

不懂某段代码?让AI给你解释。

"请解释这段代码每一行在干啥:"

让AI改错

给AI代码和报错信息,让它帮你改。

让AI给方案

描述需求,让AI给你一个解决方案。

5、不要完全依赖AI

AI也会犯错。

AI给的代码,你要看懂,确认没问题再用。

特别是安全相关的代码,更要仔细检查。

小结一下

• 问AI要提供完整上下文:需求、代码、报错、已尝试

• 复杂问题拆成小问题

• 让AI解释、改错、给方案

• AI给的代码要检查,别盲目相信

10.5 求助的正确姿势

1、啥时候该求助?

自己折腾了一阵子,还是搞不定,就该求助了。

但求助之前,先做几件事:

• 搜索一下,网上有没有答案

• 看看文档,有没有说明

• 问一下AI,让它帮你分析

2、去哪求助?

Stack Overflow

程序员问答社区,问题多,答案也多。

注意:提问前先搜索,别问重复的问题。

GitHub Issues

开源项目的问题跟踪,如果你用的是开源库,可以去看看Issues。

中文社区

掘金、思否、CSDN等,也有不少问答。

技术群

加几个技术群,问群里的大佬。

3、怎么提问?

提问之前,准备好这些:

• 问题描述:你想干啥,结果咋样

• 代码:最小可复现的代码

• 环境:操作系统、语言版本、相关库版本

• 已尝试:你试过啥方法

• 报错信息:完整的报错信息

好的提问示例:

标题:Python读取CSV时报KeyError 环境: Python 3.10 pandas 2.0 Windows 11 问题描述: 读取CSV文件后,访问某列报KeyError。 代码: import pandas as pd df = pd.read_csv("data.csv") print(df.columns) # 输出:Index(['name', ' price'], type='object') print(df["price"]) # 报错 报错信息: KeyError: "price" 已尝试: 确认文件中有price列 试过df.get("price"),返回None 请帮忙看看问题出在哪?

原来问题是列名前面有个空格,是" price"而不是"price"。

4、提问的礼仪

• 先搜索,再提问

• 标题要清楚,别写"求助""救命"

• 代码要完整,能复现问题

• 得到答案后,感谢回答者

• 解决后,说一下怎么解决的,帮助后来人

小结一下

• 求助前先搜索、看文档、问AI

• Stack Overflow、GitHub、技术群是好地方

• 提问要说清楚:环境、代码、报错、已尝试

• 有礼貌,得到帮助要感谢

本章小结

这一章,咱们唠了出了问题咋整:

报错信息是你的朋友,它能告诉你问题在哪。学会看报错,问题就解决了一半。

常见错误类型要熟悉,看到了就知道大概怎么改。

Debug方法有很多:打印、调试器、二分法、注释法、搜索。

问AI要有技巧,提供完整上下文,AI才能帮你。

求助要讲究方式,问题说清楚,别人才能帮你。

下一章,咱们唠唠安全和法律那些事儿。

第十一章:安全和法律的那点事儿

开场白

用AI写代码,除了技术问题,还有安全和法律问题。

这一章,咱们唠唠这些"非技术"但很重要的事儿。

别觉得这些不重要,出了事可就麻烦了。

11.1 代码安全基本意识

1、啥是代码安全?

代码安全,就是你的代码不会被坏人利用,不会泄露信息,不会造成损失。

安全问题无处不在,稍不注意就会踩坑。

2、常见的安全问题

敏感信息泄露

把密码、密钥、token等写死在代码里,代码泄露了,这些信息也泄露了。

【错误示例】:密码写死在代码里

password = "my_secret_password_123"

SQL注入

用户输入直接拼到SQL语句里,黑客可以构造输入来执行恶意SQL。

【错误示例】:SQL注入

sql = "SELECT * FROM users WHERE name = '{user_input}'"

用户输入:' OR '1'='1

实际执行的SQL:SELECT * FROM users WHERE name = '' OR '1'='1'

会返回所有用户!

跨站脚本(XSS)

用户输入直接显示在网页上,黑客可以注入恶意脚本。

【错误示例】:XSS

html = "<div>{user_input}</div>"

用户输入:<script>alert('我被黑了')</script>

网页会执行这段脚本!

文件上传漏洞

允许用户上传文件,但没有检查文件类型和内容,黑客可以上传恶意脚本。

3、安全编码的基本原则

最小权限原则

程序只获取它需要的最小权限,不多要。

永远不相信用户输入

用户输入的数据,都要检查、过滤、转义。

敏感信息要保护

密码要加密存储,密钥要放安全的地方,不要写死在代码里。

使用安全的库和函数

不要自己写加密算法,用成熟的库。

及时更新依赖

依赖库有漏洞时,要及时更新。

4、AI写的代码安全吗?

AI写的代码,可能有安全问题。

AI不知道你的业务场景,不知道安全要求,它只是按常见写法给你生成代码。

所以,AI给的代码,尤其是涉及安全的代码,要仔细审查。

小结一下

• 安全问题无处不在

• 常见问题:信息泄露、SQL注入、XSS、文件上传漏洞

• 安全原则:最小权限、不信任输入、保护敏感信息

• AI写的代码要审查安全

11.2 保护你的代码和数据

1、代码要保护啥?

知识产权:你写的代码,是你的成果,不想被别人拿去用。

商业机密:代码里有你公司的业务逻辑,泄露了不好。

敏感信息:代码里有密码、密钥等,泄露了更麻烦。

2、怎么保护代码?

版本控制

用Git管理代码,可以追溯修改记录,也可以回滚。

私有仓库

敏感代码放私有仓库,不公开。

代码混淆

对重要代码进行混淆,让人看不懂。

代码审查

团队成员互相审查代码,发现潜在问题。

3、数据要保护啥?

用户数据:用户的信息,要保护好,泄露了是大事。

业务数据:公司的业务数据,是重要资产。

日志数据:日志里可能有敏感信息,也要保护。

4、怎么保护数据?

加密存储

敏感数据加密后存储,即使数据库泄露,也看不到明文。

访问控制

谁能访问什么数据,要控制好。

数据备份

重要数据要备份,丢了能恢复。

数据脱敏

非生产环境用脱敏数据,不暴露真实信息。

5、云服务安全

现在很多代码和数据在云上,云安全也很重要。

选择可靠的云服务商

大厂的安全措施更完善。

配置好权限

云服务的权限要配置好,别开太大。

开启日志和监控

有问题能及时发现。

定期检查

定期检查云资源的配置,有没有安全隐患。

小结一下

• 代码要保护:知识产权、商业机密、敏感信息

• 数据要保护:用户数据、业务数据、日志数据

• 保护方法:加密、访问控制、备份、脱敏

• 云服务也要注意安全

11.3 开源协议和版权

1、啥是开源协议?

开源协议是法律文件,规定别人可以怎么用你的代码。

不是所有开源代码都可以随便用,不同的协议有不同的要求。

2、常见的开源协议

MIT协议

最宽松的协议。

• 可以随便用、随便改、随便分发

• 只要保留版权声明就行

Apache协议

比MIT严格一点。

• 可以用、可以改、可以分发

• 要保留版权声明和许可证

• 修改后要说明改了啥

GPL协议

传染性协议。

• 可以用、可以改、可以分发

• 如果你用了GPL的代码,你的代码也要开源

• 这是GPL的特点:开源要"传染"

BSD协议

类似MIT,很宽松。

• 可以用、可以改、可以分发

• 保留版权声明

LGPL协议

比GPL宽松。

• 可以动态链接LGPL库,你的代码不用开源

• 如果你修改了LGPL库本身,修改部分要开源

3、怎么选择开源协议?

• 想让别人随便用:MIT、BSD

• 想让别人用但保留专利权:Apache

• 想让你的代码永远开源:GPL

4、用开源代码要注意啥?

看清楚协议

用别人的开源代码前,看清楚是什么协议,你能不能用。

遵守协议要求

协议要求保留版权声明就保留,要求开源就开源。

不要瞎抄

即使开源代码,也不要直接复制粘贴,要理解后用自己的方式写。

小结一下

• 开源协议规定怎么用开源代码

• MIT、Apache、GPL是常见协议

• MIT最宽松,GPL有传染性

• 用开源代码要看清协议、遵守要求

• AI生成代码的版权还不明确

11.4 AI编程的法律风险

1、AI生成内容的版权问题

AI生成的内容,版权归谁?

这个问题,法律界还在讨论。

目前的主流观点:

• AI生成的内容,版权归属不明确

• 人对AI生成内容进行修改后,人对修改部分可能有版权

• 用AI生成的内容,有侵权风险

2、AI可能"抄"别人的代码

AI是用大量代码训练的,可能学到了别人的代码。

如果AI给你的代码和别人的一样,你可能就侵权了。

3、怎么降低风险?

不要直接用AI生成的代码

理解后,用自己的方式写。

检查AI生成的代码

搜索一下,看看是不是和别人的代码一样。

重要的代码,自己写

核心代码、商业代码,最好自己写,不要用AI生成。

4、AI使用的合规问题

有些公司、行业,对AI使用有限制。

比如:

• 涉密单位不能用AI处理敏感信息

• 有些公司禁止把代码发给外部AI服务

用AI前,要了解你所在环境的规定。

5、AI服务的隐私问题

你把代码发给AI服务,AI服务能看到你的代码。

如果代码敏感,要考虑这个风险。

可以选择本地部署的AI,或者公司内部的AI服务。

小结一下

• AI生成内容的版权不明确

• AI可能"抄"别人的代码,有侵权风险

• 降低风险:理解后重写、检查、核心代码自己写

• 注意AI使用的合规和隐私问题

11.5 职业道德和责任

1、程序员的职业道德

写代码不只是技术活,也有道德要求。

不作恶

不要写恶意代码,不要侵犯别人隐私,不要做违法的事。

对用户负责

你写的代码影响用户,要对用户负责。

诚实

不懂就学,不要装懂;有问题就说,不要隐瞒。

尊重他人

尊重同事、用户、开源贡献者。

2、AI编程的道德问题

不要用AI作弊

比如用AI写作业、写考试答案,这不道德。

不要用AI作恶

比如用AI写攻击代码、钓鱼网站,这是违法的。

对AI生成的内容负责

你用AI生成了代码,你就要对这段代码负责,不能出了问题怪AI。

3、出了问题谁负责?

你用AI写的代码,出了问题,谁负责?

当然是你负责。

AI只是工具,你是使用者,你要对你的代码负责。

小结一下

• 程序员要有职业道德:不作恶、负责、诚实、尊重

• AI编程也要有道德:不作弊、不作恶、对AI生成内容负责

• 出了问题,使用者负责

本章小结

这一章,咱们唠了安全和法律那些事儿:

代码安全要有意识,敏感信息别泄露,用户输入别信任,AI代码要审查。

保护代码和数据,用加密、访问控制、备份等方法。

开源协议要看清,不同协议要求不同,遵守协议要求。

AI编程的法律风险,版权不明确、可能侵权、有合规和隐私问题。

职业道德和责任,不作恶、负责、诚实、尊重,对AI生成的代码负责。

到这里,这本书的内容就差不多了。

附录

附录A:常用术语表(中英文对照)

一、计算机基础

中文术语英文术语解释
中央处理器CPU (Central Processing Unit)计算机的大脑,负责执行指令和运算
内存Memory / RAM (Random Access Memory)程序运行时临时存放数据的地方,断电后数据丢失
硬盘Hard Disk / HDD / SSD永久存储数据的设备,断电后数据不丢失
固态硬盘SSD (Solid State Drive)用闪存技术存储的硬盘,速度更快
图形处理器GPU (Graphics Processing Unit)专门处理图形和并行计算的处理器
主板Motherboard连接所有硬件的核心电路板
显卡Graphics Card处理图形输出的硬件
操作系统Operating System (OS)管理计算机硬件和软件资源的系统软件
内核Kernel操作系统的核心部分
驱动程序Driver让操作系统识别和使用硬件的软件

二、编程语言

中文术语英文术语解释
编程语言Programming Language人用来写程序的语言
源代码Source Code程序员写的代码
机器码Machine Code计算机能直接执行的代码
编译Compilation把源代码翻译成机器码的过程
解释Interpretation边执行边翻译代码的方式
编译器Compiler执行编译的程序
解释器Interpreter执行解释的程序
语法Syntax编程语言的语法规则
语义Semantics代码的含义和逻辑
标识符Identifier变量、函数等的名称
关键字Keyword编程语言保留的专用词
注释Comment不被执行的说明文字

三、数据类型与结构

中文术语英文术语解释
变量Variable存储数据的容器
常量Constant值不能改变的量
数据类型Data Type数据的种类,如整数、字符串等
整数Integer没有小数部分的数字
浮点数Float / Floating Point Number有小数部分的数字
字符串String文本数据
布尔值Boolean真或假(True/False)
数组Array存储多个相同类型数据的结构
列表List有序的可变数据集合
元组Tuple有序的不可变数据集合
字典Dictionary键值对的数据结构
集合Set不重复元素的无序集合
对象Object包含属性和方法的数据结构
Class创建对象的模板
实例Instance类的具体实例化对象
Null / None表示没有值

四、程序结构

中文术语英文术语解释
函数Function打包一段可重复使用的代码
方法Method对象中的函数
参数Parameter函数定义时接收的变量
实参Argument调用函数时传入的值
返回值Return Value函数执行后返回的结果
条件语句Conditional Statement根据条件执行不同代码
循环Loop重复执行一段代码
迭代Iteration循环的一次执行
递归Recursion函数调用自身
异常Exception程序运行时的错误
异常处理Exception Handling捕获和处理异常的机制

五、软件工程

中文术语英文术语解释
模块Module一个独立的代码文件
Package一组相关的模块
Library提供特定功能的代码集合
框架Framework提供基础结构的代码框架
接口Interface模块之间交互的规范
应用程序接口API (Application Programming Interface)程序之间交互的桥梁
软件开发工具包SDK (Software Development Kit)开发用的工具集合
集成开发环境IDE (Integrated Development Environment)集成编辑、编译、调试的开发环境
版本控制Version Control管理代码版本的系统
仓库Repository存放代码的地方
分支Branch代码的独立开发线
合并Merge把不同分支的代码合并在一起
提交Commit保存代码修改记录
推送Push把本地代码推送到远程仓库
拉取Pull从远程仓库获取代码

六、网络与Web

中文术语英文术语解释
网络Network多台计算机互联的系统
互联网Internet全球范围的计算机网络
协议Protocol网络通信的规则
IP地址IP Address网络设备的唯一标识
域名Domain Name网站的好记名字
域名系统DNS (Domain Name System)把域名翻译成IP地址的系统
端口Port网络服务的入口
防火墙Firewall网络安全屏障
代理服务器Proxy Server转发请求的中间服务器
超文本传输协议HTTP (HyperText Transfer Protocol)网页传输协议
安全超文本传输协议HTTPS加密的HTTP协议
前端Frontend用户看到的界面部分
后端Backend服务器端的程序
全栈Full Stack前端和后端都懂
网页Web Page浏览器显示的页面
网站Website多个网页的集合
服务器Server提供服务的计算机或程序
客户端Client请求服务的程序或设备

七、数据库

中文术语英文术语解释
数据库Database有组织存储数据的系统
关系型数据库Relational Database用表格存储数据的数据库
非关系型数据库NoSQL Database不用表格存储的数据库
结构化查询语言SQL (Structured Query Language)操作关系型数据库的语言
Table数据库中存储数据的表格
字段Field表中的列
记录Record表中的一行数据
主键Primary Key唯一标识记录的字段
外键Foreign Key关联其他表的字段
索引Index加速查询的数据结构
事务Transaction一组操作的执行单元
对象关系映射ORM (Object-Relational Mapping)把对象映射到数据库的技术

八、云计算与部署

中文术语英文术语解释
云计算Cloud Computing通过网络提供计算服务
云服务Cloud Service云服务商提供的服务
基础设施即服务IaaS (Infrastructure as a Service)提供虚拟硬件的云服务
平台即服务PaaS (Platform as a Service)提供开发平台的云服务
软件即服务SaaS (Software as a Service)提供软件的云服务
部署Deployment把程序发布到服务器
容器Container隔离运行程序的技术
容器编排Container Orchestration管理多个容器的技术
虚拟机Virtual Machine (VM)模拟的计算机系统
负载均衡Load Balancing分配请求到多台服务器
内容分发网络CDN (Content Delivery Network)分布式内容加速网络
虚拟专用网络VPN (Virtual Private Network)安全的加密网络连接

九、调试与错误

中文术语英文术语解释
错误Error程序中的问题
异常Exception程序运行时的错误
漏洞Bug程序中的缺陷
调试Debug找bug、改bug的过程
断点Breakpoint程序暂停执行的位置
单步执行Step Execution一步步执行程序
堆栈跟踪Stack Trace函数调用链的记录
日志Log程序运行的记录
语法错误Syntax Error代码语法不对
运行时错误Runtime Error运行时发生的错误
逻辑错误Logic Error代码逻辑不对

十、安全与法律

中文术语英文术语解释
信息安全Information Security保护信息不被非法访问
加密Encryption把数据变成密文
解密Decryption把密文还原成明文
认证Authentication验证身份的过程
授权Authorization授予访问权限
会话Session用户与服务器的交互过程
令牌Token认证用的凭证
跨站脚本攻击XSS (Cross-Site Scripting)注入恶意脚本的攻击
SQL注入SQL Injection注入恶意SQL的攻击
开源Open Source源代码公开,可自由使用
许可证License使用软件的法律条款
版权Copyright作品的法律所有权
知识产权Intellectual Property智力成果的法律权利

十一、AI与机器学习

中文术语英文术语解释
人工智能AI (Artificial Intelligence)模拟人类智能的技术
机器学习Machine Learning让机器从数据中学习
深度学习Deep Learning用神经网络的学习方法
神经网络Neural Network模拟人脑的计算模型
大语言模型LLM (Large Language Model)大规模的语言处理模型
自然语言处理NLP (Natural Language Processing)处理人类语言的技术
提示词Prompt给AI的指令或问题
微调Fine-tuning调整模型适应特定任务
训练Training用数据教模型学习
推理Inference用训练好的模型预测

十二、其他常用术语

中文术语英文术语解释
算法Algorithm解决问题的步骤
复杂度Complexity算法的时间或空间代价
性能Performance程序的运行效率
优化Optimization提升程序性能
重构Refactoring改进代码结构
测试Testing检验程序是否正确
单元测试Unit Test测试单个函数或模块
集成测试Integration Test测试模块间的协作
文档Documentation程序的说明资料
开源社区Open Source Community共享代码的开发者群体
缓存Cache临时存储加速访问
同步Synchronous等待完成再继续
异步Asynchronous不等待,继续执行
回调Callback完成后调用的函数
事件Event发生的某种动作
监听Listen / Watch等待事件发生
触发Trigger引发事件
渲染Render生成显示内容
解析Parse分析数据结构
序列化Serialization把对象转成可存储格式
反序列化Deserialization把存储格式转回对象

附录B:推荐学习资源

在线教程

• 菜鸟教程:各种编程语言入门教程 网址:

• 廖雪峰的官方网站:Python、Git 等教程 网址:

• MDN Web Docs:前端开发文档(HTML/CSS/JS 最权威参考) 网址:

• 官方文档:每种语言、每个库都有官方文档 例如: Python 是 ,React 是

视频课程

• B站:有很多编程教学视频

• 网址:

• 慕课网:系统性的编程课程

• 网址:

• Coursera:国外名校课程

• 网址:

练习平台

• LeetCode:算法练习

网址:(中文社区)

• 牛客网:编程练习和面试题

• 网址:

• Codewars:编程挑战

• 网址:

社区

• Stack Overflow:程序员问答社区

• 网址:

• GitHub:开源项目托管平台

• 网址:

• 掘金:中文技术社区

• 网址:

• V2EX:技术讨论社区

• 网址:

附录C:Windows CMD/PowerShell常用命令

命令作用
dir列出当前目录的文件
cd 目录名进入目录
cd ..返回上一级目录
cls清屏
copy 源 目标复制文件
move 源 目标移动文件
del 文件名删除文件
mkdir 目录名创建目录
rmdir 目录名删除目录
type 文件名显示文件内容
ping 地址测试网络连接
ipconfig显示网络配置

附录D:VS Code常用快捷键

快捷键作用
Ctrl + S保存
Ctrl + Z撤销
Ctrl + Y重做
Ctrl + C复制
Ctrl + V粘贴
Ctrl + X剪切
Ctrl + F查找
Ctrl + H替换
Ctrl + /注释/取消注释
Ctrl + `打开/关闭终端
F5开始调试
F9设置/取消断点
F10单步跳过
F11单步进入

后记

这本书写到这儿,就结束了。

回顾一下,咱们唠了计算机、程序、数据、网络、网页、云、工具、AI编程、问题排查、安全法律这些事儿。

都是基础知识,不深,但应该够用。

AI生成这本书的初稿用了10分钟,我利用闲暇时间审查、修改,持续了大约三、四天。AI确实太能干了,但还是要有人做最后的审定、把关和负责。

对了,阿色不保证这本书的内容都是正确的,因为我保证不了,有些东西我这个老程序员也不懂。我也是边写边跟AI学。

另外请注意,这本书不太严谨,阐述不求精准,甚至可能存在比较严重的错误。请读者自行把握。

最后再让AI帮我把这本书从头到尾看一遍,把把关。

阿色最后这一道把关也要交给AI了吗?

不然呢?阿色已经看不动了。我就只能多问几个AI吧。

写这本书的初衷

我用AI编程有一阵子了,发现很多人用AI写代码,但不了解基础知识。

遇到报错就懵圈,不知道问题出在哪。

AI给的代码,不知道在干啥。

出了问题,不知道怎么排查。

所以我想写本书,把这些基础知识讲一讲。

希望能帮到想用AI编程的朋友。

其实最重要的,我自己也利用这个机会把这些知识重新复习、学习了一遍,特别是一些较新的知识,我也需要学习掌握。

关于AI编程的一点思考

AI确实强大,能帮你写代码、改bug、解释代码。

但AI不是万能的。

不懂基础知识,用AI写代码也会很吃力。

AI给的代码可能有问题,你得能看出来。

AI报的错误你得能看懂,才能改对。

所以,基础知识还是得了解。

AI是工具,你是主人。工具再好,主人不会用也不行。

最重要的,即便程序是AI生成的,但最终的责任人仍然是你。

你不懂基本的原理、架构,你怎么负责?

给读者的话

如果你是新手,希望这本书能帮你入门。

如果你有经验,希望这本书能帮你梳理知识。

如果觉得有用,推荐给朋友。

如果觉得有问题,欢迎批评指正。

感谢

感谢AI帮我写这本书,当然,我修改了很多,补充了很多。

感谢所有开源项目,让我学到了很多。

感谢读者,能读完这本书。

最后

编程是一门手艺,也是一场修行,需要思考,更需要实践。

来吧,先上路走两步!

阿色

2026年于大庆

全书完