Fork me on GitHub

怎么解决问题

编程总是会遇到很多问题,你解决问题的、方式反映你的思维方式,你的思维方式决定你的未来,很多事情可以靠经验解决,思维却需要不断的锻炼。

程序员不仅仅是程序员,他更应该是一个高效的学习者。

以下主要来源于马士兵老师(很有参考意义):

在编程中,每个人都会难免遇到问题,那么,遇到问题之后,环境配不通,程序调不过,运行不正常,遇见这些恼人的问题的时候,该怎么办呢?
首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的JAVA经验值就应该上升几百点,问题遇到的越多,知识提升的越快。 但是总是解决不了也是很恼人的,怎么办呢? 我一般要求我们的学生都是这样来进行的。

当你遇到一个问题的时候:

要仔细的观察错误的现象,是的,要仔细

英语是成为一个牛逼程序员的必经之路

有不少同学的手非常快,在编译一个程序的时候,报了一大堆的错误,扫了一眼之后就开始盯着代码一行一行的找,看清什么错误了吗?没有!有的时候安装软件出问题了,一个对话框弹出来说出错了,马上举手问老师:“不得了了,出错了,出错了”。

“什么错误?”

“还没看呢?”

这都是典型的不上心的方法!请记住,学习编程并不是一件很容易的事情,自己首先要重视,要用心才可以。在开发中,仔细观察出错信息,或者运行不正常的信息,是你要做的第一件事。读清楚了,才能在以后的步骤中有的放矢,哭了半天,总要知道哭的是谁才成。

这里又分三种情况:

A:错误信息读懂了,那么请进入2步:要仔细思考问题会出在哪些环节

B:没读懂,愣是一点没看懂,进入第4步吧:google

C:读了个半懂,有些眉目但是不太能确定,第2步和第4步结合着来。

要仔细思考问题会出在哪些环节(重要)

当你读懂了一个问题之后,要好好的思考这个问题可能会在哪些环节上出错。

一辆汽车从总成品线上下来,车门子关不上! 哪错了?你怎么查? 当然是顺着生产线一站一站的查下来。 程序也是一样的,也是一系列语句完成后产生的结果。

写一个网络程序,总是发现服务器端打印不出接收的数据,有几个环节会出错?仔细分析这个现象的环节:

客户端产生数据->按“发送”按钮->发送到服务器->服务器接收到后打印

这几个环节都有可能会出错:

有可能客户端根本就没产生数据,有可能发送按钮按下去后根本就没发出去,或者发出去的不是你产生的东西,或者根本就没连接网络,或者发送出去服务器没有接收到,或者接收到之前就打印了等等等等。

学着去这样仔细的分析程序的环节和这些环节可能会产生的问题,你的经验值定然会大幅度快速的提升,这样做很累人,但是一件事情如果做下来一点都不累的话,这个东西还有价值吗?

在网页A输入了一个人的名字,提交到B,首先存储到数据库,然后再读出来,发现乱码!怎么办?当然是分析环节:

客户输入->HTTP发送->B接收->存储到数据库->读出->展现到网页

每个环节都可能出问题,怎么才能知道哪里出的问题?继续往下读。

如何定位错误(重要)

分析清楚有哪些环节之后,下一步就是定位到底什么环节出错了

定位有以下三种办法:

A 打印输出,比如java的System.out.println(),比如js的alert(),这种办法常用,必须掌握

B Debug,可以参考我们的视频《坦克大战》,详细讲了Eclipse的调试。

C 删掉一部分调试一部分,也就是去掉一部分的功能,做简化,然后调试剩下的功能,JSP和JavaScript常用。

如果还不行,google吧

还查不出来?恭喜你,你遇到的错误是值得认真对待的错误,是会影响你学习生涯的错误,问一下google或者百度吧。照着下面的方法查查看。

先精后粗,首先先进行尽量精确的查找,比如一个错误,SocketException,你怀疑它是在connect()方法出的问题,那么当然是选这样的关键词java connect SocketException

  1. 先中后英,本着以解决问题为主的想法,练习英文还是先放在一边吧,首先应该在中文网页中查询,还不行的话,搜索英文的吧。有很多东西就像一层窗户纸,远看灰蒙蒙怪唬人的,你壮着胆子一捅,它就破了。阅读英文的书籍就是如此,不是想象中的那么困难(宁可在沙场上战死,也不能被吓死不是吗)

  2. 信息筛选,搜索出来的结果不见得能够完全匹配,建议大家多阅读前几页的搜索结果,多打开几个网页看看,不过,我的经验是超过3页一般就没意义了,所以超过3页还没有找到合适的答案,或许应该调整一下关键词,或者放粗整个搜索的结果了。

  3. 经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点的细节。这也是涨知识的重要的途径。

什么?还不行?那么就BBS吧

如果实在还不行,就到BBS上面问一问高手吧。 到哪个BBS上?

google或者百度不就行了么?关键词“java论坛”“java bbs”

然后在搜索结果里好好的看看那些活动频繁的论坛,以后就是你经常光顾的地方了。CSDN论坛首页就很不错。

向别人提问是非常需要技巧的!

曾经有人问我这样的问题:“请问如何才能学好java呢?”这个要求太泛泛了。还有人给我一段代码甚至jar包也寄过来,然后说老师的我的代码中有个错误您帮我查查。

我没有办法去花大量的时间建立环境去调试一个还不知道存在不存在的错误!

还有人在BBS上问这样的问题:“是否有人能帮我完成一个完整聊天的程序?请帮我写一个登陆模块吧!”

这个要求有些过分了,有人帮你做是你的运气,没有人帮你是正常反应。

向别人提问,应该首先确定你已经做了自己应该做的事,简单说是我前面列举的1,2,3,4步你都作过了,然后再求助于人。不要没有经过认真思考就草率的向别人提问,自己也不会有长足进步的。

那我该怎么样向别人提问呢?

在google或百度搜索《提问的智慧》,你会找到答案。

在这里我给出一个链接
提问的智慧,磨刀不误砍柴功,先花点时间去阅读一下吧。

得到别人的回答,要懂得感恩。不需要去写信感谢,不需要支付费用,不需要那些花言巧语,做到下面这一点就够了:

当你逐步成为高手的时候,要回答别人在论坛上提出的问题,有时间有精力的前提之下!

posted @ 2017-04-30 21:22  morethink  阅读(269)  评论(0编辑  收藏  举报