网上看到有人问:自学javase也有段时间了,看过些基础视屏,但是现在自己还是什么都不会,一点方向也没有!之前发过贴也说过这个问题,很多前辈知道说去做小项目,可是自己在网上找的那些小项目,源码都看的稀里糊涂的!
以下是我的回复
从看到你的问题,我就在想怎么说明白这件事。
有的人真心想帮像你这样的人,
但并不知道怎么明白告诉你,给你指明白这条路。
像我这样的人都是第一天摸到电脑编程就兴奋得要死,
发现电脑能以另一种方法解决“课堂上学习数学时面对抽象符号不容易理解”的问题,
兴奋得每天都在期待学校电脑课到来(一周只有两个小时,我高中的时候)。
到底电脑编程有什么魅力?
当年高三学到“圆的计算公式”时我在想“电脑是怎么利用这个公式画圆的?”
当时学到两种方法:1.用“勾股定理”;2.用三角函数;
因为“勾股定理”容易理解,所以就先用它,但画出来的圆一点不好看。
只好用三角函数,结合圆的公式重新写一个,最终很完美的把圆画出来了。
那几天兴奋得睡不著觉。
电脑编程最美的地方就是能够“快速的验证你想的东西对不对”,
把你想到的方法的答案快速地回复给你,
它是最棒的“思路正确性自我检验工具”。
不只如此,
经过这么多年编程语言的演进,
使这个工具在具有逻辑性的同时,
提升利用数理逻辑解决问题的优美程度。
编程的过程就是在享受这个东西。
愈晚期发明的编程语言,
在这方面的改进愈明显。
因此“原则上”Java在这方面是胜过C和C++的(原则上哈!)
除非你要解决的问题非C/C++不能解决(比如对速度有很高要求,或者是系统底层编程),
否则应该尽量的选用较晚发明的编程语言(或者在这方面持续改进自己的语言,Java属于这一种)。
说到这里,
似乎仍然没有回答你的问题:学习Java的路该怎么走?
呃,其实说了,不知道你发现没有?
学习编程的关键点就在这里:
利用这个“思路正确性自我检验工具”反复验证自己学得如何。
比如学习JavaSE,学习面向对象,
你真的学会了吗?到底掌握了多少?
你得反复用编程工具(比如Eclipse)编写简短的代码,
运行验证结果,
看看跟自己理解的有什么差异,
验证自己到底懂得多少,
验证自己懂的到底对不对。
只有验证自己确实学会了一些关键点,
才应该不断往更高深的部份学习下去。
你说“网上找的小项目的源码都看不懂”
其实,大部份别人写的源码我也看不懂。
非得“很痛苦而且很用力看”最终才能看懂。
学习编程的过程并不是看一些别人写的源码就能成长快速的。
要成长快速,正确的方法是先沉下心花几个小时把基本的语法看会,
然后在这个基础上问问自己,
以目前学会的,能出什么题给自己,
应用目前学会的怎么解决它?
怎么快速验证它真的被解决了?
还有没有更好的解法?
说说当年的一件事:
当年在学校电脑室,第一次接触多人共用的Unix环境,
虽然已学习DOS多年,
但面对Unix终端完全不知道自己要干什么?
怎么迈开学习Unix的第一步?
那时候我就像你现在一样迷茫。
直到有个学长告诉我:你可以写个程序,监看当前有谁登录系统。
当时我们Unix账号就是我们的学号,
我用Shell脚本写一个十多行的程序(花了我约3小时)在后台运行,
每当有人登录系统,我坐在电脑室最后一排,
立刻知道他/她是谁(用学号到学校发的通信录查询,就知道他/她的名字)
真是太有意思了。
那之后我一直不断的想:我还能用Shell脚本做什么?
每天给自己想一个题目,
然后去找书(那时候Unix只有英文书喔,百度还没出生)设法找到解法。
虽然啃英文书很痛苦,
但是跟找到解法解决想解决的问题并最终获得成就感比,
那种痛苦不算什么。
比如Unix环境中有电子邮件系统(OK,现在电子邮件没什么了不起,但那时候这东西刚出来),
我便想这电子邮件系统怎么把邮件从遥远的另一台电脑寄到这里的?
找了很多资料,都说用Shell脚本做不到,只有C能,
于是为了搞明白邮件系统是怎么实现的,
开始了学C的漫长过程。
现在我告诉你:Java能开发邮件系统,也能开发QQ系统,
你会不会想知道怎么做到的?
OK,你是初学者,别选那么难的题目开始。
但绕来绕去说那么多,
其实我已经告诉你学习Java的路该怎么走了,
不知道你发现没有?
面对什么javase,javaee,swing,swt,SSH,.....
名词一大堆,东西一大堆,
谁都会迷茫的。
要学的东西如同大海啸,又高又大地在你面前向你涌来,
你怎么可能不手足无措?
一开始能力还很差,
只能解决简单的问题,
想想自己要从解决什么问题开始,是件超重要的事。
如果像我今天这样的能力,却想怎么开发出登月火箭,那就是犯傻了。
我甚至想都不会去想怎么开发出一架飞机,
或者怎么设计飞机的飞控系统,
因为我的能力离解决这个问题,相差太远。
你想学Java做什么?解决什么问题?
怎么给自己找到下一个问题?
从“怎么用几行Java就能享受著看到电脑解决你的问题并回复答案”开始,
一步一步的走出去。
渐渐地代码行多了,
就得想想怎么分配代码行到多个方法、多个类中、多个文件中,
渐渐地能力有所增长了,
才开始想除了标准JavaJDK外,还要学什么?
简单的说,下一步要学什么,
是跟“你想用Java来实现什么”相关的。
每个人都会跟你说要学javaee,SSH,swing,swt.....
虽然他们说的都没错,毕竟这些东西是时下最流行的,
但随便敲几个字告诉你要学这些东西,是不负责任的。
那些什么“语言不重要,思想才是重点”的话虽然是正确的,
但对于现在能力的你,这话就是屁话。
这世上多的是那些“随口说出正确的结论,但其实对我们一点帮助也没有”的人,
这些“只满足必要条件,不满足充分条件”的描述,
对学习东西没有太大的帮助。
就像看过《笑傲江湖》的人都知道“无招胜有招”是最高境界一样,
但如果你没先读过独孤九剑的总纲,
再学过破剑式、破刀式、破.....式,
并且有老师一点一点的跟你讲解剑理的重点,
并且跟田伯光、黑衣人等人练习过,
怎么达到“无招胜有招”的境界?
没有体会到剑理并加以实践,
“无招胜有招”就只能是街口流氓打架。
最后,要告诉你,这条路其实挺远挺不好走的,
你觉得你真的适合进入这个领域吗?
这一切是一点一点学会,一点一点进入的过程,
没有几年是不会有成绩的,
你真的适合以编程为职业吗?
你真得好好想想。