对于培训出身的同学,接下来该怎么学习技术?
首先恭喜从培训班出来找到工作的同学,确实挺不容易的,4个月的培训,每天从早上9点到晚上9点,也是996,主要的活动地方就是宿舍和教室, 让我现在也去培训,我估计还熬不下来。
尤其是对于从小白开始的同学,4个月期间不断地接触新技术、新概念,一个还没彻底理解,另外一个就呼啸而来,狼吞虎咽,想真正消化是很难的。
所以我经常说对于那些通过培训来努力改变命运的同学,我非常尊重。
现在好了,找到了工作,可以稍微喘一口气了,但是能够就此休息了吗, 那是绝对不能。
培训只是让我们入了门,有了一个初步可以工作的技能,可以参与项目,在别人的指导下,在现成的框架下写业务代码,想成为一个真正的程序员,路还非常地长。
我想给各位唠叨两句,说一些注意事项。
1. 适应期:把工作做好
首先一定要把分配给我们的工作做好,这是底线。
要拿出300%的劲头去做,就是加班加点也要高质量按时完成,谁让我们是新人呢! 初步建立起自己的认真负责的形象,注意啊,个人的形象是非常重要滴。
遇到障碍一定要及早提出,向同事请教,“不耻上问”,不要不好意思,不要怕别人鄙视。
最怕的是有个问题把你给绊住了,你坐在那里不吭声,两天过后,领导才发现你严重落后于进度。
如果有余力,尽快地去熟悉项目的各个方面,尤其是业务上的东西。
收集业务知识相关的文档,反复阅读,努力理解,不懂就请教。 注意:这些事情很有可能是在你的工作之余完成的,下班后的游戏就不要再打了,现在工作第一!不过你放心,你努力学习的态度一定会给你带来回报。
和组长,项目经理等领导搞好关系,抓住一切可能的机会主动、自信地领导交流(例如共进午餐的时候)。 不用总是“默默无闻”,要主动参与,了解项目的进展,人员情况,有什么困难。 总之要快速地融入团队,打入他们的圈子。
不要不好意思,老是躲着领导走,让领导觉得:这孩子这么怕我,是不是有什么问题?!
2. 深入学习技术和原理
度过了适应期,会感觉舒服很多,代码和业务逐渐熟悉, 任务不用加班也能完成。和同事也开始熟悉, 于是就进入了舒适区。
这个时候可以更加深入地钻研一下技术了,什么Nginx、Redis、RabbitMQ、Shiro、Elastic search、Spring ......等知识,培训班也许学过,但是我相信只是学了一些皮毛,对原理可能还不太了解, 这时候正好可以结合工作中用到的技术,深入地学习一下。
例如Nginx,要去理解epoll这个技术,以及和select之间的差别。 理解什么是非阻塞IO,顺道可以学一下Java的NIO, 感兴趣的话还可以瞄一眼Node.js, 本质的原理是相通的。
对于Redis,至少要理解分布式一致性Hash,虽然Redis没有用这个算法,但是要和Redis那种基于槽的方式来对比。
理解缓存失效了怎么处理,增加、删除机器会怎么影响缓存。如果你的项目在使用Redis做缓存,主动向相关负责人请教,毕竟理论和实践还是有差距。
对于Spring, 现在要考虑学习DI和AOP的实现原理和技术了,可以尝试自己写个小容器,绝对很锻炼人。
DI还好说,AOP这一块儿需要有底层技术支持,就是Java动态代理和CGLib。再往下深挖,就是ASM, Class 文件的格式,ClassLoader,这就进入了另外一个大世界: JVM, 需要掌握JVM的逻辑结构,执行引擎,尤其是后者,理解一个类装入方法区以后到底是怎么执行的,其中的栈帧等概念对以后学习C语言在机器层面的执行很有帮助。
可以阅读一些面向对象设计, 设计模式相关的书籍,不能只是看,要思考,它到底要解决什么问题? 把一些设计思想和自己的项目做对比,看看为什么现在的设计是这样,是不是有问题, 向资深同事请教。
......
总之,最好从工作中使用的技术开始学习,理论联系实际,还是那句话,“不耻上问”,作为程序员,老是闷头自己干,希望一鸣惊人,给别人一个大惊喜,那是不太现实的。
3. 计算机基础
在往下走就进入了计算机基础的领域了,之前说过很多次,估计老读者都烦了吧, 这里再啰嗦一下。
操作系统的几个重要概念一定得掌握,进程、线程、虚拟内存,一定要理解程序在机器级层面的表示,寄存器,函数栈帧等,如果你能理解缓冲区溢出的攻击和防御就差不多了, 这些知识需要涉及C语言和汇编。
理解线程的几种实现方式,对于将来学习Go语言的并发,Actor, ErLang 等技术和语言有极大帮助,你会发现有似曾相识的感觉。
数据结构和算法的学习要贯穿始终,虽然在工作中最常用的可能就是数组,List和Map。
对于常用的数据结构要自己能写,要阅读JDK对应的实现。 要大量地做题,锻炼自己的逻辑思维能力。
如果你的工作和数据库结合紧密,那数据库中相关的技术如索引,事务,查询优化不能错过。
对于计算机网络,要理解协议的本质、分层的本质。 具体的协议中HTTP是必备,还要了解可靠性传输的原理,TCP/IP等协议,socket等基本概念。
4. 总结
需要提醒大家的是,我这里所说的只是一个大概的分层,在学习过程中很有可能一下子从最上层的应用跳到最底层的基础概念,这很正常,很多知识点之间都是相互关联,不是完全隔绝的。尤其是在原理层次。
你会发现需要学习的东西实在是多,这篇文章能列出来的也是部分而已, 没有办法,这就是程序员的世界, 更可怕的是还有很多新技术在不断涌现。
所以对于培训出身的同学来说, 找到工作,只是入门而已,绝不能就此停滞。
还有就是我啰嗦了这么多,也许一时触动了你,但关键还是要行动,并且坚持学习下去,这样才能成为真正的程序员。
我的Java学习交流QQ群:589809992 禁止闲聊,非喜勿进!