从机器学习到数据开发

这是我第一次写博客。

学计算机也已经很多年了,从本科到研究生,看过很多技术文章,也收藏过不少大佬的博客,但自己一直没真正写过什么。总觉得自己懂得还太少,做的东西也不够“厉害”,没什么值得分享的。

但今天突然很想留下些什么。

刚刚和即将毕业的师兄们聚完餐,回来坐在电脑前,脑子里一直在回想大家聊的那些事情:科研、实习、秋招、工作。

实验室里的几位师兄基本都拿到了不错的大厂 offer,有的做算法,有的做开发,也有人开始做 AI 大模型相关方向。看着他们慢慢找到自己的方向,说不羡慕肯定是假的。

但相比羡慕,更多的是一种对未来的憧憬。


从建筑到计算机

其实我的本科并不是计算机专业,而是建筑专业。

现在回头看,会觉得自己的路线确实有点绕。

本科的时候虽然学过一些计算机相关课程,比如程序设计、数据结构、数据库,还有 408 的一些内容,但那时候更多还是停留在“上课”和“考试”的层面。

当时的我,对计算机行业其实没什么特别清晰的认知,只是单纯觉得编程挺有意思,也会被技术世界里的很多东西吸引。

后来读研之后,真正进入实验室,才算第一次正式接触技术方向。

也是从那个时候开始,我慢慢意识到:

自己可能真的想走计算机这条路。

但与此同时,我也很清楚,和很多本硕都是科班的大佬相比,我还有很长的路要走。


机器学习、深度学习,以及最开始的迷茫

刚进入研究生的时候,我最先学习的是机器学习和深度学习。

一方面是实验室科研方向需要,另一方面也是因为当时对 AI、深度学习这些“听起来很前沿”的方向很感兴趣。

那个阶段学了很多东西:

  • 机器学习基础算法

  • CNN、RNN、Transformer

  • PyTorch 训练流程

  • 数据预处理

  • 模型训练和调参

  • 论文复现

刚开始的时候,会因为成功跑通一个模型开心很久,也会因为环境问题折腾一天。

但慢慢地,我开始发现一个问题:

自己虽然在“用模型”,但其实并不真正理解工业场景中的数据到底是怎么流动的。

而且科研里的东西,和真实业务之间,其实差距很大。


开始重新思考自己的方向

后来和老师、师兄们交流得越来越多,也开始慢慢接触算法之外的一些方向:

  • 数据开发

  • 数据仓库

  • 大数据平台

  • AI 工程化

  • 数据治理

那个阶段给我最大的感受是:

原来真正的企业环境,并不是简单训练一个模型就结束了。

数据从哪里来?

怎么清洗?

怎么建模?

怎么调度?

怎么服务业务?

这些问题远比我之前想象得复杂。

学校里的知识,和真实业务之间,还是有很大差距的。

也是从那个时候开始,我开始认真思考:

自己未来到底更适合什么方向。


最终决定走数据开发

在研一上学期的时候,我最终决定:

以后想走数据开发方向。

其实刚开始做这个决定的时候,我心里挺没底的。

因为相比很多本硕都是计算机的大佬来说,我的基础并不算强。

再加上自己是从机器学习慢慢转向数据开发,中间有不少知识断层。

但也正因为这样,我反而更想系统地去理解:

企业里的数据,到底是怎么被处理、流转、最终服务业务的。

于是寒假那段时间,我开始集中补基础:

  • Linux

  • MySQL

  • Hadoop

  • Hive

  • Flume

  • Kafka

  • Spark

  • 数仓分层思想

  • ETL 流程

  • 数仓建模

也是从那个时候开始,我正式接触了自己的第一个完整项目:

离线电商数仓项目。


第一次真正理解“数据仓库”

说实话,在真正开始这个项目之前,我对“数仓”的理解非常模糊。

我知道有:

  • ODS

  • DWD

  • DWS

  • ADS

也知道:

  • Hive

  • Spark

  • Kafka

  • Hadoop

这些组件。

但这些东西为什么存在、解决什么问题、彼此之间怎么协同,我其实并不清楚。

而这个项目,是我第一次真正从“业务视角”去理解整个数据体系。


刚开始最难的,不是代码,而是“体系”

刚开始做项目的时候其实挺痛苦的。

因为它和以前写算法题、小 demo 完全不一样。

它不是:

“写一个功能”
或者
“跑一个模型”

而是一整套数据链路。

第一次接触的时候,我甚至经常搞混:

  • ODS 到底存什么?

  • 为什么一定要做 DWD?

  • DWS 和 ADS 有什么区别?

  • 为什么维度表要做拉链?

  • 为什么企业里这么强调数据规范?

很多时候一个 SQL 我能看半天。

尤其是刚接触 Hive 的窗口函数、多表 join、动态分区、拉链表这些内容的时候,经常会有一种:

“好像看懂了,但又没完全懂”的感觉。


从“组件”到“数据流”

但随着项目慢慢推进,我开始第一次真正理解:

原来整个大数据体系,本质上是在解决“数据如何高效、稳定、规范流动”的问题。

也正是在这个过程中,我开始慢慢理解各个组件到底是干什么的。


