随着工作年限的上升,花在写博客上的时间越来越少了,14年写了一篇,15年写了两篇。并不是由于没有在继续写代码,没在研究新的技术,可能是心态问题,有些事情一旦没有继续坚持就容易变成一种惯性,如下图:
06年到15年,完整的十年。
十年老兵,算算已经过30几年了,刚开始工作时不断的听人说在中国程序员超过30如果还在做程序员,那么就会被后面的年轻人淘汰掉。这句话说的倒是有半分道理:如果老兵五年之后每年都在在吃老本,一直凭借五年前的经验混饭吃,那么五年后的确非常容易被淘汰,因为五年后的技术已经天翻地覆,对程序员的技能会有新的需求,此时不思进取的老兵在纯技术上跟刚工作一两年的年轻人的起点基本是相同的,而且年纪还是一大劣势:不光是人的学习精力没有年轻人旺盛而且时间上也不会有年轻人那个集中,我们会花很多时间在家庭上面。这也是很多人说过了30要转管理的原因,因为大部分人认为做了管理手上的事就少了,毕竟具体的活吩咐小兵做就可以了。但如果是一个一直对技术保有激情保有憧憬的程序员来讲,他每年也会吸收学习新的技术的话,那么在30+之后没有理由被淘汰。可能是时代变了,其实我周边也有不少像我一样30+的人也还是在写代码,国外更多例子了,好多老头也在写代码,而且写的很好。
2015年上半年之前,我一直工作在.net平台已经9年半,有好多人给我建议让我转转技术方向,大多的理由就是.net一般只服务于中小企业,工资待遇上面不如java或者andriod。但我一起没有因此放弃.net而去学习其它平台的技术,因为我认识的搞.net的人中,也有挣钱很多的,所以一直乐此不疲的研究.net。今年一个偶然的机会,我放弃了工作9年多的.net平台选择了不那么熟悉的java平台,理由可能会让大家笑话或者觉得我是个做事冲动的人:其实理由就是第一次有人邀请我去新平台奋斗。当时我的第一直觉是相当开心的,有人在组建团队时居然记的我,我认为至少说明自己的某方面的能力是得到认可的。而很有意思的是,我一个没有任何java实践经验的.net老兵并没有经过任何面试就给了offer,同事基本是无理由的信任他招的兵能够非常快速的适应新的平台。当时他说的话是:我有信息在一个月之内将你们变成JAVA专家。
我暂时不总结2015上半年的所得所失,先总结2015下半年的种种情况:
.net转JAVA过程的笑话以及不适应点,大部分是一些.net思维,还有一些是想当然。不全是我个人,这里我列表的是我们几个JAVA新兵做过的事:
设计文档中将hashMap写成set,比如Set<int,int>,在技术评审时立马就被JAVA老鸟纠正过来。刚开始只做设计,没编码,所以出现此类事件。
不知道JAVA基础数据类型与.net不一样,比如Long与long是不同的,Long是个引用类型,允许为空。.net中的Int32与int都是值类型,不可能为空。 这里还有个小问题一直没有研究,JPA工具生成的数据库类对象,将不可为空的自增主键也映射成Long,而不是long,其实我希望是long。
JAVA中的decimal很不适应,.net中,它可以直接像使用int一样直接使用,但java中没有这个类型,只有一个对象BigDecimal,无论是初始化还是做操作都是基于类的,很不爽,所以很容易出现直接用+-*/直接操作BigDecimal的想法。
字符串判等,直接会写if(companyName=="FB"),结果发现功能不正常,仔细看代码也未发现哪逻辑有问题,不得已只能调试,第一轮基本都不会将断点打在if里面,最后才发现不能使用==号判断字符串。
几件可能让老板比较着急的事情:
一个系统登录权限认证问题,一个月内不止三次反应问题。根据项目需要我们决定采用shiro+redis来替换spring自带的认证授权模块,测试环境功能都正常,到了线了偶尔有用户反馈权限的判断不正常,明明是有权限的但提示没有权限,而这类情况是不定期发生,有时发生了刷新下页面又恢复正常。由于我从来未遇到过,所以比较难以下手分析。后来通过打印log,以及各种亡羊补牢的方式来试图解决,都以不理想告终。有一阵手上正有一个重要项目在做,临近收尾阶段,我特意请示了领导需要重点解决下登录认证问题,因为此事让我压力特别大,在别人眼中看来这应该是个很简单的功能,怎么到我这就这么多问题,质量太没有保障了,重要是我并不是新兵,而是一个混了10年的老油条,且不是应该是个多么大的NB人物至少也应该是独挡一面的。后来经过调试发现,我们每一次请求,都会操作很多次redis的读和写,这让我很不理解,虽然操作redis性能不是大问题,但一次请求多达几十次的写操作总觉得不太正确。于时尝试放弃远程缓存,改用ehcache的内存缓存,上线后什么事情都没有了,仿佛世界一下子清静了。原因可能是因为我们使用了腾讯云提供的redis,这类产品往往与原生太的有区别。至于腾讯云的redis为什么会有上面的现象,我由于时间问题未做后续追踪,因为我本来就认为权限不适合启用远程缓存,使用本地缓存更可靠。到此,困扰我一个月的问题终于有了结果,心里也踏实了许多,最近一个多月再也没有听到类似的问题反馈了,也因此让我对第三方产品有了更深层次的认识。
真的1个月可以变成JAVA专家吗?1个月时间将你们变成JAVA专家,这是我们老板在项目启动前给我们的信心,因为新项目从启动到上线也就一个月多几天的时间。项目启动前,团队的成员有之前搞PHP,也有像我一样搞了好多年.net的,原生态搞JAVA的也有但比较少。我现在也不是非常清楚为什么老板能够那么有自信的说出那句话。下面我列一些,我新接受的工具以及技术,全部都需要在一个月内会用: