请告诉我如何提高Java的编程水平?谢谢!

    (本来发在提问板块的,但是想想后,觉得发在此处可能更好一些。如果有什么不符合版规的地方,请原谅!)

    小弟今年研究生三年级,找了份J2EE方面的工作,所以想在这个方向上有所深入的学习。可是,对于学什么、怎么学,确实有点茫然。
    小弟的情况,学习Java也已经三年多了,看过《thinking in java》两遍,Java基础一般吧,想更深入的学习一下Java基础,想买一本effective java,但是在等待第二个版本,还没入手,兄弟姐妹们还有什么好书推荐呢?认真阅读了《head first design pattern》两遍,《Java与模式》......对面向对象的编程理论有一定的了解。学习struts 2、ibatis、spring这些框架一年多了,也做过一个项目,就是用的这三个框架,现在已经挂到网上了。hibernate也看过一些书,做过一些demo,使用的myeclipse。但是,对于这些框架,仅仅是停留在会使用的水平,对于里面的机制并没有去深入的了解。
    现在,想深入了解一下spring,想读读源代码,却不得其法而入。望各位兄弟姐妹们不吝赐教,如何系统的、深入的学习这些东西?怎么样才能算是对这些框架有深入的了解? 
    还有,小弟做过数据库的助教,但只是停留在写写sql语句,用过ms sql server、mysql,对于数据库优化之类的没什么了解。请问如何提高自己的数据库水平呢,有什么好书推荐呢?
    如果看了上面的文字,不知道小弟所问何事,可以直接提问。在此先谢过了!期望兄弟姐妹们指点迷津呀!

 


问题补充:
谢谢大家热心的回答!

想要提高自己的编程水平,要通过实践-->思考-->实践......,这样反复的过程。

小弟受教了。

问些具体的问题吧,各位学习过spring源码的兄弟姐妹们,能不能分享一下你们学习的方法,或者有什么独到的见解,告知小弟,小弟感激不尽。

[quote]问些具体的问题吧,各位学习过spring源码的兄弟姐妹们,能不能分享一下你们学习的方法,或者有什么独到的见解,告知小弟,小弟感激不尽。 [/quote]
1.先要对设计模式有一定程度的了解。
2.知道IOC和AOP,了解它们的作用,这个是Spring的核心。
3.从BeanFactory接口和实现类开始看,坚持,头晕也要坚持。实在晕了可以用Rose或PowerDesign反向一下,看看UML的结构。哦,最好看一下JDK的reflection包和cglib的用法,对动态代理有点了解。
4.对util包下面的类也要看,可以学到很多小技巧。
5.看各种Template,比如JdbcTemplate,可以学到策略模式、JDBC异常和很多JDBC编程的经验。其他的集成模块可以慢慢看,基本道理都差不多。
6.找个好的IDE例如eclipse,别用editplus之类的。(好像废话了)

和我何其的相似。。。。。。。。。

不过进入JAVA的时间比你短,才1年半

书我到是没你看那么多,我觉得我对JAVA整体把握不够,设计模式也不熟悉(其实,我觉得,这些都是看书学不到的,只有真正达到一定的水平,有了一定的经验才能体会到)。对hibernate和spring还算熟悉,会用,也看过一些源代码,对spring的事务管理看得比较多。

实践出真知

看书 实践 交流
我们都在路上 不走弯路 就是捷径

这样就很好了,我认识的几个研究生都没你强。你学过设计模式,只要有毅力,看源代码就不会有问题的。看SPring可以从beans.BeanWrapper或者XmlBeanFactory看起,也可以专注于JdbcTemplate,或者看util包下面的类。总之不能大而全的看,要专注一点,坚持下去就OK。另外阅读代码主要是学习人家的思路,至于深入了解Spring,则可以看reference.

本人大本,还是学矿物的。编程完全是兴趣,如今也变成职业了。
项目是学习的动力,只有在项目中才能逼得你学东西,看书太多,往往都是浅尝辄止。
我不建议刚刚J2SE熟悉的人盲目看什么设计模式。这个东西是经验,是思想,只有当你经验积累到一定程度才能真正理解什么是设计模式。
项目做多了,你会发现自己以前那些功底不够,这时才有动力在理论上更深入。同时做项目也不是一个人的事,是团队,怎么同别人合作,同一个实现别人是怎么做的。
总之,就像WishperXD说的 看书 实践 交流,循环往复。量变才能质变!

我建议楼主这样情况的,直接找外企,或者去欧美留学,千万别去小公司。毁人的小公司我见太多了。

直接去工作,开始工作待遇是低点,但是在工作中学习,然后自学,看看高手们是怎么解决问题的,你需要的并不是怎么提高java编程水平,而是用java解决更多的问题,这样我觉得是最好的!

研三了,应该去找份工作了,或者接私活,多做项目,多实践,通过解决实践中的问题,以此来提高对基础和框架等的理解。这是我从一个师兄那学到的,他才研二,研一就开始做项目,感觉他比LZ强,至少是在实际应用方面

我个人认为,做项目是提高自己的最好办法,但是做完一个项目要想要总结不要做到项目中的每一个细节都要想清楚,这样才有意义.

