如何用java编写足球队高级路线代码
1.介绍
搞Java的兄弟肯定是想更上一层楼,用更少的代码解决更多的问题,用更清晰的结构为可能的继承和维护做准备。想想摸着石头过河,我也看到过很多人介绍的学习路线。十几年过去了,还是有一些收获的。现在我通过自己的经历总结一篇文章,供兄弟们参考。
2.利用好正在使用的框架
在已经加入的团队中,配合大家使用团队选择的框架。不管框架好坏与否,选择它肯定有一定的道理。而能在业界长期流行的框架,一定有其过人之处。
使用框架的第一步是熟悉它。可以通过复制和修改前人的代码来实现新的功能或者修改现有的功能,逐渐熟悉框架的使用。
第二步,深入了解。在使用了它,并将其用于多种用途之后,我们就可以根据用法和现象来掌握它的规律,从而形成对框架内部结构和运行机制的猜测,其中大部分肯定是正确的。
第三步,好好利用。在对框架的内部机制有了一定的感受之后,通过采用更简单、更清晰或者更高效的方法,逐步总结并采用更好的做法来达到同样的目的。可以参考框架的“最佳实践”文档(比如Hibernate参考手册的最后一章),对于没有提供“最佳实践”文档的,可以总结一些经验,不断完善。
没有绝对的最佳实践,只有适合某个场景的最佳实践和适合大多数场合的更好实现。能够根据场景选择不同的模式是提升水平的标志。
3.了解标准类库、企业级技术和开源项目。
Java世界现有的积累已经很丰富了。当一个问题感觉是个普遍问题的时候,那里很可能有现成的标准类库或者开源项目。掌握标准类库和开源项目,可以减少工作量,让代码结构清晰易懂。企业级技术是指JavaEE平台中的技术,大部分是从现有积累中提炼出来的标准。例如,JPA很大程度上来自Hibernate。企业级技术的应用非常有利于程序的标准化。
对标准类库和开源项目的理解不分先后,可以交替进行,看用哪个。也可以利用课余时间选择自己喜欢的学习,做实验。
3.1.标准类库
您可以从Java附带的文档中看到标准类库(和平台工具)及其关系的列表。下图是一个层次图:
为了挑你感兴趣的点,进去多学点。
乍一看内容很多,但实际上可能很多都用过。比如JDBC,应该是每个Java程序员年轻时都用过的。JNDI应该也是做WEB工程必须要接触的。也许只是几个API,但一切都是理解、熟练、掌握三个步骤。如果你懂了,那就不远了。
其中正则表达式、XML处理、applet、并发(多线程)、网络、IO、图形是比较实用的功能,可以先从它们入手。本地接口(JNI)、管理扩展(JMX)、反射等。可以用在更高级的场合,会后可以提供更多场景的解决方案。
3.2.企业技术
包括JavaMail、JMS、EJB、JPA、JSF、web服务等。具体名单可以在JavaEE科技官网找到。这些技术用起来并不深奥,甚至比标准类库更显而易见。
3.3.开源项目
框架一般都是开源项目,Apache是目前开源项目最多的组织。可以通过需求学习开源项目。比如你需要处理Excel文档,那就学会使用POI。要使用web服务,看CXF;如果需要字符串处理,就看是不是用Commons Lang实现的;如果需要IO操作,就看是不是在Commons IO中实现了。
除了Apache,还有eclipse、springsource、Jboss等很多开源组织,提供了大量免费的好货。当你有时间的时候,这是了解他们的好方法。“君子性不异,善在事假”——一个厉害的家伙不一定什么都自己写,而是经常组合使用各种神器。
对了,很多开源项目都是用比较生僻的英文单词或者自创的单词作为名字,最好去官网确认一下它的发音。很多人把Struts(本义:大摇大摆)发音为Struts,明显和Struts(结构)混淆了。听起来真的很业余。而PostgreSQL应该读作PostgreSQL,而不是PostgreSQL。请尊重作者的初衷。Debian应该读作“戴博·伊恩”,这是作者和他妻子名字的组合。念成“屎”太遗憾了。也不要看“Ubuntu”。
4.把程序写得更好
4.1.代码格式简洁优雅
尽量遵循官网的代码格式建议,利用好Eclipse的自动格式化功能。
复杂的条件和循环嵌套被细化为方法,方法的名字有意义,让后人看程序就像在看直白的英文句子。追求代码自注释。要注意尽量用单词代替拼音,尤其是模块间的交互界面(最好在模块内小范围使用),英文单词和拼音混用会让后人晕头转向。现在有很多种电子词典,都很好用。好好利用它们,让代码变得优雅,同时可以认识更多的单词。
4.2.高效代码内容
在使用了很多框架和开源项目,自己写了很多程序之后,你就可以开始思考实践有效Java里说的话,以及何时、何地、如何使用合适的技术和机制。
5.通过标准类库、企业级技术和开源项目了解模式。
说到模式,人们首先想到的可能是“设计模式”。很多初学者也是看《设计模式》这本书来进步的,但是根据我的经验,我当时不懂,不知道那些模式为什么会存在,也不知道什么时候可以用到。其实所谓的“格局”不过是前人的成语,被后人认为好用而广为流传。之前的代码都是复制改过来的,这样的代码其实可以说是某种“模式”的实现。
随着标准类库、企业级技术和一些开源项目的使用,模式的感觉会在你的脑海中建立起来。这些类库、技术、项目本身实现了很多模式,它们的使用也是模式。但后者常被称为实战,却并不以“模型”的形式出现在出版物中。
“模式”包括“设计模式”、“企业应用架构模式”和“J2EE核心模式”,可能还有许多其他的模式。标准类库和开源项目(包括许多流行的框架)因其灵活性、便利性和优雅性而出色地使用了它们。
Spring是工厂模式的实现。JDBC和JMS是抽象工厂方法模式的实现。
除了众所周知的MVC,Struts实际上实现了几种J2EE核心模式。
Hibernate内部使用代理模式,整体的存在是企业应用架构模式下“表数据录入”的实现。旧EJB2.0中的CMB更像是“行数据录入”的实现。
这些模型是作为概念直接研究的。没有实践经验,我们不会知道它们为什么存在,也不会知道如何使用它们,就像我当初做的那样,事半功倍。
现成的产品,用多了感觉会更好。感受一下它们带来的便利,和类似的功能对比一下,就能看出各种模式的存在和优秀之处。
6.理解面向对象的真正含义
了解了模式,我们会发现实现这些模式的基础是面向对象提供的封装和多态,这也是面向对象出现的意义所在。
敏捷软件开发中介绍了面向对象的八个原则——原则、模式和实践。其中我最看重的是“单一责任”原则,这个原则在模块划分上很有帮助,它的思想甚至可以延伸到组织架构的构建上。
7.outlook-架构师
有了以上步骤,你应该可以作为一个合格的设计师存在了。要成为一名架构师,一位培训师曾经告诉我们,“学习Linux内核。”
大的步骤是:阅读0.01了解其结构,0.10了解其进步,0.12了解其完善,最新版本了解其现状。
学习方法是使用UML工具对下载的Linux内核源文件进行逆向工程。从得到的类图中可以看出模块依赖关系,度最大的模块就是系统的核心。从这个模块,我们可以看到它是如何调度其他模块的,然后看到每个模块是如何实现自己的功能的。
8.结论
这些步骤没有严格的界限,可以穿插和迭代。
学习是一个发散然后收敛的过程。一开始好像是对着一个粉丝。出去的次数越多,不知道的就越多,需要学习的就越多。但是后来你会发现,你学的东西有很多共同点,你看到的东西也能很快理解。你甚至可以发现,有些东西不过是新瓶装旧酒,你可以用眼睛去看。
“愚者见异,智者见同”。愚者看到事物不同就觉得世界难以掌握,智者则善于看到事物之间的相似之处(规律)以达到事半功倍的效果。既然程序员都能做到,就不要把自己当傻子。