本文是另外一篇文章《如何才算掌握Java(J2SE篇)》(后面简称标准篇)的姊妹篇,提出了标准,但是不告诉新手如何才能达到那个标准似乎说不过去。
首先需要说的是达到这个标准是比较困难的,没有三年的时间一般是不可能的,没有实际的项目的经验的熏陶也是不可能的,下文会说明为什么。然后给出两个宝典:一个就是TIJ(Thinking in Java),另外一个就是chm格式的JDK的API。 TIJ可以看看(javaresearch.org/download/thread.jsp?thread=21158 )Java编程思想(完整的中文简体第二版),如果英文可以的话强烈要求看英文原版,而chm格式的JDK的API的下载地址可以看看javaresearch.org/forum/thread.jsp?column=61&thread=4921 Cherami站长的推荐。虽然我没有把TIJ看完(我开始用Java做项目的时候TIJ还没有出来),但是我浏览过目录和看过一些章节的内容,感觉作者对Java非常的熟悉,实际经验也非常的丰富,很多内容一看就是经验之谈。
需要说明的是,我说的看包括内容和领会作者的意思,如果用Java做过一些项目以后你再回头看看TIJ你会发现如果你刚开始就记得并掌握了TIJ所讲的内容后会对的项目有多大的帮助。
掌握TIJ的内容至少可以达到标准篇中所讲的语法、思想以及规范的标准,对于API的掌握也有很大的助益。之所以需要chm格式的JDK的API是因为JDK的API实在是很大,个人认为不大可能记得那么多,而站长推荐的那个API可以非常方便的根据类名或者方法名查到对应的说明,有时候我们就是大致记得应该用哪个类或者某个方法,但是忘记了具体的细节,这个时候就可以查那个东东了,我现在已经养成先把那个chm打开再开始做事情的习惯了。
需要提醒的是你不能完全依赖它,有些东西还是需要自己记的,如果你都不知道要用什么你怎么去查呢?你至少要记得一个索引,哪个类或者方法可以完成什么样的功能的索引。接下来就是实际项目的熏陶了。如果你不做applet,你就不会去用appletviewer和HtmlConverter,如果你不打包你就不会用jar,如果你不做类库你可能就不会用javadoc,如果你对系统的运行性能不关心你可能根本不会考虑使用javap,如果你不做独立运行的程序你可能根本就不会注意到我们有时候是多么的讨厌那个多于的dos窗口而用javaw代替java来运行你的程序,如果你没有做过国际化,你怎么可能去使用native2ascii进行转换编码呢,如果你没有做序列化并且升级你的类你是不会知道你为什么需要serialver的。而离开了这些命令或者说工具,你可能不知道java到底都能做哪些内容。这些命令都是基于命令行的,对于习惯的图形界面的新时代来说可能会很不习惯,但是你必须知道在命令行下如何使用他们,因为很可能你真正项目中需要运行的环境就是一个命令行(UNIX/Linux服务器)。
在开发一个实际的系统的时候,你不可能使用editplus或者notepad或者vi或者emcs写代码,因此你必须有一个你熟悉的IDE工具,这样你才能管理庞大的工程,而这些IDE工具不可能仅仅用来做编辑器,你可能更需要的是使用他们的调试功能追踪疑难杂症(如何设置各种断点,特别是在循环里面设置条件断点),另外就是他们的代码提示功能以及集成的版本控制功能。
实际项目对API的掌握也是一个莫大的考验,真正的项目的工期都会比较紧凑,因此要完成什么功能需要使用什么那些类以及如何完成都是对你对API掌握情况的真正考验。如果你没有做过需求频繁变更的项目,那你很幸运,但是实际情况往往不是这样。你修改代码以后以为没有问题了,你往往只是测试了你眼前的部分,但是其他的部分怎么办?难道都要我测试一下,天哪!是的,情况往往就是这样的,因为需求变更导致的回归错误可能是我们最大的噩梦!如果你的代码结构良好,那么你可以使用JUnit编写单元测试用例来保证你的修改对各个部分的接口没有造成不良的影响。
一个符合OO的系统应该也是一个易于测试或者易于编写单元测试用例的系统!如果你没有完整的参与过一个项目,你不会知道拷贝文件、发布版本、打包、生成javadoc、运行测试用例、版本维护、建立里程碑、建立基准版本、增量更新版本是多么痛苦的事情,但是如果你使用Ant编写一个脚本帮你完成这些项目必须而又琐碎的事情,你会觉得其实开发项目有时候也是很轻松的。
一旦你经历了这些项目的真正的磨难的时候,你看到错误信息的时候就不会手忙脚乱了,你可以很清楚的知道是哪个地方出问题了,可能的原因以及解决方法是什么。没有遇到问题,你就不会学会解决问题,你也就不可能提高!
最后总结一下:掌握TIJ,你对Java的语法、API、思想和规范会有一个比较好的基础,而通过实际项目的锻炼,你对API会更熟悉、你也会掌握那些基本的命令在命令行下怎么用,怎么选用一个IDE以及最重要的:如何排错、调试程序、测试程序以及使用工具让电脑完成那些琐碎的例行工作。
以上只是个人的一点看法,希望对于那些迫切的想掌握Java的新手有所启迪和帮助。