多实践!书本是入门,实践是经验

很强的人啊,我自惭形秽,看来我得再看看Thinking in Java啊,还有,structs跟hibernate得去了解了解,我也有这样的困惑,怎么才能提高自己的Java水平呢,是掌握框架呢还是钻研算法,还是多做面试题目。

1、正确的方法:学习语言唯一的方法,就是写代码。
There is only one way to learn proraming ,that is to write programe.
2、按正确方法做正确事:从今天开始,写代码、思考、学习。

为了完成工作,肯定用的成熟的框架,风险小,学习曲线短,上手快,代码质量,规范都有保障。
如果要再上升,肯定要看基础的了,《深入java虚拟机》,jvm规范,servlet规范。java的基本规范懂了,什么框架就容易理解了,为什么要这么实现,看到就是框架的作者的思想了。

我觉得多做项目才是关键所在,如果你们公司有很好的架构师,那你可以多去问问他关于架构的一些东东,看书也不是说没用,就象很多大牛说过你可以快速的利用几天时间来翻阅一本书,而不是仔细阅读,不实际操作根本就不会提升,建议你多学习技术,提升自己学习能力,如果你在喜欢管理的话努力提升自己吧,毕竟软件开发的路就那么几条 !

多做项目,多思考,就行了

先看看书,多做一些实例,多Google。时间长了,你的水平自然就提高了。

多点参加做项目吧,感觉只有实践了才能真正感觉学到了东西。
在实践中遇到问题-解决问题-总结问题,这样就会慢慢提高了

[color=red]看多少都白扯,写出来才是自己的[/color]
我的感觉,哈哈

如果开始没有编程的经验很难理解别人的代码,只有自己写过了然后再看别人的代码感受会更深.

这个问题没什么好说的,水平是建立在实践的基础上的,只要多多练习,多多思考,多多总结,水平肯定会上去

你要提高的不是Java的水平,而是思想的深度。

多学习一些其它语言,对你提高 Java 编程的能力也有好处。

[color=red]写代码 - 发现问题 - 用google解决问题 - 阶段总结你所解决的问题[/color]

我学习java 前后共2.5年,
觉得最能让你获得价值的东西就是项目经验,
做各种各样的项目,
网站,企业应用,搜索引擎。
等等,
然后再去学习那些思想的东西,
国外写的那些思想的东西,别人都说很好,
我个人觉得要命的差劲,
建议学习一下中国的道家,佛家,以及哲学思想。

没有看好你写东西,
看来你不是我想象的那么高,
spring看不懂,就证明你根本就没有学习过设计模式,
我看spring 的时候就一个感觉简单的小工具,
两种设计模式的实现而已。

数据库学习有很多角度,
看你想在什么方向发展,不然没有意见给你提出来。

多做项目 多实践 由实践到认识 再实践 水平肯定能提高不少

怎么感觉和我差不多?我将本科毕业。

其实就是要多钻研、多思考、多动手而已。

书籍的话:
推荐看看《代码大全》,这本书不用介绍太多,五星级书籍。
如果要看评论的话,豆瓣链接:http://www.douban.com/subject/1477390/?i=0

对于如何系统的学习一个框架:
我个人的感觉是:忘记这个框架,如果要你来解决你想学习的框架,你会怎么开始?然后尝试实现, 当然, 这是对于有时间的人来说。
如果时间不是很多,那么最简单的方法就是看框架的代码了。

提高数据库水平,呵呵:
遇到问题,解决问题。多上论坛逛逛,帮人的同时也是帮自己

最后呢,nail2008 兄的观点我比较赞同:
对于一般人来说,实践最重要。多思考,多写,然后再思考

一定要在工作中学习,找个项目去做吧,把你看到的东西应用到项目中,否则永远都是纸上谈兵,只能去做java培训讲师了,呵呵

真正做项目时理解需求才是第一位的,真正理解了项目需求,语言都好解决,再困难的问题都有办法解决.

有没有什么比较好的开源项目,简单的,对提高J2EE的开发架构能力有好处的,可以去练练手.

我没有LZ那么强,但有同样的感受,也不知道怎么去学习!还是以上各位所讲的,只要经验够了自然就理解了!

我也觉得是先把java的基本规范弄懂了在去看框架,框架是思想,更多的是实践中运用!

代码是敲出来的,不是想出来的

[quote]实践-->思考-->实践......[/quote]
严重同意!

1、在实际工作项目中学习
2、有问题就去google.com
3. 多看多练
编程十年功,要长期积累!

写代码就好像练功一样,首先要把基本功练扎实,马步要稳,所以建议先把j2se搞通透,其实那些框架之类的,说白了都是java api实现的,只是融入了模式与oo的思想!
其次就是多练,武林高手的功夫都是经过数十年苦练而来,写代码也一样,一旦发现代码已经成为你身体的一部分时,离高手又接近一步了!

我认为你还应该加强自己的编程功底。基础是最重要的。“大厦不能建于浮沙之上。”我的建议是看看JAVA 之父编的书。因为它那里边的理论很深,你应该去学习一下。毕竟你已经研三了,又看了很多关于Java的书。我想你应注重一下理论了。还有,就是注重一下 你的编程规范。