Skip to content

필사 모드: AI 时代生存指南 第7篇:写给初级开发者的特别指南 - 与 AI 共同成长

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

AI 时代生存指南 第7篇:写给初级开发者的特别指南 - 与 AI 共同成长

在写这篇文章之前,我想起了最近遇到的几位初级开发者。

刚从编程训练营毕业、正在找第一份工作的26岁开发者 Suhyeon 说了这样一句话:"Copilot 把代码都写好了……我真的有必要努力学算法吗?会不会像我这样的初级开发者已经变得不再需要了?"

已经工作8个月的28岁开发者 Minjun 则不同:"其实我只是直接用 Copilot 吐出来的代码……但不知道这样对不对。感觉不到自己的实力在提升。"

而大四学生 Jiyoung 则坦率地问道:"我看到一篇文章说 AI 会让初级开发者的岗位全部消失,我是不是干脆该换个方向?"

这三位的不安与困惑,正是我写这篇文章的原因。先把结论说在前面。

AI 不会取代初级开发者。但根据你如何使用 AI,两年后的你可能会成为一名完全不同的开发者。


1. 理解初级开发者的不安

老实说,不安并非毫无理由。让我们直面现实。

正在发生的事情

GitHub Copilot、Cursor、Claude、GPT-4 这类 AI 工具会生成代码。过去初级开发者要花上一整天才能写完的样板代码、CRUD API、简单的工具函数,如今几秒钟就能生成出来。

一些公司正在放缓招聘速度,理由是"有了 AI,现有团队就能做更多事,没必要再招新人"。

面试也在改变。"在白板上解这道算法题"正在变成"用 AI 展示你能多快、多好地解决这个实际问题"。

但在回应这种不安之前

让我们先回顾一下历史。

1990年代,编译器让汇编开发者感到担忧。2000年代,高级框架(Rails、Django)曾引发"这样下去会培养出一批不懂基础的开发者"的忧虑。2010年代,云计算与 DevOps 自动化被认为会让系统管理员的工作消失。

结果如何?开发者的需求持续增长,而且每当工具进化一次,开发者能够解决的问题的规模与复杂度就随之扩大。

AI 时代也在发生同样的事情。只是,速度更快。


2. 好消息:AI 不是取代初级开发者,而是放大他们

AI 是杠杆

一个真正懂得如何使用 AI 编程工具的初级开发者,和不用 AI 的初级开发者相比,生产力差距会有多大?

从实际现场的反馈来看,善于利用 AI 的开发者在重复性的编码工作中能体验到3到5倍的速度提升。这意味着他们能尝试更多东西——可以做更多实验,学到更多样的方法。

"放大"意味着什么

问题在于,放大的究竟是什么。

没有实力时,AI 就是一个能快速生成烂代码的工具。有实力时,AI 就是一个能快速做出好代码的工具。

# AI 可能生成的代码示例(功能可用,但存在问题的版本)
def get_user_data(user_id):
    conn = psycopg2.connect("postgresql://localhost/mydb")
    cursor = conn.cursor()
    cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
    return cursor.fetchone()

这段代码能运行,但存在多个问题:有 SQL 注入漏洞,连接没有被正确关闭,也没有使用连接池。要在 AI 生成这段代码时就意识到"这里有问题",需要基础知识作为支撑。

有基础的初级开发者会立刻发现问题并修正它,没有基础的初级开发者则会直接复制粘贴。一年之后,这两个人之间的差距将会是巨大的。


3. AI 时代依然不可或缺的基本功

计算机科学基础:数据结构与算法

"算法反正 AI 都能搞定,没必要学"——这种想法很危险。

学习数据结构和算法的目的,并不只是为了通过面试。核心在于理解「什么样的工具适合什么样的场景、为什么适合」这一点。

# 如果让 AI "写一段能快速查找用户数据的代码"
# 它会提出好几种方法

# 方法1:列表顺序查找 - O(n)
def find_user_list(users, user_id):
    for user in users:
        if user['id'] == user_id:
            return user
    return None

# 方法2:字典哈希查找 - O(1)
def find_user_dict(users_dict, user_id):
    return users_dict.get(user_id)

# 方法3:对已排序列表做二分查找 - O(log n)
import bisect
def find_user_sorted(sorted_ids, users, user_id):
    idx = bisect.bisect_left(sorted_ids, user_id)
    if idx < len(sorted_ids) and sorted_ids[idx] == user_id:
        return users[idx]
    return None

如果只有10个用户,方法1就足够了。但如果有1亿用户呢?方法2就是必需的。要做出这个判断,需要具备时间复杂度的概念。当 AI 说"两种都可以用"的时候,该选哪一个,是需要你自己来决定的。

