在没有自学java之前,我还只会一点点C语言,也就是才熟悉什么叫变量、运算符、标识符,会点简单的循环来做迭代类的数学运算,又或者用符号打印图形等等。然而现在看来,这些已不足以视为有C的基础,顶多只能算有一点点编程基础。
现在我搞了java九个月了,因为最初开始搞java的时候就认定了自己要往Web路线发展,没有考虑太多的行业发展前景以及“钱“景等等问题。在开始着手学习之前,我花了很多时间和精力往返于有关java的各大博客、知乎、贴吧等论坛,偶尔看到有程序员写一些个人成长学习经历的帖子,职业生涯的总结性文章,又或者是个人对于行业的看法与吐槽,作为一个路人丁,自己也慢慢的形成一个对于java的初印象。即使是听到过很多关于安卓、ios的呼声,以及它们离谱而诱人的薪资水平,我还是以自己的其他方面的想法和一点点执念走了过来。
不管是web、安卓乃至其它编程语言如PHP、C#、Swift、Python、Ruby等,我始终觉得确定方向和学习路线在学习过程中有很大作用,当你知道自己要学什么,先学哪个,怎么学等等问题之后,学习起来不会轻易感觉枯燥和茫然,除非你真的没有踏实的去做这件事,或者真的是不适合这一行。有了方向,一方面在学习过程中,会有潜意识的短期目标作用,从而保持一定的学习进度和效率。另一方面,当你了解了今后可能接触的实际开发中,哪些技术运用更多对自己来说正是学习的侧重点,这样当你在实践阶段也会很快的进入状态,驾轻就熟。
下面进入正题部分,以web方向为基础的java学习路线:
(由于java真正的知识范围很广,这里只罗列出我个人觉得重要的,至少是web中用的上的东西。)
-
一.J2SE阶段
·java基础【变量、运算符、标识符等】
·面向对象【封装、继承、多态】;
·API;
·集合框架【List、Map】;
·泛型;
·IO流;
·多线程;
·JDBC;
·正则表达式;
·高级特性【枚举、装箱拆箱、反射、断言、注解等】
在j2se阶段,重在熟练掌握if语句、for循环的运用,接口、继承、构造方法的理解和使用,学会查API文档。这个阶段的难点在于集合、泛型、jdbc等内容,需要了解其基本的用法和意义。
-
二.数据库阶段
·sql server;
·Mysql;
·Oracle;
数据库阶段可以说是从只会编一些没什么实际作用的死程序,到能够开发小型项目的转折点,以上三种数据库至少掌握其中一种,个人建议从Mysql入手。当然数据库的种类不止这三个,这里所列的是行内使用最多的数据库。
-
三.Web前端基础
·html;
·CSS ;
·Javascript(JS);
·DOM;
·ajax;
·jQuery;
做后端的人,前端的基础也是必不可少的。如果以后想做前端的话,js是关键,作为风口浪尖上的热门语言,js拥有一大批拥护者认为它将是十年后的大趋势,然而也有一些人认为js的灵活性又造成了其过于复杂的代码和混乱的逻辑,在开发中容易出错且难以调试。不过html和js的基础用法对于任何web开发人员来说都是尤为重要的。
-
四.Web后端基础
·JSP;
·JavaBean;
·Servlet;
·过滤器、监听器;
·EL表达式语言;
·jsp自定义标签;
·JSTL标准标签库;
·MVC开发模式(JSP+Servlet+JavaBean);
后端基础个人建议以Servlet为中心来学习,因为servlet和java有着更紧密的联系,而jsp又是sevlet的简化抽离,就算是MVC的Model2开发模式(jsp+servlet+javabean),servlet也是作为核心的控制层,它更是开源框架的技术基础。
-
五.开源框架
·Struts、
·Hibernate、
·Spring;
【SSH整合框架】·springMVC;
·Mybatis
·Ibatis;
【SSM、SSI整合框架】
首个mvc模式的开源框架Struts以及后来的Struts2推出至今已经盛行了14年了,随着Spring等框架的推出和发展,使得Struts2由于大量的配置文件和独家标签库而显得相对笨重许多。这些开源框架,到底哪个好用,哪个会被取代之类的问题都不重要,因为他们都是开发的工具,作为工具来说,被更好用的工具替代是必然的,只是时间问题,所以在学习的过程中,一定要掌握工具的用法熟悉实现流程就可以了,不要死磕其实现原理。不过如果你想成为技术大牛,或者想自己也能开发一套框架出来用就另当别论了。
-
六.开发工具
初级开发工具:(这里需要在初学阶段掌握,为了模块分类清晰,放在此处)
·JDK、Tomcat;
·eclipse/Myeclipse;
·Navicat;高级开发工具:
·Maven项目管理工具;
·Git分布式版本控制系统;
·ANT代码生成工具;
·SVN/CVS/VSS版本控制工具;
这里罗列的是一些用户量多、影响范围广的几种工具,看公司或个人的喜好来选择适合自己的开发工具。
-
七.领域拓展
·算法;
·并发编程;
·设计模式;
·敏捷开发;
·需求分析;
·测试;
·运维;
·数据挖掘;
·网络安全;
在这里你可以选择你要从事的更加细致专业的开发任务,或者说选择做软件开发过程中的哪一个模块,技术要求更加的精益求精。
-
八.技术前沿
(处于该阶段的程序员都有可能成为引领互联网时代前进的业界精英。下面所列基本是各大技术论坛中讨论的热门技术话题,仅供参考)
·Node.js;
·AngularJS;
·EJB;
·集群;
·负载均衡;
·分布式架构;
·搜索引擎;
·规则引擎;
·事务JTA;
·JNDI;
·面向服务架构;
·面向云架构;
·NoSQL-MongoDB;
·Hadoop大数据;
·Docker云计算;
.
·机器学习;
·人工智能;
·虚拟现实;
小结:
总体来说,java分J2SE和J2EE(以前还有支持移动设备的J2ME,不过如今已被android,ios等取代),J2SE属于java编程的基础,最重要的是面向对象特性的掌握及其编程思想的理解。J2EE领域在以上所述路线中包括了web前端、后端以及开源框架三个部分,还有一些已经被取代的技术或者正在新兴的技术,J2EE属于企业级开发技术,这些内容正是当今各大企业一直在用的东西。就比如BAT的阿里巴巴,在网站建设初期时曾用.NET框架来搭建自己的平台,后来因为互联网行业的迅速发展,java的盛行,数据量和访问量的爆炸式增长,.NET已经满足不了广大互联网用户的需求,后来取而代之的便是J2EE的框架技术。然而我认为编程技术没有因为谁取代谁就断言谁好谁坏,只有适合不适合,因为业务需求的多样性,技术用来解决问题的优势往往在另一个场合会暴露出它的劣势。
说了这么多关于业界的内容,回头终究还是要以java的基础为重中之重,不管往安卓还是web方向都是如此。有很多技术大牛都认为,当自己做的东西越复杂,产品运用越广泛的时候,涉及的业务逻辑以及关键的技术问题往往都是更接近于java实现底层,何为java底层呢?比如jvm虚拟机运行机制,线程机制,内存机制,类加载机制等,也就是说,再牛逼的技术归根结底还是以J2SE,面向对象特性为基础的,抛开了java这些技术便什么都不是了。然而java基础扎实更是后期实用技术提升的关键,如果不重视基础,相信不管有多少年经验的程序员也不会走的太远,相信也没有哪一个程序员甘愿做一个只负责写增删改查的代码搬运工。
以上是我个人眼里的向Java-Web发展的路线以及学习思路的见解,由于是本人入坑java至今第一次写博客,所以选择了这个话题,以后将不定期更新一些在具体编写代码过程中可能遇到的问题和相关解决办法。限于博主文笔一般,知识水平有限,难免有片面和疏漏之处,敬请指正~