您的位置 首页 java

高薪互联网行业——Java后端

五 后端( Java /python/go)

说到后端,其实我主要想说的是Java。C和PHP这两种语言我都不喜欢,之前也说过了,我自己绝对不是一个说话公平公正的人,什么观点都带着自己偏激和极端的调调。

我之前在贴吧跟Java吧的吧主一直在撕逼(原因很简单,我说教大家学Java,一个月收400块钱,他说我是骗子封我贴。然后我说好吧,我不说教大家学Java了,我来给大家解决在学习过程中遇到的困惑,他说贴吧不能发问答贴。我说行,那么我就写一些新人学Java必须要学数据库,数据结构和计算机网络,于是一群吧主过来喷我说,我没学过这些我也照样学会Java了啊,什么多线程什么继承等等,我无语了解释说Java语法不重要,重要的是要学会后端的架构,要懂算法,要懂业务,要懂系统的扩展性,要会调试程序,于是吧主们就把我封了,我很不爽,就新开贴子跟他们撕逼对骂–我从来不是一个重身份的人,我骂人会很脏,所以如果看到这个贴子觉得我很厉害那么你瞎眼了,我就是一个不喜欢就说,谁喷我一脸我喷谁一身的性格,现在的结果就是Java吧的吧主每隔10天就来封我一次-哈哈哈哈哈比闹钟都要准,所以三个月过去了,我带出来很多CSS和JS的学员,然而Java的学员并没有多少。所以如果有人去Java吧替我骂一下那些XX吧主并且截图给我看,我会很开心很开心很开心,说不定就会给你们开小灶哈哈哈哈。)

之所以说这些,一方面是400多的赞让我觉得有点羞愧,另一方面也是想强调一个概念,学后端,学会语法只是开始而已,最后一个就是我是一个小人,谁欺负我我就想欺负回去。

我想想该怎么描述后端的工作。后端跟前端是截然不同的,之前讲过。前端是Gank,后端是大后期,要等到16级以后才能V5起来,而且我非常不推荐前端去学后端(所谓的 全栈工程师 完全是扯,我有时间会写一下,为什么不要去做一个全栈工程师)。后端要积累到足够多的项目经验,才能够成为一个靠谱的后端工程师。我觉得。我来举一个跟着我线下半年的小培宇的例子就能简单说明一下后端的工作。

小培宇是第一个来到我大修院面试(嗯,最初我是给他们发工资然后带他们学习的)的人,跟我讲他是考研失败,差了几分,然后也做过点项目,我随便问了几句就知道了他的状态:人挺聪明的,但是在学校肯定玩的疯,所以问点排序算法还是能够答的出来,数据结构也懂一点儿,LinkedList和ArrayList删除数据谁更快也能答的挺靠谱的,但是绝对绝对没写过一行工程代码。

他打动我的那句话就是:不在乎工资多少就想多学点东西。很好,我默默的点个赞,因为我本身就想把自己这几年积累的经验和知识和走过的坑整理出来,告诉互联网的新人,所以也不抵触带新人,坦白说,愿意像我这样带新人的公司,几乎没有,带新人真不是一般的累。幸好我之前在各种公司中都带过各种新人,好的坏的都带过,所以还算是熟悉。

于是我给培宇精心设计了他的学习曲线,这也是我大IT核心观点:

1.先搭建基础环境( Maven ,SVN,Eclipse,jetty,SecureCRT,Linux,Mysql)

2.做简单的CRUD(DAO-自己封装的数据层, junit ,Log4j,Rest, Spring ,Spring MVC, Json ,JsonTaglib)

3.做一个相对复杂的系统DB设计,接口设计,项目部署,错误提示,Bug查找,怎么打系统日志。

4.做了一个 微信 相关的项目,了解微信的API,交互方式,Cookie,拦截器,AOP,登录系统的设计,命名规范等。

5.拆分Service,将Home和Service分开,使用RMI调用,实现各个层次之间都可以完成分布式的部署,使用 Tuscany (真心喜欢Tuscany)完成SCA。

6.使用MongoDB完成地理位置的搜索,短信,图片上传,云存储,使用Tiles来配置页面模板。

这些内容他花了将近三个月的时间。对他来说已经是学会了很多东西了,这三个月是几乎没日没夜的学出来的,要知道他之前压根就不知道什么是Spring,生成Json和套JSP的区别我骂了他好几次他才弄明白,经常会遇到一些Maven或者是Tuscany的报错不知道该怎么解决,数据库字段的规范和接口规范常常被我黑的体无完肤。很多东西都只是知道个皮毛而已,你们自己说说,学会Java语法算什么?

这还是有我来带,有我来教,有我给他定制合适的项目教给他去做,如果没有这些,你们自己学,学会我说的这些东西要多久?

