零代码应用开发·第 1 章·3 学时

软件是什么做的

三层结构与你的第一个作品。

本章精髓 任何一个软件都由三层构成:界面、逻辑、数据。这三层是整门课的骨架,其后每一章都是在往其中某一层里填内容。本章先做出第一个作品,再用它把三层看清楚。

学完本章后,你应该能够:

  1. 把大模型给出的代码保存为能双击打开的 .html 文件,并在手机或另一台电脑上打开它;
  2. 对任何一个用过的软件,说出它的界面、逻辑、数据分别是什么;
  3. 解释为什么 .py 文件双击没有反应,而 .html 文件双击就能打开;
  4. 在需求里写清交付形态:单文件、不引用外部资源、使用 UTF-8 编码;
  5. 说明本课程的分工:代码由大模型生成,需求与验收由本人完成。
配套演示文件 第01章演示_我的专业名片.html 第01章演示_编码对照.html

四十分钟,做出第一个软件

一条需求 · 一个文件 · 双击打开

先把作品做出来,原理随后补上。

1.1本章成品:一页专业名片

用大模型做一页"我的专业名片":姓名与专业、一段自我介绍、三条信息、一个"显示联系方式"的按钮。做完存成一个文件,双击就能打开,拷进 U 盘带到任何一台电脑上都能看,发到手机上也能看。

整个过程你不写一行代码。你要做的,是把下面这段中文发出去,再把返回的内容存成一个文件:

一段中文需求
你来写
要什么、给谁用、什么形态
大模型
代码由它生成
返回一整段代码
一个文件
card.html
双击打开就是页面

从需求到成品,中间没有手写代码的环节

1.2本章新技巧:把交付形态写进需求

需求不只是"一个名片页",而是一个能双击打开、拷给任何人都能看的文件。后半句写的才是交付形态。

不写明,大模型就按它自己方便的方式来:多半会拆成三个文件(网页、样式、脚本各一个),并从网上引用若干字体与图标。结果是少拷一个文件就打不开,机房一旦断网,页面的样子也会跟着改变。

要什么形态,就在需求里写明。不写,它就替你决定一种。

1.3可直接复制的提示词

发给 AI本章提示词 · 原样复制,改中间的内容
做一个"我的专业名片"页面,给同学在手机上看。 内容:① 姓名与专业 ② 两三句自我介绍 ③ 三条信息(擅长的事、做过的项目、联系方式)。 风格简洁,绿色为主色,手机屏幕优先。 把 HTML、CSS、JavaScript 全部合并到一个 .html 文件里,我要直接另存双击运行; 不要拆成多个文件,不要引用任何外部链接、字体或图标库; 中文使用 UTF-8 编码。

后面那三句约束,每一句都在防一个具体的坑:

全部合并到一个 .html 文件
拆成三个文件,少拷一个就打不开
不要引用任何外部链接、字体或图标库
断网页面就变样,交给别人也打不开
中文使用 UTF-8 编码
中文变成方块或乱码

1.4六步操作,从一条需求到一个文件

1
把 1.3 的提示词原样发出去
后三句约束一个字不改
产出:一整段代码
2
全选复制,粘进记事本
对话框里给的是文字,先原样拿过来
产出:记事本里的一段文本
3
另存为 card.html
保存类型选「所有文件」,编码选 UTF-8
产出:一个 .html 文件
4
双击这个文件
页面出现,地址栏是 file:// 开头
产出:能看的成品
5
替换页面上的示例内容
在记事本里改成自己的信息,Ctrl+S 保存,回浏览器刷新
产出:属于你的名片
6
换一台设备再打开一次
拷进 U 盘或发到手机,验证它在别处也能看
产出:经过验证的交付物
备用方案 现场生成失败、网络不好时,直接打开 第01章演示_我的专业名片.html,从第 4 步接着走,效果一样。

1.5大模型的常见偏差

它默认拆成三个文件 这是行业里的通行做法,在本课程中并不适用。本课程要的是一个可以随手拷贝的单文件,不写明它就会拆。
它倾向于引用网上的字体和图标 页面在联网环境下正常,在断网的机房里字体会退回默认字体,图标显示为空方框。约束里那一句正是为此而写。
它编造事实性内容 它会给出一个姓名为"张三"、电话为 13800138000 的名片。后者是流传多年的示例号码,留在页面上等同于写了"此处应有电话"。凡是姓名、电话、机构名称,一律视为占位内容,交付前自行替换。