Flume

以前一直觉得日志就是简单文本。

后来才意识到:

企业里的用户行为数据、埋点数据,其实很多都来自日志。

而 Flume 的作用,就是稳定地完成日志采集。

也是第一次真正意识到:

数据分析的第一步,其实不是分析,而是采集。


Kafka

刚开始接触 Kafka 的时候,我一直觉得它特别抽象。

后来慢慢才理解:

它本质上是在解决“生产速度”和“消费速度”不一致的问题。

比如日志疯狂产生,但下游处理不过来,这时候 Kafka 就能起到缓冲作用。

同时它还能实现系统解耦、削峰填谷这些事情。

也是从这里开始,我第一次真正感受到:

为什么企业里会那么强调稳定性。


HDFS

以前只知道 Hadoop 是分布式存储。

但真正开始用之后,才发现它更像是企业的数据底座。

大量日志、行为数据、历史数据,都会进入 HDFS。

而 Hive,其实很多时候只是 HDFS 上的一层 SQL 能力。


Hive

Hive 应该是整个项目里我花时间最多的部分。

因为真正的数据开发工作里,SQL 太重要了。

我第一次系统地写:

  • 用户行为分析

  • 留存分析

  • 漏斗分析

  • 复购分析

  • 商品主题分析

  • 流量主题分析

也第一次大量接触:

  • 窗口函数

  • 分区表

  • 动态分区

  • 拉链表

  • 数据倾斜

  • Join 优化

那个阶段最大的感受就是:

以前写 SQL 是为了做题。

现在写 SQL,是为了处理业务。

这是两种完全不同的思维方式。


第一次真正理解数仓分层

这个项目对我帮助最大的,其实是数仓分层思想。

以前总觉得:

为什么非要分那么多层?

后来真正做下来之后才发现:

ODS、DWD、DWS、ADS 每一层其实都有自己的意义。

ODS 保留原始数据,保证数据可追溯。

DWD 负责数据清洗和明细规范,统一数据口径。

DWS 开始做业务主题聚合。

ADS 则直接服务报表和业务指标。

也是从这里开始,我第一次真正意识到:

数据开发其实不只是“写 SQL”。

它更像是在构建企业的数据语言体系。


项目做完之后,我第一次有了“成就感”

整个项目断断续续做了很久。

中间踩了很多坑:

  • Hadoop 环境问题

  • Hive 元数据异常

  • Spark 提交失败

  • 数据为空

  • 分区遗漏

  • SQL 跑不通

  • Join 数据爆炸

很多时候一个 bug 能卡一天。

有时候凌晨还在查日志。

有时候改了一个字段,后面整条链路都得重新检查。

但当最后整个流程真正跑通的时候,那种感觉真的很难形容。

因为这是我第一次:

真正完整地参与一个业务型数据项目。

我终于不再只是知道某个组件“是什么”。

而是开始理解:

它为什么存在。

它在整个数据链路里到底承担什么角色。


但我也知道,这只是开始

虽然项目完成的时候很开心,但我也很清楚:

自己现在其实还只是刚刚入门。

因为越学越会发现,真正的企业数据开发,远比课程项目复杂得多。

所以最近这段时间,我也还在继续补很多东西:

  • SQL 练习

  • LeetCode Hot100

  • Spark 原理

  • JVM 基础

  • 数仓设计思想

  • 大数据组件底层逻辑

同时也开始慢慢关注:

实时数仓、Flink、AI 和数据结合这些方向。

虽然目前还没有真正深入学习,但我越来越能感受到:

未来的数据开发,一定不会只停留在离线处理。

包括最近我也开始思考:

AI 未来会怎样影响数据开发。

比如:

  • AI Agent

  • Text2SQL

  • 智能数据分析

  • AI 辅助 ETL

  • 数据治理智能化

这些方向我都挺感兴趣的。

所以接下来,也希望自己能一步一步把整个技术路线继续补完整。


关于实习

这次和师兄们聊天,对我触动最大的还有一点:

他们都提到了“真实业务经验”的重要性。

很多东西,只有真正进入企业之后才能理解。

比如:

  • 生产环境规范

  • 调度体系

  • 数据质量

  • 性能优化

  • 业务理解

  • 多团队协作

这些都不是单靠课程项目就能完全学到的。

所以现在我也准备开始找日常实习。

希望能够真正进入业务环境。

真正看看:

企业里的数据,到底是怎样流动的。


写在最后

写这篇博客,其实更像是一次阶段性的记录。

记录自己从建筑专业走向计算机。

记录自己从机器学习到数据开发的转变。

也记录自己第一次真正开始理解“数据”这件事。

我知道自己现在懂得还很少。

和真正的大佬相比,可能才刚刚起步。

但至少现在的我,已经开始慢慢找到方向了。

以后应该也会继续更新一些:

  • 数仓学习记录

  • Hive / Spark 总结

  • 数据开发面试准备

  • AI + 数据方向探索

  • 学习路线记录

如果有正在学习数据开发的大佬,或者已经工作的前辈,希望能多给我一些建议和指导。

也欢迎大家一起交流学习。

毕竟对于现在的我来说:

真正的路,可能才刚刚开始。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