别的不说,学会怎么打日志,怎么根据线上的报错去找错就不是一个月两个月能解决的。做为一个工程师,应该明白,很多时候要学会正确的路怎么走,还必须要知道错误的路是走不通的。正确的路大概就那么几条,错误的路呢?

为什么很多时候我看到错误日志就会明白是什么地方报错了,是因为我之前花了无数的心血和心力在查找这些错误上,所谓的经验就是这样,看的多了,一眼就知道大概什么地方报错了,然后随便百度下,就能找到解决方案,跟着去尝试倒底行或者是不行。这些是看书,或者是看视频能教会你的么?

到现在为止培宇已经跟了我快半年了,还是被我骂的狗血喷头,别的不说,就是接口的Wiki文档和代码保持一致,他都会经常犯错—这跟Java语法有什么关系,然而不经过一个好的训练,想做的很好,很不容易。

其实他接下来要学的东西更多。Memcache或者是Redis,ActiveMQ或者是RabbitMQ或者是QPid,Mybatis或者是SpringJDBC,Struts或者是SpringMVC,我告诉他的只是一个我们在项目中经过实践的,认为最合适的架构体系,然而他并不知道是怎么选择的。他必须要把这些相关的选择都有所了解,然后才能成为一个架构师。这个时间,如果一直跟着我,我觉得应该是在一年到两年左右。

这是一个横向扩展的内容,在这个时候我还没有要求他去看一些深层的东西。只是需要他停留在会用的状态就可以。在会用这些技术之后,再去了解一些自己喜欢的技术的细节,不成为一个只会使用工具的码农,所以培宇问我还需要多久才能达到我的水平的时候,我其实并不想打击他。我也是很刻苦努力的人啊,曾经无数个日夜也是默默的去一行一行代码去用最笨的方法调错,并没有人告诉我怎么样是正确的只有靠一个又一个的项目总结出来的经验。

而且我还会一些Drools,CRM,Lucene等等一些和架构师关系不大的事儿偏算法一些的东西,毕竟当年也学过点数据挖掘机器学习之类的内容。

就算是学会这些了,对于一个后端工程师来说就够了么?不不不,还需要学习JVM优化,监控,部署流程,发布流程,项目进度管理,代码重构等等等等。

所以,你们自己算算,这些东西如果都学会,一个Java工程师要多久才能成为架构师?

然而我还是对带培宇很有信心,首先他相信我,他愿意学,跟我当年一样,不怕苦不怕累,人也够聪明,做事也有责任心,其次我知道他应该怎么走这条路,先做什么,再做什么,哪些该花时间和精力,哪些不该花。

我希望他能够在一年之内就成为一个架构师。就如他在三个月和六个月之间独立做项目已经不成问题了一样(记着,我说的是独立做项目,自己设计DB设计接口设计架构完成需要的功能,从设计到实现完全自己来)。

我也希望我能够帮助很多和培宇一样,有实力有能力只是没有遇到我的那些人,这也是我为什么在知乎发贴的原因,IT技术的培训,哪些培训机构能做到这一点?

这个真实的小故事,就是想跟大家提前说清楚,我对后端的要求有多高,这也是后端特别好玩的地方。你必须要会很多种框架,有足够宽广的视野,还需要有足够多的项目经验(做金融和做地产是两个完全不同的概念),还需要懂项目开发流程以及快速定位线上问题的能力。

这些,就是我说的后端的主要工作内容了,这也是为嘛我说到后端的时候,大部分就是在指Java,而我说Java的时候,基本上是只指后端,根本就不是指Java的语法。更不是说是Android。

现在明白为什么后端是大后期了么, 为什么不建议前端学后端了么。后端要懂的东西,太多了。

言归正传,我来讲一下后端工程师的相关内容。

1 工作内容:

大部分的后端工程师都停留在功能实现的层面上。这是现在国内二流或者是三流的公司的现状,甚至是在某些一流的公司。很多时候都是架构师出了架构设计,更多的外包公司根本就是有DBA来做设计,然后后端程序员从JS到CSS到Java全写,完全就是一个通道,所有的复杂逻辑全部交给DB来做,这也是几年前DBA很受重视的原因。

所以你能看到成千上万行的存储过程(存储过程,视图,事务,外键 这些东西我真心希望永远不要在Mysql里出现),这就是外包公司中最常见的架构体系。来个SSH,Over。

好一点的会个WebService,用过ActiveMQ,也用过Redis,甚至还会用过Dubbo。然而大多数情况也根本不了解为什么这么用。

很多人写了两年或者三年代码都没做过独立的DB设计,不知道什么是REST,不懂怎么做接口设计,也不知道怎么去定位问题。