软件的三层 本章重点

界面 · 逻辑 · 数据 · 分层定位

本章的核心内容集中在这一部分和下一部分。

本章要学的术语 · 八个
01界面user interface
02逻辑logic
03数据data
04分层与故障定位layering
05源代码source code
06扩展名file extension
07执行环境runtime
08字符编码UTF-8

这八个术语会原样出现在技术文档、软件设置界面与报错信息中,也是往后你写需求时要用到的词。前四个在本部分讲解,后四个在第三部分讲解。

2.1先拆三个你天天在用的

不用打开任何代码,就看这三样东西:

教务系统
界面课表、成绩单、选课按钮
逻辑判断你够不够学分、这门课还有没有名额
数据你的选课记录、历年成绩
外卖 App
界面店铺列表、购物车、下单按钮
逻辑算总价、判断满不满减、估计送达时间
数据你的购物车、地址、历史订单
微信
界面聊天窗口、朋友圈
逻辑判断消息发给谁、有没有发送成功
数据聊天记录、通讯录

每一个软件都能这样拆开。这三层各自负责一部分,而且可以分开出问题。教务系统卡住打不开时,出问题的是界面,你的成绩一条也没有丢失,数据仍然完好。

2.2四个知识点,一个一个看

每一条都先摆出你在屏幕上会看到的现象,再说它背后是什么。

01界面:你看得见的那一层
界面
摆给人看、接住人的点击
逻辑
数据

它不做判断,也不记东西

现象:外卖 App 上的店铺列表、购物车、那个橙色的下单按钮。

概念:界面负责把东西摆给人看、接住人的点击和输入。

类比:餐厅的前厅:负责接待和上菜,不负责做菜,也不负责存货。

02逻辑:它替你做的判断和计算
加了三样总价自己变了
满 30自动减 5

一样的食材,菜谱不同,端出来的不一样

现象:往购物车里加了三样,总价自己就变了;满 30 减 5,它自动减掉。

概念:逻辑负责算和判断。同样一批数据,逻辑不同,结果就不同。

类比:后厨按菜谱做事。

03数据:它记住的东西
昨天加进购物车
关掉 · 重开 · 换个时间
东西还在

关了重开还在,这一层才算存在

现象:昨天加进购物车的东西,今天打开还在。

概念:数据负责记住,关掉、重开、换个时间再来,它仍然在。

类比:后厨的库房,前厅换了装修,库房里的东西一件不少。

04三层可以分别出问题
界面 ✗
卡住转圈打不开
逻辑 ✓
数据 ✓
成绩一条没少

出问题的层次不同,表现出来的现象也不同

现象:教务系统卡住转圈打不开,但等它好了,你的成绩一条没少。

概念:三层各自独立,先判断问题出在哪一层,比逐项试错快得多。

类比:前厅停电,不等于库房着火。

本章方法 页面出了问题,先判断问题出在哪一层,再动手处理。这个习惯从第一件作品开始养成。

2.3回到刚才那页名片

把第一部分做出来的名片页也按三层拆一遍,会看到这样一个结果:

界面
姓名、介绍、三条信息、按钮,全在这一层
逻辑
只有一行:点按钮,把邮箱填进去
数据(空的)
刷新一下就回到最初,它什么也记不住

数据层为空是这一版应有的状态

这不是做得不好,这是它现在的位置。此后每一章都是在给其中某一层添内容。

讨论你手机里有没有哪个 App,只有界面、几乎没有逻辑和数据?

源代码的真相

纯文本 · 扩展名 · 执行环境 · 编码

解释第一部分那六步操作里,每一步到底发生了什么。

3.1另外四个知识点

05源代码就是一段文本
记事本
<h1>李明</h1>
<p>大数据学院</p>
浏览器
李明
大数据学院

同一个文件,记事本里是字,浏览器里是页面

现象:第 6 步用记事本再打开 card.html,看到的还是第 2 步粘进去的那些字。

概念:源代码是纯文本文件,本身不做任何事,用记事本就能打开、能改。