系统层面的理解:操作系统、网络、数据库

这三者是所有软件的基础。要理解 AI 生成的代码"为什么慢"、"为什么偶尔会崩溃",都需要系统层面的知识。

操作系统方面的理解

进程与线程的区别、内存管理的基础、文件系统的运行方式——不了解这些,就无法调试并发相关的 bug 或内存泄漏问题。

# 你能看出这段代码为什么有问题吗?
import threading

counter = 0

def increment():
    global counter
    for _ in range(100000):
        counter += 1  # 出现竞态条件!

threads = [threading.Thread(target=increment) for _ in range(10)]
for t in threads: t.start()
for t in threads: t.join()

print(counter)  # 不会打印出 1000000

如果不理解竞态条件,就发现不了这段代码的问题。AI 有可能生成这样的代码,问它的话也能告诉你问题所在。但当这个问题真的在生产服务中出现时,能凭直觉判断出"这是竞态条件",靠的正是系统层面的知识。

网络方面的理解

HTTP/HTTPS、TCP/UDP、DNS、CDN 的基本概念。当收到 API "很慢"的反馈时,你需要知道该从哪里开始排查。

# 网络调试工具 —— 基本理解必不可少
curl -v https://api.example.com/users  # 查看 HTTP 请求/响应详情
traceroute api.example.com            # 追踪数据包路径
dig api.example.com                   # DNS 查询
netstat -an | grep ESTABLISHED        # 查看当前连接状态

数据库方面的理解

索引为什么必要、N+1 查询问题是什么、事务为什么重要——不了解这些,就无法阻止 AI 生成的 ORM 代码把数据库拖垮。

# N+1 查询问题示例
# 错误做法:会产生 N+1 查询
orders = Order.objects.all()
for order in orders:
    print(order.user.name)  # 每个订单都会触发一次单独的查询!
    # 100个订单 = 101次查询

# 正确做法:使用 prefetch_related
orders = Order.objects.prefetch_related('user').all()
for order in orders:
    print(order.user.name)  # 只需2次查询即可解决

AI 有可能生成第一种写法的代码。这是不是问题,判断权取决于你的数据库知识。

代码阅读能力:验证 AI 代码

不能盲目相信并直接使用 AI 生成的代码,必须亲自阅读并理解它。

培养代码阅读能力的方法:

  • 阅读知名开源项目的代码(requests、Flask、FastAPI 等)
  • 主动参与 PR 评审
  • 不要直接照搬 AI 生成的代码,而是逐行理解之后再使用

调试能力:最重要的基础能力

需要摆脱"到处打印 print"的方式,学会系统化的调试方法。

# Python 调试器 pdb 的基础用法
import pdb

def calculate_discount(price, user_type):
    pdb.set_trace()  # 在这里暂停执行,进入交互模式
    if user_type == "vip":
        discount = price * 0.2
    elif user_type == "member":
        discount = price * 0.1
    else:
        discount = 0
    return price - discount

# pdb 命令:
# n (next):执行下一行
# s (step):进入函数内部
# p 变量名:打印变量值
# c (continue):继续执行直到下一个断点
# l (list):查看当前位置附近的代码

你可以让 AI"帮忙找 bug"。但复杂的状态相关 bug、时序问题、依赖特定环境才会出现的 bug,还是需要你亲自用调试器去追踪。


4. 把 AI 当作学习加速器来使用的方法

现在进入重点。如果正确使用 AI,学习速度可以提高3到5倍。

向 AI 请求解释,边学边用

不要只是接收代码,一定要顺便请求解释。

# 不好的做法
"用 Python 写一段二分查找代码"

# 好的做法
"用 Python 写一段二分查找代码,
并举例说明为什么这个方法是 O(log n)另外也告诉我这段代码会在哪些边界情况下失效。"

理解了解释之后,请务必自己重新动手写一遍。理解一件事,和能亲手写出来,是两回事。

理解并修改 AI 写的代码

拿到 AI 写的代码后,请遵循以下步骤。

1步:阅读代码,理解整体流程
2步:把不理解的部分拿去问 AI
3步:思考代码可能失败的场景
4步:亲自编写边界情况的测试
5步:尝试修改可以改进的部分
# 把 AI 生成的代码用于学习的示例
# 从 AI 那里拿到的代码:
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result.extend(left[i:])
    result.extend(right[j:])
    return result

