看到论坛上许多人学习很盲目,所以想想还是发个帖,说说自己的学法和想法,指导称不上,只是希望大家一起探讨探讨啦~
一、我认为合适的学习路径
我觉得从J2SE学起比较合适,而后可以根据需要转向其它两个平台。经常能看到这样的学习者,上来就学J2EE或J2ME,我认为这样极其不好,其急功近利之心真是路人皆知啊~首先一点我们必须承认,J2EE和J2ME确实是应用的主流,但是有两点也不能忽略:1.J2SE是所有Java应用的基础;2.J2SE可以进行桌面、游戏的开发,这也是比较好的应用方向。如果说你觉得J2SE做桌面和游戏应用没什么好的话那么你就大错特错了,可以看看http://www.java.com/en/lifestyle/ 其实Java做的游戏也比较多,就我知道有两个大型的网络游戏就是Java做的:《海盗时代》和《海天英雄传》。如果你说Java做桌面和游戏与其他语言相比没有优势的话,那我承认,不过我也要问一句:没有优势就等于不能开发了吗?如果你用C++开发桌面应用和游戏,那么难度肯定要比Java大,我还宁愿用Java呢,方便啊~说到这里又不得不提一些朋友了,有些朋友盲目追求什么性能啊,效率啊,并以此攻击Java的桌面应用和游戏开发,我觉得非常可笑!如果你是C++或者Delphi等等的高手,那我没话说,可是偏偏都是些菜鸟在那里叫嚣。我不禁想问一句:在你大谈特谈的时候你有没有想过你自己用过C++之类的语言吗?你学过吗?你知道C++开发的难度和复杂度吗?我想你知道后就会觉得Java对你们这些菜鸟是何等的方便了。还有就是菜鸟往往不注重算法的效率等问题,造成好好一个程序,给他们一写变得效率奇低,这样你的Java程序效率自然差的可以,有时间抱怨Java自己的问题不如自己好好学学算法,数据结构,你这些基本功不掌握学了J2EE和J2ME又如何,开发出来的程序还是垃圾。
说到这里打住,开始说说怎么学J2SE吧,首先肯定要入门了,然后掌握扎实的基础,那么很多人问看什么书?我觉得Java的官方教材是最好的,至少我看到现在是这样。下载地址为:http://www.certcity.net/download/list.asp?id=87 注意,一次只能下载一本书,否则密码自动无效,如果下不了可以问我要,我会Email给你。我建议下载英文版,当然你英文不好也只能看中文版。这里我还是要说,英文不好就要学,就要练,否则永远不会好!!!英文重要性不必我说,一定要学好。(看到好多朋友还要中文版的JDK文档我也真是只有晕倒了)很多好的编程技巧都是从外国网站学到的,这里推荐一个:http://www.javaworld.com 学好Java的基础后,如果你想检验一下自己的实力的话,那么可以去参加一下SCJP认证,关于认证本身就不多说了,但是如果你不想参加,那我也希望你做做那些认证的题目,有很多题目都很能触及Java的基础,都是很容易错的,做了后能使你对Java的语言机制有个更加深入的理解。做这些认证题有问题的话可以上论坛来问。
学好了基础不等于就能编程了,接下来就是熟悉API了,这其实是个把你所学的概念应用到实际的一个过程。比如学习基础时你知道静态方法可以直接用 类名.方法名 的形式来调用,那么当你看到API文档里的类的方法后你也应该知道怎么用了,至少可以猜个大概,因为很多类都把常用的方法写成静态方法了。我就是这样熟悉API的用法的。学习API的过程中就可以看看那些什么什么实例之类的书了。很多初学者通常都是从这些书开始的,其实这是很错误的学法,因为好多写这些书的人可以说自己都是三脚猫,很多概念自己都说不清,只能告诉你就这么用,你也就跟着稀里糊涂了。不过还好,这些书也没算白买,现在不就能用上了吗?:-)还有一点就是关于挑书的心得,不要说我崇洋媚外,我个人觉得外国人写书的水平确实高于国内的人,也许因为文化背景不同的缘故,其实还是这个教育体制的问题,中国的教育体制真的可以改了,你看它连编程的学习都影响到了。国外的书是越看越有味,他通常不告诉你具体确实的做法,只是告诉你思想,指导思想;国内的书要么是很功利的应试书要么就是实例技巧之类的,越看越没有意思,而且你还会发现一个很有趣的现象,国内的书特别喜欢改例子,一个原理相同的例子在几本书里可以用,外表改得天花乱坠,其实技术原理一点没变,只能说国内(确切的说是大陆)的编者只认钱,一点职业道德都没有。台湾现在倒是涌现出不少好的作家,想必大名大家都知道了,在这里就不多说了。所以买书一般先看国外的再看台湾的,国内的基本可以不看。国外的书也分原版和译本,建议看原版,这里又存在一个英文问题,所以有时看来要学好编程,瓶颈在英文上。之所以要看原版因为有些译本的翻译人员水平较低,翻得你看不懂,自然也就错过了作者的精妙之意了。这里我想讲个例子,我的一个同学,是女孩子,她学Java编程,我借给她一本国外的书,让她入入门,她看了书后第一个反应是书上的句子看不懂,显然翻译确实是大多数译本的问题所在,她说了句很搞笑的话,她说我连一句句子的主谓宾都划不出来,可见翻译质量之差;但是她努力看完之后,你知道她说什么吗?她说收获很大,比她以前看的国内书写的好很多。我觉得这是一个非常生动的例子,国外书即使是翻译的不好,还是瑕不掩玉。
好了,现在你已经不再是菜鸟了,那么接下来干什么呢?我觉得就可以开始自己做做小项目了,一方面练习一下自己学过的知识,熟悉API,另一方面对开发有个感性的认识,开发过程中你肯定会发现很多书本上学不到的知识,你也会发现一些问题,这些问题的发现有助于引导你进入下一个学习阶段。比如,你发现你的程序虽然结果是对的,但是为什么那些高手总是能写出更简洁高效的程序?这时你就应该在开发的同时学习算法和数据结构,开发不要停,因为可以帮你熟悉API和发现自己身上还存在的问题。开发过程中你也很容易发现软件工程中的一些问题,比如软件腐烂,呵呵,也就是你发现你的项目开发到后来进行不下去了,倒不是因为技术上有什么困难,而是自己不知为什么不想继续下去了,为什么?Bug怎么找都找不完,每次想增加新功能却要改好多代码,甚至要重写整个软件,这样你就自然而然会想看看关于软件工程方面的书了。可以看看到底怎样开发才是合适的,如何防止软件腐烂?软件架构怎么设计才好?看看设计模式可以让你在面向对象的理解上再上一个层次,其实这也是J2EE必不可少的组成部分,甚至可以说是核心,其实企业架构别人都帮你做的差不多了,关键其实就是你自己的设计和思想了,这些东西才是核心,至于实现这些的技术如:JSP,EJB等等都是次要的了,因为有了你前面的学习基础,这些东西的上手只是小儿科,你不用多久就可以应用好这些技术,但是思想呢?设计呢?不是这么短时间可以培养出来的!
到这里是不是差不多了呢?呵呵,学无止境,接下来你就要时时跟踪最新的技术动向了,把新技术和现有技术很好的结合也是一门学问,好好学吧!当然永远跟着别人的技术走肯定不是办法,能自己创新就更好了。不过就像上面这样好好学,学成了就是技术跟风也够让你的年薪上十几万了,必要时可以倚老卖老,当当管理人员这样年薪就又要翻个个儿了,变成几十万了,嘿嘿
二、我认为好的学习方法
上面讲学习的路径时其实也提到了一些学习方法。下面我再具体的说说。
看书肯定是一个方法,也是多数人的学习方法,其实看书也有学问,怎么看就会导致完全不同的效果,就像在学校里学习一样,同样是坐在一个教室里,看的都是同一本教材,为什么有的学生就是班级第一,有的就是倒数第一呢?努力程度肯定是有影响的,但是为什么还有努力学都学不好的人呢?我觉得智商肯定不是问题,只是借口而已。关键是你肯不肯思考,现代人越来越不重视思考了,也许是因为没有时间去思考的缘故,我认为你看书的时候还有看完书都要思考一下,为什么要这么写?为什么要这样?如果这样写会怎么样?看书时这样的为什么要多问,这样你就自然知道了某些做法的好处和为什么不要这么做等等,这样收获自然就大了。看好书呢还要多写,编程编程就是要编的嘛,多写一方面可以练练感觉另一方面可以实践一下自己的想法,何乐而不为呢?
看文档就是另外一个方法了,但是许多人都不喜欢看,为什么?语言问题,什么时候语言竟然成了我们学习的障碍了?所以英文不好的平时除了看书学编程外最好再学学英文。书上写的东西哪里来的,别人为什么能写书教你呢?他是怎么学的?答案是他是看了文档然后自己消化后教你的,所以文档其实是知识最根本的来源,看文档也可以让你对技术有个本质的了解。这点SUN就做得很好,你可以多看看他的Specification。对自己的水平提高大有好处。相比之下微软就有些闭塞了,呵呵,微软总是喜欢对你隐藏细节,哈哈,也许是他面向对象概念学的太好了,什么东西都对你实施封装,呵呵,说笑了。
除了看文档,有些问题还是不能解决,怎么办?看源码,呵呵。看看JDK的源码,这样对于有些东西的实现能有更加深入的了解,从而解决一些以前无法解决的问题,而且还能看到很多不错的算法思想等等,而且很多初级的问题都可以获得解答,很多人问怎么连接数据库啦,这个那个怎么用啦~其实JDK自带的DEMO里几乎可以解决你大多数的问题,而且代码又是官方的,应该是最标准最好的写法了,看源代码的时候也要像看书一样多问为什么。当然也不仅仅是看JDK的源代码了,还可以看看其他开源的源代码,这一点又是在微软平台下学习的程序员所很难体会到的好处了,微软啊,微软……想说爱你不容易啊~
如果以上的东西都做到了,那么恭喜你!再经过时间的磨练你就是一名资深的程序员了,很多人可能又会有问题了,学个Java这么难,看来一辈子只能学Java了,其实不然。第一,学好了Java后对你学习其他面向对象的语言有很大帮助,可以说能缩短你的学习过程将近2/3,要学其他语言只要学好它的语法还有一些平台特有的用法就好了,其他知识可以迁移,用到新的环境中继续发挥作用。第二,不要小看人的学习能力,当然除非你没有认真学,呵呵。我按照我的学习进度估计,我大学四年可以完成上面所说的大部分工作,剩下的就是经验的积累,和一些知识的补漏了,我想如果你想好好学的话,把所有精力都放在这样的学习上估计两年就可以。因为我还要学习学校里的东西嘛,而且我的专业也不是计算机的,所以不可能能够让学校课程覆盖到我要学的东西。这里你也应该可以看到有些人抱怨的所谓为什么不学基础就直接上J2EE的理由是站不住脚的,你家穷的连养你两年都做不到吗?况且你可以做做兼职贴补一下,花两年这样好好学习一下绝对是值得的,两年后的你绝对是脱胎换骨的,而你在公司待两年的话绝对没有这么大的收获,因为当时在公司里你基础根本不好啊,所以即使有东西学到也无法领会啊~更何况有些公司对员工的培养根本不关心,你就更加学不到东西了,再加上技术的不稳定性,若干年后技术革新就会把你抛在后头。如果你扎扎实实学习过的话,有些东西是硬功夫,不会随着技术的变化而变化,有些设计思想也是一样,因此你学习新技术的成本也大大降低了,你就能跟上新的时代潮流了,成为永远在浪尖的弄潮儿~
好了,洋洋洒洒写了这么多,感谢大家耐心的看完,并衷心希望对你的学习能有所帮助,让我们一起努力吧!