我的十年技术栈演进:从 C 语言到云原生架构师

我的十年技术栈演进:从 C 语言到云原生架构师

复盘 2015-2025 我的核心技术学习轨迹,分享每个阶段的选择逻辑、踩过的坑与认知升级。

引言:为什么要做这份“年表”?

去年年底,团队里一位刚工作两年的同事问我:“我现在该学点什么才能快速成长?感觉技术栈太多了,有点迷茫。”

这个问题让我一时语塞。不是没有答案,而是答案太多了。我意识到,单纯推荐几个“热门技术”是懒惰且不负责任的。每个人的成长路径都不同,但成长的逻辑和节奏却可以借鉴。

于是,我花了一个周末,翻看过去的笔记、GitHub 提交记录、博客草稿,整理出了这张从大学到现在的核心技术学习年表

这不是一份“推荐学习清单”,而是我个人的技术演进实录。我希望通过分享这段经历:

  1. 展示技术学习的阶段性和连贯性:技术栈不是零散的知识点,而是一个有先后、有深浅的体系。
  2. 还原每个关键决策背后的“为什么”:为什么在那个时间点选择学那个技术?是主动规划还是被动推动?
  3. 坦诚分享“弯路”与“局限”:有些学习当时觉得“无用”,后来才发现是伏笔;有些选择则被证明是走了岔路。

如果你也是一名处于某个成长阶段的后端开发者,希望我的这段经历能为你提供一个真实的参照系,帮你更好地规划自己的技术路线。


十年技术栈演进深度复盘

第一阶段:大学奠基与进阶(2015-2018)——“理解计算机在做什么”

核心学习:C -> Java -> 计算机基础四大件 -> Java Web 栈

  • 2015-2016:从 C 语言和“黑盒子”开始

    • 我的选择:很多学校从 C++ 或 Java 开始,但我们学校选择了 C。现在看来,这是极其正确的一步
    • 价值与踩坑
      • 价值:C 语言逼着我直面内存、指针、栈/堆这些底层概念。写一个链表都要自己管理 mallocfree,这种“痛苦”建立了最扎实的编程直觉。它让我明白,高级语言那些便利的语法糖背后,机器到底在忙活什么。
      • 踩坑:当时觉得数据结构课上的算法(尤其是图论)太过抽象,离“做网站”很远,有些轻视。工作后才恍然大悟,这是内功。为后来解决性能瓶颈、理解数据库索引(B+树)、学习 Redis 数据结构(跳表)打下了不可或缺的基础。
    • 代码片段:那时对指针的恐惧
      C
      1
      2
      3
      4
      5
      6
      7
      8
      // 一个简单的交换函数,让我第一次理解了“传值”和“传地址”的天壤之别
      void swap(int *a, int *b) {
      int temp = *a; // 拿到指针指向的“值”
      *a = *b;
      *b = temp;
      }
      // 如果写成 void swap(int a, int b) {...} 就完全无效
      // 这个教训让我在后来的Java、Go中,对对象的传递语义格外敏感
  • 2016-2018:转向工程,拥抱 Java 生态

    • 背景:明确想走后端开发,而当时(乃至现在)Java 生态在企业级市场的统治力毋庸置疑。学习 Spring、MySQL 成了顺理成章的事。
    • 我的探索
      1. 技术选型上的思辨:当时也关注到 Python(Django/Flask)和 Node.js 在Web开发领域的兴起,它们以快速原型开发著称。但我做了一次深入对比后认识到,这些语言的动态类型和更灵活的生态系统,在构建需要长期维护、强调分层设计和强契约约束的大型复杂业务系统时,往往不如 Java 成熟。特别是对于我刚从 C 语言走出来的思维模式来说,Java 的 强类型、编译期检查 给了我极大的安全感。
      2. 最终锚定 Java:正因为 C 语言的“苦”,让我对 Java 的自动内存管理(GC)、异常处理机制、丰富的类库、以及后来接触到的 Spring 框架所提倡的“约定优于配置” 所带来的生产力提升感受极为深刻。那时读 Spring 官方文档,看到 @Controller@Autowired 这些注解时,我仿佛看到了“魔法”——原来企业级应用的结构可以如此清晰,依赖可以这样管理。我意识到,工程的核心是平衡控制力与开发效率。Java 和 Spring 在那个年代,为我提供了一个近乎完美的样板间。
    • 关键进展:用 Spring Boot + MyBatis + MySQL 完成了第一个像样的个人项目——一个简易的图书管理系统。为了弄懂 @Transactional 注解如何让数据库操作自动回滚,我特意去看了 Spring AOP 的入门资料。这个阶段最大的收获不是框架本身,而是理解了 MVC 分层、依赖注入(IoC)、ORM 映射、声明式事务管理 这些工程化思想。它们构建了我对“后端应用”应该如何组织的第一性认知,这种认知比任何具体框架的 API 都更持久。

