加班内卷的IT行业,我选择躺平:用实战项目找回编程初心
大家好,我是小林,一名985毕业的全栈工程师,也是掘金上写过几十篇入门教程的老讲师。今天这篇教程有点不一样——它不讲“如何卷赢别人”,而是想和你聊聊:在加班成常态、内卷成风气的IT行业,如何通过做有意义的小项目,找回对技术的热爱,实现“清醒躺平”。
我当初学编程时,也经历过每天加班到凌晨、周末被紧急需求打断的阶段。但后来我发现:真正的技术成长,不在于工时长短,而在于是否亲手做出能解决问题的作品。于是,我开始用业余时间做小而美的实战项目,比如今天要带你一起做的这个——一个基于区块链思想的“工作量证明”后端服务(别担心,不需要懂加密货币!)。
这篇文章会手把手教你搭建一个极简后端项目,融入区块链的核心理念(去中心化、不可篡改),全程代码清晰、逻辑简单,零基础也能跟着敲。你会发现:写代码不是为了应付老板,而是为了创造价值。
一、我们要做什么?一个“反内卷”小项目
项目目标:开发一个简单的 RESTful API 后端服务,记录每日“有效工作时间”(比如专注编码2小时),并通过类似区块链的机制保证数据一旦提交就无法被篡改。
听起来很高大上?其实核心就两点:
- 用 Node.js 写个后端接口
- 模拟区块链的“链式结构”存储数据
为什么选这个项目?
- ✅ 不涉及复杂密码学,只用哈希函数
- ✅ 全程本地运行,无需部署服务器
- ✅ 代码不到100行,适合新手
- ✅ 理解后可扩展为个人时间管理工具
二、环境准备:5分钟搭好开发环境
我们只需要安装两个工具:
| 工具 | 作用 | 安装方式 |
|---|---|---|
| Node.js | 运行 JavaScript 后端代码 | 官网下载 LTS 版 |
| VS Code | 代码编辑器(推荐) | 官网下载 |
验证安装
打开终端(Mac/Linux 用 Terminal,Windows 用 PowerShell 或 CMD),输入:
node -v # 应显示 v18.x 或更高
npm -v # 应显示 8.x 或更高
初始化项目
在你想存放代码的文件夹中执行:
mkdir anti-burnout-blockchain
cd anti-burnout-blockchain
npm init -y
npm install express crypto-js
express:轻量级 Node.js 后端框架crypto-js:提供哈希函数(如 SHA256)
三、核心概念:用大白话讲“区块链”
很多教程一上来就讲“去中心化”“共识机制”,把新手吓跑。其实区块链最核心的思想就一条:
每个新数据块,都包含前一个块的“指纹”(哈希值),形成链条。改任意一块,后面所有块都会失效。
类比理解
想象你有一本手账:
- 第1页写:“今天专注编码2小时”
- 第2页写:“昨天那页的指纹是 ABC123 + 今天专注1.5小时”
- 第3页写:“昨天那页的指纹是 XYZ789 + 今天摸鱼0.5小时”
如果你偷偷把第1页改成“今天专注5小时”,那么第2页记录的“ABC123”就对不上了,整本手账作废!
关键术语解释
| 术语 | 通俗解释 | 本项目中的体现 |
|---|---|---|
| 区块(Block) | 一页手账 | 一个包含时间、描述、前区块哈希的对象 |
| 哈希(Hash) | 数据的唯一指纹 | 用 SHA256 生成字符串 |
| 链(Chain) | 手账本 | 数组,按顺序存所有区块 |
四、实战项目:一步步写代码
步骤1:创建基础后端服务
新建文件 server.js,粘贴以下代码:
// server.js
const express = require('express');
const app = express();
app.use(express.json()); // 解析 JSON 请求体
const PORT = 3000;
app.listen(PORT, () => {
console.log(`✅ 服务启动成功!访问 http://localhost:${PORT}`);
});
运行:
node server.js
看到 ✅ 提示即成功。
步骤2:定义区块结构
在 server.js 顶部添加:
const CryptoJS = require('crypto-js');
// 创建新区块
function createBlock(data, previousHash) {
const timestamp = new Date().toISOString();
const hash = CryptoJS.SHA256(timestamp + data + previousHash).toString();
return {
timestamp,
data, // 例如:"专注编码2小时"
previousHash, // 上一个区块的哈希
hash // 当前区块的哈希
};
}
步骤3:初始化区块链
在 createBlock 下方添加:
// 创世区块(第一个区块)
const genesisBlock = createBlock("创世区块:拒绝无效加班!", "0");
// 区块链数组
let blockchain = [genesisBlock];
步骤4:添加 API 接口
在 app.listen 前添加两个路由:
// GET /chain - 查看所有记录
app.get('/chain', (req, res) => {
res.json(blockchain);
});
// POST /add - 添加新记录
app.post('/add', (req, res) => {
const { data } = req.body; // 从请求体获取 data
if (!data) {
return res.status(400).json({ error: "请提供 data 字段" });
}
const lastBlock = blockchain[blockchain.length - 1];
const newBlock = createBlock(data, lastBlock.hash);
blockchain.push(newBlock);
res.json({ message: "✅ 记录成功!拒绝内卷,从记录真实工作开始", block: newBlock });
});
完整代码
// server.js
const express = require('express');
const CryptoJS = require('crypto-js');
const app = express();
app.use(express.json());
// 创建区块
function createBlock(data, previousHash) {
const timestamp = new Date().toISOString();
const hash = CryptoJS.SHA256(timestamp + data + previousHash).toString();
return { timestamp, data, previousHash, hash };
}
// 初始化区块链
const genesisBlock = createBlock("创世区块:拒绝无效加班!", "0");
let blockchain = [genesisBlock];
// API 路由
app.get('/chain', (req, res) => {
res.json(blockchain);
});
app.post('/add', (req, res) => {
const { data } = req.body;
if (!data) {
return res.status(400).json({ error: "请提供 data 字段" });
}
const lastBlock = blockchain[blockchain.length - 1];
const newBlock = createBlock(data, lastBlock.hash);
blockchain.push(newBlock);
res.json({ message: "✅ 记录成功!拒绝内卷,从记录真实工作开始", block: newBlock });
});
// 启动服务
const PORT = 3000;
app.listen(PORT, () => {
console.log(`✅ 服务启动成功!访问 http://localhost:${PORT}`);
});
五、测试你的“反内卷”系统
测试1:查看初始链
浏览器访问 http://localhost:3000/chain,你会看到创世区块。
测试2:添加新记录
用 curl 或 Postman 发送 POST 请求:
curl -X POST http://localhost:3000/add \
-H "Content-Type: application/json" \
-d '{"data": "今日专注编码3小时,拒绝会议轰炸"}'
返回结果应包含新生成的区块,其 previousHash 等于创世区块的 hash。
验证“不可篡改”
尝试手动修改 blockchain 数组中某个区块的 data,再访问 /chain —— 虽然数据变了,但后续区块的 previousHash 仍指向旧哈希,系统使用者一眼就能发现异常!
💡 这就是区块链防篡改的核心:不是不能改,而是改了会被立刻发现。
六、新手常见问题解答
Q1:这真的算区块链吗?
A:这是简化版教学模型,省略了 P2P 网络、挖矿等复杂机制,但保留了“链式+哈希”的核心思想。正如学开车先从模拟器开始,理解原理比追求“正宗”更重要。
Q2:数据存在内存里,重启就没了怎么办?
A:完全正确!生产环境需持久化存储(如 SQLite、MongoDB)。但作为入门项目,内存存储让你专注理解逻辑。下一步可尝试加数据库。
Q3:SHA256 是什么?安全吗?
A:SHA256 是一种哈希算法,输入任意文本,输出固定长度的“指纹”。它具备雪崩效应(改1个字符,哈希大变),适合教学。真实区块链还需考虑更多安全因素。
Q4:我能用这个记录什么?
A:任何你想“诚实记录”的事情:
- “今日深度工作2小时”
- “拒绝无意义加班,准时下班”
- “学习新技术1小时”
重点不是技术多酷,而是你开始关注自己的真实产出。
七、学习建议:躺平≠放弃,而是高效成长
我当初学的时候,也曾以为必须熬夜刷题、接外包才能进步。后来才明白:可持续的学习节奏,远胜于透支健康的冲刺。
给你的三个建议:
每天30分钟实战 > 每周突击8小时
像今天这样,做一个小功能,跑通、理解、改进。用项目驱动学习
想学后端?就做个 API;想学前端?给这个项目加个网页界面。保护自己的精力
技术是工具,不是枷锁。学会说“不”,把时间留给真正重要的事。
下一步可探索方向:
| 方向 | 学习内容 | 推荐资源 |
|---|---|---|
| 数据持久化 | 将区块链存入 SQLite | better-sqlite3 库文档 |
| 前端展示 | 用 Vue/React 显示链 | Vue 官方教程 |
| 真实区块链 | 了解 Ethereum 开发 | CryptoZombies 互动教程 |
结语:你的代码,值得为热爱而写
在这个鼓吹“狼性文化”的时代,选择“躺平”不是消极,而是清醒地把精力用在刀刃上。通过今天这个小项目,你不仅学会了后端开发、理解了区块链思想,更重要的是——你开始用技术为自己发声。
记住:优秀的程序员,不在于写了多少行代码,而在于解决了多少真实问题。
下次当你被无意义的需求压得喘不过气时,不妨打开这个小项目,加一条记录:“此刻,我选择专注自己”。
代码已开源在 GitHub(可自行创建),欢迎 fork、修改、分享。我是小林,我们下篇教程见!
附:完整项目目录结构
anti-burnout-blockchain/
├── package.json
└── server.js

评论 0