我是如何走上Java开发这条路的

一 写在前头

  越来越多的人问我:Java该怎么学?过来人回过头来自然有很多话说,这里先说说我自己。

  2014年毕业,目前就职北京领驭框架软件,做过业务设计,做过混合开发,做过WEB开发,也做过服务框架设计。当下在参与在中信的凌云项目,主要从事核心业务框架开发并提供技术支持。

  自己的水平一般般,应付现有的工作应该是够了。一路走来,从懵懂无知到略有心得,支撑自己的是对所从事行业的一份热爱,更多应该是耐心和坚持。我始终相信“厚积薄发”,如果你想从事程序设计行业,那么请“慎重”!

二 什么是Java

  不管从事什么工作,首先你得知道你要做什么。很多人跟我聊天的时候,表达过想学习Java的想法,但是如果沿着这个话题略微聊下去,我发现大多数人并不清楚什么是Java,它能做些什么。

  这是一个很致命的问题,如果你并不清楚自己所学习的东西,在你未来的生活工作中所能发挥的作用,那么你很难坚持下去。

  无论如何,首先是你对Java有需求,然后才是讨论如何学习的问题。反之,为了学习某种技能而工作,我相信你很难会有足够的热情。举个很简单的例子,因为我想做游戏设计,所以我自学了Unity(当然Java也能做游戏设计,飞机大战什么的我是写过的)。

  Java是一门面向对象语言(Object-Oriented Language,OOL),如果你是学习过其他编程语言,或许上手会轻松很多。但如果从面向过程的设计经验转变到面向对象,反而会更加晦涩难懂。不论怎么说,Java始终是一门编程语言,只要是编程语言,那么就离不开语法,所有的编程语言其语法结构都大同小异,无非是数据类型、流程控制、字符串数组集合等等。

  面向对象则多了些新颖的东西,教材上的抽象、封装、多态和继承什么的我不想多说它们的定义,并非是这些东西在任何书籍或者网络上都能搜索到,而是实实在在的难懂,且高谈阔论毫无意义,下面我说点简单易懂的。

三 什么是面向对象

  学习Java之前,首先知道要什么是面向对象(Object Oriented,OO),说的高深点是一种软件开发方法,什么面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design),面向对象的编程(OOP,Object Oriented Programming)。说的直白点,就是对某一类事物的描述,还记得生物课上说过的“界门纲目科属种”?

  对象(Object)就是现实生活中的一个物件,死的活的、有的没的都算,这一类物件就是某种类型(Class)。所谓的面向对象就是把这些物件按某些特征进行分类,带翅膀会飞的叫鸟,长鳍带鳞片水里游的叫鱼。

  举个简单例子,男人女人都是人,老人小孩也是人。从不同的维度来说我有不同的类型,按年龄分我是个青年人,按性别分我是个男人,按品行来说我应该算一个好人(??存疑)。那么人就是一个类型(Java里对人的定义就是一个类Class),有鼻子有眼,有性别,有年龄,这些就是人的特性(Java里叫属性Field,也叫类成员),直立行走,会打架会骂人,这些就是人的行为(Java里叫方法Method),把人的属性和行为放到一起就是类了,所以说类就是一种类型。

  那么对象是什么?拿上面人的例子来说,你我他都是人,却有了各自不同的属性,你20岁女,我30岁男,但我们都能走路,都会打架骂人,都是哺乳胎生,都会思考人生,我们就是具体的人了,也就是传说中的一个类实例化出来的对象。

四 什么是抽象

  再说上面人的例子,什么叫人?人有哪些特性,有哪些行为,从分析这些问题到最后得出结论的过程就叫抽象,就是把实实在在的一类物件按属性和行为进行归类,这就是抽象。

五 什么是封装

  人不是会走路嘛,那么是怎么走路的?双脚站地,迈开步子,胳膊甩起来,这就是走路,把走路这件事情描述清楚,这就是封装。

六 什么是继承

  继续说人,人都有鼻子有眼,直立行走哺乳动物,那么这就是人最原本的定义了(Java里叫基类),好的我再把人分为男人、女人,男的有JJ,女的会生孩子,这是男人女人的区别,那么男/女人就是从人这个类型派生(派生、衍生、继承都一样,叫法不同而已)出来的,那么男/女人就是继承自人的,男人光有JJ是不够的,既然是从人继承过来的,按字面意义理解,自然而然的就有了人的属性(有鼻子有眼)和行为(走路撒尿啥的),这就是继承。

  所以说派生和继承是相对的,那么对于男人这个类型来说,人就是它的父类,它是人的子类。你可以说男人是人,但人不一定是男人。