阶段小结:这个阶段的目标是构建一个完整、自洽的知识底座。计算机基础是“道”,Java Web 是“术”。很多同学急着学最新的框架,却忽略了底层原理,这在后期会成为难以逾越的天花板。

第二阶段:职场初期与视野开拓(2019-2021)——“从写功能到管服务”

核心学习:Go -> Docker -> K8s & 监控 & CI/CD

  • 2019-2020:拥抱变化,学习 Go 和 Docker

    • 动机:入职后,公司部分新项目开始用 Go。这是个被动但宝贵的机会。
    • Go 语言带来的冲击
      • 从“重”到“轻”:告别了复杂的 XML 配置和厚重的 JAR 包。一个 go build 出单个二进制文件,部署简单到令人感动。
      • 并发模型的转变:从 Java 的 Thread 和线程池,转向 Go 的 goroutine 和 channel。这不仅仅是语法不同,更是对“高并发”问题思考范式的转变。我写了一篇内部博客,对比两种模型处理 worker pool 的差异,获得了不少好评。
      • :习惯了 Java 的“处处皆对象”和异常处理,刚开始对 Go 的“组合优于继承”、“错误值处理”非常不适应。特别是 if err != nil 写到手酸。但坚持下来后,反而欣赏这种显式与简单带来的代码可读性。
    • Docker:第一次真正理解“环境一致性”
      • 之前部署总是“在我机器上好好的”。Dockerfile 的出现,让应用与其运行环境完成了绑定。这不仅是部署工具,更是开发、测试、生产环境统一的基石
  • 2020-2021:深入云原生,扛起稳定性责任

    • 契机:公司业务扩容,服务数量激增,手动管理容器和排查问题变得不可能。
    • 学习 Kubernetes:这是学习曲线最陡峭的一段时间。Pod、Deployment、Service、Ingress、ConfigMap、Secret……概念层出不穷。我的方法是:从解决一个具体问题开始。当时我们的服务需要动态扩容,我就专攻 HPA(水平自动扩缩容),弄懂 Metrics Server,再倒推去理解 Pod 的生命周期和资源请求/限制。
    • 监控与CI/CD
      • Prometheus + Grafana:告别了“看日志猜性能”的时代。学会编写和暴露应用的 Metrics,配置告警规则,让我对服务的运行时状态有了可量化的掌控感
      • Jenkins:第一次搭建了完整的 CI/CD 流水线。从代码提交 -> 单元测试 -> 镜像构建 -> 部署到 K8s。这个过程让我深刻理解了自动化对质量和效率的提升,也踩了无数坑,比如流水线脚本调试、构建资源清理等。

阶段小结:职场初期,学习从“个人兴趣驱动”转向“业务需求与职业责任驱动”。技术选择开始与“线上稳定性”、“研发效率”、“团队协作”这些工程目标强绑定。这个阶段,解决问题是最好的学习催化剂

第三阶段:专项深化与架构视野(2022-2024)——“从会用工具到理解系统”

