在AI横行的现在,对于我们程序开发带来了很多的便利性,曾几何时,当我想实现一个功能,而苦于无从下笔的时候,在浏览器里疯狂的搜索,过滤,验证,从众多的论坛,文章中找到自己需要的功能,可以说费时费力。
而如今的环境,当我想大到实现一个具体功能,小到实现一个函数,只需要在AI对话框里输入自己的需求,AI便能给出具体的实现步骤,对于身为程序员的我来说真的是相见恨晚啊。
但是在AI给我们带来便利性的同时,我们也在丧失我们的知识学习能力。当AI给出我们具体实现方法之后,可能我们并不需要完全懂这段代码是具体如何运行的,只需要在自己测试后发现没有bug,能顺利运行就会拿去使用了,毕竟复制粘贴才是最快的。
以前当我们需要使用某个库,框架或者算法的时候,需要一步一步去学习,掌握,调试,这种过程本身就是一种成长,现在AI直接生成代码,简化到了install xx,ctr + c,ctr + v,这一过程我们失去了思考和学习能力,会导致我们技术能力的空心化。
假如业务中需要实现这样一个功能,根据年龄来返回年龄段,比如说7岁就返回1-10,15岁返回11-20,以此类推。
初级程序员应该会这样实现这个功能,直接if else一把梭。
function getRangeByAge(age) {
if (age <= 10) {
return "1-10";
} else if (age <= 15) {
return "11-20";
}
// 这里可以继续添加更多年龄范围的判断
}
中级程序这样实现,或许会适当考虑一下代码的扩展性,将返回内容提取出来,万一产品要求返回内容是1岁到10岁 11岁到20岁 这种呢。
function backText(start, end) {
return `${start}-${end}`
// return `${start}岁到${end}岁`
}
function getRangeByAge(age) {
if (age <= 10) {
return backText(1, 10);
} else if (age <= 20) {
return backText(11, 20);
}
// 可以更优雅地处理更多范围,例如使用对象映射
}
资深程序员这样实现,既能兼顾输出,也能兼顾快速调整需求。
// 定义年龄范围映射对象,可方便添加更多年龄范围映射
const rangeMap = {
10: [1, 10],
15: [11, 15],
// 可以方便地添加更多年龄范围映射
};
// 生成表示年龄范围的文本
function backText(start, end) {
return `${start}-${end}`;
}
// 根据输入的年龄获取对应的年龄范围文本
function getRangeByAge(age) {
for (let upperAge in rangeMap) {
if (age <= parseInt(upperAge)) {
const [start, end] = rangeMap[upperAge];
return backText(start, end);
}
}
// 当输入的年龄大于所有定义的上界年龄时,返回未匹配到范围的提示
return "未找到匹配的年龄范围";
}
AI给我们的实现方式是这样的。
function getRangeString(input) {
// 计算起始数字
const start = Math.floor((input - 1) / 10) * 10 + 1;
// 计算结束数字
const end = start + 9;
// 拼接成字符串
return `${start}-${end}`;
}
可以看出,AI直接按需求给出最直接了当的方案。当年龄段比较多的时候,AI给的代码是最简洁明了的。但是这也带来了一个问题,后续需求要是年龄段是1-5,6-10,11-15这种,那又得改。
虽说很方便,功能也实现了,但是后期维护要是没写备注的情况下,是不是又得问AI了,当然这个功能很简单,初级写法并不是不好,毕竟一目了然,后续修改不就是复制粘着嘛。
当我们代码中到处充斥着AI实现的代码时,如果技术能力不扎实,对于后期维护起来也是个问题,或许你会觉后期再把文件丢给AI,让它改呗。当然,现在AI还处于发展阶段,各大厂商都推出免费版的,但是后期完善后估计就会来收韭菜了,不会让我们用得这么爽,那就真的是付费写代码了。
所以说,虽然AI确实给我们开发带来了很大的便捷性和快速开发的能力,就算是能力不强的新手也能写出简洁的代码,实现复杂的需求,但是万丈高楼平地起,只有自身基础扎实了,才能掌握主动权,让AI替我们杂活累活,而不是写了一大段代码,连自己都读不懂却实现了需求。