# 学习活动:亲自编写测试用例
def test_merge_sort():
    assert merge_sort([]) == []           # 空列表
    assert merge_sort([1]) == [1]         # 只有1个元素
    assert merge_sort([3, 1, 2]) == [1, 2, 3]  # 基本情况
    assert merge_sort([1, 1, 1]) == [1, 1, 1]  # 重复元素
    assert merge_sort([3, 2, 1]) == [1, 2, 3]  # 逆序
    print("所有测试通过!")

test_merge_sort()

与 AI 结对编程

这是一种不把 AI 当作单纯的代码生成器,而是把它当作经验丰富的同事来使用的方法。

# 结对编程风格的提示词示例

"我正在做一个用户认证系统。
我想用 JWT token,先不要直接给我代码,
帮我说明一下应该怎么思考这个问题,
只告诉我核心概念和需要考虑的要点,让我自己先设计一遍。"

# 然后自己设计完,再追问:
"我是这样设计的:
[我的设计内容]
这个方案有没有遗漏的地方,或者可以改进的地方?"

用这种方式使用 AI,能学到的东西远比单纯拿到代码要多得多。

用 AI 学习概念

当有些概念看教科书或官方文档还是理解不了时:

"我不太理解异步编程里事件循环(event loop)的概念。
请用一个比喻来解释,就当作我是一个人在餐厅里独自跑堂。
然后再用一个简单的例子告诉我 Python 的 asyncio 是怎么实现这个机制的。"

你也可以让它用5种不同的方式解释同一个概念。其中总有一种方式能让你真正理解。


5. 两年内从初级成长为中级/资深的策略

为什么"两年"是可能的

传统上,从初级成长为资深需要5到7年。而在 AI 时代,只要有意识地努力,就有可能缩短到2到3年。不过,这是有条件的。

  • 被动地使用 AI,成长会很慢
  • 把 AI 当作主动的学习工具来使用,才能加速成长

年度成长路线图

第1年目标:打好扎实的基础 + 养成与 AI 协作的习惯

每日实践:

  • 写代码时,同时向 AI 请求解释
  • 收到的代码务必理解透彻
  • 没理解的概念,一定当天就整理清楚

每周实践:

  • 解3道算法题(LeetCode、Programmers 等)
  • 从 AI 生成的代码里找出1处可以改进的地方

每月实践:

  • 尝试提交1个开源 PR
  • 把学到的内容写成博客文章
# 到第1年年底应该能做到的事:
# - 独立设计并实现一个简单的 CRUD API(可以借助 AI# - 能说明自己写的代码的时间/空间复杂度
# - 理解基本的 SQL 查询优化
# - 对部署流水线有基本理解(CI/CD# - 养成系统化调试 bug 的习惯

第2年目标:系统设计 + 熟练运用 AI

到了第2年,你应该能超越单纯的实现,说明"为什么要这样设计"。

# 第2年适合和 AI 一起做的活动:
# 1. 系统设计练习
# "帮我设计一个 URL 短链接服务。不过我先把自己的设计给你看,
# 请你给我反馈"

# 2. 代码评审学习
# "请从资深开发者的视角评审这份 PR 代码,
# 从性能、可读性、安全性、测试覆盖率这几个方面来看"

# 3. 理解架构决策
# "我们团队决定用 Redis 做缓存。
# 请说明什么时候缓存有用,什么时候会适得其反"

资深与初级的真正差异

很多初级开发者认为资深开发者就是"写更复杂的代码"。实际上并非如此。

资深开发者是这样的人:

  • 能把复杂问题变简单的人
  • 会先问"为什么要做这个"的人
  • 能预见未来的变化,并做出灵活设计的人
  • 能帮助团队更好地运转的人

在 AI 时代,资深开发者还要再加上这些:

  • 能快速判断 AI 生成代码质量的人
  • 懂得向 AI 提出正确问题的人
  • 懂得用 AI 工具提升整个团队生产力的人

6. 打造善用 AI 的作品集

初级开发者作品集的陷阱

很多初级开发者会把"待办事项 App"或"天气 App"当作作品集。老实说,这类项目很难让你脱颖而出。

AI 时代的初级开发者作品集,应该有所不同。

作品集策略1:利用 AI 工具做实用项目

打造一个用 AI 解决了你自己真实需求的项目。

例如:

  • 用 AI 检索自己读书笔记的 App
  • 能总结 YouTube 字幕的 Chrome 扩展
  • 能轻松检索韩语法律文书的服务
# Chrome 扩展 + AI API 集成示例(background.js 概念)
# 用户在网页上选中文本后自动生成摘要的功能

# 在 manifest.json 中配置好 permissions 之后
# 在 content script 中检测被选中的文本
# 在 background service worker 中调用 AI API

