Claude Code 八荣八耻
以瞎猜接口为耻,以认真查询为荣!Claude Code开发者的道德准则,让你在欢声笑语中学会正确的AI编程姿势。
前言:为什么需要"八荣八耻"?
在AI编程的江湖中,总有一些开发者走火入魔,犯下种种"罪行"。为了拯救这些迷途的羔羊,我们特制定了Claude Code开发者的"八荣八耻",让大家在哈哈大笑中学会正确的开发姿势。
温馨提示:本文纯属娱乐,但道理都是真的。如有雷同,纯属你也是受害者。
Claude Code 八荣八耻全文
❌ 以瞎猜接口为耻
总有开发者觉得自己是API预言家,不看文档就开始猜接口参数。
错误示例:
// 我猜这个API应该是这样的
fetch('/api/user/getData', {
method: 'POST',
body: JSON.stringify({
userId: 123,
type: 'all' // 我猜的
})
})
✅ 以认真查询为荣
真正的高手会认真查阅API文档,确保每个参数都准确无误。
正确示例:
// 查阅文档后的正确调用
fetch('/api/v1/users/profile', {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
})
❌ 以模糊执行为耻
"差不多就行了"是很多bug的根源,模糊的需求理解导致模糊的代码实现。
错误示例:
// 大概是这个意思吧
function processData(data) {
// 应该是要处理一下数据
return data.map(item => {
// 好像要转换格式?
return { ...item, processed: true };
});
}
✅ 以寻求确认为荣
不确定的时候主动询问,确保理解准确后再动手编码。
正确示例:
// 确认需求后的精确实现
function transformUserData(users, targetFormat) {
/**
* 根据产品需求文档 PRD-2024-001
* 将用户数据转换为前端展示格式
*/
return users.map(user => ({
id: user.userId,
displayName: `${user.firstName} ${user.lastName}`,
avatar: user.profileImage || '/default-avatar.png',
lastActive: formatDate(user.lastLoginTime)
}));
}
❌ 以臆想业务为耻
自以为懂业务,结果做出来的功能和需求南辕北辙。
错误示例:
// 我觉得用户应该需要这个功能
class UserManager {
autoSaveUserPreferences() {
// 我觉得应该自动保存用户偏好
// 结果用户根本不需要这个功能
}
}
✅ 以人类确认为荣
主动与产品经理、设计师沟通,确保功能符合真实需求。
正确示例:
// 与产品确认后的实现
class UserPreferences {
/**
* 根据用户研究报告,用户希望手动控制保存时机
* 产品需求:点击保存按钮时才保存偏好设置
*/
savePreferences(preferences) {
return this.api.updateUserPreferences(preferences);
}
}
❌ 以创造接口为耻
明明有现成的API不用,非要自己造轮子,结果bug一堆。
错误示例:
// 重复造轮子
function myCustomDateFormatter(date) {
// 自己实现日期格式化,bug无数
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${month}-${day}`; // 没考虑补零
}
✅ 以复用现有为荣
善用现有的库和API,站在巨人的肩膀上编程。
正确示例:
// 使用成熟的库
import { format } from 'date-fns';
function formatDate(date) {
return format(date, 'yyyy-MM-dd');
}
// 或者使用原生API
function formatDateNative(date) {
return date.toISOString().split('T')[0];
}
❌ 以跳过验证为耻
"测试?那是什么?能吃吗?"——某位勇敢的开发者如是说。
错误示例:
// 直接上线,祈祷不出bug
function processPayment(amount, cardNumber) {
// 没有任何验证
return submitPayment(amount, cardNumber);
}
✅ 以主动测试为荣
测试驱动开发,让bug无处遁形。
正确示例:
// 完善的验证和测试
function processPayment(amount, cardNumber) {
// 输入验证
if (!amount || amount <= 0) {
throw new Error('Invalid amount');
}
if (!isValidCardNumber(cardNumber)) {
throw new Error('Invalid card number');
}
return submitPayment(amount, cardNumber);
}
// 对应的测试
describe('processPayment', () => {
it('should throw error for invalid amount', () => {
expect(() => processPayment(0, '1234567890123456'))
.toThrow('Invalid amount');
});
});
❌ 以破坏架构为耻
为了快速实现功能,随意破坏项目架构,留下技术债务。
错误示例:
// 在组件里直接写业务逻辑
function UserProfile() {
const [user, setUser] = useState(null);
useEffect(() => {
// 直接在组件里写API调用
fetch('/api/user')
.then(res => res.json())
.then(data => {
// 直接在这里处理业务逻辑
const processedData = data.map(/* 复杂处理 */);
setUser(processedData);
});
}, []);
}
✅ 以遵循规范为荣
遵循项目架构规范,保持代码的可维护性。
正确示例:
// 遵循架构规范
function UserProfile() {
const { user, loading, error } = useUser();
if (loading) return ;
if (error) return ;
return ;
}
// 业务逻辑在自定义Hook中
function useUser() {
const [state, setState] = useState({
user: null,
loading: true,
error: null
});
useEffect(() => {
userService.getCurrentUser()
.then(user => setState({ user, loading: false, error: null }))
.catch(error => setState({ user: null, loading: false, error }));
}, []);
return state;
}
❌ 以假装理解为耻
不懂装懂,结果写出来的代码连自己都看不懂。
错误示例:
// 复制粘贴的代码,完全不理解
function mysteryClosure() {
return (function(x) {
return function(y) {
return function(z) {
// 我也不知道这是干什么的
return x + y + z;
};
};
})(42);
}
✅ 以诚实无知为荣
承认自己的不足,主动学习和请教。
正确示例:
// 诚实地承认不懂,然后学习
function createAdder(initialValue) {
/**
* 这是一个柯里化函数的例子
* 我刚学会柯里化,这里是我的理解:
* 1. 外层函数接收初始值
* 2. 返回一个新函数,该函数可以接收另一个值
* 3. 最终返回两个值的和
*/
return function(valueToAdd) {
return initialValue + valueToAdd;
};
}
const addFive = createAdder(5);
const result = addFive(3); // 8
❌ 以盲目修改为耻
看到代码就想改,不管三七二十一先重构再说。
错误示例:
// 看到老代码就想重写
// 原来的代码(虽然老但是稳定)
function calculateTax(income) {
if (income <= 5000) return 0;
if (income <= 8000) return income * 0.03;
if (income <= 17000) return income * 0.1;
// ... 更多税率计算
}
// 盲目重构后(引入了bug)
function calculateTax(income) {
const taxBrackets = [
{ min: 0, max: 5000, rate: 0 },
{ min: 5000, max: 8000, rate: 0.03 },
// 忘记了边界条件处理
];
// 新的实现有bug但自己不知道
}
✅ 以谨慎重构为荣
重构前先理解代码,确保有充分的测试覆盖。
正确示例:
// 谨慎的重构过程
// 1. 先为原有代码添加测试
describe('calculateTax', () => {
it('should return 0 for income <= 5000', () => {
expect(calculateTax(3000)).toBe(0);
expect(calculateTax(5000)).toBe(0);
});
it('should calculate 3% for income 5001-8000', () => {
expect(calculateTax(6000)).toBe(180);
});
// ... 更多测试用例
});
// 2. 在测试保护下进行重构
function calculateTax(income) {
const taxBrackets = [
{ min: 0, max: 5000, rate: 0 },
{ min: 5001, max: 8000, rate: 0.03 },
{ min: 8001, max: 17000, rate: 0.1 },
// 仔细处理边界条件
];
for (const bracket of taxBrackets) {
if (income >= bracket.min && income <= bracket.max) {
return income * bracket.rate;
}
}
// 处理超出最高税率的情况
return income * 0.45;
}
// 3. 运行测试确保重构正确
如何践行"八荣八耻"
🔍 建立查询习惯
- 遇到不确定的API先查文档
- 使用IDE的智能提示功能
- 建立个人的API参考笔记
💬 加强沟通协作
- 定期与产品经理对齐需求
- 代码review时主动提问
- 不懂就问,不要假装理解
🧪 重视测试质量
- 为关键功能编写单元测试
- 使用测试驱动开发(TDD)
- 定期进行代码质量检查
📚 持续学习成长
- 承认知识盲区,主动学习
- 关注技术社区和最佳实践
- 定期重构和优化代码
总结
Claude Code的"八荣八耻"虽然是以搞笑的形式呈现,但每一条都是血泪教训的总结。在AI编程的道路上,保持谦逊、严谨、负责的态度,才能写出高质量的代码。
记住这八条准则:
- ✅ 以认真查询为荣,以瞎猜接口为耻
- ✅ 以寻求确认为荣,以模糊执行为耻
- ✅ 以人类确认为荣,以臆想业务为耻
- ✅ 以复用现有为荣,以创造接口为耻
- ✅ 以主动测试为荣,以跳过验证为耻
- ✅ 以遵循规范为荣,以破坏架构为耻
- ✅ 以诚实无知为荣,以假装理解为耻
- ✅ 以谨慎重构为荣,以盲目修改为耻
最后的话:编程如做人,诚实、谦逊、负责任。愿每一位Claude Code开发者都能成为有道德、有技术、有担当的好程序员!