从零带人学技术(0)

前言

本人本硕计算机,某大厂码农工作经历2年多(跳过一次槽),本专栏是对自己既往找工作的一个总结,从零开始整理回顾自己的知识体系,也是带女朋友学习的一种记录(校招找工作的一次记录),希望也对大家是一种帮助。
以下会从公司层面、岗位层面、福利层面、开发工程师的职业成长层面来介绍程序员未来的工作体系。

公司层面

本人就职过两个公司,所属领域不同。针对于程序员来说能就职的公司种类,那就非常多了,需要网络的领域都需要程序员。

互联网类

最热门的就是互联网(包括衣食住行,电商、金融等领域),这类领域流量大,功能迭代强,产品交付直接影响的对象是人。如果程序有bug,或者功能服务有异常可能会导致用户的投诉,甚至上微博热搜,如果是金融领域可能还会有法务纠纷,国家安全等因素。正是由于这类公司的性质,往往对程序员要求比较高,毕竟招进去的程序员是直接参与代码的编写和服务发布的(大佬程序员很少代码呢,主要负责架构的事),这类公司对于高并发、高流量要求比较大,薪资普遍高一点,经常会出现突发事件,比如某一天xx出轨了,xx股票大涨,xx突发新冠口罩供不应求,会导致服务器压力陡增,这个时候程序员就要紧张起来了,毕竟服务器资源有限,在有限的资源里如何让自己的服务器高可靠、高可用,低延迟是每一个程序员需要考虑的事。这类互联网大厂有batj,amt、字节、小红书、微博、滴滴等,这类公司对个人技术成长比较好(虽然进去很多也是curd,但是从技术架构、公司开发流程、技术新旧等方面能带给校招新人一个很好的视野观)。

物联网类

本人毕业第一家公司就是物联网类的公司,这类公司其实直接的产品是设备,程序出了bug,会导致设备某些功能不能正常使用,用户间接受影响也会有客诉,但是压力没有互联网那么大。物联网公司流量也特别大,以后是iot的世界,一个普通老百姓至少拥有3件以上的物理设备接入网络,而且设备需要和云端服务器连接,就会导致绝大部分时间,服务器流量都是高负荷的(流量这一点来说比互联网大一点,毕竟设备要和云端服务要不断保持心跳,会导致几亿或者十几亿设备每隔几秒流量就会过来),波峰波谷值并没有互联网大。但是高并发常见并没有那么多,不会像互联网公司那样秒杀抢购都是高并发的场景。突发事件不是那么多(服务器质量不好的除外)大多问题是性能问题,毕竟要经的住大流量,服务器资源很吃紧,经常半夜要爬起来解决问题,毕竟机器半夜也会有大面积出问题的场景。从工资角度来说比不上互联网公司低2k以上,从技术角度来说流量程度可能更好,高并发常见少一点,技术架构等方面也不落后。

国企银行类其他类

这几类公司本人没有直接从事过,通过朋友同学的角度了解过,这里就聊一聊自己看到的,银行类,这一类行业公司架构可能比较老旧,服务交付迭代速度不会特别快,毕竟行业属性要求,安全可靠第一,目前银行类也在改革跟上互联网的潮流,但是更新速度不会太快,对于技术锻炼而言,如果比较核心的团队,可能要保证高可靠,不能出错,但是绝大部分来说技术可能一般,工作强度要比互联网低一点,晚上78点的也有。国企类,国企类个人感觉有点小作坊的感觉,技术架子和开发环境都需要搭建,10多个研发就是公司的主力(这个也跟国企性质有关,此处本人视野比较短),不过挺适合养老朝9晚5,工作压力小,也可以食用。

岗位层面

现在互联网行业的岗位大致分为:算法工程师、开发工程师、运维、测开工程师、测试工程师、产品经理、运营、项目经理。
举一个比较生动的例子各个岗位的作用,最近双十一到了,公司想要上新功能让引导用户购买更多的产品。问题来了:要设计怎么样的功能,功能的每一个步骤怎么设计比较合理,才能让用户上钩买更多的东西呢。这里需要有专业的工程师来设计打磨。

产品经理

产品经理,需要了解市场和客户的潜在需求,需要拿数据说话为什么设计这个功能,这个功能做了之后有多大的收益。产品经理的日常需要画图,画功能图,需要把功能拆解成程序员能的懂的步骤和需要开发的新功能。

开发工程师

有了这些设计图纸之后,需有有专门的功能师拿着图纸,按照功能来进行开发。开发工程师,就是需要看懂产品经理说的功能,之后需要进行方案设计怎么来实现这些功能,需要开发多少接口,需要怎么实现这些接口。开发工程师里面又会细分前端、后台、客户端、服务端。前端主要是渲染界面,从后台功能师(或者服务端)去拿数据然后展示给用户看。后台工程师需要管理数据库,然后提供接口给前端,保证前端能够拿到正确的数据。并需要保证前端拿到数据要在几十个毫秒内完成,才能给用户很好的体验。前端、后台、客户端、服务端也会分很多语种Java c++ PHP等。

测试工程师

这些功能设计完了,一定会有很多缺陷,如果让开发来干测试的活,自己写的代码当然知道逻辑,潜意识里面也会按照自己写的逻辑来测试,这样很多很多的bug都测不出来,这样会导致写完的产品上线之后会有很多很多的缺陷,遭到用户的吐槽。这里就需要专业的人来做专业的事。测试工程师就要出场了,测试工程师需要白盒黑盒测试,测试做的工作是需要理解功能的逻辑设计,然后针对逻辑写很多很多的测试用例,然后通过各种测试工具来测试开发写的功能到底是否可用,不同的公司可能测试工具不同。