async function summarizeText(selectedText) {
    const response = await fetch('https://api.openai.com/v1/chat/completions', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${API_KEY}`
        },
        body: JSON.stringify({
            model: 'gpt-4o-mini',
            messages: [
                {role: 'system', content: '请把这段文字总结成3行。'},
                {role: 'user', content: selectedText}
            ]
        })
    });
    const data = await response.json();
    return data.choices[0].message.content;
}

作品集策略2:开源贡献

为知名开源项目做贡献,是一种强有力的证明。一开始可以从小事做起。

  • 修正文档中的错别字
  • 添加测试用例
  • 修复简单的 bug

借助 AI,可以加快开源贡献的速度。

# 借助 AI 进行开源贡献的流程
# 1. 阅读项目的 CONTRIBUTING.md
# 2. 寻找带有 "good first issue" 标签的 issue
# 3. 请 AI 帮忙理解代码库
#    "在这个 Python 项目的 src/core/parser.py 里,
#     我看到这个模式反复出现,请说明一下这是什么结构"
# 4. 实现修改内容(与 AI 结对编程)
# 5. 编写测试
# 6. 提交 PR

作品集策略3:记录 AI 辅助开发的过程

展示"我是如何与 AI 协作开发的"这件事本身,就是一份作品集。可以写在开发博客里,比如:

  • "我是如何运用 AI 代码评审的"
  • "发现并修复 AI 生成代码中 bug 的案例"
  • "靠 AI 把生产力提升3倍的个人工作流"

这类文章能同时展示你的技术实力与 AI 应用能力。


7. 现实的求职策略:AI 时代招聘的变化

招聘流程的变化

编程面试的变化

许多公司正在摆脱传统的算法测验,转而采用:

  • 贴近实际工作的课题(带回家做的作业)
  • 结对编程环节(和面试官一起写代码)
  • 允许使用 AI 工具的编程挑战

在允许使用 AI 的面试中,重要的不是你能多快生成代码,而是你能多好地理解 AI 生成的代码、提出正确的问题、并对其加以改进。

作品集审查的重要性正在提升

比起简历,公司会更多地查看你实际写的代码。GitHub 主页、真实上线服务的链接、技术博客都变得更加重要。

求职策略

策略1:优先考虑创业公司

大公司更看重学历与履历,创业公司看的则是"你行不行"。如果你是一个实力过硬的初级开发者,创业公司能给你更快的职业成长机会。

策略2:结合领域专长

比起单纯的"Python 开发者","具备医疗健康领域知识 + AI API 应用能力的开发者"更能形成差异化。把你感兴趣的领域和开发能力结合起来。

策略3:善用人脉网络

活跃于开发者社区,对求职有帮助。

  • 参与 OKKY、Programmers 等社区活动
  • 参加开源相关会议(PyCon Korea、JSConf Korea 等)
  • 参加黑客松(AI 黑客松尤其推荐)

策略4:在申请材料中明确写出 AI 应用能力

# 作品集/简历中可以包含的内容示例:
#
# 技术栈部分:
# - AI 工具:使用 GitHub Copilot、Claude、Cursor 的经验
# - AI 集成经验:基于 OpenAI API、LangChain 开发应用
#
# 项目描述:
# "独立完成了利用 AI API 打造 X 服务的策划-设计-开发-部署全过程。
#  借助 ClaudeGitHub Copilot 把开发时间缩短了40%#  但所有生成的代码都经过我本人审查,并编写了测试"

写在最后:致各位初级开发者

感到不安是很自然的。但这种不安不应该导向"反正 AI 都能搞定,没必要学"这样的结论。

最危险的开发者,是那种认为"AI 都替我做了,我还学什么"的初级开发者。他们一年后依然发现不了 AI 生成的烂代码,两年后还在重复同样的错误。

成长最快的开发者,是那种会想"AI 为什么要这样写?有没有更好的方法?"的初级开发者。他们把 AI 既当老师又当工具来用,一年之后,即便没有 AI 也能写出好代码。

基本功不会背叛你。数据结构、算法、系统知识——即便 AI 工具在变、编程语言在变,这些东西依然会留下来。在 AI 替你写代码的时代,能理解"代码为什么会这样运作"的开发者,价值反而会变得更高。

而且最重要的是,第一次把服务部署上线、看到真实用户在使用它的那种感动,是 AI 给不了的。为了体验那份感动而在今天依然敲着代码的你,做得已经很好了。


本系列的下一篇,将探讨 AI 时代设计师的生存策略。

현재 단락 (1/224)

在写这篇文章之前,我想起了最近遇到的几位初级开发者。

작성 글자: 0원문 글자: 8,139작성 단락: 0/224