但是由于程序员工作的特性,可能从30岁开始,很多人就已经花白头发,可能除了考虑那些复杂的业务逻辑实现以外,就是考虑未来的路应该如何前进了。
看看下面这个曲线,可能很多行业都是这样,到了一定的年龄,人的价值体现就开始慢慢的下降了,只是程序员的时间更短一点。
![13465705-cafd4fcdfdb31a64.png](https://i-blog.csdnimg.cn/blog_migrate/3e2fb48e606678371432b99560ccd59e.webp?x-image-process=image/format,png)
就我自己身边的情况来说,一个43岁的博士,被一家外企裁员了,他的下一份工作只有之前的一半薪水。
一个45岁的程序员,名牌大学毕业,到我这里面试,他只需要5K的薪水,并且在当时只有30岁的我面前唯唯诺诺。
因此,在34岁左右,差不多就是一个程序员的巅峰了,越往后,这个程序员的价值就越低。
这一现象不光是出现在中国,在硅谷也一样。
相信大家都听过61岁的Java之父James Gosling找不到工作的新闻。
![13465705-d3cfd5fb9d5901fd.png](https://i-blog.csdnimg.cn/blog_migrate/6e964c92590f4653a30637d44d20cb96.webp?x-image-process=image/format,png)
那么Java程序员该如何延长生命周期呢?
1:熟练使用各种框架,并知道实现原理(比如Spring, mybatis)。
2: JVM虚拟机原理、调优,懂得JVM虚拟机能让你写出性能更好的代码.
3: 池技术,对象池,连接池,线程池
4:JAVA反射技术,写框架必备技术,但是有严重的性能问题,替代方案是JAVA字节码技术
5: nio,“直接内存”的特点,使用场景。
6:JAVA多线程,同步异步。
7:JAVA各种集合对象的实现原理,可以让你选择更加合适的数据结构,hashmap的实现原理,扩容的性能问题。
8:熟练使用各种数据结构和算法,数组、哈希、链表、排序树...一句话要么是时间换空间要么是空间换时间。
9:熟练使用Linux操作系统,必备。
10:TCP协议,三次握手和四次握手,不了解的话,无法对高并发网络做优化;熟悉HTTP协议,尤其是HTTP头,明白session和cookie的声明周期以及他们之间的关联。
11:系统集群、负载均衡、反向代理、动静分离,网站静态化
12:分布式存储系统nfs,fastdfs,tfs,hadoop了解他们的优缺点,适用场景。
13:分布式缓存技术memcached, redis,提高系统性能必备,把硬盘上的内容放到内存里来提速,算法是一致性hash
14: 工具nginx必备技能超级好用,高性能,基本上不会挂掉的服务器,功能多多,解决各种问题。
15:数据库设计能力,mysql必备,基本的参数优化,慢查询日志分析,主从赋值的配置;其他的nosql数据库如mongodb
16: 中间件。如消息推送,可以先把消息写入数据库,推送放到队列服务器上,由推送服务器区队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈,推送过程则由推送服务器和对垒服务器完成,异步处理、环节服务器压力,解耦系统。
想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件。
架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统,访问量不大,数据量小,你给人家上集群、上分布式存储、上高端服务器,为了架构而架构,这是最扯淡的,架构师的作用就是第一满足业务需求,第二最低的硬件网络成本和技术维护成本。
架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失;
所谓架构师,思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等。可能涉及到的东西包括了从硬件到软件的方方面面,实在是一言难尽。
如果你立志做架构,首先打好基础,从最底层开始。然后发展到各种技术和语言,什么都要懂两点,要全面且不肤浅。为什么不是懂一点?你要看得透彻,必须尽量深入一些。别人懂一点,你要做架构师,必须再多懂一点。比如你发现golang很流行,别人可能写一个helloworld就说自己玩过golang,但你至少要尝试写一个完整的应用。不肯下苦功,如何高人一头?
另外你要非常深入地了解至少一门语言,如果你的目标是java,就学到极致,作为敲门砖,先吃饱了才能谈理想。而Java学到极致势必涉及到设计模式,算法和数据结构,多线程,文件及网络IO,数据库及ORM,不一而足。这些概念放之一切语言都适用。先精一门,为全面且不肤浅打基础。
另外就是向有经验的架构师学习,和小伙伴们讨论辩论争论。
其实最重要的能力就是不断学习。在思考新的技术是否能更好地解决你们遇到的问题之前,你首先得知道并了解新的技术。
说了半天,架构师很多时候是被迫上位的,并不是你学了这个和那个之后你就成为架构师了,这并不是RPG游戏。
![13465705-3db3fda283bd305d.png](https://i-blog.csdnimg.cn/blog_migrate/5fff86717335cd48e7dc13562b50d775.webp?x-image-process=image/format,png)
![13465705-1825c7d4d888fb11.png](https://i-blog.csdnimg.cn/blog_migrate/92e2ab461d5ee438738377485225ccbe.webp?x-image-process=image/format,png)