传统行业程序员的深度焦虑?——快来互联网行业吧!

前言

不少在传统行业摸爬滚打的程序员越来越焦虑了,有些甚至睡不着觉。为什么?传统行业的程序员们每天进行的都是业务代码的编写,接触不到更新更好的技术;公司的效益并不好,如未达到目标收益,只能进行“瘦身”,技术人员也很恐慌;看到BAT等互联网企业飞速发展,程序员的待遇也水涨船高,难免眼红,但是如何转型却一头雾水。

下面就几个方面和大家谈谈传统行业的技术人员如何转型互联网。

传统行业和互联网行业的区别?

传统IT行业首要的目的是做项目,是为某一个客户解决实践需求,供给个性化的效果。

企业的中心竞争力是项目经历,IT技能仅仅解决问题的一种方法,所以要求在解决问题的前提下,控制好开发成本,确保体系安稳、兼容、可拓展。因而传统IT企业一般选用成熟、安稳的体系架构布置计划。和现有的体系确保兼容性,也是传统IT企业对技能坚持慎重的原因之一。

互联网IT行业的首要目的是做产品,是解决某一类人的某一类需求,供给通用的解决计划。

企业的中心竞赛力是用户量(流量),事务逻辑相对比对简略,在能够解决问题的前提下,互联网企业有必要把产品做的更能吸引用户、留住用户。互联网IT企业对技能的要求是提供比竞赛对手更漂亮、更好用、更安稳的产品。为了在残酷的竞争中坚持竞争优势,互联网企业也更情愿采用新技能、新架构。互联网企业的的事务量大,对实时性要求高,也是互联网企业需求采用新技能的重要原因。

程序员从传统行业转到互联网行业的原因?

一方面,不少程序员都有一定的技术追求,喜欢关注流行技术。比如动态语言、Ruby、Python、nginx、并发、大数据。但这些东西离传统行业的工作内容非常远,每天和寄存器,底层驱动,还有跟芯片厂商封装了无数层的SDK打交道。不少程序员的进取心也被磨灭的差不多了。

传统软件行业技术更新的很慢,并且在工作中无法接触到更多新的技术内容。“被过时”的概率比较大。所以,不少程序员都打算转行。

另一方面,世界上并不缺少程序员借助互联网成功走向人生巅峰的案例,比尔·盖茨、雷军、马化腾、周鸿祎、李彦宏等等都曾经是技术人员,赶上了互联网蓬勃发展的浪潮,实现了自我价值,建立起属于自己的“商业帝国”。

传统行业的程序员的晋升周期可能会非常长,5年,甚至10年时间才能做到高位。大家身边应该有过类似情况:年底评级时,我的贡献是最大,但永远是上面的人评价最高。互联网行业的情况要好很多,给那些有能力、肯努力的程序员们提供了另一种快速实现自我价值的可能。以上几位互联网大佬就是最好的证明。

从传统行业到互联网行业,你还差多远?

有一个普遍的现象,来自于传统行业的技术人员,大多数掌握的技能是SSH,稍微资深一点的工程师对J2EE规范有所了解,他们仍然在使用J2EE规范的EJB, JPA, JMS, JCA, JAAS等技术,数据库基本上使用Oracle,DB2,Sqlserver等等。

传统行业的技术人员一般都是在完善的框架下面进行业务模块填充,因此,一个传统的开发人员会包揽一个模块从前台到后台所有的工作,这包括:HTML, JS, CSS, EJB, JPA, SQL, PLSQL等等。

仅仅是这些技术还不够,如果我们要一步跨入互联网,还需要以这些技术为基础,进一步扩展技术视野,对欠缺的技术广度和深度进行补足。

下面就传统行业技术人员的现状,及转型互联网行业需要掌握哪些技术进行一些探讨:

消息队列

那么如果你在传统行业掌握了JMS规范定义的消息队列技术,你只需要再往前走一步,请深入学习开源的Kafka、RockitMQ、ActiveMQ、RabbitMQ、MemcacheQ、Redis、ZeroMQ、MSQ等。

缓存

除了要学习分布式缓存,例如:Redis、Memcache本身的功能和技术点外,最主要的要有缓存分片的思想,在互联网里大多数的热数据都是缓存在缓存服务中的,这需要大量的缓存服务器,单台机器是不能满足需求的,那缓存分片是一个大话题,缓存分片的实现方式一般有如下3种:

  • 通过代理层实现,例如Codis,在代理层实现数据的路由,对应用层透明。

  • 客户端分片,实现简单、使用简单、支持分片、复制、失效转移等功能。

  • 缓存服务器支持的高可用模式,例如:Redis 3.x、Sentinel等。

服务框架

在互联网的世界里,几乎所有的公司都实现了服务化,服务化导致的问题就是一致性问题,如何解决高并发系统的一致性呢?我在自己建立的Java架构群895244712中进行了一些解答,感兴趣可以加入了解。

最近微服务变得越来越流行,微服务实际上是服务化的一个延续,是更细致化的服务化的架构,微服务的服务框架的代表是Spring Cloud,它与Netflix集成,提供了限流、熔断、仓壁隔离、失效转移等为服务化中必不可少的高级特性,大家可以到 官网文档 进一步学习Spring Cloud相关技术。

