一点记忆——
Java
框架知识的学习有感
说一下自己学习的框架知识的历程吧:好久了,应该是一年前,也就是大三上的时候,我对于基本的
Java
编程就已经达到所谓的“熟练”,认为自己可以在
Java
的世界里可以华山论剑了,到现在想一下,确实真的很好笑,如果真的想在
Java
的世界里华山论剑的话,没有时间的积累简直就是痴人说梦。
即使有时间的积累,不断扩宽自己掌握的知识的范围,同时有不断的深入,这些还是不够的。因为我们知识不断的学习,没有什么新的框架或者是技术变革,不会给程序界带来什么变化。什么时候,我们可以编写自己的框架技术,并且在一个领域做到相当优秀,这个时候,勉强算是略有小成。
同时还有很多其他的领域,在纵向上分为向上的框架技术和向下的底层技术。
往上面走的话,就是开发技术中的框架。如果我们想要真正开发自己的框架的话,那就是首先把别人的框架学习使用好,这样还是差的很远,要深入到框架的源代码级别,阅读框架的源代码,这又是一个很大的任务了,望而却步了吧,不过想要在这个圈儿混的话,那是迟早的事。
开发工程师和研发工程师的区别是什么?开发在编写代码领域十分擅长,但限定的是他自己对于这整体的代码掌握的非常好,一种极端的情况就是这些代码完全是他自己写的,退一步的话,就是现在开发行业中,模块化的思想,每一个人只需完成自己的模块,对于其他的模块,可以不用掌握,只要别人写好,按照一定的规范,调用即可,用一个比较专业的名字就是低耦合。但是如果我们一直停留在这个地步的话,那么在往上面走的话,缺乏研读别人代码的能力,比如框架的源代码、系统代码(比如
Android
的系统代码),在开发的这一条路上不会走很远。
研发工程师,不仅需要卓越的编程能力,更加重要的是研读代码的能力。程序界中不乏优秀的代码,而这一个行业最忌讳的就是
Repeat
:重复自己说明自己对于整个系统的设计太差了,也就是所谓的没有大局观,只是关注眼前,而没有从整体的去考虑。或者是不停地忙碌,却忘记了思考; 重复别人,说明你的知识面太窄了,这一个行业是一个不断学习的行业,每天都会有很多新的东西出现,虽说良莠不齐,但是至少有很多是优秀的,甚至可以说是解决这一类问题的相对优秀的方案,那么我们就没有必要重复的制造轮子了。这个时候,阅读别人的优秀的源代码的能力是多么的重要。
我的一位前辈告诉我:学习
Spring
不仅要学习如何使用,更要学习如何在底层实现这些框架的,最好是深入源代码级别,去学习。从短期的角度上来看,都会使用
Spring
的两个人是没有什么差别,但是如果一个工程师了解甚至是可以从源代码级别上掌握一种框架的原理,选择哪一个就已经十分明显了。
说到这里,就想起自己在大三下到现在找工作的一个十分深刻的事情:
SSH
框架。我从实习面试开始到找工面试,一说到
Java
,没有不问
SSH
框架的,对此,只能是呵呵了。甚至使用
SSH
框架技术作为衡量一个人对于
Java
的掌握程度,暂且不管这种做法是对是错了。大三下的时候自己学习了
Java Web
编程中的基础知识,但是因为使用的是
MyEclipse
这种看似很完善的
IDE
,学习前面的基础知识是没有什么问题,但是到配置框架的时候,总是出错。自己学不下去了,因为时间的关系,就放弃了。到今年
5
月份,去面试粤电实习生的时候,就被面试官狂叼
SSH
,不评价面试官了,确实是自己不掌握
SSH
框架,虽然最后给还是凭借自己的对于
Java Web
编程(非框架)通过了,但是说自己“精通
Java
”,不会
SSH
框架确实说不过去了。但是自己真的没有时间去学习了。之后虽然比较专业的技术官不会问你
SSH
,但是几乎所有的国企(这里就不比如了)都会问你或不会
SSH
。
对于一个本科生来说,第一语言是
C++
,
Java
自己学的,如果在要求他掌握
SSH
框架技术的话,确实有点过了,但是企业可不管你,再说现在的研究生数目将好比庄家地的土豆,一锄头下去不知道要挖出多少个来,你一个本科生,没有什么特殊的地方都不好意思说自己的学历。今年找工作面试的时候,本科生不会给我造成任何的压力,研究生确实是太多了。而且你看一下最终通过面试的人里面,研究生(包括博)绝对是占多数的,甚至高一个数量级来。当你去面试的时候,真的很难理解:那些比我至少大
3
岁甚至
5
岁的研究生和我一个
92
年的本科生抢饭碗。所以如果你没有什么真材实料的话,就不要每天的找虐了,回家洗洗睡吧!不过研究生也并不可怕,其实一路走过来的话,会发现,有些研究生确实是很厉害,比如我在博客上看到的一个华工的去年毕业的,看他读的书,都和他差不多高了,而且全都是
Linux
,包括内核源码等等。但这样的人毕竟是少数,研究生中很大一部分也就是多吃了几年的米。总结来说,如果你的大学不是太缩水,是可以小虐一下部分研究生;如果没有什么真才实学的话,那还是别到处找虐了。
回到框架技术上来,
S2SH
是框架领域的翘楚,在实践的基础之上,学习其中的思想对于提升自己的专业素养是十分有帮助的。同时在找工作面试的时候,面试官如何得知你的能力:就是通过和你聊聊你曾经的开发经验:比如遇到那些问题、如何解决、如何使用等等。这些东西只要是用过的人都会遇到类似的问题和采用几乎相同的办法去解决这些问题。如果你没有经验的话,那就没有办法聊了,即使你掌握原理,也不可以,因为面试过程中,你会发现你和面试官不在同一个频道上。我面试
YY
的时候,在多线程和同步上就是因为和面试官不在同一个频道,他在
C++
,而我是
Java
,就被刷了。
而今的我再次打算将
S2SH
框架学习一遍,从
11.24
开始学习学习,到今天
28
日
5
天的时间里面,初步掌握
Spring
和
Hibernate
,本来不打算学习
Struts2
,因为不怎么喜欢它,但是看这样的进度,不是十分的耗时,就两天的时间,所以还是把它学了吧。回想自己曾经萌生至少有
3
次学习
SSH
的念头,最初是在大二下,但都是因为这样和那样的原因放弃了。现在总结一下原因:
Java
素养不够,连添加包都不知道;
IDE
使用不会,甚至在
Web
项目中还必须要
WebRoot
去访问;配置出错,没有办法实践下去。现在看来这些都不是问题,而且在几天的时间里就会初步使用了
Spring
和
Hibernate
了,凡事都是入门比较困难,一旦入门,学习起来就十分的顺风顺水。虽然之后很难再进一步提高,这是因为缺乏实际项目的练手,所以学习知识是为了使用在实际的生活的中。
往下面走的话,就是
Java
底层的实现。其实
Java
语言也只是一种规范,他又很多实现版本,最通用的是
Sun
公司的
JDK
,还有
Open-JDK
等等。
JVM
的内部是如何运行的,内存如何分配的,
JVM
调优的知识。同时
Java
现在的发展路线不仅仅是一种语言,他想做成一个平台。比如
Python
有对应运行在
JVM
上的
JPython
,
Ruby
有对应的
JRuby
等等。因为自己没有过的接触这些领域的知识,就不乱说了!
Java
的世界,学的越多,越是发现自己需要学的知识越多!
今天是感恩节,又翻到了去年感恩节的时候写的一点记忆,诸多感慨,今年就不写了,有一篇记忆就让自己一塌糊涂,不过该感谢的人还是要感谢的,因为一路上有你!
YangTengfei
2013.11.28