我的程序人生——三年开发的思考,阿里朋友给我总结的“Java架构师技术栈”...

想写这篇文章已经很久了,本来计划在3月份,也就是刚好满3年的时候写的,但是因为各种各样的原因推到了现在才开始码字。

小感慨

三年是一段很长的时间,它足够让你从高中毕业进入大学,也能让你从一个开发新人到一个成熟的开发人员。但是总感觉高中三年和开发三年的时间不是等长的,高中三年里时间过得很慢,每天需要学的东西不多,但能在考试中看到自己的成长;开发三年里时间过得很快,每天需要学习的东西非常多,但却很难看到自己的提升和变化。

大公司和小公司

13894260-fafaed5a9e0eb21f.jpg
u=2540083568,3013756559&fm=26&gp=0.jpg

在自己开发的前两年多都在一个初创公司里,干过android、ios、php、前端,研究过人工智能,甚至做了2个月的产品运营,一个伪全栈工程师就是这么练成了,什么都会一点,但是都不深入。初创公司基本是没有机会让你去深入研究某项技术的,需要的是产品快速迭代更新,听到的最多的一个词就是“能用就行,下次在优化”,然后就没有然后了。在这个公司里也有一个大家认为是大牛的同事,android、ios、java、php、python、前端、大数据、人工智能都参与过,也做出了一些成绩,最近他要离职了,我和他聊了聊天,其实他自己是很迷茫接下来要做什么。
创业公司和大公司的选择在知乎上也有很多人在讨论,大部分人的观点是毕业能去大公司就去大公司,大公司能提供完善的制度,有很多优秀的同行在你身边,能给你深入研究的的机会等等。说的基本没问题,但是目前很多大公司校招的人没有那么多了,通过大公司的面试也没有那么容易,大部分人第一份工作也是初创公司或者创业公司。当然创业公司并不是一无是处,虽然技术深度没有大公司的同学那么深,但是技术广度一般会强一些,这对之后去大公司跨团队沟通和交流还是有一定帮助的。在创业公司需要有自己对未来的一些想法和规划,也需要在某一个方面有深入的了解和学习,时刻保持危机感和饥饿感,这样才能有更好的成长。

最近的工作

最近几个月负责组织开发了一个vue的组件库,参与了vue-srr的同构,也做了一些webpack的优化。vue的组件库其实已经有很多了,不过不是很符合公司自身的业务场景,所以选择自己写一个组件库。这个组件自己参与的组件不是很多,但是因为这个组件库了解到在团队内推进一个项目不是想象中那么容易,特别是一个多人参与的项目,早期虽然大家报名认领了任务,但是因为业务繁忙等等原因,这个组件库基本没有进展。后面自己开始主动开始推进这个项目,制定开发计划,跟踪各位同学开发进度,这样才让项目一步步走上正轨,也很感谢各位参与同学的支持。
vue-ssr同构是团队内部很重要的一个调整,同构有各种各样优势,比如支持seo,首屏速度,开发体验提升等等。也许是因为自己node相关技术积累不多,只参与了一小部分的项目架构,很多服务端相关的架构设计也是另外的同事去完成的,其实自己也有点遗憾没能更多的参与到其中去,最近也计划用官方的demo在自己捣鼓捣鼓,更熟悉其中的一些架构设计。
webpack的优化也是因为做同构项目时遇到了一些问题,比如说用dll提升打包速度,优化热更新速度等等。自己对webpack的了解还是停留在了使用的阶段,源码和内部机制还没有进行很深入的学习,这也算是近期的学习计划吧。

业务与架构

写业务烦吗?
烦,老是进行重复的coding,提升和进步缓慢。
做架构爽吗?
爽,因为能研究一些新的东西,能够提升自己某一方面的技术。

自己最近也在思考做业务和做架构的问题,做业务的确很容易陷入到一种重复重复再重复的无限循环中,重复的技术栈,重复的业务场景,这些的确阻止了开发者的成长。那业务中要如何成长?个人的想法是多总结和记录开发中遇到的问题,多思考如何能够优化业务代码,如何写出高拓展性的代码,这可能是一些成长的点。做架构的确能经常研究一些新的东西,比如参与ssr的同构、动态化方案等等,但是如果只是为了架构而架构,脱离了业务场景,这也是没有价值的。所以就我个人而言,希望既能参与到部分业务中去,也能参与部分架构的任务,这样可能个人的提升会更大一些。

面试?

13894260-5fc5a7e1385d750c.jpg
timg (8).jpg

