Java Web编程技术学习要点及方向

时间:2022-02-05 05:10:34

学习编程技术要点及方向亮点:

传统学习编程技术落后,应跟著潮流,要对业务聚焦处理。
要Jar, 不要War;以小为主,以简为宝,集堆而成。
去繁取简 Spring Boot,明日之春(future of Spring)。
集堆综合技术如 jHipster 是必然的软件开发途径
前后端分离技术,跨域资源共享( CORS)。
提供Spring Boot1.3.6+Angular1.4.0UI-Route 0.40+Mongodb 2.6.3 CRUD学习程式例子。
前言

一般大专的软件技术课程是这样的,有系统地介绍一下有关该技术的背景,然后概括地描述编程语言的定义, 指令的用法及几个运用的例子,跟著就要做几个技术合量不同的学习顶目。我参考过澳洲某大学的课程,基本上都是这样的。无可非议,这是正统的学习方法!可惜,这种方法偏向教条主义,形式工夫而已,学生学不到真正应用知识的。之所以,几位电脑及互联网著名大亨如比尔·盖茨(Bill Gates,史蒂夫·乔布斯(Steve Jobs)和马克·扎克伯格(Mark Zuckerberg)一样,盖茨等也是从大学辍学而另创途径去学习技术的。笔者注:偏向学术的学位同样重要,盖茨后来都十分认同。

事实上,大专学校有关普通电脑技术方面通常是3至5年落后于市场应用,更不用说日新月异的编程技术。当然可以去技术培训学校去学习的。不过, 笔者认为那些所谓技术培训课程形式上和大专的也是差不了多少,更新了部份技术,祇是著重于操作例子多些吧。

编程方面要提高对业务聚焦处理

我相信,大部分的计算机程式员/电脑工程师都是从工作中得到应用知识的。笔者在电讯公司任职了两年,再在美国通用电气公司工作时,主管对笔者说:“ 你可能在三年内都不知道你在做些什么,三年以后才真正对我有点用处“。意思是要你学习业务知识三年后才有用。在工作应用方面,知道了一点语言知识远远不够用的!

不少公司招聘电脑程式员/电脑工程师都希望有些经验的,不光是看其技术方面,更重要是业务应用方面,就是这样道理吧。可见,编程技术不过是一种工具, 重点还是应用业务了得!

行业专家早已洞悉业务的重要性,在编程方面提高了对业务聚焦处理。 不过一般程式员还不清楚怎样在编译中采取主动的步伐,没有在业务应用方向多下功夫,仍然卡在技术层次上落阶梯上。 在笔者朋友中,不少是编程专家和精英,熟练多种语言技术。其中一位编程技术超凡,工作了二十多年,做了不少项目,但是每个项目都是拖延超时,没有按时间表完成的。其道理很简单,项目应以业务为主导的,编程技术祇是工具;必须采取适应的编程技术,集中地处理好业务上的逻辑,这才是项目工作方向。 简易直说就是要花多些时间在业务上,多和客户打交道。笔者曾经在道琼斯的华尔街日报处理网站技术,用了三个月的时间就完成了六个月时间表的项目。深得处理业务的重要性。

Java编译技术内容丰富,各种分类技术繁多,又是议论多多的普及技术

上文花了不少文字来解释业务在编程技术上的份量,那么在学习和应用编程技术方面该怎样进行呢?不管Java, Php, C, C++,虽然他们的语言句法要求不同, 编译中使用的编译工具包不同, 但是其过程和结果都是差不多的。 以下就以 Java 编译技术为主题,它的内容丰富,各种分类技术繁多,又是议论多多的普及技术。

Java 是很通用普及的编译语言, 可以在不同的作业系统上运行。有关详细Java 技术, 不是本文讨论议题。本文祇集中在广泛应用的Java Web 技术方面。假设你刚刚从有关电脑技术专科或本科毕业了(软件系统/网页开发),面对你通常有三条路选择: 找到了工作;寻觅工作;再进一步深造。深造当然指出国或考科研。刚出校门,不管你是否有工作,怎么样能够学习新知识,充实自己是首要的任务!其实,可以一面工作一面学习是最隹的搭档,但是对于刚来社会的菜乌,应付工作相信会有不少压力的。此时,不少人就会想到的是可以上网,搜集资料,问百度!

互联网五花八门,什么都有,简直是中国人所谓的江湖

现在是互联网世界,网上什么都有,不少人士都能从网上学习了不少的技术及方法。也许你都有过相当次数的经验,可是花了不少时间去寻找一些答案, 总是有点不合使用,问非所答,不是实际情况。那么,应该怎么样学习电脑技术呢?或者怎么样利用网上知识来帮助你解决问题呢?事实上,互联网是人类最大的资料库,包罗万象,你没有想到的都有,问题是你怎样在这洪荒海量的资讯里提走一点对你有用的资料。 更可怕的是不要陷入了一些所谓专家答案的Merry-go-round - 旋转木马圈套里,永远得不到答案的。怎样利用互联网海量的资讯呢?在大同的环境内要采取战略方针:根据具体存在的条件要求寻找方向,该方向是现今流行的编程技术,而不是你马上可以应用具体的方向。这里所说不是专门解答你工作上或者作业上的难题,而是在互联网世界里可以得到学习电脑技术知识的方向,这是十分重要的!举个简单易明的例子,如果你仍然使用Windows XP来处理或开发工作,别人已经在利用Windows 10, 8 等工作了;你完全是Out 了!

现今科技世界日新月异,大部分是与电脑计算机技术有关的。有作为的公司及机构一定会跟随大方向走的, 不论是经济,产品,尤其是在技术方面的趁势,有时身不由己。前面几段说话有点偏离了学习(Java Web)编程技术要点及方向,不过笔者相信编程技术必须跟随著电脑计算机技术主流的。

编程技术潮流:以小为主,以简为宝,集堆而成

最新Java软件开发技术是以分离技术为方向, 偏向细小程式。 尤其是要Jar, 不要War! 记得初学Java Web (IEEE),肯定不是轻量级别,十分繁琐。自从有了三剑客出现(Spring, Structs, Hibenate), 编程开发工作的确简化了不少。但是基本还是以XML 编译为核心。社会的生产和工作日益进步,对软件技术有更高的要求, 使用XML 编译的方式已经应付不来,加上容易人为错误,不少新颖的开发技术减轻了对XML的依赖,或减至其使用率为最极限度, 而采用了程式,资料库,新技术如NOSQL,大数据,云操作等处理软件开发技术的新潮流。

去繁取简又是一个显著的标志

著名的例子正是 Spring Boot, 包容了一切可应用的启动功能, 包括了所有的annotation 的接口。 Spring 框架的常见问题就是要快速创建一个可以马上运行的应用比较麻烦,学习曲线高!而Spring Boot 可以自动配置 Spring 的各种组件,并不用依赖代码生成和 XML 配置文件。 Spring Boot 可以大大提升使用 Spring 框架时的开发效率。 除了能提供不少自动又高效率的智能装置之外,又是现今可以投入微服务(Microservice)的平台。 Spring Boot被认为future of Spring! 笔者相信它将会取缔其他大部分Spring框架配件。以后可能没有SpringMVC 6, 7续号了。的确三剑客已经失势了!另外一个值得注意的讯息就是常用的Jsp:它和Java同期产物,但Java已是进入第八代了,而Jsp变化不多,加上Jsp不能在嵌套在Tomcat容器来解析,换句话就是不能在打包而成为可执行的Jar情况下解析的。同样地,Jetty嵌套容器也不支持Jsp , 所以Spring Boot 官方不推荐使用Jsp技术。Jsp 也该退休了,祇是时间问题吧。

现在有规模的项目主流设计一般会采用微服务架构(Microservice Architecture)。简单来说,把所有业务逻辑分析成每个独立性又细少的服务应用,单独部署和开发,分布式的管理,实现了敏捷开发和部署。这就是以小为主的完美。可以应用微服务架构的项目多指有100个开发程式员以上。

MVC设计典范:Spring Boot

事实上,软件架构分离技术如MVC设计典范,即是模型(model)-视图(view)-控制器(controller)的分离组织;把业务逻辑、数据、界面显示用分离的方法来组织代码,将业务逻辑集中到一个部件里面,在修正或改进显示结果在界面上,而在用户互动时也不需要重新编写业务逻辑。 MVC用于映射传统的输入、处理和输出功能,而变成在一个逻辑的图形化的结构。 一般软件系统可分前端和后台:后台提供资料数据给前端的; 前端则和用户互动及显示结果的。上文提到的Spring Boot 能够以MVC模型来处理该程式的后台数据资料。

前端分离模式:AngularJS

如果前端要采用MVC模型来处理运作的话,那么可以使用 AngularJS。严格来说它是 MVVM (Model-View-ViewModel),当然还有其他, 例如Avalon,Regular,Knockout,都是走的差不多路线的,用类似模板的语法来描述界面状态与数据的绑定关系,当界面发生变化的时候,会按照配置规则去更新相应的数据,或者从数据来更新界面状态。其分离方法原则上都是把状态,数据及视图变成MVC模板处理。注:游戏,图形界面编辑器,这种DOM操作很频繁不适使用 AngularJS。以目前的潮流来说,当然是以 AngularJS + UI-Route用户最多,根据业界的统计。

集堆综合技术:必然的软件开发途径

另外一股不容忽视的潮流正是在 Java 平台上利用多种开放源码工具组合而成的集堆综合技术。 比较著名的有 AppFuse 和 jHipster 。简单地说,它们都是能够提供一个项目骨架,来帮助程式员快速地而能高效地开发 Web 应用程序。它可以生成代码,编译,连接资料库和部署,并提供了目录和包结构,以及开发基于 Java 语言的 Web 应用程序所需要的Jar库。上文提及的聚焦在处理好业务上的逻辑,就必须仔细地考虑怎样利用集堆综合技术的应用。 尤其要迎合领导上的项目时间表的规范! 注: AppFuse 3.5 可能是最后一期的更新,明年开始将不会在网上有支援服务了。原因是 AppFuse 的主要创作者 Matt Raible 转向开发及支援他的竞争者 – jHipster. 他表示 jHipster 功能及稳定性都比 AppFuse 强,最重要 是jHipster 能够支持 Java 8, 而 AppFuse 不能。笔者也曾尝试采用过 AppFuse, 的确是不错的 Java Web开发工具组合。现今可以说, jHipster 是一只领头羊。有关 jHipster 的应用,请参考笔者所撰写的慱客分享。

开发及云部署先锋: Docker

另一类热潮相信非 Docker 莫属。它是一个虚拟容器,像沙箱式的运作。程式祇能在该容器内进行有关的运行,但能分享作业系统的资源。以往程式服务器多在仿真的虚拟硬件内(emulating virtual hardware)操作,现在同样硬件但布置了虚拟容器,就能够支援4至6倍的程式服务器数目。之所以 Docker 又是部署云的工具。它令程序各自各独立工作,又能安全地分享其程式,正是符合典型的可以共同开发系统的结构!正是微服务的好搭档。

结束语

本文目的是希望给读者提供一些编程技术方向: 那些是流行的; 这些可能会被淘汰的!故此笔者祇能简单地介绍各种技术的要点。网上有关这些技术资料相信不少,祇是等待有心人去发掘而已。有了大方向,你才可以站得高,望得远!有些读者可能有疑问:大部份的程式员都是在维护系统,这些新技术,新方向有什么作用呀?其实所谓新技术都是和 Java , Spring 有关的。如果系统是按照 MVC 的规范去实践和部署的,例如控制器不会和直接处理业务数据的,那么,该服务流程很容易转移到 Spring Boot 的程式里。或者在 jHipster 程式里,明白其中一些应用程式代码,你可以用同样方法在现在的程式中去处理这些数据的。

示范例子

如果没有一个实用的编程例子,可能有些读者不会认真地体会本文的要点。 笔者就提供一个 Spring Boot + Angular UI-Route + Mongodb CRUD学习程式资料. 笔者要用最简单又有效的编程方法来实践“ 以小为主,以简为宝 ” 的原则。首先什么是小呢?程式可分成前后端分开处理,都是以 MVC 模式安排,加上用跨域资源共享( CORS)来分成前后端的开发。换句话说,前后端各自开发,祇有在程式运作时才有直接数据来往。