七 什么是多态

  上面提到了人,人都会撒尿,那么男人站着尿,女人蹲着尿,尿尿的行为就变得不一样了,这就是多态(对同一行为的不同实现,Java里管这个叫方法的重写,重载不算多态)。

七 Java能做什么

  其实这个问题应该紧接着要学习Java的初衷说起,你之所以要学习Java,必然是因为Java能解决你的某些需求,而非我学习了Java所以只能解决这些问题,这个因果关系一定不要弄反了。

  Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序,甚至是游戏。但是一定不要忘了一件事,世界上那么多程序开发语言,有很多语言都能做到这些事情,那我们为什么要学习Java来解决这些问题呢?

  这又涉及到了Java与其他语言的区别了,Java的运行是基于虚拟机的,所以实现了跨平台特性,这就是传说中的一次编译,到处运行。其实现的原理在于虚拟机(JVM),比如说在Windows系统中,Java有一个针对Windows设计的虚拟机来执行Java代码,在Linux下,又有一个针对Linux设计的虚拟机来执行Java,所以Java具备了跨平台的特性(既然能跨平台,自然就具备了高度的可移植性,对这些概念的理解不需要死记硬背,了解其原理自然通透),这个特性优于其他语言,但也正是因为Java运行依赖虚拟机,所以执行效率又不如C、C++这些语言。

  Java语法简单,自带内存管理机制(垃圾回收,GC),无需程序员自行管理,这就使得代码编写变得简单,但是对内存的消耗也因此变得不可控,执行效率低及内存的不可控性,导致Java在游戏开发领域肯定敌不过C/C++等。

  Java对UI窗体设计的支持比较弱,所以天生敌不过C#。而服务端设计又不需要窗体设计,所以C#又敌不过Java了。

  Java开源(并非全部,自己百度),对Socket、Http的支持API丰富,学习成本低,面向对象的语言特性使得开发和维护变得更加轻松,有效的降低了设计成本,这就让企业更加的青睐。

  谷歌自从选择了Java作为安卓开发的首选,对其的推广更是不留余力,这也使得Java的学习风潮更甚。

  跨平台、开源及以上诸多特性,注定了Java更适合做服务端开发。说的更狭窄点,如果你选择Java,那么可以做Android开发设计APP,可以做WEB服务端开发网站搭建,可以做嵌入式开发冰箱燃气热水器的智能化,可以做分布式核心系统开发等等。

八 Java延申的方向

  选择不同的Java应用领域,那么其发展的方向也是不一样的,如果你选择用Java开发安卓应用,那么你需要更多的了解Android SDK,了解UI设计,了解网络协议、报文传输等,反而对服务端设计的认知深度没那么大的要求。

  如果你选择做WEB服务端,那么则需要对Http协议、数据库操作、Servlet/JSP等技术需要更深入的了解。

  如果你选择做分布式系统设计,那么你不仅要知道高可用高并发,系统间通信及还有性能优化等知识,对Java本身的了解也需要到达一定的深度,多线程并发,内存管理,Socket通信,IO/NIO传输等等。

  针对不同的使用场景,你可能需要学习不同的技能来配合Java,单单一门语言是应对不了所有需求的,尤其当下IT行业对程序员的全栈(就是啥都会)特质要求越来越高。

九 Java学习路线

  核心中的核心自然是Java本身,但无需过多了解,会用即可是最初的目标。

  针对所从事的业务方向,学习其他相关技能,把知识网构建起来,比如说我目前的工作,分布式系统核心框架设计,那么我需要充分的了解数据库知识,并发设计,性能调优等,所以更加针对性的需要我去了解Java对数据库的支持,对通讯的支持,越深越好。

  综上,就是一个横向和纵向的发展过程,横着来就是要学习其他技能搭配Java来解决问题,竖着来就是把这些技能用的越熟越深越好,最后一个合理的技能体系应该是一个“^”形状,顶尖的是Java,尖尖越高表明你的Java水平越深,两边越宽说明你涉猎的相关技能越广。

  最后,谨记——贪多嚼不烂,了解你真实的需求,通过上面的介绍,你是否真的需要学习Java,如果要,那么请坚持

十 附一张Java技能扩展图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/o983950935/article/details/84729346