跳到主要内容

转码记录 Vol.01 | 从文科硕士到 CS 二学位,第一个学期的实况

· 阅读需 7 分钟
Yi Wang
Full Stack & AI Engineer

文科硕士毕业,做了几年数据分析师。流程熟了之后,开始意识到一件事——我会用工具,但不懂工具背后的逻辑。能调 API,但不理解 HTTP 请求的完整链路;会写 Pandas,但遇到性能瓶颈只能靠 Stack Overflow。岗位天花板不是薪资,是你能解决的问题的复杂度上限

这是决定读 CS 二学位的第一学期复盘。


我是谁,为什么在转码

文科硕士毕业,做了几年数据分析师。

工作内容说起来不复杂:SQL 拉数据、Python 跑脚本、Tableau 出图,整理成报告给业务团队看。流程熟了之后,开始意识到一件事——我会用工具,但不懂工具背后的逻辑。

具体表现是:

  • 能调 API,但不理解 HTTP 请求的完整链路
  • 会写 Pandas,但遇到性能瓶颈只能靠 Stack Overflow
  • 参与过 RAG 项目的数据管道部分,但对向量检索的底层实现是黑盒

这种状态在数据分析岗位可以维持,但进不了技术研发的核心圈子。岗位天花板不是薪资,是你能解决的问题的复杂度上限

做了一段时间 AI 开发相关的项目(SREDSimplify,一个处理政府税收文件的 RAG 系统)之后,这个判断变得更清晰:我想做的不只是数据层,而是整个系统的架构和实现。


为什么是二学位,而不是培训班或自学

这个选择考虑过三条路:

培训班:周期短,但课程设计以就业为导向,跳过大量基础。面试能过,实际工程能力存疑。

自学:灵活,但缺乏系统性。离散数学、算法、操作系统这些课,自学的完成率和质量都很难保证。

CS 二学位:时间成本最高,但结构最完整。65 学分,覆盖从数学基础到系统设计的完整路径。

选二学位的核心逻辑只有一条:我想要的不是一个能通过技术面试的技能包,而是能支撑长期技术成长的基础结构。


项目参数

项目数据
总学分65 credits
计划学期数7 个学期
目标毕业时间2026 Fall
目标方向技术研发(AI / 后端方向)

24 Fall:第一个学期,三门课

📅 正式开始的学期,选了三门课,刻意控制节奏,不堆课。


EECS 1012 – Introduction to Computing: A Net-centric Approach

内容:HTML、CSS、JavaScript,以及事件驱动编程的基本概念,在移动与网络环境下理解计算。

这门课对零基础友好,成绩 A+。但收获不在语法本身,而在于第一次完整体验了"写逻辑 → 浏览器执行 → 结果可见"这个闭环。数据分析的工作结果是报告,Web 的结果是可交互的界面——两种反馈机制完全不同,后者的即时性让调试变成了一种直接的对话。

这门课也引入了客户端-服务器架构的基本概念。以前用 Pandas 处理数据时,数据从哪里来是理所当然的;学完这门课之后,开始有意识地去想"这个 API 请求背后发生了什么"。


MATH 1013 – Applied Calculus I

本科和考研阶段有微积分基础,这门课压力不大,成绩 A。

策略是同步复习,把极限、导数、积分的概念清晰化,而不只是记住计算套路。后续的算法课会用到时间复杂度的渐近分析,微积分的估算思维在那里会再次出现。


EECS 1019 – Discrete Mathematics for Computer Science ← 这门值得单独说

内容:命题逻辑、集合论、数学归纳法、函数与关系。成绩 A。

这门是文科背景转码的第一个真实门槛。

具体难在哪里:

证明的思维方式不同于解题。 微积分的计算有固定套路,但离散数学的证明要求你构造推理链——每一步的依据必须显式说明,不能靠"直觉上成立"跳过。

归纳法的方向容易搞反。 证明 P(k+1) 时,新手容易从结论往回推,但归纳法要求从已知的 P(k) 正向推出 P(k+1)。这个方向感需要做大量题才能固化,不是看懂例题就够的。

逻辑符号的精确性要求高。 ∀ 和 ∃ 的位置不同,命题含义完全不同。∀x ∃y P(x,y)∃y ∀x P(x,y) 在语义上是两件完全不同的事。自然语言里可以模糊表达,形式逻辑里不行。

对我来说,离散数学不只是一门课,它是在强迫我用计算机的方式思考——精确、无歧义、每一步有依据。这套思维方式对后续所有技术课都有用,只是第一学期还看不见它的价值。


第一学期结束时的状态

三门课都通过了,GPA 稳住。

更实质的变化是对计算机科学有了一个不那么模糊的认知框架:数学是地基,逻辑是语言,编程是表达方式。之前做数据分析时用的那些工具,开始能看清楚它们各自在哪个层次上工作——Pandas 是抽象层,Python 是语言层,背后是 C 写的运行时,运行时跑在操作系统上,操作系统跑在硬件上。这条链路以前是完全不透明的。


关于这个选择

在职场有了几年经验之后,主动回去当"最差的那个",心理成本比预期高。不是因为课程难,而是因为"不会"这件事本身会触发一种很久没有感受过的状态——你清楚地知道自己在某件事上是完全的初学者,而周围可能有很多比你年轻、但在这件事上比你强得多的人。

这种感受在离散数学课上最集中。证明题做不出来的时候,有一种具体的沮丧:不是"还没复习到"那种可以解决的沮丧,而是"我的思维方式根本不对"那种更底层的不适。这大概是文科训练和理工科训练最根本的差距:文科的论证允许一定程度的模糊和修辞,数学证明的每一步必须有明确依据,不能靠"这个结论看起来对"蒙混过关。

适应这种思维方式需要时间,但这个过程本身是有价值的。它不只是在学离散数学,而是在重新校准一套认知工具。

文科背景在转码这件事上到底是包袱还是资产?诚实的答案是:看什么维度。在证明和推导的速度上,确实比理科起点慢。但在理解"为什么要这样设计"——系统的逻辑性、抽象层次之间的关系——这方面,文科训练里建立的批判性思维并不是完全无用的。只是这个优势要到后期的系统设计课里才会有感知,第一学期还处于纯劣势阶段。

选择二学位时,有过"会不会太慢"的疑虑——65 学分、7 个学期,别人在积累工作经验,我在重修基础课。这个疑虑没有完全消失,但第一学期结束时有了一个具体的感受:理解一件事情"为什么是这样"和"会使用它"之间,存在真实的差距。这个差距不是考试分数能衡量的,也不是培训班能填补的。

先接受这条路慢,再看它能走到哪里。


下一篇写 25 Winter——那个学期开始进入数据结构和面向对象,同时自学了四门课,工作量直接翻倍。