为什么你该动手写代码,而不是只看教程?
大家好,我是一名开源项目维护者,也是一名 AIGC 技术讲师。过去几年里,我看到太多初学者卡在“学了就忘、看了不会”的怪圈里——他们反复刷视频、读文档,却始终不敢打开编辑器写一行代码。我自己当初学编程时也这样:买了十几本技术书,结果连第一个“Hello World”都拖了一个月才跑通。
后来我明白了:技术不是看会的,是练会的。今天这篇教程,不讲大道理,只带你动手做三件事:安装一个工具、写一段智能代码、部署一个迷你区块链。全程只需 30 分钟,但你会真正理解“技术探索与实践”的价值。
一、先装上你的“副驾驶”:GitHub Copilot
在开始前,我们先装一个能帮你写代码的 AI 工具——GitHub Copilot。它就像编程时的副驾驶,你描述需求,它生成代码。对新手来说,这是降低门槛的神器。
安装步骤(以 VS Code 为例):
- 下载并安装 Visual Studio Code
- 打开 VS Code,点击左侧扩展图标(或按
Ctrl+Shift+X) - 搜索 “GitHub Copilot”,点击安装
- 安装后重启 VS Code,登录你的 GitHub 账号(需有 Copilot 权限,学生可免费申请)
💡 提示:如果你还没有 GitHub 账号,请先注册一个。它是全球开发者共享代码的“图书馆”,也是你未来展示作品的地方。
小测试:让 Copilot 写个加法函数
新建一个文件 math.js,输入以下注释:
// 写一个函数,接收两个数字,返回它们的和
按下回车,Copilot 很可能自动生成:
function add(a, b) {
return a + b;
}
是不是很神奇?但这不是魔法,而是你和工具的协作。你负责思考“做什么”,工具负责“怎么做”。这就是现代开发的起点。
二、理解三个关键词:工具、区块链、Copilot
很多新手被术语吓住,其实它们比你想象的简单:
| 关键词 | 通俗解释 | 类比 |
|---|---|---|
| 工具 | 帮你更高效完成任务的软件或服务 | 就像厨师用锅铲,画家用画笔 |
| 区块链 | 一种不可篡改的“数字账本” | 类似银行流水,但公开透明且无法涂改 |
| GitHub Copilot | 基于 AI 的代码自动补全工具 | 像有个资深程序员坐在你旁边实时建议 |
重点来了:工具不是目的,而是手段。我们用 Copilot 快速搭建原型,再用区块链理解“数据如何被信任”,最终目标是通过实践建立技术直觉。
三、动手:用 JavaScript 实现一个迷你区块链
别担心,我们不碰复杂的加密或共识算法。这个“玩具级”区块链只有两个功能:添加区块 和 验证链是否完整。整个过程约 50 行代码,Copilot 会帮你写大部分。
步骤 1:创建项目目录
mkdir my-first-blockchain
cd my-first-blockchain
npm init -y
步骤 2:新建 blockchain.js,让 Copilot 帮你写基础结构
在文件顶部输入:
// 定义一个区块类,包含 index, timestamp, data, previousHash, hash
Copilot 可能生成:
class Block {
constructor(index, timestamp, data, previousHash = '') {
this.index = index;
this.timestamp = timestamp;
this.data = data;
this.previousHash = previousHash;
this.hash = this.calculateHash();
}
calculateHash() {
// 这里需要一个哈希函数,稍后补充
}
}
步骤 3:补充哈希计算(使用内置 crypto 模块)
在文件顶部加上:
const crypto = require('crypto');
然后完善 calculateHash:
calculateHash() {
return crypto
.createHash('sha256')
.update(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data))
.digest('hex');
}
🛠️ 小知识:
sha256是一种加密哈希算法,能把任意长度的数据变成固定长度的“指纹”。哪怕数据改一个字,哈希值就完全不同。
步骤 4:实现区块链类
继续输入注释:
// 定义一个区块链类,包含 chain 数组,创世区块,添加区块方法
Copilot 通常会生成:
class Blockchain {
constructor() {
this.chain = [this.createGenesisBlock()];
}
createGenesisBlock() {
return new Block(0, "01/01/2024", "Genesis Block", "0");
}
getLatestBlock() {
return this.chain[this.chain.length - 1];
}
addBlock(newBlock) {
newBlock.previousHash = this.getLatestBlock().hash;
newBlock.hash = newBlock.calculateHash();
this.chain.push(newBlock);
}
}
步骤 5:验证链是否被篡改
再加一个方法:
// 验证区块链是否有效:检查每个区块的 hash 和 previousHash 是否匹配
Copilot 会建议:
isChainValid() {
for (let i = 1; i < this.chain.length; i++) {
const currentBlock = this.chain[i];
const previousBlock = this.chain[i - 1];
if (currentBlock.hash !== currentBlock.calculateHash()) {
return false; // 当前区块被篡改
}
if (currentBlock.previousHash !== previousBlock.hash) {
return false; // 链接断裂
}
}
return true;
}
步骤 6:运行测试
在文件末尾添加:
// 测试
let myCoin = new Blockchain();
myCoin.addBlock(new Block(1, "02/01/2024", { amount: 5 }));
myCoin.addBlock(new Block(2, "03/01/2024", { amount: 10 }));
console.log(JSON.stringify(myCoin, null, 2));
console.log("Is valid?", myCoin.isChainValid());
// 尝试篡改
myCoin.chain[1].data = { amount: 100 };
console.log("After tampering:", myCoin.isChainValid());
保存后,在终端运行:
node blockchain.js
你会看到输出:
- 初始链有效(
true) - 篡改后无效(
false)
恭喜!你刚刚亲手实现了区块链的核心机制:不可篡改性。
四、新手常见问题解答
Q1:Copilot 生成的代码安全吗?
A:Copilot 是辅助工具,不是裁判。它可能生成有漏洞或过时的代码。永远要理解它生成的内容,就像司机不能完全依赖自动驾驶。
Q2:区块链一定要用加密货币吗?
A:完全不用!区块链本质是“可信数据结构”。你可以用它做投票系统、学历认证、供应链追踪——只要需要“防篡改+可追溯”。
Q3:我写的代码太简单,有意义吗?
A:所有复杂系统都从简单原型开始。Linux 最初只是 Linus 在家写的玩具,比特币白皮书只有 9 页。关键是迈出第一步。
Q4:环境配置太麻烦,想放弃怎么办?
A:试试在线开发环境(如 GitHub Codespaces 或 Replit),免安装直接写代码。但长期建议本地配置,这是开发者的基本功。
五、给你的三条学习建议
每天写 10 行代码
不必追求大项目。今天实现一个函数,明天调试一个 bug,积累起来就是能力。善用工具,但别依赖
Copilot 能加速开发,但你要问自己:“如果没它,我会怎么写?” 主动思考才能成长。把作品放到 GitHub
即使是一个小脚本,也 push 到仓库。这不仅是备份,更是你技术成长的“时间胶囊”。未来面试时,一个活跃的 GitHub 比简历更有说服力。
六、下一步你可以做什么?
完成这个迷你区块链后,你可以尝试:
- ✅ 给区块加上“工作量证明”(PoW):要求哈希以若干个 0 开头,模拟挖矿
- ✅ 用 Express 搭建一个 API:通过 HTTP 请求添加区块
- ✅ 部署到 Vercel 或 Render:让全世界都能访问你的链
或者换个方向:
- 用 Copilot 快速生成一个 Todo 应用
- 在 GitHub 上找一个带
good first issue标签的开源项目,提交第一个 PR
最后的话
我当初学区块链时,花了两周才搞懂默克尔树。但现在回头看,真正让我突破的,不是那本厚书,而是某天晚上手抖敲下的第一行 console.log("Block created")。
技术世界没有“准备好”这回事。你永远会在实践中遇到新问题,而解决它们的过程,就是你成为工程师的路。
所以,别等“学会”再开始——边做边学,才是最快的路径。
现在,关掉这篇文章,打开你的编辑器。
写一行代码,然后告诉我:你创造了什么?

评论 0