一个码农6年技术成长经历的总结和收获

XLineCode 发布于 2013/03/24 17:56
阅读 3K+
收藏 28

微创业的网站终于做好了,6年来的技术学习生涯也可以算是里程碑式的告一段落了。在此片刻停留的间隙,回顾以往,梳理所学到的技能,总结下得到的经验、收获和领悟,让自己对自身的技术和状态有个清晰和条理的认知,方便自己对未来职业发展方向的选择,也希望自己得到的结论能给大家多一份借鉴。 

 

对于Java技术生态圈而言,从下往上大致可分为以下几点: 

1. Java SE基础本身(也称之为 Core Java):SE除了包含像Math等的一些提供基础运算的类外,其他大部分的类都用于构建更高级的框架或者工具包,如反射、代理、国际化、JDBC等,这些类作为基石被应用于大部分的Java框架中,可以说,掌握了这些类、知道这些类是用来干什么的,就等于掌握了那些框架的运行机制,如Spring的核心模块DI和AOP主要使用了反射、代理和XML解析的API来实现她的思想,而Hibernate则使用了JDBC等,而框架间的差异一般只在于该框架要实现的特有的业务逻辑代码,所以我个人更倾向于将Java SE称为Core Java,因为Core Java本身除了包括一些基本的Java语法语句外,她还包括很多像JNDI、JMX、JAXP、RMI等高级模块,具体请参见Java官网教材:http://docs.oracle.com/javase/tutorial/ 

 

2. Java EE:Java EE像其他框架一样,也是基于SE构建的企业版本,她与框架的区别在于定义了企业应用三层架构中每一层对应的技术模块,而我们用的最多、认知度最高的集中在Web层中的JSP、Servlet、Filter等,基本上可以说,掌握了Web层面的技术,可以解决大部分公司的开发要求,而像EJB、JSF等相对来说是比较冷门的技术点。有一点比较被忽视的是Web层与EJB的关系,因为他们之间是按照标准的三层结构来划分的(详情请参见:http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html ),既是说除了Web层可以使用EJB从数据库获取数据来做表示层的展示外,EJB的所有逻辑代码还可以用在C/S架构上。这是一个非常重要的分层思想,特别是在移动客户端越来越受重视的当下。虽然我们不经常使用EJB,但我们完全可以按照这个分层思想,严格定义Service 层 ,这样除了Web层可以直接调用这些API外,还可以在Service层上新增Web service层, 这样移动客户端就能通过XML获取数据,经过XML解析后就能以客户端适合的方式展现给用户,从而完全分离了不同的展示形式而复用了所有的业务逻辑!!!这是多么天才的想法 。甚至可以使用更纯粹的架构,让Web层也通过Web Service来获取数据,变为分布式的服务架构。Java EE的官网教材请参见http://docs.oracle.com/javaee/6/tutorial/doc/docinfo.html 

 

3. Struts、Spring、 Hibernate等各种框架:前面已经提到,只要对Java和Java EE的各个模块和组件有足够了解,基本上可以从这些框架所要达到的作用推断该框架用到了哪些技术来实现她的机制,所以学习框架的重点在于这些框架所实现的思想,如Spring的核心模块实现了DI、AOP(像Spring MVC、Webflow、Security等虽然用在不同的领域,但也是使用SE跟EE的模块来实现相关机制的),Hibernate实现了ORM而Struts则实现了MVC。从框架的宏观角度看,每一种思想(或者说模式)都有至少两种不同的框架来实现,而后者的出现往往基于人们对前者在学习曲线、易用性、灵活性等方面的不足而开发,进而替代前者成为主流。另一种两种或多种框架并存的情况则出现在框架应用的领域差异上,比如Hibernate和MyBatis,更明显的出现在JS框架上,如EXT适用于做报表而jQuery则用来简化JS语法和构建基本的动态库等。

 

4. 除了以上提到的开发技术,对Subversion、TortoiseSVN、Eclipse WTP、 Tomcat、Junit等工具的了解和使用纯熟度也是不可缺少的因素。

Subversion:虽然单从它身上看不到对于补充开发技能的好处,但了解它是一个svn服务器及它所提供的服务,会让你对TortoiseSVN是什么、它提供了什么功能有一个较全面的理解。作为开发人员,不止需要知道怎么用,还得知道为什么,而知道为什么,往往就是调试程序过程中解决问题的关键;

