自述:一个Java开发者的成长之路
身为一个涉足JAVA领域多年的开发者,我的人生并非一帆风顺。曾因为贪玩,对技术钻研不够深入,时常出于高薪跳槽的压力去学习新技术。好在,现已成家立业,生活稳定。在此,我要特别感谢当年在贴吧遇到的那位技术大神,他的指引让我在迷茫时找到了方向。现在,我想分享我的成长经历和技术路线,希望能为迷茫的新人或者犹豫是否转行的朋友们提供一些建议。
JAVA行业相较于其他行业,待遇和前景仍然可观。尽管有人称程序员为“累、加班、掉头发”的职业,但在生存压力面前,每一行都有其不易之处。只要技术过硬,程序员这一行的收入还是相当可观的。那么,作为入门新手,要达到怎样的水平才能立足呢?
掌握JAVA基础语法、集合类、线程、IO操作是基本。Web部分如servlet、jsp、session、cookie以及mysql数据库的操作也要熟悉。对于前端页面,基础的html理解即可,重点是掌握js或jquery操作dom的能力。当下前端技术五花八门,后台人员逐渐不再涉及前端。
学到一定阶段,你需要理解一个请求从页面或移动端发起后所经历的过程,了解ajax并能发起异步请求到后台。在框架方面,建议学习springmvc、spring、mybatis等当下流行的技术,无需深入理解其实现原理,能够搭建框架并进行基本的增删改查操作即可。
当你掌握这些技能并进入求职市场时,虽然面临较大的竞争压力,但只要坚持努力,仍有展现自我的机会。尤其是在培训机构学习的朋友们,顶着没有收入的压力和外界的不解与嘲笑,你需要在四五个月内证明自己。熬过这段苦日子后,拿到高薪offer的那一刻,所有的付出都将变得值得。如果你还在培训机构学习JAVA并看到了这里,希望你能坚持下去,因为你的价值会在未来的日子里得到证明。
当你掌握了CRUD框架之后,接下来便是拓宽你的技术视野。尝试探索nginx的负载均衡特性,即使只是简单的配置,也能有效提高你的简历质量。学习MQ消息队列,从ActiveMQ开始,了解如何异步处理任务。掌握redis,将其用于数据缓存和会话管理,这将使你在求职过程中脱颖而出。这些技术的学习周期可能仅需两三周,但却能展现出中级程序员的技术水平。
对于中级程序员来说,应该深入了解的技术包括负载均衡(可通过apache http或nginx实现)、ActiveMQ队列(java语言编写,易于与java技术栈集成)、redis缓存等。还有精力的话,可以尝试mogoDB,体验存储json数据的简单demo。虽然在实际工作中可能无法全部使用到这些技术,但将其融入简历和项目描述中,能极大地丰富你的履历。在北上广深等地,掌握这些技术的你,薪资有望突破万元。
当进入到高级阶段的学习时,你将面临更深层次的技术挑战。这时,你需要理解jvm的基本结构和垃圾回收机制,熟悉常用垃圾回收算法和jvm调优参数。数据库方面,深入了解mysql的事务隔离机制、sql优化、乐观锁和悲观锁的应用场景。你还应掌握springmvc流程、spring的原理和事务传播机制,mybatis的流程原理等。你需要学会考虑系统瓶颈、系统容灾和单点故障解决方案。深入了解一致性原理、cap理论、paxos算法以及zookeeper的用途。soa架构、dubbo、微服务、spring boot和spring cloud等高级框架也是你应该掌握的。随着技术的深入,你会有一种一览众山小的感觉,百万并发的系统不再是遥不可及的目标。
在这个阶段,你的简历将会非常具有吸引力,你可能会成为抢手的高级程序员。在北上广等地,你的薪资可能会接近20k甚至更高。技术的道路永无止境,你需要持续学习以保持竞争力。
随着大数据时代的到来,日志处理、大数据、流式计算等技术将成为你进一步学习的重点。flume、hadoop、hive、presto、hdfs、storm、spark等工具将为你打开新的技术视野。这个阶段的学习将使你成为一个真正的跨语言程序员,因为不同的数据处理任务可能需要使用不同的语言。Python、scala甚至R语言都可能成为你的工具之一。你会发现,语言只是工具,真正的核心技术是思想和解决问题的能力。在技术领域不断攀登的过程中,你可能会在某个阶段感到困惑和沮丧。你会觉得技术已经如此精湛,似乎已经触及到了瓶颈,学习似乎也变得乏味和重复。恭喜你,这种无聊和孤独求败的心态,正是你迈向下一个阶段的催化剂。
下一个阶段,也是当前技术发展的终极演进状态,那就是机器学习、深度学习、神经网络和人工智能。这些领域正在以前所未有的速度发展,而我正身处于这个浪潮之中,努力探索前行。因为在这个充满挑战的阶段,只有不断学习,才能真正感受到技术的魅力。
在这个阶段,你会面临诸多挑战。首当其冲的便是数学——线性代数、概率统计、高等数学等将成为你前行的拦路虎。曾经觉得编程只需一加一等于二的美好时代已经过去。如果你想继续在这条路上走下去,那么请务必深入学习线代、概率等数学知识。否则,你将寸步难行。
你还需要掌握机器学习、深度学习等复杂算法。例如,k-means算法、decision tree、朴素贝叶斯等,这些都需要深厚的数学基础和相关信息熵知识。它们虽然抽象难懂,但却是通向人工智能的必经之路。至于深度学习、神经网络等领域,如果没有一定的数学功底,恐怕只能望洋兴叹。
到了这个阶段,你会发现能真正帮助你的人并不多。开源社区能提供的帮助也日渐减少,一切都要依靠自己。这时,你会明白那些曾经喧嚣的“大学无用论”、“编程数学无用论”是多么的荒谬。代码只是表面,真正的核心是数学理论。公司不愿开源的并非代码,而是担心开源后暴露出代码的拙劣,失去用户的信任。
当你逐渐接近这个终极阶段的门槛时,你会感受到强烈的危机感。人工智能的发展日新月异,甚至已经在围棋等领域超越了人类。恐怕真的不久,编程就会被人工智能所取代。为了应对这个趋势,为了保住自己的饭碗,改善生活,你必须不断学习,不断提高自己。
这篇文章将成为我今后生活的导向。一杯咖啡,一行代码,既是一种境界,也是一种追求。在人工智能的时代洪流中,我愿与广大技术爱好者一起探索前行,共同迎接未来的挑战。
原文出处: |