类比:和你用记事本写的日记是同一种文件,只是浏览器认得懂它。

06扩展名决定谁来打开它
.html
浏览器打开
看到页面
.txt
·
记事本打开
只是文档
.html.txt
另存时选错
打开是一堆码

同一段文字,取的名字不同,命运完全不同

现象:同样一段内容,存成 card.html 双击就出现页面,存成另一种名字打开却是满屏代码。

概念:文件名末尾的 .html、.txt、.py 叫扩展名,系统靠它决定把文件交给哪个程序处理。第 3 步"保存类型选「所有文件」",防的就是被自动存成 card.html.txt。

类比:扩展名相当于包裹上的品名标签,标签写错,分拣时就会送到别处。

07代码要有程序执行才能运行
card.html 浏览器 页面出现
hello.py 没装解释器 双击没反应

不是文件损坏,是缺少可以执行它的程序

现象:.html 双击就打开了,.py 双击之后没有任何反应。

概念:代码需要执行环境才能运行。浏览器是网页的执行环境,电脑里预装了;Python 的执行环境称为解释器,没有安装时,系统中就没有可以执行它的程序。

类比:乐谱摆在那里不会发声,需要有人照着演奏。

08中文变方块,是编码对不上
存成 UTF-8
李明 · 大数据学院
编码选错
æŽæ˜Ž · 大数æ®

内容一个字没变,只是解读的方式错了

现象:页面出来了,中文全成了方块、问号或一串怪字。

概念:UTF-8 是一套通用的字符编码。存文件时用的编码,和浏览器解读时用的编码必须一致。第 3 步"编码选 UTF-8",防的就是这一条。

类比:两个人用不同的密码本翻译同一封电报。

讲编码这一条时,打开 第01章演示_编码对照.html:同一段文字,页面上有一个按钮可以换一本"密码本"解读,乱码当场出现,再换回来又恢复原样。

3.2这就是那段代码

下面这三十行左右,就是名片页的全部,与演示文件 第01章演示_我的专业名片.html 逐字一致。它是一份完整、能直接双击运行的文件,不是片段:

card.html完整文件 · 双击即可运行
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>我的专业名片</title>
  <style>
    body  { font-family: system-ui, sans-serif; background:#f5f7f4; padding:24px; }
    .card { max-width:420px; margin:0 auto; background:#fff; border-radius:14px; padding:24px; }
    h1    { color:#2f6b45; font-size:22px; margin:0 0 4px; }
    .major{ color:#7b8a80; font-size:14px; margin:0 0 10px; }
    .item { border-top:1px solid #ecefe9; padding:12px 0; font-size:15px; }
    .label{ color:#2f6b45; font-weight:600; margin-right:8px; }
    button{ background:#2f6b45; color:#fff; border:0; border-radius:8px; padding:12px; width:100%; }
  </style>
</head>
<body>
  <div class="card">
    <h1>李明</h1>
    <p class="major">大数据学院 · 数据科学与大数据技术 2023 级</p>
    <p>喜欢把数据整理成一眼能看懂的表和图,正在学着用 AI 做小工具。</p>
    <div class="item"><span class="label">擅长</span>Excel 数据整理、图表制作</div>
    <div class="item"><span class="label">项目</span>班级活动报名表、社团台账</div>
    <div class="item"><span class="label">联系</span><span id="contact">点下方按钮显示</span></div>
    <button onclick="showContact()">显示联系方式</button>
  </div>

  <script>                                    // 整页唯一的逻辑层
    function showContact() {
      document.getElementById('contact').textContent = 'liming@example.edu.cn';
    }
  </script>
</body>
</html>

把这份代码按三层拆一遍:

<div class="card"> 里的字和框
界面,你看得见的全部内容。
<style></style>
界面,决定这些内容的样子:配色、圆角、间距。
showContact() 那三行
逻辑,整页唯一一处由程序判断并执行的动作:点一下,把邮箱填进去。
找不到任何保存的代码
数据层为空。刷新之后回到"点下方按钮显示",它什么也记不住。 你在这一页上做的任何操作,刷新之后全部消失
<meta charset="UTF-8">
三层之外。告诉浏览器按哪一套编码解读文件。 少了这一行,中文变方块
<meta name="viewport">
三层之外。使页面在手机上按屏幕的真实宽度排版。 少了这一行,手机上整页缩成一团
一个软件有没有数据层,决定了它只能看一眼,还是能长期用下去。这一版名片页的数据层为空,因此每次刷新都回到最初的样子。
讨论<script> 那一整块删掉,页面会变成什么样?按钮还在不在?

3.3为什么 .py 双击没反应

这一处最容易被误判为文件损坏。

浏览器是网页的执行环境,几乎每台电脑出厂就装好了,所以 .html 双击就能看见结果。有些代码文件(例如 .py)的执行环境不是预装的。电脑上没有安装时,双击这个文件,系统按扩展名找不到任何可以处理它的程序,于是什么也不发生。

不是文件损坏,是系统中缺少能够执行它的程序。此后遇到双击没有反应的情况,可以先从这个方向排查。

这门课的分工与规则

角色 · 规则 · 考核 · 日程

这门课怎么上、成绩怎么算,一次说清。

4.1你的角色,这学期会变三次

这门课的代码全部由大模型写,你不手写代码。你负责三件事:把想做的东西说清楚、判断它做出来的对不对、把它交到别人手上。三件里最容易被低估的是第二件。代码由大模型写,出了问题也可以让它改,但判断"这一次改对了没有",始终是你的事

打字员
开学时
把想法打成提示词发出去
产品经理
几章之后
写需求、定验收标准
验收官
期末时
审查结果,决定采纳与否

手上的操作越来越少,判断的分量越来越重

可能会有一个疑问:代码都由 AI 写了,为什么还要学。回答是:执行可以委托出去,定义与验收不能。没有亲手做过输入校验的人,看不出 AI 漏了哪一条;没有亲手整理过数据的人,看不出汇总表里少了十二行。这门课让你亲手做出十几件小作品,原因就在这里。

讨论如果做一个应用只需要十分钟,那么什么变成了最难的事?

4.2课程规则

课程规则

本节内容全学期只讲一次,其后按此执行。

任务分两层

随堂作品每章一件,在上机时间内完成并提交,计入课堂表现;大作业四次,在第 4、7、11、14 章,计作业成绩。期中考核在第 8 章,期末考核在第 16 章。

30%
作业
10%
课堂表现
10%
期中 · 第 8 章
50%
期末 · 第 16 章

分组

全班 28 人,分为 14 组,每组 2 人,本学期固定不换。两人各自独立完成自己的作品,不合交一份。分组的用处有两处:上机遇到问题先问同组同学,作品交出去之前请对方看一遍。

题目

每章三个题目任选其一,选哪个不影响分值权重,影响的是你练到什么程度。允许更换题材,验收标准不变。

三项规定

  1. 无故缺勤、迟到、早退累计超过总学时三分之一者,不予参加期末作品答辩。
  2. 选题立意、需求描述、修改过程与最终取舍须由本人完成;允许用 AI 生成代码,不得搬运他人作品冒充原创。
  3. 交付物中如实标注 AI 做了什么、你判断了什么。能说清这条分界,本身就是考核内容。

要准备的东西

可联网的笔记本电脑,浏览器用 Chrome 或 Edge 的较新版本;在电脑上建一个"零代码课"文件夹,每章一个子文件夹,全学期所有作品都放进去,误删之后无法恢复

这门课走本地优先

作品能在你自己电脑上双击跑起来,就算完成。发到平台上拿网址是选做的加分项,不做不扣分。这样安排的理由有三条:不受平台配额限制,断网也能修改,文件始终在自己手上。

4.3前沿三分钟:这件事是什么时候变成可能的

每章固定栏目 · 一条与当章内容相关的行业动态

2025 年 2 月,OpenAI 创始工程师、特斯拉前 AI 总监安德烈·卡帕西提出 vibe coding 这个词,指几乎不读代码、主要靠跟 AI 对话把软件做出来的开发方式。同年 11 月,柯林斯词典把它选为 2025 年度词汇,理由是它出现之后使用量暴涨。一种开发方式的名称在一年之内进入年度词汇,说明它的影响已经越出了程序员这个群体。

国内的进展与之同步:DeepSeek、智谱、MiniMax、月之暗面等密集迭代,工具的能力从补全一行代码,到给出一整段代码,再到直接交付一个可以打开的成品。本课程的全部实操都可以在国产平台上完成。

需要注意的是,工具以月为单位更替,三层结构以年为单位保持不变。学会按三层拆解,换任何工具都用得上。

上机实验

三选一 · 本地能跑 · 当堂交

上机环节由此开始,当堂完成并提交。

5.1三个题目,任选其一

题目 A
三十秒名片

姓名与专业、一段自我介绍、三条信息,手机上一屏看完。

通用
题目 B
社团一页纸

一个社团的介绍页:是干什么的、活动什么样、怎么加入。

偏文科
题目 C
我的课程表

本学期课表排成表格,当天的课高亮显示。

偏理工

三个题目难度相当,选自己真正用得上的那一个。写需求时,末尾加上 1.3 中的三句约束。

5.2共同验收标准

文件双击能打开 看到的是页面,不是代码 关掉编辑器,回到文件夹双击一次
中文正常显示 没有方块或问号 页面上每一处中文都看一遍
只有一个文件 没有另外的 css 或 js 文件 看文件夹里是不是只有一个 .html
断网也能正常显示 不依赖任何网上的资源 断开网络连接,刷新一次
换一台设备也能打开 拷进 U 盘或发到手机,照样能看 用手机或同组同学的电脑打开一次
能说出三层各在哪 界面、逻辑、数据,包括哪一层是空的 用记事本打开源文件,逐处指出对应的代码
内容是你自己的真实信息 不是 AI 编的示例 页面上不出现张三、13800138000

5.3常见错误与处理

双击打开是一堆代码
存成了 card.html.txt
先在资源管理器「查看」里勾上「文件扩展名」,再重新另存,保存类型选「所有文件」
中文全是方块
保存时编码不是 UTF-8
重新另存,编码下拉框选 UTF-8
只复制了一半,页面缺东西
AI 把代码分成几块给你,漏了后面的
让它把完整代码合成一整份再给一次
页面全是文字没有配色
漏掉了 style 那一块
对照 3.2 检查代码是否完整
按钮点了没反应
漏掉了 script 那一块
同上,逻辑层整块不见了
改了内容,页面没变化
没保存,或保存了没刷新
记事本里 Ctrl+S 保存,再回浏览器刷新。保存与刷新是两件事
电脑上很宽,手机上错乱
少了 viewport 那一行
让 AI 补上,或在需求里写明「手机屏幕优先」
字体和 AI 演示的不一样
引用了网上的字体,本机没有
需求里加「不要引用任何外部链接、字体或图标库」,重新生成
页面上出现张三 13800138000
AI 编的示例内容
全部替换成你自己的真实信息

5.4提交内容

作品文件
一个 .html,能双击打开
文件本身,不要压缩
运行截图
双击打开后的样子,能看清页面内容
截图贴进作业文档
记事本截图
圈出界面、逻辑、数据三层各在哪(数据层是空的也要指出来)
截图上直接画圈标注
一句话说明
你在需求里写了哪三句约束,各防住了什么
写在作业文档里

提交方式:按教师提供的作业模板(Word)填写,文档开头注明所选题目。提交渠道见课堂通知。当堂提交。

5.5再进一步(选做)

把同一条需求发给一个能直接给网址的平台,拿一个链接,用手机打开看看。

做这一步时要清楚:那是平台托管发布,作品放在别人的服务器上。平台配额用完或者项目被删除,链接随时可能失效。本地那一份文件始终要保留,它才是正本。

本章小结
本章五条结论
  1. 任何一个软件都由三层构成:界面给人看,逻辑替人算,数据负责记住。任何一个用过的软件都可以按这三层拆开。
  2. 三层可以分开出问题,先判断问题出在哪一层,比逐项试错快得多。
  3. 源代码就是一段文本,扩展名决定由哪个程序打开它,执行环境决定它能不能运行。.py 双击没有反应,不是文件损坏,是系统中缺少能够执行它的程序。
  4. 要什么形态,就在需求里写明。合并成一个文件、不引用外部资源、使用 UTF-8 编码,这三句一句都不能省。
  5. 代码可以由大模型写,判断始终由你完成。把想做的说清楚、判断做得对不对、把它交到别人手上,这三件事是这门课真正要练的。
本章脉络