最最普通的自学之路/心路
前言
在此致敬湊老师的 一条CS自学之路 ,给了一开始小小的我大大的启蒙,虽然那时候因为混淆我期望的道路,因而导致花了很多时间走歪路,但那是我的问题不是湊老师那篇文章的www。我是个很普通很平庸的人,因此我很清楚,90%的萌新都会极度的缺少”常识”。我看过很多被推荐的blog, article, turorial,看到了那宛若繁星难以理清的概念和技术,见到了那大大的、难以触及的世界。我相信很多其他真正想走在这条路上的人都会有着难以下手的错乱和矛盾感。
在这篇文章中,我将以我,一个平庸者的视角,向您拉开计算机那难以透过的帷幕。
误区
在现代社会里,包括曾经的小萌新时期的我在内,很多人会混淆计算机的各个方向,对这个巨大的世界认知往往模糊不清,认为一个人能完成整套业务需求、做web的一定会写数学算法、做理论的一定能写好项目代码等等,这些都是由于认知高度和信息来源极度匮乏、没有清晰教育和”隔行如隔山”等造成的结果。
首先,在学习开始前,您需要清晰的思考和认知到,自己希望走的道路是什么样的
在现代-2025年,以我个人的视角大致可以将除了硬件之外的,您目之所及的软”计算机”分为两大类:CS和SE
一、计算机科学(Computer Science, CS)
计算机科学的核心目标是:
研究“计算”本身的本质与规律。
它更偏理论、底层和抽象,强调“为什么能工作”,“如何更快/更优地计算”等。
主流研究与应用方向(从理论到系统):
| 层次 | 方向 | 包括 |
|---|---|---|
| 理论层 | 计算理论(Theory of Computation) | 研究可计算性、复杂度、NP问题、图灵机模型。属于CS最理论的分支。 |
| 算法与数据结构(Algorithms & Data Structures) | 研究高效求解问题的算法设计与分析。ICPC核心内容。 | |
| 数理逻辑与离散数学 | 支撑算法、语言理论、形式化验证等。 | |
| 系统层 | 操作系统(Operating Systems) | 研究进程管理、内存管理、调度机制。 |
| 编译原理(Compiler Design) | 研究语言解析、优化、中间代码生成。 | |
| 计算机体系结构(Computer Architecture) | 研究CPU结构、并行计算、硬件抽象。 | |
| 数据库系统(Database Systems) | 探讨存储结构、事务、索引、分布式一致性。 | |
| 网络与分布式系统(Networking & Distributed Systems) | 涉及协议、容错、共识算法、P2P架构。 | |
| 智能层 | 人工智能与机器学习(AI & ML) | 研究计算学习理论、深度神经网络、强化学习。 |
| 自然语言处理(NLP) | 模型语言、语义理解、对话系统。 | |
| 计算机视觉(CV) | 图像识别、视频理解、生成模型。 | |
| 量子计算、密码学、安全理论 | 数学逻辑、计算复杂度与安全算法。 |
如果您完整的在CS的道路上走下去,您大概率会走在这些方向上:
- 算法工程师(Algorithm Engineer)
- 系统工程师(OS、Compiler、Kernel、Network)
- 研究员 / 博士(AI/LLM、理论计算、复杂度分析)
- 安全专家 / 密码分析师
- 数据科学/分析、机器学习
它们几乎都是理论性、抽象性、研究导向、底层性的
如果您希望走的是这条路上的内容,我推荐您看一位对我启蒙很大的恩师的文章(点此) ,我对CS只有系统层稍微了解些,因为SE会不可避免的触及到“本质”
二、软件工程(Software Engineering, SE)
软件工程的核心目标是:
研究“如何高效地构建、维护、迭代和交付大型软件系统”。
它更偏实践、系统、工程与协作,强调“让系统能运行、能扩展、能维护”。
主流研究与应用方向(从架构到管理):
| 层次 | 方向 | 包括 |
|---|---|---|
| 开发层 | 前端开发(Frontend Engineering) | Web、移动端、UI/UX、React、Vue、Flutter 等。 |
| 后端开发(Backend Engineering) | 业务逻辑、数据库、API设计、微服务、Spring Boot、Gin、Flask 等。 | |
| 全栈开发(Full-stack) | 同时承担前后端。 | |
| 架构层 | 软件架构(Software Architecture) | MVC、微服务、DDD、分层架构、消息队列等。 |
| 系统设计(System Design) | 大规模系统、高并发、负载均衡、缓存一致性。 | |
| 云计算与容器化(Cloud/DevOps) | Docker、Kubernetes、CI/CD、监控、部署自动化。 | |
| 质量层 | 测试与质量保证(QA / Testing) | 单元测试、自动化测试、集成测试。 |
| 软件维护与重构(Refactoring) | 管理技术债、重构架构、版本控制(Git)。 | |
| 管理层 | 项目管理(Project Management) | 敏捷开发、Scrum、Kanban、需求分析。 |
| 团队协作与工程文化(Engineering Culture) | Code Review、文档、规范、可维护性。 |
如果您完整的在SE这条路上走下去,您大概率会走在这些方向上:
- 前端 / 后端 / 全栈工程师
- 软件架构师(Software Architect)
- DevOps / SRE(Site Reliability Engineer)
- 测试工程师 / QA
- 项目经理(PM)
- 系统分析师(System Analyst)
它们多数都是工程性、系统性、协作性、落地性的。
一言以蔽之:
计算机科学(CS) 研究“计算的规律与底层机制”
软件工程(SE) 研究“如何得到可靠、可维护、可用的产品”
只有理清了您想做什么,您才能形成清晰的认知然后找到学习的路线,并极大化减少自己方向外的,不需要的庞大知识树。当然,CS需要部分SE,SE也需要部分CS,这点在之后您都会慢慢接触到。
当时候到了,您自然而然就会接触到您需要的内容。
如果您也和我一样打算走engineer方向,那应该把重心放在自己需要的知识树和实践上。
未完待续…