javaweb和安卓是目前的大方向,但并不是代表java只能做这两件事。客户端,大数据,AI...,所有能想象到软件技术,java均有涉及。
1.javaweb目前是java生态中的主流,主要关于java服务器的开发居多。java后端的工作岗位可以说是供不应求。就以我实际的经历来说,我参加的招聘会上,只要有软件开发岗,java开发每次都要占掉一半以上或接近一半的名额。
下图为国内/国际编程语言市场占有率(2019)
参考:TIOBE PYPL
2.安卓:安卓也是在移动端主流的技术之一,虽然谷歌相比苹果在系统营收上收入不佳,但安卓的市场占有率已经达到80%以上,所以安卓以后的前景也比较不错。安卓方面的课题日后由你们的豪师兄带你飞,我就不班门弄斧了。
至于安卓开发和java开发有啥区别和相同的,我直接引用一些沙雕网友的回答,大家见仁见智,看看就行。
(1)开发安卓app和js+html贼像,区别只有一些而已,app是activity组合,网页的话就是多个页面。。生命周期不考虑的话,app的xml文件就像网页的html,app的java代码就像网页的js。。。
(2)共同点:
1、android开发和javaEE都需要依赖java语句
2、java可以用的类库,这两者基本都可以使用
差异点:
1、android开发对于java的要求相对低些,只需要掌握java的基本技术能力就能满足大部分开发要求。javaEE开发会设计java的高级特性以及一些spring等架构,需要掌握的内容相对多。
2、android针对移动端,javaEE主要是pc应用
3、android开发除了java外,还需要熟悉android本身的语言特性,比如xml布局,运行机制等。
(3)安卓呢算是一项比较完善的系统工程,首先是UI,相对于Java的窗口界面,这个UI更为复杂,layout层作为显示,每个显示以activity作为运行层,然后通过主XML注册进行控制,主要代码逻辑很大部分的确基于Java,但是有很多控件的调用,很多数据流和网络资源流等等的一些嵌入和控制,以及发布端口,适配版本等等,不会像所谓的简简单单一个UI套上原版Java代码就能实现的
(4)JavaWeb是用框架做网站,Android是用框架做App,框架不同而已,核心概念一样,类,对象,接口,设计模式,网络,数据库文件等等。
总的说来,安卓像是java在移动端的一个分支,需要一定的java基础,不需要太深入,更多的是学习UI方面的东西,比较类似于前端(个人理解),但是不要以为java和安卓是一种东西,还是要做选择的,正如上面所说的,java开发偏后端,安卓偏前端。
3.大数据这快,Java很给力,Apache是个超级Java shop。而大部分的大数据生态系统都是Apache提供的,其中包括Hadoop,Kafka,Spark,Cassandra等技术都是目前大数据方向的主流技术,都是基于java开发的。
大数据是互联网发展到现今阶段的一种表象或特征而已,没有必要神话它或对它保持敬畏之心,在以云计算为代表的技术创新大幕的衬托下,那些原本很难收集和使用的数据开始容易被利用起来了,通过各行各业的不断创新,大数据会逐步为人类创造更多的价值。
业界(IBM 最早定义)将大数据的特征归纳为4个“V”(量Volume,多样Variety,价值Value,速Velocity),或者说特点有四个层面:第一,数据体量巨大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T);第二,数据类型繁多。比如,网络日志、视频、图片、地理位置信息等等。第三,价值密度低,商业价值高。第四,处理速度快。最后这一点也是和传统的数据挖掘技术有着本质的不同。
大数据就是一个行业,实现同一个需求同样有多种工具可以选择,狭义一点以技术的角度讲,各类框架有Hadoop,spark,storm,flink等,就这类技术生态圈来讲,还有各种中间件如flume,kafka,sqoop等等 ,这些框架以及工具大多数是用Java编写而成,但提供诸如Java,scala,Python,R等各种语言API供编程。
大数据框架的编写支持很多开发语言,但是Java在大数据开发方面有很大的优势,目前流行的大数据Hadoop框架、map-reduce框架,很多部分都是用开源的Java语言编写,因此Java在大数据方面有很大优势!
##学习
相关学习书籍:Java 高级学习(《深入理解Java虚拟机》、《Java高并发实战》)、Hadoop、HBase(《HBase权威指南》)、Hive(《Hive开发指南》)、Scala(《快学Scala》)、Spark (《Spark 快速大数据分析》)
4.客户端方向:客户端虽然不是java技术的主流应用,但我依然认为,在学习基础的时候,有学习的必要。因为所谓的java基础(即javaSE),学习的知识都是在做单打独斗的事,你们需要一个项目demo来将自己学的这些零散的知识整合起来。如果这门课最后有时间富余且我也事情不多的话,我可以在课上带你们从0开始写一个样例,这个样例可能是个游戏,可能是个管理系统之类的,也可能是其他东西。总之,只是学习零散的知识没有效果,只有能做到整合知识才算是学到手(但我依然认为,客户端方向不宜过深,掌握基础尽早转主流方向)。
5。如果你对java目前现有的生态圈都不感兴趣,那么还有值得学java的理由吗?当然是有的,java的狭义生态圈是指由java这门语言开发或合作开发的技术框架。但java生态里可不止是编程语言,还有虚拟机。虚拟机将在马上再说编译原理的时候简单介绍,那虚拟机有什么用?虚拟机是java实现跨平台的关键技术,正式这种技术,使得后面很多新出现的语言都选择java虚拟机来做底层实现,Scala,Kotlin,Ceylon,Xtend,Groovy,Clojure,Fantom,Jruby,Jpthon...,均是基于jvm开发的,在2013年,已经有超过50种语言可以选择,且其中很多已然大火。
6.其他方向:如分布式开发,区块链,AI听起来高级的东西,我还没接触,自然不好评价。我也不希望你们过早的接触,可能你们中有些人是有基础的,感觉我教的东西都很简陋太基础了。但是基础不打好,后面要吃的暗亏太多了,我希望愿意继续听我讲课的人能静下心来学,不要犯我一样的错误。
ps:javaSE并不难学,相比于c/c++,java可以更贴近逻辑代码,指针级别的操作都是jdk封装好的,内存的开辟和回收也都是由底层自动完成的,(有过c经验的同学可能对malloc/free并不陌生,在java中可就不用管这些了)当然相比于pathon,js等动态语言来说,java繁琐的架构,严格的语法可能是入门者有抵触情绪,可能在其他语言中import一下,写个lamaba表达式,调个函数就能完成的东西,到java这都不好使了。所以静心去练,去写才是最重要的。
javaSE学完之后,其实也只能算是刚刚踏入半只脚的门,java目前的技术栈之长,可能在所有编程语言的生态中都排在前列的。这也是虽然国内学java的人数最多,各种培训班都都赚的盆满钵满。但是大公司依然很缺java开发。如果你们愿意走这条路,什么都是次要的,坚持学习才是最重要的。
以下为参考java学习路线图:java路线