首页 > 代码库 > 学习编程的路该怎么走?

学习编程的路该怎么走?

网上看到有人问:自学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.....

虽然他们说的都没错,毕竟这些东西是时下最流行的,

但随便敲几个字告诉你要学这些东西,是不负责任的。

那些什么“语言不重要,思想才是重点”的话虽然是正确的,

但对于现在能力的你,这话就是屁话。

这世上多的是那些“随口说出正确的结论,但其实对我们一点帮助也没有”的人,

这些“只满足必要条件,不满足充分条件”的描述,

对学习东西没有太大的帮助。


就像看过《笑傲江湖》的人都知道“无招胜有招”是最高境界一样,

但如果你没先读过独孤九剑的总纲,

再学过破剑式、破刀式、破.....式,

并且有老师一点一点的跟你讲解剑理的重点,

并且跟田伯光、黑衣人等人练习过,

怎么达到“无招胜有招”的境界?

没有体会到剑理并加以实践,

“无招胜有招”就只能是街口流氓打架。


最后,要告诉你,这条路其实挺远挺不好走的,

你觉得你真的适合进入这个领域吗?

这一切是一点一点学会,一点一点进入的过程,

没有几年是不会有成绩的,

你真的适合以编程为职业吗?

你真得好好想想。


本文出自 “老猫的窝” 博客,请务必保留此出处http://oldycat.blog.51cto.com/1720867/1908051

学习编程的路该怎么走?