Eclipse:一提到Eclipse往往让人联想到的是Eclipse Java EE版本,一般不会注意到Eclipse官网还提供Eclipse Java版本的下载。这两版本在使用领域上还是有很大区别的:Eclipse Java版本集成了Junit和Maven,一般用在C/S架构或者Jar包的开发上,既是说不提供Web开发所使用的Jsp、Javascript等插件的支持。像Spring核心包的开发就不需要使用Eclipse Java EE,而像Spring MVC等Web框架就明显需要Web插件的支持。如果Web应用需要用到使用Java版本开发的Jar包,那么Web开发人员既可直接将Jar包拷到工程lib下,也可以通过Maven将该Jar包导入工程,前提是已在Eclipse Java EE版本中安装了Maven插件并将Web应用转为Maven工程,这也是两个Eclipse版本的区别之一。通过将业务核心封装在Jar中并使用Eclipse Java开发,可以使开发人员集中在业务逻辑的实现上并编写大量的测试用例尽可能的提高代码覆盖率。相比之下,Web应用的开发人员则通过简单的核心Jar的API调用,集中精力做Web界面的展示和流程跳转,而不需要关系核心Jar是否有bug。

 

5. 架构:对DAO、Business logic、Value object、Deployment、Presentation和Architecture component各层有个清晰的认识可以制定出架构分明的系统,这是进阶架构师的基础。在拥有架构这大的知识体系后,再对23种经典的设计模式加以了解必然能设计出更优雅的应用架构。 

 

 

对于前端技术而言,我觉得比较重要的是Javascript。Javascript语法和Ajax是所有JS框架的基础,而框架的存在性跟上述提到的Java框架基本相同。 

 

 

以上涉及范围面比较广的学习历程让我体会到一个道理:编程语言的演化,都是以易用性为目的,让开发人员把精力集中在业务逻辑的实现上,所以语言的发展趋势是应用更简单、学习曲线更平缓同时又具备灵活性和扩展性,让开发人员能在短时间内上手并投入生产,违反这一规律的语言往往会随着时间推移淡出大众视野。

 

最后附上本码农的学习经历:

  我是2007年毕业的,只是个专科生,莫有本科文凭,更不是从华丽丽的211、985学校出来。在校只学了些基础的计算机知识的我同样在毕业找工作时很彷徨,更没有丝毫的奢望说能找到编程的工作,第一份工做的是测试,凭借自己对技术的热爱用业余时间学习新知识,在学完J2EE的基本知识和Struts后终于找到了第一份编码工作,遗憾的是这份工作并没有使用任何主流框架。此后为了跟不同公司都拥有谈薪酬的筹码又不停的学习了Hibernate、Spring、Ant、Svn等,再后来基于扩展自身技能和知识面的需要学习了Maven、Eclipse、Tomcat详细配置等,再到为了更全面的了解Java和Java EE重温学过的模块并接触新模块,最后得到对于Java技术生态总体上的理解,得到的结论虽然与前人的总结大致相同,但通过自身走过来的路,无疑拥有更深刻的体会。6年过去了,虽然在职位上还没有质的提升,但完成的网站也是自己对过去努力的小小认可。在未来的路上,除了使原有技术再有一个层次的提升外,也希望把视野放在架构设计、性能调优、服务器集群设计、团队协调和管理等方面。


该文章转载自xlinecode

加载中
0
silent_lilu
silent_lilu

楼主  说的很好   很贴切   是这么一个发展过程

0
th小米粥
th小米粥
赞一个。
0
仪山湖
仪山湖
只要坚持,楼主定能更上一层楼
0
wywincl
wywincl
楼主奋斗很让人钦佩,我要向你学习
0
独孤小败
独孤小败
6年,估计写这文章的人已经30了,不知道他未来是怎么打算的,楼主是作者吗?
XLineCode
XLineCode
回复 @skyyan2000 : 可以,路还长着~
skyyan2000
skyyan2000
回复 @XLineCode : 奔三怎了,貌似奔三就不能走技术了?
XLineCode
XLineCode
是作者,快28了,奔3咯
0
姑妄听之
姑妄听之
谢谢楼主分享。
0
姚春来
姚春来
alert(\"写的不错\");
0
被风遗忘
被风遗忘
说的很好.
返回顶部
顶部