CTF大概是零基础入门网络安全时,被议论最多的一条路径。刷技术社区能看到不少人靠几道简单题目入了门,几年后站上了高水平赛场;也看到更多人收藏了一堆课程资源,最后连flag怎么提交都没搞清楚。我自己最初接触CTF时也以为要先精通汇编、内核、密码学才能上场,实际打了几场以后才明白:它对零基础真正的价值,不在于“难”,而在于把网络安全里那些核心问题拆成了一个个短平快的闯关任务,让你在动手和输赢之间建立起对攻防的直觉。这篇内容不做高深理论铺垫,只从“零基础到底该怎么开始”出发,把CTF的类型、方向、环境、参赛流程和成长路径一次性讲透。无论你是计算机专业学生、转行新人,还是纯粹对黑客文化好奇的爱好者,都可以照着这条路线动起来。
1. CTF到底是什么:对抗式学习的真实面目
1.1 夺旗赛的基本思想与Flag机制
CTF全称Capture The Flag,直译过来就是“夺旗赛”。它本质上不是某一种单一技术,而是把网络安全攻防知识,包装成一场需要动手解题的比赛。每道题目背后,是出题人故意构造成的一个带漏洞的环境或者谜题;选手要做的,是在规定时间内分析这个环境、找到突破口,最终拿到一串特定格式的字符,这个字符就叫flag。它通常写成类似flag{this_is_a_demo}的形式,作为你完成这道题的证明。平台收到你提交的flag后自动判分,得分越高,排名越靠前。
这个机制看起来简单,但它解决了一个零基础学习者最容易遇到的大问题——学习过程缺少明确的终点。以前很多人看安全资料时,总觉得“干什么都行,又干什么都不行”:今天翻翻漏洞原理,明天看看密码学,后天又开始装虚拟机,什么都碰了一点,但都不知道自己学得怎么样。CTF的题目强制要求你输出一个结果:做出来就是做出来了,做不出来就是没做出来,没有含糊空间。这种即时、确定的反馈,对入门阶段的学习者是极其珍贵的,它会不断告诉你“你的努力是否真的转化成了能力”。
1.2 两类主流赛制:解题赛与攻防赛
CTF赛制大体上分两类。一类叫解题赛,比赛平台会像试卷一样把题目按方向分类列出来,你答对哪道题就拿哪道题的分,常见方向有Web安全、密码学、逆向工程、二进制漏洞利用、杂项取证等。另一类叫攻防赛,每个队伍会分配一套独立的模拟业务环境,你既要防守自己环境里的漏洞不被别人打穿,也要主动去攻击其他队伍的环境抢分。这个模式节奏很快,对团队协同、应急响应能力要求很高。
| 赛制类型 | 题目形式 | 适合人群 | 零基础友好度 |
|---|---|---|---|
| 解题赛 | 按方向分类的静态题目 | 入门选手、单兵作战 | 高,可按兴趣选方向 |
| 攻防赛 | 实时攻防对抗 | 进阶选手、团队作战 | 低,建议有基础后再尝试 |
对零基础来说,我的建议非常明确:先参加解题赛。它自由度大,你可以只做自己擅长的方向,不擅长的地方完全不碰也能拿分。攻防赛等你积累了半年左右的基础再体验也不迟,那时候你才能真正体会到它的乐趣,而不是被节奏拖着走。
1.3 为什么它适合零基础玩家
很多人误以为CTF是顶尖高手才能碰的东西,实际上它有好几个天然适合零基础的属性。
第一是低门槛。CTF并不要求你所有方向全会。它就像自助餐,只要你在Web、密码、杂项等任意一个方向上能解题,就能在比赛里拿到分数。你完全可以用一个方向撑起一场比赛的入门体验,不需要成为全栈。
第二是模块化。一道题往往只集中在一个具体知识点上。比如一道简单的SQL注入题,核心就是“如何让后台拼接出你想要的查询”。你不需要先把整个Web体系学完才能上手,只要弄懂当前这个小闭环,就可以解出来。
第三是学习环境安全可控。CTF题目的环境是出题人搭好的授权模拟环境,你在里面做任何攻击操作都是被允许且被保护的。相比拿真实站点练手,这种方式不但合法合规,而且不会造成现实危害,对新手来说心里压力也小很多。
第四是赛后沉淀效应。优秀比赛结束后,社区里通常会有大量选手写writeup(解题思路分享)。你可以对照别人的思路复盘自己的卡点,形成“输入知识—动手尝试—输出结果—对比复盘”的完整学习闭环。这种闭环恰恰是最有效的自学方式之一。
2. 零基础备战路线图:能力模型与阶段拆分
2.1 先补齐三块拼图:Linux、网络协议、Python
在选任何具体方向之前,我强烈建议先把三块通用基础补上。它们是CTF所有方向的公共底座,前期不补,后期到处漏风。
第一块是Linux操作系统的日常使用。大部分题目环境、服务端程序、安全工具都跑在Linux上。你至少要能在命令行里切目录、看文件、搜索内容、执行脚本、配置网络,知道绝对路径和相对路径的差别,理解权限和文件类型。很多新手一开始觉得cd、ls、grep这些命令是运维才用的东西,但实际做题时,连翻一个题目压缩包都费劲,这就是基础不牢的表现。花一周时间把高频命令练到肌肉记忆,这笔投入绝对值得。
第二块是网络协议的基础认知。你不需要成为网络工程师,但至少要知道一次请求从浏览器发出后要经过哪几个环节:DNS解析、TCP握手、HTTP请求、服务端处理、响应返回。你还要知道HTTP GET和POST的区别,请求头里常见的字段有什么用,Cookie和Session大概是干什么的。因为Web方向的题目几乎全部建立在这些协议之上,流量分析类题目更是直接让你面对协议原始数据。
第三块是编程,至少掌握一门脚本语言,业界最通用的选择就是Python。你不需要像软件工程师那样背语法,关键是建立“重复操作就写脚本”的意识。能够查资料、拼接字符串、解析JSON、处理二进制数据就够了。判断标准很直接:能不能用脚本把一道题里的重复手工操作自动跑完,能,就说明基础过关了。
2.2 四阶段成长模型
零基础学CTF最大的障碍不是智商,而是不知道“到底学到什么程度才算准备好”。我习惯把入门过程拆成四个阶段,每个阶段都有明确的周期和验收标准:
| 阶段 | 周期 | 核心任务 | 完成标志 |
|---|---|---|---|
| 阶段一:通用基础 | 1-2个月 | Linux命令、网络协议、Python脚本 | 能独立操作命令行,写简单脚本处理数据 |
| 阶段二:定向突破 | 2-3个月 | 选定1-2个方向,研究题型与工具链 | 能不查完整答案完成入门级题目 |
| 阶段三:稳定参赛 | 第4个月起 | 每月至少参加一次线上解题赛,赛后写复盘 | 比赛中有稳定得分,不再无从下手 |
| 阶段四:专项深化 | 第6个月起 | 选定一个主方向做纵深,挑战中高难度 | 能解中等题,理解并复现他人题解 |
这个模型不是用来给自己制造压力的,而是用来提醒你:不要总想着“等我准备完美了再出手”。很多人的计划永远停留在收藏和收藏之间。实际上,只要把第一个月的基本功坚持完,后面的路径会自动变得清晰。你可以没有完美的长期计划,但你不能没有一次实际的开始。
2.3 时间节奏与自检方法
普通学生或上班族也能操作的时间安排是这样的:工作日每天抽出45到60分钟,分成“背概念加做基础题”两部分;周末集中2到4小时,做一道完整题目或者做赛后复盘。别追求一天啃完一整章资料,可持续比强度重要得多。
怎么判断自己可以去参赛了?最简单的自检方法是:找一套往年赛题,不限时,只要求自己独立做出其中最简单的一道题。如果你能靠搜索引擎、工具文档、官方手册完成它,就说明你已经具备参赛的基本能力。这里特别强调“独立”而不是“闭卷”。真实比赛里查资料本来就是常态,别把“看资料”当作弊,很多人恰恰栽在“什么都不敢查”上。
3. 五大方向的技术栈拆解与入门选型
3.1 Web安全:零基础最容易拿到第一个Flag
Web安全是大多数人的首选,因为它和日常上网直接相关,入门门槛最低。要掌握的技术栈可以拆成三层。
第一层是HTTP基础。你要熟练使用抓包工具,能看懂请求头、响应头、Cookie、状态码这些基本概念。平时多观察真实网站的登录、搜索、文件上传流程,会帮你快速建立对请求参数的直觉。很多人认为抓包工具是“黑客专用”,实际上它只是一个查看网络流量的调试工具,前端开发者也会天天用。
第二层是后端常见漏洞原理。SQL注入、XSS跨站脚本、CSRF跨站请求伪造、SSRF服务端请求伪造、文件上传、文件包含,这几个是CTF里的高频考点。它们的共同点是攻击者利用了开发者“没有严格验收入参、没有正确处理输入输出”的疏忽。入门时不要急着碰内网渗透那些内容,先把上述每一个漏洞的原理、危害、利用条件用自己的话写一段笔记,写完了你就有底气了。
第三层是框架与中间件的特性。比如某个建站系统的特殊过滤器、数据库报错逻辑、模板引擎的注入方式。这部分题目灵活,需要靠赛后题解不断积累。给个经典的虚拟场景:某站点搜索框直接把参数拼进SQL查询,请通过注入读取数据库版本和flag。这种题看着简单,但真正把原理吃透之后,你对SQL注入的理解会超过很多只背概念的人。
3.2 密码学:数学不扎实也别怕,先搞懂古典密码
很多人一听密码学就觉得要有很强的数学功底,其实CTF入门密码题里的九成并不需要高深数学。Crypto题最常考三类内容。
第一类是古典密码,比如凯撒密码、维吉尼亚密码、栅栏密码、摩斯电码。这类题目本质上是“编码游戏”,你只要认出特征,再用现成工具跑一下就能解。入门时把这些编码的特征记熟,比如凯撒位移会造成字母频率整体偏移,维吉尼亚密码需要找到密钥长度,就能在赛场上迅速识别。
第二类是现代密码算法的不当使用。不是让你发明新算法,而是找出实现上的弱点。比如RSA密钥长度过小、多个模数不互质、加密指数相同、明文空间过小,都可以被巧妙破解。你只需要理解公钥、私钥、模数、指数这些基本概念,配合数学计算库完成运算即可。这就像你不需要会造保险柜,但要知道保险柜密码设置得太简单时如何打开它。
第三类是哈希与消息认证。常见考点包括哈希碰撞、长度扩展攻击、签名绕过。这类题需要理解哈希函数的基本性质,但同样不需要从头推导数学证明。给零基础的建议是:先做古典密码培养感觉,再入手RSA的几种经典题型。初期用现成库而不是自己造轮子,把精力放在理解攻击条件上。
3.3 逆向工程:从会读代码到会读二进制
逆向工程方向要求你面对一个可执行文件,在没有源代码的情况下搞清它的逻辑,并找到隐藏信息,这个信息就是flag或解开flag的钥匙。入门难点在于理解程序的二进制形态,但路径是可以循序渐进的。
建议按这个顺序上手。先用字符串搜索类工具,直接查看二进制文件中是否有明文线索;遇到不可读的数据再用十六进制查看器;然后配备一款主流的反汇编工具,熟悉它如何展示函数、栈帧和交叉引用。别一上来就啃全部汇编指令,先认识常用几类就够起步了。
接下来回到编程语言层面,理解编译产物和源代码的关系。比如C语言里的局部变量对应栈上的位置,函数调用对应call指令和栈平衡,字符串常量往往集中在只读数据段。懂这些之后,即使不掌握全部汇编细节,也能顺着程序逻辑猜出大致流程。入门题常给你一个加了混淆或压缩壳的程序,你需要先脱壳再定位关键函数。对零基础来说,少碰偏算法向的题目,先把“静态分析—动态调试—定位关键判断—拿到flag”这条链路完整跑通三次以上,方向感就有了。
3.4 Pwn(二进制漏洞利用):难度高但竞争力强
Pwn方向是CTF圈子里公认难度较高的方向,核心思路是:找到程序里的内存漏洞,比如栈溢出、堆溢出、格式化字符串、整数溢出,然后精确构造数据,让程序执行你希望它执行的代码。这需要你理解内存布局、函数调用机制和机器指令,对零基础来说确实不友好。
但它的回报也很高。这个方向会倒逼你理解操作系统底层,教材上的“死记硬背”在这里会变成亲眼所见:你看到程序崩溃、内存被覆盖、控制流被劫持,抽象概念全部落地。同时这个方向人才密度较低,只要你能稳定做出基础栈题,就很容易在队伍里成为核心成员。
零基础选手想尝试Pwn,建议拆成四步走:先掌握C语言和指针,熟悉常见危险函数;再学调试工具,能查看寄存器、内存内容和调用栈;然后从“没有任何防护的栈溢出”开始,一步步在题目中加上防护机制进行挑战;最后系统学习各种安全机制的绕过思路。这个周期通常是以“月”为单位的,别给自己设太短的截止期限。
3.5 Misc杂项:被低估的得分来源
Misc杂项是CTF里的“大杂烩”,包括隐写术、编码转换、流量分析、文件取证,甚至一些社工类题目。它最大的特点是知识点分散,但难度通常不高,非常适合零基础用来建立比赛信心。
隐写题经常把信息藏在图片、音频、压缩包里,你需要检查文件头、比对像素值、查看元数据、尝试常见隐写工具。流量分析题则是给你一个抓包文件,要求从通信记录里还原出传输的文件或口令。编码题考验你对各种编码特征的记忆:URL编码、Base64、十六进制、二维码、Unicode等等,每一种都像一种“文字密码”,认识得越多越占便宜。
有人觉得Misc“没技术含量”,我反而建议零基础必刷。它训练的是信息收集和联想能力,这种能力在真实安全工作中和漏洞利用同样重要。而且Misc题拿分稳定,是新手一场比赛里保底收入的主要来源。第一场比赛如果怕挂零,先集中扫Misc往往是最明智的决策。
3.6 怎么根据自己的基础做选型
选方向的标准不应该是“哪个热就搞哪个”,而是看你的既有基础适合哪里:
- 有Web开发经验或前端基础:优先选Web安全,熟悉感会直接转化成学习速度。
- 数学和逻辑较好,玩过解谜游戏:优先选密码学或Misc。
- 习惯阅读代码、对操作系统好奇:尝试逆向工程。
- 喜欢底层、不畏惧C语言和内存知识:挑战Pwn,但务必预留足够长的学习周期。
- 完全没基础且时间有限:推荐Web加Misc组合先拿分。
记住一点:CTF不要求你全栈。前三个月集中突破一个方向,比每个方向都“知道一点”要有效得多。等主力方向能稳定拿分之后,再逐步辐射到其他方向也不迟。
4. 环境搭建与练习平台:一台电脑怎么玩起来
4.1 第一天就开始用Linux
把Linux环境搭起来,是打开CTF大门的第一件事。我不建议“先上课再动手”,正确做法是立刻动手:在一台普通电脑上安装虚拟机软件,再装一个主流的Linux发行版,日常就把它当成主力环境使用。你不需要删掉自己的日常系统,也不必害怕搞坏虚拟机——坏了重装就是。这种可以反复试错的环境,对学习者非常友好。
如果你更习惯轻量方案,也可以用容器技术快速拉起隔离环境。容器方式的好处是干净、可复制、资源占用小,缺点是部分依赖内核特性的题目可能跑不起来。入门阶段,我的建议是虚拟机为主、容器为辅。原因很简单:虚拟机更接近真实比赛环境,出题人的题目大多运行在一个完整Linux系统里,你在虚拟机里提前习惯了排查依赖、安装工具、启动服务,真正比赛时会顺手得多。
4.2 必备工具清单
下面这些工具类型,是零基础第一周就值得开始接触的。我不列具体商品名,但你在任何一篇CTF入门资料里都能找到对应的主流选择,选一款用得顺手的就好。
- 终端与基础命令:文件查找、字符串提取、网络请求。常驻技能是
ls、grep、find、curl、strings。 - 抓包工具:查看HTTP请求和响应,是Web方向的眼睛。
- 编程环境:Python本体加常用库,用来处理数据、爆破、编码转换。
- 十六进制查看器:分析文件头和二进制数据。
- 反汇编工具:用于逆向方向,查看反汇编代码。
- 文件分析工具:用于Misc,识别文件真实类型、提取隐藏文件。
- 爆破工具:用于口令类题目,前提是你已经明确目标规则,而不是无脑乱试。
工具不需要一次装齐。选定方向后,先把该方向最核心的三四款工具用熟,再按需扩展。工具是服务于思路的,思路不清晰时,装再多工具也只是心理安慰。
4.3 本地靶场与练习平台怎么选
练习环境通常分两种。一种是本地靶场,也就是在自己电脑上搭建一个包含已知漏洞的练习系统。它的好处是随时重置、可以改源码观察现象、不会影响任何人,非常适合理解漏洞形成过程。另一种是公共练习平台,上面有大量历史赛题和难度梯度,你可以按分类刷题。零基础建议两者结合:本地靶场用来理解“漏洞怎么产生”,公共平台用来检验“你在陌生题目里能不能利用它”。
挑平台时不要只看题目数量。我判断一个好平台的标准有三条:一是分类清晰,题目标明方向、难度和分值;二是赛后能看到他人题解,方便复盘;三是社区有基本的活跃度,卡住时能搜到讨论。如果一个平台只有一堆孤零零的题目、连提示都没有,那它只会变成你的焦虑来源。优先找那些自带新手分级、有引导题的社区平台开始刷。
5. 第一次参赛的完整流程:从注册到交Flag
5.1 赛前48小时该做的事
第一次参赛前,很多人会花大量时间临时学新知识,效率其实很低。我更建议把赛前48小时用来做四件事。
第一,确认赛事信息与规则。搞清楚比赛时间、平台入口、题目方向、flag提交格式、是否允许组队。提前把账号注册好、登录好,别等到开赛前十分钟卡在验证码上。
第二,验证自己的环境与工具。把虚拟机、抓包工具、Python脚本、反汇编工具全部跑一遍,确保能正常打开。如果比赛发布了样例包或说明文档,先下载,提前感受一下题目的叙事风格。
第三,明确主打方向。想清楚“这场比赛我优先做哪类题”。如果之前练的是Web,就集中做Web,而不是开赛后漫无目的地逐个点开看。
第四,好好休息。CTF很刺激,但它拼的是持续思考能力。熬到半夜,脑子一团浆糊,题目再简单也做不出来。
5.2 比赛当天的个人节奏
比赛开始后的第一个小时,我的建议是不要死磕难题。先把所有题目扫一遍,只看三个信息:题目名称、方向、分值。直觉上容易的题目先标记;分值高的暂时放一放;看完所有题再决定投入顺序。这么做的逻辑很简单:比赛的积分制决定了拿分效率比单题执念重要得多。一道题卡三个小时,代价往往是错过好几道三十分钟就能拿下的送分题。
做题时也要给自己设一个“决定性节点”。每道题十五分钟没有任何进展,就换思路、换工具,或者干脆换题。这听起来很功利,但CTF比赛本质上就是在做资源分配:把有限的脑力分配给最有把握、回报最快的题目。
另外养成一个小习惯:边做题边记录。不是在记事本里写长篇大论,而是写下“这道题的输入是什么、响应是什么、我尝试过哪条路”。很多题目解到一半需要重新整理思路,这些零散记录就是最好的路标。
5.3 提交Flag的细节与纪律
Flag提交看似简单,细节却不少。首先是格式,有的平台要求带完整花括号,有的只填中间部分,有的区分大小写。提交前务必看一眼题目描述里的格式说明,直接复制粘贴,不要手动输入。也不要为了防止判错就反复提交同一个错误结果——很多平台有冷却时间和次数限制,乱提交会浪费你的机会窗口。
第二,题解出来之后,顺手记录完整的解题步骤和工具命令。这既是为赛后复盘留素材,也是写writeup的第一手资料。建议在本地建一个以比赛命名的文件夹,把截图、命令、下载到的样本都放进去。哪怕赛后没写完整长文,一个月后看着这份材料,你也能还原当时的思路。
第三,不要在比赛结束后还在比赛环境里做多余操作。比赛环境到点关闭,继续折腾既没意义,还可能被平台误判为违规行为。到点就停下,把记录收好,这是参赛者的基本素养。
6. 常见新手陷阱与避坑经验
6.1 只想刷题,不读原理
最常见的坑是把CTF当成刷题游戏:做出一道题,复制答案、改个参数、继续下一道。这样刷一百道题,遇到新题照样没思路。我的建议是每解完一道题,至少回答三个问题:它考的是什么漏洞?这个漏洞产生的根因是什么?如果我是防守方,该怎么修复它?把这三个问题想明白,一道题才算真正消化。答案是别人的,思路才是自己的。
6.2 过度依赖工具,不会看原始数据
工具确实能提升效率,但工具输出只是信息的“二手加工”。比如抓包工具帮你美化了HTTP请求,如果你看不懂最原始的报文格式,遇到需要手工构造请求头的情况就会彻底卡住。很多新人“工具跑不通就原地发呆”,本质上是缺少回到原始数据的能力。我在遇到怪题时,会强制自己把原始报文、文件头、关键代码打印出来逐行看。这个习惯帮我解决了很多“工具解决不了”的问题。
6.3 不记笔记,等于白学
网络安全知识非常碎片化,今天记住的编码特征,下周可能就忘了。我看到太多人把题解链接放进浏览器收藏夹吃灰,而不是整理成自己的笔记。建议从第一天起就用结构化方式记录:方向、题目名、涉及知识点、关键解题步骤、参考链接。不需要文笔优美,只要自己看得懂。坚持积累三个月,你会得到一份比任何教程都更适合自己的知识库,这种沉淀是刷题数量替代不了的。
6.4 把靶场思路带到真实系统里
这一点必须单独说:CTF训练出来的是“在授权范围内解决问题”的能力,不是“对任何系统下手”的理由。比赛题目、本地靶场都是经过授权的模拟环境;而未经授权访问、攻击真实系统,是违法行为,会带来严重的法律后果。所以无论你技术热情多高涨,都不要拿同学、公司、陌生人的系统练手。真想过瘾,就搭自己的靶场或参加合法赛事。安全技术的伦理底线从一开始就要立住。
6.5 贪多嚼不烂,方向摇摆
零基础最容易犯的错,是今天看Web有意思,明天觉得密码学更酷,后天又跑去学逆向。这种方向摇摆会极大消耗信心。我见过不少人折腾了半年,每个方向都停留在“知道概念”的水平,一到比赛就露馅。给自己定一个“三个月主方向”的约定:无论其他方向多热闹,前三个月只集中做一类题,其他方向最多调剂一下。等主方向能稳定拿分,再考虑扩展领域。
7. 赛后复盘与长期成长路径
7.1 一份好的赛后复盘怎么沉淀
比赛结束后,把“经验”变成“资产”的关键,是写一份自己的复盘报告。这份报告不一定要公开发布,但结构要完整。内容包括:赛前目标是什么;实际答题顺序与时间分配;每道题的思路演变过程;哪一步是破局的灵感;哪一步是浪费时间的弯路;下次比赛打算如何调整。写复盘的过程其实就是重新思考一遍,很多比赛中没想透的地方,会在写报告时突然想明白。
公开发布writeup是另一种价值。它既是你在社区里建立信誉的方式,也会倒逼你把原本模糊的思路讲清楚。如果你担心自己写不好,可以先从复现别人的题解开始:把对方的思路完整重现一遍,再对照自己的试错过程。这本身就是一次高质量学习,比你再看十篇文章都有效。
7.2 从CTF到安全从业者的接轨点
CTF并不只是停留在娱乐层面的爱好,它和职业安全能力之间有一条清晰的接轨路径。Web方向的题目经验,直接对应渗透测试工作的漏洞发现与利用思路;逆向方向对应恶意代码分析和漏洞研究;密码学题训练的是算法审计与协议分析能力;Misc则锻炼流量取证和信息还原能力。不少团队在招安全工程师时,也认可CTF成绩作为能力参考。
同时要清醒地认识到,CTF不等于安全的全部。真实工作中还有大量非技术维度:需求沟通、报告撰写、应急响应流程、合规意识。我建议在刷题之余多读真实安全事件的分析报告,理解攻击链在现实场景中的复杂性。别让比赛题目限制了你对安全领域的想象,比赛只是起点,不是终点。
7.3 我给零基础玩家的一句真心建议
如果你还在犹豫要不要开始,我的建议是:降低目标,立刻动手。不要定“三个月成为大神”这种目标,而是定“这周把Linux基础命令练熟”“这周六做出一道Web题”这种小目标。网络安全这条路最稀缺的其实不是天才,而是持续行动的人。
最后分享一个我自己一直在用的节奏:每周固定一个晚上做一次“题目复现”,把这周遇到的新知识点全部过一遍;每月的最后一天,把当月所有writeup整理成一份汇总文档。坚持半年以后,你回头看自己第一次做题时那种手足无措,会庆幸自己当初真的选择了开始,而不是继续收藏。