核心学习:中间件深度原理 -> 系统设计 -> 技术领导力

  • 2022-2023:回头深挖核心中间件

    • 反思:之前用 Redis 就是 set/get,用 ES 就是简单查询。当遇到缓存击穿、雪崩,ES 查询超时等问题时,才发现自己只是“API 调用工程师”。
    • 我的专项学习
      1. Redis:不再满足于单机版。深入学习了持久化(RDB/AOF)原理、主从复制、哨兵模式,最后是 Redis Cluster 的数据分片(slot)与路由逻辑。我甚至用 Go 写了一个简单的 Redis 协议解析器来加深理解。
      2. Elasticsearch:重点攻克了DSL 查询语法、分词器原理、倒排索引结构,以及性能调优(如 force merge、读写分离)。为了优化一个慢查询,我学会了看 _search 接口的 profile 结果。
      3. Kafka:理解其作为分布式提交日志的本质。学习了副本机制、ISR 列表、生产者应答机制(acks)和消费者组(Consumer Group)的 rebalance 过程。
    • 认知升级:这个阶段的学习,让我从“这个工具能干什么”切换到“这个工具为什么能这么快/这么可靠?它的 trade-off 是什么?” 例如,理解了 Redis 的单线程模型为何还能高性能,就自然明白它不适合做复杂计算和存储大 Value。
  • 2024-2025(当前与规划):架构、治理与规划

    • 现状:开始参与跨团队的技术方案评审,需要为更大范围的系统稳定性和演进负责。
    • 当前重点
      • 服务治理:研究服务网格(如 Istio),探索将流量管理、安全、可观测性等能力从业务代码中下沉到基础设施层。
      • 制品管理:引入 Harbor,规范镜像的存储、扫描和分发流程,提升软件供应链安全。
      • 云原生架构:思考如何更好地利用云平台的托管服务(如对象存储、消息服务),让团队更专注于业务创新。
    • 规划方向
      • 技术领导力:如何制定合理的技术规划?如何平衡技术债与业务需求?如何帮助团队成员成长?这已不仅仅是技术问题。
      • 成本与效率:在技术选型中,开始系统性地考虑资源成本、运维复杂度和团队学习成本

阶段小结:技术深度到达一定阶段后,广度与视野成为新的瓶颈。学习重心从“具体技术实现”转向“架构权衡、技术决策与团队赋能”。这个阶段,最大的挑战是将技术能力转化为业务价值与团队效能


总结与反思

回顾收益:一条连贯的成长曲线

这份年表对我而言,最大的价值是看清了自己的成长脉络

  1. 基础坚实:早期的底层原理学习,让我在后续面对任何高级技术时都自信能拆解到本质。
  2. 顺势而为:每个阶段的学习都紧密贴合了个人发展(求职)和公司业务(微服务化、云化)的需求,学以致用,动力十足。
  3. 螺旋上升:学习是循环的。比如学 K8s 时重温了网络知识,学 ES 时深化了数据结构理解。新技术常常是旧知识的重组与延伸

局限性与反思

  1. 前端与全栈的缺失:我的路径是深度后端。对前端框架、移动开发的了解很浅,这在某些需要端到端视角的场景下是短板。
  2. 算法与数学的持续挑战:尽管基础尚可,但在面对机器学习、大数据等更复杂的场景时,数学和高级算法的短板就会凸显。这是一个需要终身补课的领域。
  3. “规划”与“机遇”的平衡:我的路径有规划(如坚持学基础),但更多是被机遇推动(如转 Go、学 K8s)。完全严丝合缝的规划不现实,但保持核心方向不偏航,同时拥抱有价值的意外,是关键。

给你的建议

如果你正在规划自己的技术学习:

  1. 先深后广:在一个核心领域(如你的主力语言和后端生态)扎得足够深,建立“根据地”,再向外拓展。
  2. 以问题驱动学习:为了通过面试、为了解决线上 Bug、为了优化系统性能而学,效率最高,记忆最牢。
  3. 建立知识连接:每学一个新东西,问问自己:这和我知道的 XXX 有什么异同?它解决了什么旧问题,又引入了什么新问题?
  4. 输出是最好的输入:尝试写博客、做技术分享、回答别人的问题。教,是最好的学。

互动邀请:你的技术学习年表是怎样的?有没有哪个关键转折点对你影响至深?或者你对我的某个阶段的选择有不同看法?欢迎在评论区分享你的故事和思考,让我们在交流中共同进步。


我的十年技术栈演进:从 C 语言到云原生架构师
https://www.edenzeng.online/2026/01/19/0.技术栈/00.总结/我的技术演进/
作者
Edenzeng
发布于
2026年1月19日
许可协议