0、开头

大家好,我是罗鹏程,一个很老套的开头,哈哈哈。

这封信姗姗来迟,与其说是一封信,不如说是来听听我的故事。从2020开始,收到过很多网友的问题,职业的选择,是做大数据还是做java;选择了大数据,找工作的时候纠结是离线计算还是实时计算,生怕做了选择,后面的日子会责怪当初自己的错误选择。你遇到的问题,我都遇到过,接下来,慢慢听我说。

接触过c、c++、python、java、go、rust、javascript,常用的是java、python,web领域写过python web(django、flask),java web(sprintboot。现在专注做大数据,mpp数据库重度使用,且我相信这是未来(观点仅限个人,勿喷),并在这方面持续投入精力。

讲讲工作上的事。做过架构师、面试官、团队负责人(5人规模),一年时间写过上百个文档,组织过20多人会议,给同事做培训,也曾接过私活(去南京出差跟国电的项目领导开会讨论技术方案),集群搭建和维护,优化接口查询(最成功的是将20s的sql优化到毫秒级,且cpu和内存降低,为公司节约服务器成本)。

讲讲社区那些事,今年算是参与社区元年吧,之所以是元年,是认认真真参与社区中,其实2021年的时候参与了pulsar线下的meet up,见到了翟佳老师。今年呢参与了csdn北京总部的线下讨论会,认识了csdn的王总等大佬,9.15去上海参加了google开发者大会(赶上了台风,气死。。。),参加了微软大会等。说了这么多,看一下照片吧。

关于程序员的职业生涯,这是大家都会遇到和比较想问的,下面我来说说。

1、大数据应该学什么?

我认为首先应该认识大数据,大家常常说的大数据是什么,是大数据存储还是大数据计算,还是数仓呢。我觉得思考问题的方式不妨从大数据诞生的背景、历史、发展、解决了什么问题去思考。万物皆有源,从最初去出发。

最开始用mysql搭过数仓,后来迁移到starrocks。我觉得这是数据形态的变化,如果一开始的数据量就用集群去解决问题,无异大炮打蚊子,对于企业成本而言,也是浪费。我接触过年龄大一点的程序员,他们说那会用oracle,算一个指标得好久。

注意算一个指标得好久。这就是背景的由来,单机模式下无法解决当下的问题,或者解决问题的时效性不满足企业发展的需要了,才诞生了分布式,基于分布式这个概念才有了分布式存储、分布式计算,后来为了提升计算速度才有了mr->tez->spark,不过这也随着硬件资源的成本降低,内存计算比落盘更快。基于这个思路,是不是很多问题都能搞清楚呢。

关于大数据应该学什么,应该有张图。这是2020年整理的,2021年更新过。

以上是大数据应用方面的。

其次应该提升应用层次。比如flink,很多常见名词,窗口、watermark、双流join、flinksql、flink cdc、flink table、侧输出流、状态后端、状态变量、flink on yarn 、flink on k8s,还有最新的flink table store。使用一门技术,尤其是工作中重度使用的技术,要去关注发展史和最新情况,多看看会议发的文章和ppt,看看大公司是如何使用,该技术的生态、和应用场景,工作中不可能都接触到,这为了提升知识面,

最后应该关注底层,还是以flink为例,里面用了netty,akka等异步通信,这些也是需要了解的,也可以自己上手写一个demo,亲身感受一下。平常也可以加入一些技术交流群,积极回答网友问题,看看自己是否能解决,不仅帮助他人,同时也积累了经验。(这对于我是一个比较重要的学习途径)。也可以看看github上issue,看看大家都有什么问题,也可以看看pr,看看这个问题是如何修复的。

以上便是学习技术,自上而下的过程。

2、技术之争?

好多人是Java转过来,觉得大数据给的钱多,从现状看,确实如此,打不过就加入,没毛病,说明思路很明确啊。

我认为呢,其实没有区别,为什么这么说呢?java程序员,通常意义上是做java后端开发,大数据工程师呢,是离线数仓写sql,实时开发写flink、sparkstreaming。本质上都是程序员,都是业务开发,也有一些是做平台开发,前者是面向用户,后者是面向开发。程序员本质是通过程序解决问题,提高生产力。

我觉得关注点分为三方面:

第一方面:优先解决当下工作问题。大数据为主,就多学大数据技术,尤其是当下重度使用技术和最新流行技术。

第二方面:深入掌握一门语言。java不仅可以做web开发,增删改查,也可以写服务。学习多线程、常用数据结构、网络通信等等,这些都是各个框架底层所用到的东西,各个语言基本都有这些东西,所以深入掌握一门语言,在学习其他语言是很好很快入门的。

第三方面:计算机基础。计算机操作系统、计算机网络原理、计算机编译原理、数据库等。

如果万丈高楼举例,计算机基础地基,编程语言是沙子,底层组件则是水泥,上层组件则是门窗楼梯电梯。

前面讲到接触过的技术,其实我不挑技术,对什么感兴趣就看什么,重点还是优先解决当下。之前写爬虫的时候,遇到一个问题卡了2天,后来发现是使用问题,我就把requests文档通读了一遍。遇到azkaban的一个问题,我也把azkaban相关章节通读一遍。很多人也会质疑说,这么多东西学的过来吗?确实学不过来,知识面广肯定是好事,不是为了炫耀,也不是为了和人交流的谈资,而是进入这个行业,对这个世界抱有好奇和经验,只有接触过,我才知道应该专注的方向,如果一开始就做java后端开发,只写springboot,你愿意从一而终吗?所以结合自身时间、精力、工作、未来的期望综合考虑,能够建立自己的技术体系。

3、关于面试

先推荐一篇文章,python面试经验之谈,这是2018年面试华为之后写的,华为外包,拿到offer了。我自己这几年面试不算多,但是面试通过率90%。回过头来看刚才的面试文章内容,仍然觉得很受用。

我也当过面试官,面试过数十人,有的人技术不是很好,但是面试体验很好,我很乐意要这这样的人。

项目介绍简单清晰、能够明确表达项目背景及作用、能够清晰表达自己负责内容、能够围绕问题回答而不是答非所问、对于不会的问题能够说出一二且不东扯西扯、对于简历上的内容有准备不会滥竽充数。

所以简历环节一定要行文流畅、字体大小同一、有重点、不堆砌。

4、最后

想说就这么多了,不知不觉写了一个多小时,写了过程中也是回顾了8年来的历程,衷心地希望大家能够学好技术、找到好工作、发家致富,加油。

2022年12月8日,罗鹏程