最近投了一份简历,面了一次试,但并不是同一家公司。之前在一个群里看到了考拉的一个招聘,薪水开的不错,所以打算去试试水,然而居然连面试的机会都没有得到。面试的那次是钉钉,因为之前投过也面过阿里,所以这次简历又被钉钉捞出来面了一次,面试的感觉有点糟糕,一方面是因为没有准备好,另一方面和他们要招的岗位不是十分符合。其实最近没有离职的打算,面试也是为了看看自己目前到了什么样一个水平,感觉陷入了瓶颈期,也是希望通过面试能够跳出目前有些糟糕的状态。最近一年也面了3次阿里了,效果不是很理想,奇怪的是至今没有获得一次网易的面试机会,不知道是不是因为网易对简历筛选十分严格还是什么别的原因。

以前学东西是为了成就感,现在是为了生存

这句话不是我说的,是一个ios的妹纸说的。最近我们一起参与了一次分享,一位实习生同学分享她最近一个月的学习情况和成长,会后聊天的时候那位妹纸发来了这一句话。这句话听着像过来人语录,自己也是有一些感慨,想起自己刚开始学习编程的时候,第一次打印出hello_world的时候,第一次开发出一个完整的android页面的时候,第一次解决了技术难题的时候,那种内心的喜悦和成就感是促使我接着往编程走下去的动力,但是慢慢的这种感觉越来越来少,甚至消失了。当然这是一个正常的过程,自己在不断进步和提升的同时,内心G点的阈值也会不断的提升,这是需要适应的过程。这句话可能反应了一些现状,但是如果学东西只是为了生存的话很难把事情做的很好,所以应该以一个积极的心态来面对。最后套用一句常用的话来总结:不忘初心、方得始终。

身体和精神状态

这个可能是每个程序员都或多或少的会遇到一些问题吧,比如长时间面对电脑,颈椎、腰、眼睛、头发等等可能都会有一些问题,也因为加班、熬夜等问题引起一些奇奇怪怪的问题。就自己来说最近颈椎一直很不舒服,持续的时间也挺长了,同时感觉身体状态也不如之前了,才仅仅才工作了三年,身体的状态就大不如初了,这算是一个危险的信号,如何在繁忙的工作中多花时间锻炼是接下来需要解决的问题。

展望

我很喜欢给自己定制一些目标,比如三年要达到怎样的水平,达到目标很开心,没达到目标很失望。就三年这个节点来说其实并没有达到自己的目标,有点小失望吧,但是路还是需要继续走的,希望在下一个目标节点能够达成。接下来的三年,我想按照一个阿里朋友总结的“Java架构师技术栈”来系统的提升自己,走优秀的人走过的路,总是没错的!

看到这里还没过瘾,那么就来群里与更多的大佬交流切磋技术,戳这里:咱们来一起抱团取暖,好吗?最重要的是群内有阿里京东等一线互联网公司有从业经验的资深架构师进行答疑解惑【Java高级互联网架构:964357187】

(1) 要具备扎实的Java基础

这里所谓扎实的Java基础不是我们通常所理解的Java语法、面向对象的概念,而是能深刻理解Java的多线程开发,熟练使用NIO技术优化网络编程,了解JVM的底层机制,具备底层性能调优的能力,这些技能恰恰是Java开发人员往往忽略的基础。

13894260-5a0d9fc521751e97
image

(2) 深入学习常用开源框架

很多小伙伴可能会很困惑,为什么BAT的面试官总是喜欢问源码?其实我们常用的Spring、MyBaits这样的框架可以说是JAVA里面最经典的教科书,从中你能学习到很多写代码的经验技巧,而去悟开源框架中蕴含的优雅架构设计之道这才是最重要的。

13894260-6e501d19eeca82d4
image

(3) 高性能分布式系统设计与应用

根据双十一日志统计,前端系统有效请求约60w以上的QPS ,而后端cache的集群峰值近2000w/s、单机也近30w/s,互联网大厂的架构师面对的就是这样的生产环境,所以分布式、缓存、消息这样搭建高性能系统的技术必须掌握。

13894260-e9ea2fd57a709385
image

(4) 微服务(分布式服务技术)

微服务架构是一种架构风格,整个应用被划分并设计为以业务域为模型的松散耦合的独立服务,方便横向扩展能力、伸缩性强、便于开发和维护等等这些是微服务与生俱来的优势。

13894260-fee4fd307a830ed9
image

(5) 沟通合作的能力

程序员的战斗,往往不是一个人的战斗,我们如何在一个平台下高效的去重,进行代码review,对功能进行调整、debug,做到在统一的规划下步步为营,混乱的堆代码的过程中找到自己的记录。这一切都依赖于有效的工具,Git、Maven和jenkins。

13894260-784886d6406e6456
image

写了这么多,我相信系统的掌握这些技术只需几个月,也希望沉淀三年后的我更精彩,借用hip-hop圈常用的一句话来结尾好了。keep real。

end…

一整套架构学习视频,可以分享给需要的人,进群免费领取!【Java高级互联网架构:964357187】

13894260-8adfc7ffcc6e975f
image
13894260-9c664fbe24a51045
image