所以对于他们来说,拿到产品经理的需要,会有一个项目经理或者是Leader分配任务,跟着按步就班的把代码写完,跟前端调试完,QA测试不通过,加班改回来重新改,改完QA又没通过,再加班再改,QA终于通过了然后上线了突然发现另一个好的功能不能用了,跟着再接着改,在线上发布一次又一次。。眼睛熬的通红最终真的受不了了,休息几天换另一家公司涨个40%左右的薪水继续这样的日子。

不不不。我带出来的后端程序员并不要这么做。所以,我带的后端程序员的工作方式是这样的。

拿到产品需求-》后端程序员做接口设计,架构设计,DB设计-》拿出方案来做技术方案评审-》评审通过,开始预估时间-》每日更新自己的Task-》接口完成自测一百遍,每日部署到开发环境,随时集成-》CodeReview-》重构代码-》性能测试-》Demo通过-》发布到测试环境-》修正Bug-》重新发布-》发布到线上环境。

这中间需要理解需求,需要拿出多个方案,需要跟前端配合,需要跟QA配合,需要跟运维配合。需要跟产品沟通,有时候还需要找UI。后端几乎是一个核心节点,而这个核心节点接起来了所有的人。

我不知道我讲清楚没,很多时候我都发现我可能太久没做一个IT新人了,都忘记了新人们关心的问题或者是困惑是什么。

这就是我知道的,两种后端程序员的工作内容。你选哪一种?

2 需要技能:

环境【IDE(Idea/Eclipse,Maven,jenkins,Nexus,Jetty,Shell,Host),源码管理(SVN/Git) ,WEB服务器(nginx,tomcat,Resin)】

基础【Http,REST,跨域,语法,Websocket,数据库,计算机网络,操作系统,算法,数据结构】

框架【Spring,AOP,Quartz,Json TagLib,tiles,activeMQ,memcache,redis,mybatis,log4j,junit等等等等等】

业务【金融,教育,医疗,汽车,房产等等等等各种行业】

第三方【微信,QQ等各种第三方登录,支付,IM,地图,语音,视频,图片】

环境不说了,搭环境永远是后端人员比较头疼的事儿,所以才会有很多人想用简单方便的的语言来解决这些问题,比如说Python之类的。我还是喜欢Java,大概很多人觉得重,然而我喜欢,我觉得不是“重”,而是“正”。好像剑一样,王者之剑,路子很正。

基础知识太多了,正是我一直强调的,做后端,这些基础知识了解多少,其实就是决定了你以后能走多远。这些科班出身的计算机ER,会了这些,才有了一个平台,才可以站在这个平台之上去搭建更高层的建筑,如果根基不稳,你觉得你会对上层的知识理解透彻么?

框架是Java最有资格说自己是架构师的原因。无数的开源框架,选型,筛选,对比,填坑,优化,维护,寻找最适合的业务场景,很多时候很多公司的架构简直了(我不吐了,很多技术都在用然而每一种用法几乎都是错误用例的典范)。所以你想想,你大概要有多少框架要学要用?很多时候,你必须要想清楚,哪些是需要认真了解的,哪些是需要一笔带过的。

业务对于后端人员来讲无比重要,不懂业务,就没有架构。这是我经常说的一句话,这个世界上不存在不懂业务的架构师(我不怕被打脸),一个架构师必须要深入了解业务体系,知道哪些是会变的,哪些是不会变的,哪些是重要的,哪些是不重要的,然后才能做出来适合某个应用场景的架构来。比如说,同样的表,几千万的量和几亿的量差别非常大,频繁读和频繁写的设计也完全不同。会有一些通用的架构思想和理念在里面,但是都是需要跟业务结合落地的。

PS:很多金融证券行业的程序员,就是靠业务知识混饭吃的。对他们来说,对业务体系的了解要比在技术上的追求重要的多。

第三方的东西和JS的内容相似,我不想多说了,而且 JAVA的第三方的东西更是多的离谱,坦白的说Drools这东西我就没彻底研究明白,虽然很喜欢。而像这种类似的东西,太多太多了。

3 发展前景

对于后端人员的发展前景,我有两点想说的。

A.无论是B/S还是C/S,无论是WEB还是原生,或者是智能硬件,后端都会屹立不倒。

B.随着后端架构体系的稳定和成熟,后端人员在性能上需要担心的问题不多(再加上大部分应用场景其实并不需要那么多的性能),所以更多的应该会关注于一个稳定的扩展性好的架构,以及快速实现能够复用的业务逻辑模块实现上。

最近后端人员在价格上(以北京为例),其实有点偏低于前端人员的,就向我之前所说。两年的JS可能拿到20K。两年的Java想拿到这个,非常难。然而,五年的Java或者是七年的Java,拿到30~40K,不难。

更高的,也不稀奇。

0~12个月:4K~10K

一年~三年:8K~20K

三年~五年:18K~30K

五年以上:30K~