测试开发工程师

上面其实也已经提到,不同的公司可能使用的测试工具或者公司内部工具不同,这里其实都是测试开发的活,如果通过程序的方式让测试高效,需要通过程序的方式解放测试重复的工作是测试开发工程师需要干的活,测试开发其实和开发工程师差不多,都需要开发但是工作产品交付的对象不同,开发交付的是用户,测开交付的是测试。测开压力会小很多。比较适合想搞技术的女同学。

运维

所有的开发工作如果完成就需要将产品发布上线。由于互联网行业,产品经常交付,开发如果一边需要开发项目,一边需要关注实时线上服务器的运行情况(如cpu、内存)是否可用的话,对于开发来说工作效率太低,这里就需要专业的人来管理真实环境服务的运行情况,提高用户的体验。运维在界内称为“网管”,运维需要对linux 中间件等知识要熟练,主要工作就是服务器出问题怎么进行回滚服务,保障服务的可用。服务器压力大了如何动态扩容,如何负载均衡减少压力。运维不参与开发工作,但是运维也挺累的,一般大年初一也需要安排运维监管服务器,保证服务可用,经常大半夜如果有服务器挂了,需要运维顶上。

运营

有的校招小伙伴,对运维和运营傻傻分不清楚,运营其实是互联网行业有的,因为经常需要更新网页界面如:粽子节来了,圣诞节来了,不同的网页或者app感觉像换了一个皮肤和文案,这些很多都不是程序动态来选择的,很多都是通过运营选择好活动内容,然后通过开发写好的接口配置到程序中去,程序就显示出来了,运营主要非编程的一些活。

项目经理

如何想让上述工种有效的工作和配合起来这里就有一个专业的人,叫Pl(项目经理)。这个角色程序员都特别讨厌,这个岗位就像一个监工,问你啥时候完成,快到了交付时间就会问你好了没,没好的原因。每天程序员加班,就是因为设置了一个deadline,如果没有开发完,就要加班加点,不然项目经理就要来了(狼来了),还有就是开发过程中如果有合作的程序员不配合工作或者对方程序员提供给你的接口太慢,你都可以跟项目于经理沟通,他会帮你去摆平(又是一个好警察)。

算法工程师

这个岗位其实公司岗位是最少、工资最高的。这个岗位最要是让程序智能化,如何提高服务的质量,可以通过算法岗位通过机器学习,深度学习训练出来的模型,然后通过模型给开发工程师提供数据然后返回给前端工程师。本人对算法工程师还是略知一二,毕竟很早之前应聘的就是nlp后面转开发了~

福利层面

现在公司的福利一般除了五险一金(现在有六险一金、九险一金的噱头)意外,还有公司的过节费,餐补、交通补、高温补,住房补等等等等。
作为校招生可能会被眼花缭乱的补助看晕,我觉得主要看几个重要的点。
1.公积金,公积金这里面很大的噱头,现在国家最高缴纳的公积金是百分之12,就是帮你交纳的钱百分之12,每个月也会从你工资里面扣百分之12,一共百分之24存到公积金中,这个可以用来买房。有几个雷区:公积金的叫法,现在基本上公司都是缴纳百分之12,那坑在哪。坑在缴纳的额数是不是全部工资的百分之12,因为现在互联网公司工资都分基础工资和津贴工资,比如你拿了18000,说不定12000的基本工资,6000的津贴工资,这样公司给你交的就是12000*0.12,这样其实不是12%
2.其他补助
有的公司有餐补或者是包吃,这样算下来基本上吃饭都不用花钱,有的公司有房补,这个也是大头,这些都是需要关注的点。在大城市打工的程序员,我觉得很大的支出在住房,要多多关注下房补。做饭一般都不是很贵,毕竟可以吃公司的,比较便宜。校招的话我觉得还有人才补助需要关注,城市和城市之间差别很多,很多直接应届过来就是几万块,十分豪气。

注:
薪资方面比较推荐看:offershow(校招薪水)微信号,有实时每年的薪资,还有各个城市的薪资行情介绍,955不加班白名单,帮助各位萌新踩雷,毕竟有些hr的话不能听,好多都是噱头。

开发工程师的职业规划

这里我仅java开发工程师做一下职业规划,因为本人所处的岗位就是这个岗位。
其实开发工程师
年限(0-1)熟悉业务和技术栈
年限(1-3)深入业务熟悉中间件、架构
年限(3-5)需要懂中间件、架构的源码而不是仅仅懂业务
年限5年以上需要有架构思想。(速度快的同学们年限可以忽略)

需要懂得技术栈,我觉得是越精通越值钱
7大块
1.java基础知识和jvm
2.java高并发
3.数据库mqsql
4.中间件redis、.zk、kafka
5.设计模式
6.spring相关
7.io相关
上述知识点其实跟目前冯·诺依曼计算机架构体系瓶颈相关,互联网目前两大瓶颈,1个就是io问题:磁盘访问速度太慢,从而就有各种缓存出来如redis,mongdb等,或者优化mysql等,还有一个就是tcp/ip协议不稳定容易丢包,不可靠,速度慢,就有各种中间件提供可用性可靠性,还有各种开源架构netty,序列化等方式来提高网络传播。

你可能感兴趣的:(从零带人学技术,java)