2026/10/4 10:48:15

自学编程十八天:从零到跑通第一个自动化脚本的完整复盘

自学编程十八天:从零到跑通第一个自动化脚本的完整复盘 1. 十八天是个坎跨过去才算真正入门第十八天一个相当微妙的节点。你问任何一位靠自学转行或者在职提升的IT从业者大多数人都会告诉你第一个月是放弃率最高的时候而第十八天前后恰好就是那个“犹豫期”。新鲜感已经消退正反馈开始变少你会开始反复怀疑“我是不是真的适合干这行”。但换个角度讲只要这个阶段你能咬牙撑住后面基本就是一路向上的通道。先说下我这十八天的整体状态给正要起步或者正处在类似阶段的朋友一个坐标参考。我按每天平均3到4小时的有效学习时间来算累计投入差不多55到60个小时。这六十个小时分布在编程语言基础、开发工具链、计算机通识和少量项目实践四个方向上。目前的状态是Python基础语法已经过完一遍能独立写出两百行左右的小脚本HTML和CSS可以照着设计稿还原静态页面Flex布局和Grid布局的基本思路已经理顺了。Git的日常操作add、commit、push、pull、branch切换已经形成了肌肉记忆至少不会出现把代码弄丢或者把分支搞成一团浆糊的惨剧。但说实话这个进度在IT自学大军中不算快也不算慢属于一个比较真实的中间态。你可以想象这个阶段有点像学驾照。刚上车那几天兴奋得要命什么都新鲜。到了第十八天倒库练得人发疯离合踩到腿酸你会开始怀疑自己是不是天生没有方向感。但是一旦熬过这个阶段当你能不假思索地完成整套操作流程的时候你会发现之前的重复训练全部沉淀成了你的直觉。这篇文章不聊虚的我想把这十八天的实操路径、踩过的坑、踩坑之后总结出来的方法以及下一步的规划完整地摊开来说一说。如果你正在自学IT的路上或者正准备开始这应该能帮你少走很多弯路。对于已经入行的朋友也可以权当一份“新手样本”来参考——毕竟每个人的自学路径都是独一无二的但底层逻辑往往相通。2. 目标拆解与前十八天的路线规划2.1 先定方向学IT不是“学IT”很多人自学IT最大的问题是把“IT”当成一个整体来学。这跟你打算学“医学”然后不知道该主攻外科还是内科一样荒谬。IT领域至少有三大方向软件开发、网络运维、数据与人工智能。这三个方向的学习曲线和入门门槛天差地别。我在第一天就给自己定了一个原则**这十八天里主要目标是“试方向”而不是“学完某个东西”。**我当时的规划是这样的第一天到第三天快速过一遍三大方向的入门介绍和课程大纲确定自己的兴趣倾向。第四天到第十天集中攻坚编程基础Python因为不管是软件开发还是数据分析编程能力都是底层能力提前学不会亏。第十一天到第十三天切入前端基础HTML、CSS、JavaScript核心语法看看自己对视觉呈现和交互逻辑是否敏感。第十四天到第十五天用两天时间了解网络基础和Linux常用命令这是运维方向的敲门砖。第十六天到第十八天回到编程主线上做了两个小项目巩固前面积累的知识。这个安排的核心逻辑是先射箭后画靶子。在信息不足的情况下与其花一周纠结“我到底该学什么”不如每个方向都快速试一遍用真实的体感来做判断。2.2 不要神化“一万小时定律”格拉德威尔的“一万小时定律”被引用太多了很多人被它吓住觉得要成为专家得投入数年时间于是迟迟不敢开始。实际上你仔细拆解这个定律就能发现它描述的是“成为世界级专家”所需的积累而绝大多数人的目标是“入门”和“找到工作”。从零基础到能找到初级岗位正常节奏下六到十二个月足够。前十八天对应的目标是建立对IT世界的基本认知框架并且能写出有实际功能的代码。我在规划时给自己定的十八天目标很朴素掌握一门编程语言的核心语法和基本编程思想能用该语言写一个能解决实际问题的脚本我当时写的是一个批量重命名文件的工具了解代码是怎么从编写到运行的完整流程建立每天固定时间学习的习惯这四个目标现在回看基本都实现了。这里想给正处在起步阶段的朋友一个建议目标一定要具体且可验证。不要写“学好Python”要写“能写一个自动整理下载文件夹的脚本”。模糊的目标带来模糊的行动具体的目标才有清晰的验收标准。2.3 一个重要的心态建设允许自己“学得慢”我在前几天的学习过程中经历过一次比较严重的挫败感。具体来说到了第八天左右我发现自己第一天学的变量和数据类型的知识已经忘得七七八八了。那一刻真的很崩溃甚至冒出过“我是不是根本没有学编程的脑子”这种想法。但你猜怎么着后来我在学习Git的时候无意中看到一本讲学习方法的书里面提到了一个概念叫“必要难度理论”。大意是说遗忘是学习的必要组成部分正是在“遗忘—重新提取”的过程中记忆才会被真正加固。就像你健身的时候肌肉纤维先被撕裂再在休息中修复生长变强壮的过程从来不是一条平滑上升的曲线。从那之后我就给自己立了一条规矩遇到忘了的知识不焦虑回到原处重新看一遍如果第二遍能比第一遍更快理解那就说明大脑已经开始建立连接了。这种“允许遗忘”的心态对我后续的学习节奏帮助非常大也希望正处在同样阶段的小伙伴能尽早建立这个认知。3. 核心技能拆解十八天里真正需要啃下来的硬骨头3.1 编程语言的“最小可运行闭环”学编程语言最容易陷入的误区是“只看不练”或者“只跟着敲不思考”。我见过不少自学者的笔记本满满当当全是代码抄写但是关掉教程一到自己写就大脑空白。正确的做法是建立一个“最小可运行闭环”**你写的每一段代码都要能独立运行并且产生输出。**哪怕只是打印一行“Hello World”也要自己从新建文件开始亲自跑通整个过程。我在第十天左右开始做第一个真正意义上的小项目——一个日志分析脚本。需求很简单给定一个日志文件统计其中各个错误级别的数量并按从高到低排列输出。这个项目涉及的知识点包括文件读取、字符串处理、字典操作、循环和条件判断、函数封装。这些知识点分散在十天里学过但通过这个项目它们第一次被串在了一起。真正写的时候才发现单独学每个知识点的时候觉得自己都懂一组合起来就开始出问题。例如文件编码的问题、路径分隔符在Windows和Mac上的差异、异常处理没写好导致中断退出......这些都是在“对着教程敲代码”时永远遇不到的问题。这个项目花了两个晚上才跑通但做完的那一刻对编程的恐惧感基本消失了大半。这个经历让我确信学习编程必须以项目为单元而不是以知识点为单元。知识点的学习只是备料项目才是真正把菜做出来的过程。3.2 工具链背后的核心思维一切皆文件除了编程语言这十八天里花时间最多的就是工具链。具体来说是三个工具代码编辑器我用的是VS Code、终端Windows下是PowerShell后来切换到了Windows Terminal和Git。很多人觉得工具不重要能用就行。但实际体验下来工具的熟练度直接决定了学习效率和学习体验。第一周我用VS Code的时候基本只用到了“打开文件夹”和“新建文件”两个功能。代码补全、调试、终端集成、Git可视化这些功能全都没碰。直到有一天手动在终端里跑了命令才发现原来VS Code里可以直接打开终端、可以选中代码后右键在终端中运行效率提升是肉眼可见的。关于终端我最想强调的是“一切皆文件”这个思维模型。无论是Windows还是Linux/Mac操作系统的很多功能本质上是文件和目录的操作。你理解了文件路径、进程、环境变量这些概念再看网上各种教程就会通透很多。很多教程上来就是“打开终端输入xxx命令”如果你不理解背后的逻辑就只能死记硬背换个场景就不会了。Git的分布式版本控制思想也是这十八天里的一个重点。我第一次实操时差点把本地代码库搞乱后来才明白Git的核心思维是“快照”。每次commit就是给当前所有文件拍一张照片你可以随时回退到任何一张照片。这个过程也不复杂关键在于理解三个区域工作区、暂存区、版本库的流转关系。3.3 网络与计算机通识的“够用就好”原则对于自学者来说最容易栽的另一个坑是试图在入门阶段就把所有底层原理搞懂。比如学到HTTP协议有人会一头扎进TCP/IP、OSI七层模型、DNS解析流程、CA证书体系......这些东西当然重要但如果你正处在第十八天最重要的是先知道“浏览器输入网址回车然后网页显示出来”的完整链路是什么样。其他细节等真正用到的时候再补完全来得及。我在第十五天学习网络基础时给自己划的底线是理解客户端和服务器的概念知道HTTP协议是“请求-响应”模型常见的状态码含义200、301、404、500了解DNS的作用就是“把域名翻译成IP地址”明白IP地址和端口号的关系类似于“大楼地址房间号”够用就好先建立框架再填充细节。这个原则在IT自学的任何阶段都适用。因为IT领域的知识是网状的不是线性的你从任何一个点切入都能不断向外延伸。如果追求全懂再往下走大概率永远停在原地。3.4 实操心得学习时间怎么分配最合理这里分享一个我经过反复调整后确定下来的每日时间分配方案。我每天的学习时间是晚上八点到十一点三个小时具体分配如下前30分钟复习前一天的内容包括重新看一遍笔记和代码中间90分钟学习新知识以“边看边写”为主最后60分钟做练习或者写项目巩固当天的内容睡前还有10到15分钟浏览一下当天学的内容相关的讨论帖子看看别人是怎么理解和应用的这个安排的要点在于把复习放在最前面把练习放在最后面中间是纯粹的新知识输入。这样的顺序是符合记忆规律的。先激活旧知识再输入新知识最后通过练习强化连接比一上来就学新东西效果好得多。另外强烈建议大家建立一个“错题记录”。不用像学生时代那么正式就是记下自己写代码时遇到的那些低级错误比如中英文标点混用、缩进出错、变量名拼写不一致。这些错误非常低级但恰恰是最容易反复踩的坑。我第十八天翻看自己的记录时发现第十二天犯的错误在第十七天又犯了一次那感受真是又气又笑。但从那之后同类错误基本就没有再出现了。4. 实操手记从零到跑通第一个“多功能脚本”全记录4.1 小型自动化脚本的案例拆解在第十六天到第十八天我把前十五天学过的知识点整合起来做了两个小项目。在这里详细拆解其中相对完整的这一个——一个批量文件整理脚本。场景是这样的我的下载文件夹里堆了大半年的文件有图片、文档、安装包、压缩包还有不知道是什么格式的杂碎。手动整理太费劲正好可以用刚学的Python写一个自动整理脚本。脚本的核心思路不复杂就三步逻辑扫描目标文件夹里的所有文件根据扩展名判断文件类型然后移动到对应的分类文件夹。如果分类文件夹不存在就先创建。代码如下我尽量写得直白去掉花活import os import shutil def organize_directory(path): # 定义分类规则扩展名 → 目标文件夹名 category_map { (.jpg, .jpeg, .png, .gif, .bmp): 图片, (.doc, .docx, .pdf, .txt, .md): 文档, (.exe, .msi, .dmg): 安装包, (.zip, .rar, .7z, .tar, .gz): 压缩包, (.mp3, .mp4, .mov, .mkv): 音视频, } # 确保目标目录存在 if not os.path.exists(path): print(f路径不存在: {path}) return # 遍历目录中的文件 for filename in os.listdir(path): filepath os.path.join(path, filename) # 跳过文件夹 if os.path.isdir(filepath): continue # 获取文件扩展名小写 ext os.path.splitext(filename)[1].lower() # 根据扩展名查找目标分类默认放入“其他” target_dir None for exts, category in category_map.items(): if ext in exts: target_dir category break if target_dir is None: target_dir 其他 # 创建分类目录并移动文件 target_path os.path.join(path, target_dir) os.makedirs(target_path, exist_okTrue) dest_path os.path.join(target_path, filename) # 如果目标路径已有同名文件自动重命名 counter 1 while os.path.exists(dest_path): name, old_ext os.path.splitext(filename) dest_path os.path.join(target_path, f{name}_{counter}{old_ext}) counter 1 shutil.move(filepath, dest_path) print(f已移动: {filename} → {target_dir}/) if __name__ __main__: organize_directory(你的目录绝对路径)这段代码本质上就是一个小型“自动化运维脚本”的雏形。虽然只有几十行但它用到了Python的文件操作、异常处理思想虽然还有改进空间、流程控制、函数封装甚至还有一点“防呆设计”比如同名文件自动重命名、跳过子文件夹、扩展名统一转小写再匹配。第一次运行前我其实挺紧张的因为用不好shutil模块可能会把文件搞乱。所以我先在桌面新建了一个测试文件夹里面放了几十个模拟文件先在这个沙盒环境里跑通了才拿到真实目录里去运行。这个习惯后来我也一直在用——任何脚本上线之前先在小范围测试环境里验证逻辑再接触真实数据。这是运维思维的一种体现在IT行业里比较重要。4.2 项目调试过程与Git管理实操这个脚本并不是一次性写成功的中间出了不少状况。我给各位还原一下其中的两个典型场景。第一个问题是中文文件名乱码。我从网上下载的一些文件文件名里带了特殊字符第一次运行的时候控制台输出没问题但是打开目录一看文件名全部变成了一堆乱码。排查后发现是Python在Windows系统下默认编码跟文件系统的编码不一致导致的。解决办法是在脚本开头加两行编码设置确保读写操作使用系统编码。第二个问题是分类规则不够全很多文件最终都落到了“其他”文件夹里。这说明一开始的思考不够细致但这也是正常的过程——你不可能一开始就把所有情况都想到边做边补、持续迭代本身就是工程化开发的常态。这个项目的管理从开始就用Git来跟踪。我建了一个专门的仓库每天结束学习时进行了一次提交。如果你去看我的提交记录基本就能看出这个项目的演化过程第一次提交初始化项目只写了目录扫描部分第二次提交增加了分类和移动逻辑第三次提交解决了文件名冲突问题第四次提交增加了测试用例说明和README文档这个习惯让我在出问题时能轻松回到之前的版本心理上有一种“再怎么折腾也不会翻车”的底气。4.3 项目复盘代码之外的四件事项目跑通之后我给自己规定了一个动作写复盘文档。不是给任何人看的纯粹是自己梳理思路的过程。复盘文档包括四个部分做了什么、遇到了什么问题、怎么解决的、如果重来一次会怎么改进。关于“如果重来一次会怎么改进”我当时写了三条一是应该先用更长时间设计分类规则而不是边写边想二是应该把核心逻辑比如扩展名识别和文件移动拆成独立函数方便单独测试三是应该加一个交互确认环节让用户确认分类结果后再执行移动操作。这个复盘习惯价值非常大它逼着我从“把代码跑起来”的低层次快感中抽离出来进入“系统性地审视整个过程”的高一层思考。你在学习过程中可以观察一下实际工作中解决一个问题之后直接进入下一个问题的人很多愿意花二十分钟复盘的人很少而后者往往成长得更快。5. 避坑手册这十八天里我踩过的七个典型坑5.1 复制的代码跑不起来、乱改配置导致环境崩掉等经典事故自学路上效率最大的敌人不是难懂的知识点而是各种看着不起眼却耗掉你大量时间的“环境类”问题。我前十八天遇到的典型问题整理出来供大家直接“抄作业”式地避坑。第一大坑跟着网络教程安装环境时教程作者用的版本和操作系统跟我不一样于是照着敲的命令直接报错。我的处理方式是遇到版本相关的问题优先去查官方文档的安装说明不要盲信任何教程。第三方教程的时效性很难保证但官方文档通常会持续更新。第二大坑把代码粘贴进终端时意外复制了前面的提示符或者多余空格导致命令怎么执行都报“command not found”。这个问题的排查成本通常不高但特别容易让人心态崩溃。我的习惯是在终端里先输入四个空格或者两个空格然后粘贴代码看输出是否符合预期再逐步补全。如果你希望一步到位也可以直接把代码写入一个脚本文件然后执行bash 脚本名.sh避开手动粘贴引发的问题。第三大坑为了“省事”直接修改全局环境变量导致系统里原本可用的某个软件失效。从那以后我给自己定了个规矩**能用虚拟环境隔离的绝不动全局设置。**这个原则在后来的Python开发中帮我省了无数次事。第四大坑在一知半解的状态下用搜索引擎搜到的代码片段直接覆盖了自己的代码。很多网上的代码片段是针对特定版本编写的直接抄过来容易出现兼容性问题。最好的做法是理解代码片段的思路然后自己动手实现一遍再对比差异。第五大坑试图一口气安装几十个学习工具和插件结果很多根本用不上还拖慢了电脑速度。这里我的建议是初学阶段使用最小工具集编程初期一个编辑器、一个终端、一个浏览器就完全够用了。第六大坑只跟着教程“看”而不用自己的语言复述知识。后来我采用了一个办法——每学完一个章节在笔记软件里用自己的话写一段五十字左右的总结然后第二天尝试不看笔记把核心逻辑说给自己听。能说出来才说明真的懂了。第七大坑通宵刷课第二天上班/上课完全没精神学习效率断崖式下跌。IT学习的本质是长期积累拼的不是某一天熬了多久而是能不能连续稳步推进。把睡眠时间砍掉换学习时间是最不划算的交易。5.2 每日Debug记录与时间盒技巧除了上面这些典型的坑我还在第十八天翻看了一下自己的Debug记录发现了一个规律大部分时间消耗并不是花在复杂的逻辑问题上而是花在了非常琐碎的问题上。例如Python的缩进不对、JSON文件少了一个逗号、Git冲突后不知道怎么干净地合并、pip镜像源没有配置好导致下载慢。这里提供一个方法“时间盒”技巧。每次开始学习前预估这个任务需要多久。如果一个问题在规定时间内解决不了比如十五分钟就立即停止记录下来去搜索或者向别人请教。这个习惯有两个好处一是避免钻牛角尖浪费大量时间二是保证当天计划的其他学习内容不会被打乱。我自己经历过一次严重的“钻牛角尖”事故为了搞定一个终端提示符不显示的问题连续花了两整天导致编程的进度被拖慢了一周。后来想想这个问题的本质是配置文件的问题正常情况下一个小时内就该搞定超出时间就应该换一个思路或者干脆先跳过。5.3 习惯养成中容易被忽略的两个细节第一个细节固定的学习场地很重要。最好找一个跟日常娱乐区分开的桌面环境不打开社交软件手机放远一点。环境的暗示作用比你想象中强大同样的内容坐在图书馆和坐在床上学习效果是完全不一样的。第二个细节记录“学习时长”不如记录“学习成果”。刚开始自学的人特别容易自我感动用“我今天学了六个小时”来安慰自己。但六个小时里如果有四个小时在刷帖子、查资料、调整配置真实有效的学习时间可能也就两个小时。不如每天睡前问自己一句“今天我产出了什么一个能跑的脚本一篇笔记还是一个清晰的概念”如果连续三天没有产出基本可以断定学习方法和节奏出了问题需要停下来重新调整。6. 下一步规划第十九天到第三十天怎么走第十八天不是结束恰恰是一个阶段的开始。接下来两周我的计划是沿着两个方向推进。第一个方向继续夯实Python基础进入面向对象编程和常用标准库的学习。这两块内容是初级项目开发和后续进阶的关键节点我会用同样的“项目驱动”方式推进计划做一个小型的数据表格处理工具实现筛选、排序和统计功能真正把Python当成一个生产力工具来用。第二个方向启动一个完整的前端页面项目。目前已经学完HTML和CSS的基础布局接下来会加入JavaScript的DOM操作和事件机制目标是完成一个具备交互功能的小型页面比如简易待办事项清单这样从用户界面到后端逻辑才算串起了一条相对完整的链路。对于方向的最终选择我给自己设了一个时间点第三十天前后做一次正式评估。评估标准包括写代码时的流畅度、解决问题的能力、以及内心的“体感”——是更享受界面交互的打磨还是更享受逻辑实现的过程。方向本身没有优劣适合自己才最重要。对同样走在自学路上的你我的建议是不要焦虑于“别人第十八天已经会了什么”这种横向比较。每个人的背景、可用时间、理解方式都不同比较带来的只有焦虑。你只需要关注自己的纵向成长今天的自己是不是比昨天强了一点哪怕只是跑通了昨天报错的那段代码。7. 一些真正有用的经验总结最后分享几个这十八天里最深的体会不写空话全是实际操作中沉淀下来的东西。第一**不要追求完美计划先保证“每天都在动”。**我最初的学习计划详细到了每一天该学什么后来发现根本执行不下去。后来的做法是只定一个原则性的目标这周要完成某个模块具体每天做什么根据实际情况灵活调整。计划永远赶不上变化但“每天都有进度”是底线。哪怕状态很差只写了十行代码也比完全停摆强得多。第二**学会用“搜索”代替“背诵”。**IT领域从来不是考记忆力的领域重要的不是记住某个函数的参数列表而是知道“遇到某类问题应该去哪里查什么”。这个能力比记住一堆API重要得多。第三**找到一个小圈子定期交流但别沉迷于“陪伴式学习”。**一个人闷头学习确实容易走偏。找一个学习社群或者几个同阶段的朋友遇到卡壳的时候有人能点你一下效率会高很多。但一定要注意不要用聊天的快感来替代真正写代码的积累。第四关于心态有一个认知我调整得比较晚学习IT的前三个月你的知识体系会像一个到处是漏洞的筛子。每个漏洞看起来都很大但不要慌。随着学习和实践的推进这些漏洞会被逐渐修补。就像拼图一样最开始只能看到一块块碎片看不出整体图景。碎片积累得足够多整体轮廓才会慢慢浮现出来。第十八天给自己一个鼓励。你已经走过了最容易被淘汰的那段路。接下来要做的很简单明天晚上八点继续坐到书桌前打开编辑器写下一行代码。就这么简单就这么坚持下去。