成长路径:Java初级工程师-Java中级工程师-架构师-技术经理-技术总监-CTO-CEO

后端的爆发力并不差,只要你给他时间,只要你愿意前进,后端的路线很深,深到你有时候会觉得自己还没来得及全部了解,就已经有无数的新人涌进来要替换你的位置了。

4.入门门槛

计算机网络,数据结构,数据库,操作系统,Java基础语法。

Java是入门门槛最高的一个,没有之一。(好吧,我虽然说的是后端,然而一直把Java等同于后端)

当然,如果你的志向并不是一个架构师,只是像NodeJS和Python或者是PHP一样随便做点小项目,那么也可以说的得上是没有门槛,但是我说过我有偏见,所以可以直接把我无视掉。如果你觉得我说的哪点不对,你过来揍我啊。

要跟我学Java,就必须把这些基础知识学好,我只带想成为架构师的人。

5.哪些行业适合做后端工程师

IT界:无

其他界:无

科班生:计算机专业的中等水平能力以上

所以如果有各种培训学校告诉你零基础4个月20000块钱把你教出来做Java后端,然后你月薪上万,你就直接一锅盖盖他脸上吧。

那么零基础的人想做后端,怎么样才能入门呢,我比较推荐的是先做前端,然后把自己的基础知识各种补,补回来,再去转后端–但是实际上,你做了前端,再想转后端,就太难了,因为你到时候就不太想放弃自己一年或两年就可以轻松拿到的高薪,去做一个苦逼的后端了。

6.职业限制

后端的职业限制有很多,第一个职业限制就是不去做独立的项目,不做DB设计,不做接口设计。

第二个职业限制就是视野不开阔,不知道有什么样的开源软件可以用。

第三个职业限制就是不重视线上环境,不知道如何写日报,也不知道如何快速定位。我不得不说我带过的兄弟,有一次解决线上问题的时候快把我气疯了,他们在那里猜测问题出现的原因,跟玩福尔摩斯一样,不打日志不看日志,根据现象倒推结果,直接盲改代码再扔到线上看看有没有解决问题—那是最后逼不得已的办法好么,在此之前能不能安静的把日志打出来,确认一下到底是哪里出错了?

第四个职业限制就是不懂版本管理,不懂Bug修复流程,不懂开发流程。这些其实都是一整套的流程体系(等我心情好了,有人把Java贴吧吧主骂的狗血喷头了,我大概也会写出来)

大部分后端的人员都会抱怨自己不会写前端代码,不会写Android或者是IOS,不能自己独立完成项目,所以他们才倾向于自己做一个全栈工程师,做一个自己喜欢做的东西。

这也是后端人员会经常觉得不爽的地方,自己写的东西完全感受不到,而且一旦出问题很多时候都是大问题,解决起来很麻烦,经常不敢改代码,因为看不懂前人的东西。

有时候后端人员会比较木,虽然很各种职业都交流,但是多数都会觉得自己很NB其他人都很SB。

这也是后端人员比较大的问题,往上走的话也容易遇到各种瓶颈,做技术的,做到CTO,再去做CEO,其实很难的。

而且,等你走到足够高的高度,你会发现,一个七年工作经验的正常发展的后端工程师,一定会有一个七年工作经验的产品或者是运营,在薪水和职业上秒杀他。这也是做技术的最大的悲剧。

不过大部分的后端工程师都比大部分的产品和运营人员薪水高,这也是这个行业的特征之一,所谓高不成低不就,小富即安,就是这样的。

如果你是一个有理想的后端工程师,我建议你多关注一些敏捷开发,多关注一些项目管理,学会带着自己的兄弟们一起做事儿。再不然,就是在技术这条路上一直走到黑。

7.去哪里学,怎么成长

基础知识不要来找我,我不教。随便去其他的学校补基础也可以。想要提高或者是想要成为架构师,就来找我。

我在说培宇的时候其实已经讲清楚了我是怎么带人的,但是在线上做这些,确实有难度,而我又不想教一些虚头巴脑的东西害人害已,所以我还在想办法解决怎么样在线上把后端工程师带好的问题。

如果看到这里觉得我说的有道理,一定要称赞我,催促我,让我觉得这个事情有意义,值得做。

想做好,真的挺不容易的。所以,能转就转,能收藏就收藏,能推荐就推荐。我想我应该能想到一个好的办法,来帮助后端工程师,把成长的时间从五年到七年,缩短到一年到三年,至少在线下,我是绝对有信心的,这种信心来自于我之前这么做过。以及我正在做。

你们可以随时找培宇聊聊,看看他这些日子倒底是怎么被我骂的狗血喷头然后开心快乐的活着的

文章来源:智云一二三科技

文章标题:高薪互联网行业——Java后端

文章地址:https://www.zhihuclub.com/187934.shtml

关于作者: 智云科技

热门文章

网站地图