数据库

在传统行业,大多数人开发人员都使用Oracle, DB2, Sqlserver数据库,其实,从功能和性能上来讲,他们都不亚于Mysql, 甚至比Mysql更优秀,但是Mysql是免费的,这使得Mysql得到互联网行业的青睐。

在互联网行业里面对性能追求到达了极致,因此会要求开发人员对数据库原理有所了解,其中最重要的部分就是索引,我也通过视频分享了《揭开Mysql B+Tree索引神秘面纱》的原理,同样的,加群即可获得。

负载均衡

刚才谈到,高并发系统,压力山大的时候怎么办?思想只有一个分而治之( divide-and-conquer)。因此,负载均衡则非常重要,传统行业以销售产品为盈利模式,因此,大多数项目在需要负载均衡的时候,多使用F5硬件负载均衡。

那么互联网呢?多采用软负载均衡,你必须了解LVS,nginx, Apache, Varnish, Haproxy等七层和三四层负载均衡原理和产品。

JVM

在互联网行业做Java开发,一定要对JVM有所了解,并且进行深入的研究,例如:GC,类加载,Hotspot编译器,多线程、并发和锁,IO和NIO等。这些对后续性能调优等也会有非常大的帮助。

大数据与云计算

作为一个IT从业人员,一定要跟上技术潮流,像云计算,大数据,CAP, BASE, 选主算法等概念不得不去了解,对于热点技术不得不研究,例如: Hadoop, Hbase, Zookeeper, Openstack, Dooker, Kafka, Storm等。

性能评估和容量估算

如果你决定要来互联网一显身手,你必须学会性能评估和容量估算,这包括对前端机、缓存、消息队列、数据库等各个性能指标的估算,例如:吞吞量,响应时间,内存,CPU,IO,网络IO等。

为了确保架构设计的合理性,性能和容量评估是在架构设计初期完成的,用来证明架构方案可行,但是在项目实施中和实施后,还需要对项目的进行压测,来证明项目按照既定的目标而推荐和完成。

互联网架构方法论

在互联网行业里,处理大规模高并发的用户请求的核心思想只有一个,那就是“分而治之”,因此,通常业务被拆分为多个职责单一的服务,在某一个单服务里,业务逻辑并不复杂,但是对非功能质量需求的要求较高,这通常表现在性能、可用性等方面,因此互联网的架构设计中首要考虑的是非功能质量,这和传统行业注重功能和业务流程的情况有所不同。.

技术攻关和线上应急

在互联网企业里,大多数产品都是针对用户端的,用户端的产品的特点是拥有海量的用户、产品要能够处理海量用户产生的大规模高并发的用户请求,因此会对产品的可用性比较敏感,在这种环境下,技术攻关和线上应急显得尤为重要。linux命令、脚本及Java虚拟机命令都是需要掌握的。

看到这里你会豁然开朗

希望这篇文章能够帮助更多的传统行业的从业人员转入互联网,在互联网的大舞台上展现你的才能,最后,附赠一张我在互联网行业里多年经验总结的《Java技能图谱》,大家可以根据其中的思维导图来深入学习各项知识点,每个知识点都需要系统的学习,或者看一本书或者查询相关的资料,切记要积累知识的广度的同时也要有一定的深度。

ps:需要高清大图的朋友可以加群895244712获取,群内也会分享一些上述知识点的资料给到大家学习,愿共勉!

这张Java技术学习路线图包括了上面说的这些知识点,分为七大模块,分别是

源码分析
大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不多。正确阅读源码是我们必须掌握的知识。

分布式结构
随着我们的业务量越来越大和越重要,单体的架构模式已经无法对应大规模的应用场景,而且系统中决不能存在单点故障导致整体不可用,所以只有垂直或是水平拆分业务系统,使其形成一个分布式的架构,利用分布式架构来冗余系统消除单点的故障,从而提高整个系统的可用性。

微服务架构
关于微服务架构的取舍
1、在合适的项目,合适的团队,采用微服务架构收益会大于成本。
2、微服务架构有很多吸引人的地方,但在拥抱微服务之前,也需要认清它所带来的挑战。
3、需要避免为了“微服务”而“微服务”。
4、微服务架构引入策略 – 对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。

并发编程
只有深入了解最底层的运作原理,加强逻辑思维,这样才能写出高效、安全、可靠的多线程并发程序。

性能优化
我们不仅仅对项目要运筹帷幄,还要能解决一切性能问题。只有深入学习JVM底层原理,Mysql底层优化以及Tomcat调优,才能达到知其然,知其所以然的效果。除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,在方案选型时的意识、思维以及做各种权衡的能力。

项目实战
要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是不必可少的技能,也是对自身能力的一个衡量,有多少的量对等于获得多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?

总结

以上是目前互联网最主流的技术知识体系,也是目前BAT用的最多的Java技术体系,只要熟练掌握了这些技术知识,完成从传统行业到互联网行业的转型没有什么问题。

除技术之外,更重要的是学习能力、技术视野、发展定位、管理能力等其他辅助能力的全面提升,只有这样,我们才能在飞速发展的互联网行业站稳脚跟,不被淘汰。

你可能感兴趣的:(传统行业程序员的深度焦虑?——快来互联网行业吧!)