假如你还没有读过本文,请尽量抽出一些时间仔细地读一读它。
1,请在你有空的时候,多去读一读置顶的精华目录里边的帖子,哪怕是你现在还没有碰到什么麻烦,也请尽量去读一读它。精华通常是以前讨论过的一些比较精彩的帖子,也许会对你的学习有所帮助。
2,平时有空了,多来几次这个论坛,碰到别人讨论某个自己比较熟悉的问题的时候,请尽量参与发言。通常情况,你自己认为是对的东西说出来以后都会有人反驳,在辩论的过程中你会发现自己对相关知识的认识会更进一层。
3,假如你碰到什么麻烦了,请尽量回忆一下,精华中是否有相应的内容?如果没有,再去发帖子。当然了,如果第一步你做的比较好的话,你基本上都会很快做出判断的。
4,置顶的帖子中有一些书籍,都是大家公认为比较出色的,如果你还有业余时间,请下载下来抽空阅读一下,对提高你的水平大有裨益。
5,当你通过论坛解决了自己的问题之后,不妨把解决的方法写出来,告诉大家。这样会很方便后来的人。还有可能被版主加为原创精华哦!
为了尽量不耽搁大家的时间,我就仅仅提醒这些了。
如果你还有更多的时间,请务必阅读一下《提问的智慧》一文:
http://www.9238.net/stone/tiwendezhihui.htm
增补:
1,大家发完帖子都顺便看一看、看是不是发对了?
怎么有很多人发的帖子里边乱七八糟一堆乱码,然后就不管了?
不要一发完就跑到一边儿玩去了,等过一阵子再刷新一下,看有没有人回复。
2004.07.08 增补:
今天看《一切从游戏开始》,觉得其中这一段话不错,特来共享给 BBS 上的朋友们。(注原文中的文字一个都没有改,不知道为什么说是五个方法而下面却又列出6条。)
orginal link:http://bbs.chinaunix.net/viewthread.php?tid=300616&extra=page%3D3
1,请在你有空的时候,多去读一读置顶的精华目录里边的帖子,哪怕是你现在还没有碰到什么麻烦,也请尽量去读一读它。精华通常是以前讨论过的一些比较精彩的帖子,也许会对你的学习有所帮助。
2,平时有空了,多来几次这个论坛,碰到别人讨论某个自己比较熟悉的问题的时候,请尽量参与发言。通常情况,你自己认为是对的东西说出来以后都会有人反驳,在辩论的过程中你会发现自己对相关知识的认识会更进一层。
3,假如你碰到什么麻烦了,请尽量回忆一下,精华中是否有相应的内容?如果没有,再去发帖子。当然了,如果第一步你做的比较好的话,你基本上都会很快做出判断的。
4,置顶的帖子中有一些书籍,都是大家公认为比较出色的,如果你还有业余时间,请下载下来抽空阅读一下,对提高你的水平大有裨益。
5,当你通过论坛解决了自己的问题之后,不妨把解决的方法写出来,告诉大家。这样会很方便后来的人。还有可能被版主加为原创精华哦!
为了尽量不耽搁大家的时间,我就仅仅提醒这些了。
如果你还有更多的时间,请务必阅读一下《提问的智慧》一文:
http://www.9238.net/stone/tiwendezhihui.htm
增补:
1,大家发完帖子都顺便看一看、看是不是发对了?
怎么有很多人发的帖子里边乱七八糟一堆乱码,然后就不管了?
不要一发完就跑到一边儿玩去了,等过一阵子再刷新一下,看有没有人回复。
2004.07.08 增补:
今天看《一切从游戏开始》,觉得其中这一段话不错,特来共享给 BBS 上的朋友们。(注原文中的文字一个都没有改,不知道为什么说是五个方法而下面却又列出6条。)
CODE:
解决编程问题的五个方法
1. 把问题规范成一个普遍的形式,这样更容易和别人交流以及找相关资料.
2. 自己尝试找答案.
3. 在网上搜寻更好的答案.
4. 想一个方法来打败这个更好的答案.
5. 翻查教科书或是文献,从基本开始思考有没有最好的解.这些书能被选成教本一定有它的原因.
6. 研究问题的特殊情况, 也许会有别出心裁的巧妙方法.
2004.12.13 增补:1. 把问题规范成一个普遍的形式,这样更容易和别人交流以及找相关资料.
2. 自己尝试找答案.
3. 在网上搜寻更好的答案.
4. 想一个方法来打败这个更好的答案.
5. 翻查教科书或是文献,从基本开始思考有没有最好的解.这些书能被选成教本一定有它的原因.
6. 研究问题的特殊情况, 也许会有别出心裁的巧妙方法.
QUOTE:
《你的灯还亮着吗?》一书中写道:
当你为了寻找解决问题的方法而累得筋疲力尽时,不妨向后看看,看看你是不是已经迷路了?你的问题究竟是什么?
2005.01.29 增补:当你为了寻找解决问题的方法而累得筋疲力尽时,不妨向后看看,看看你是不是已经迷路了?你的问题究竟是什么?
QUOTE:
节选自 http://wiki.perlchina.org/main/show/brian%27s+Guide+to+Solving+Any+Perl+Problem
当你的程序碰到了问题时,请试着按照下面的思路处理一下:
这是个人问题
别老想着是你的代码。你可能觉得自己是个艺术家,但实际上就算是经验丰富的大师也会写出很多垃圾。每个人的代码都是垃圾,我的也是你的也是。要学着去喜欢 它。当你碰到问题的时候,你应该想:“噢,我写的垃圾代码出了点问题。”这说明你不再去责怪Perl。不应该变成个人性的问题。
个人责任感
如果你的代码出了问题,那仅仅是—— 你——的问题。你应该尽最大的力量自己解决。记住,每个人都有自己的代码,每个人都有自己的问题。自己的作业自己做,在麻烦别人之前先尽自己最大的努力。如果你老老实实地按照这个指南做了所有能做的事之后,依然不能解决问题,那么你已经尽力了,应该找别人来看看。
改变你做事的方法
改正之后不要再犯同样的错误。很可能是你写代码的方法错了,而不是你写的代码错了。改变你以前做事的方法,让生活更容易些。不要指望Perl来习惯你,因为这是不可能的。你要习惯Perl。它只是种语言,而不是种生活方式。
解决第一个问题先!
你从Perl中得到警告或者错误信息之后,先解决第一个,然后看Perl是否依旧报出其他错误。因为后续的错误很可能是由于第一个错误衍生而来的。
检查错误信息行号之前的代码!
Perl在错误已经发生的时候才报错,而不是在此之前。因此当Perl报出行号时错误已经发生了,而出错的地方是在这之前。看看错误行号之前的代码和表达式是否有问题。
那个变量值是你想的那样吗?
不要乱猜!在表达式中使用某个值的时候先检查它是否正确。世界上最好的调试器就是print。
print STDERR "The value is [$value]/n";
我用括号括住$value的原因是因为这样我可以看见开头和尾巴上是否有空格或者换行。
如果打印出来的结果不是你所期望的,那么移到前面几句,再来!找到这个值最后正确的位置。
你用的函数是正确的吗?
我写perl程序的时间已经不短了,可我还是几乎每天都要查perlfunc。有些东西我就是吃不准,而有时候我太缺乏睡眠了以至于没了常识,然后总搞不懂为什么sprintf()不打印到屏幕上。
你用小脚本测试过了吗?
如果你在尝试新的东西,或者觉得某一小段代码很奇怪,你可以写一个最短的程序运行一下这一个片断。这个方法把所有其他的因素都排除在外。如果测试没有问题,那说明问题可能不在这段代码里面。如果测试结果不对,那你大概就找到了你的问题所在。
你检查环境了吗?
有些东西是依赖环境变量的。你确定你的环境变量都是对的吗?程序运行的时候用到的环境变量是你现在看到的环境变量吗?记住有些CGI程序或长时间运行的程序可能用到的环境变量和你在shell里看到的不一样,尤其是在不同的机器上的时候。
Perl讲环境变量存储在%ENV里。如果你需要某个环境变量,就算是在测试的时候,也记住先提供一个默认值,如果它原来不存在的话。
你试过Google了吗?
你碰到一个问题的时候,说不定其他人也碰到过同样的。用Google Groups(http://groups.google.com)搜索看看是不是有人在comp.lang.perl.misc上贴过什么。在新闻组里 问问题的人和回答问题的人的差别在于,他们使用Google Groups的能力高底不同。
你和小熊说话了吗?
把你的问题大声说出来。把它变成语言。有几年我很愉快地和一个很优秀的程序员一起工作,他几乎能解决任何问题。当我被什么问题堵住的时候,我总去请教他, 跟他解释我的问题。几乎每次都是这样的情况:我说不到第三句,就停下来,说:“噢我明白了,没问题了。”他每次也都是这样。
你可能需要做太多次这样的事情,所以我推荐拿一个长毛绒玩具做为你的Perl临床诊断家,这样你就不会惹怒你的同事了。我的桌子旁边就有一只小熊,我每次都把我的问题解释给他听。每次当我自言自语的时候,我女朋友跟本都不会注意,她习惯了。
你认真检查自己了吗?
如果到了这一步你还没有解决的话,这说不定是个心理问题。可能你对某段代码有特别的感情,所以不想改掉它。说不定你觉得只有你是对的,别人都错了。当你有这种感觉的时候,你没有认真考虑bug的最大来源——你自己。不要放过任何东西,保证它们全都是对的。
当你的程序碰到了问题时,请试着按照下面的思路处理一下:
这是个人问题
别老想着是你的代码。你可能觉得自己是个艺术家,但实际上就算是经验丰富的大师也会写出很多垃圾。每个人的代码都是垃圾,我的也是你的也是。要学着去喜欢 它。当你碰到问题的时候,你应该想:“噢,我写的垃圾代码出了点问题。”这说明你不再去责怪Perl。不应该变成个人性的问题。
个人责任感
如果你的代码出了问题,那仅仅是—— 你——的问题。你应该尽最大的力量自己解决。记住,每个人都有自己的代码,每个人都有自己的问题。自己的作业自己做,在麻烦别人之前先尽自己最大的努力。如果你老老实实地按照这个指南做了所有能做的事之后,依然不能解决问题,那么你已经尽力了,应该找别人来看看。
改变你做事的方法
改正之后不要再犯同样的错误。很可能是你写代码的方法错了,而不是你写的代码错了。改变你以前做事的方法,让生活更容易些。不要指望Perl来习惯你,因为这是不可能的。你要习惯Perl。它只是种语言,而不是种生活方式。
解决第一个问题先!
你从Perl中得到警告或者错误信息之后,先解决第一个,然后看Perl是否依旧报出其他错误。因为后续的错误很可能是由于第一个错误衍生而来的。
检查错误信息行号之前的代码!
Perl在错误已经发生的时候才报错,而不是在此之前。因此当Perl报出行号时错误已经发生了,而出错的地方是在这之前。看看错误行号之前的代码和表达式是否有问题。
那个变量值是你想的那样吗?
不要乱猜!在表达式中使用某个值的时候先检查它是否正确。世界上最好的调试器就是print。
print STDERR "The value is [$value]/n";
我用括号括住$value的原因是因为这样我可以看见开头和尾巴上是否有空格或者换行。
如果打印出来的结果不是你所期望的,那么移到前面几句,再来!找到这个值最后正确的位置。
你用的函数是正确的吗?
我写perl程序的时间已经不短了,可我还是几乎每天都要查perlfunc。有些东西我就是吃不准,而有时候我太缺乏睡眠了以至于没了常识,然后总搞不懂为什么sprintf()不打印到屏幕上。
你用小脚本测试过了吗?
如果你在尝试新的东西,或者觉得某一小段代码很奇怪,你可以写一个最短的程序运行一下这一个片断。这个方法把所有其他的因素都排除在外。如果测试没有问题,那说明问题可能不在这段代码里面。如果测试结果不对,那你大概就找到了你的问题所在。
你检查环境了吗?
有些东西是依赖环境变量的。你确定你的环境变量都是对的吗?程序运行的时候用到的环境变量是你现在看到的环境变量吗?记住有些CGI程序或长时间运行的程序可能用到的环境变量和你在shell里看到的不一样,尤其是在不同的机器上的时候。
Perl讲环境变量存储在%ENV里。如果你需要某个环境变量,就算是在测试的时候,也记住先提供一个默认值,如果它原来不存在的话。
你试过Google了吗?
你碰到一个问题的时候,说不定其他人也碰到过同样的。用Google Groups(http://groups.google.com)搜索看看是不是有人在comp.lang.perl.misc上贴过什么。在新闻组里 问问题的人和回答问题的人的差别在于,他们使用Google Groups的能力高底不同。
你和小熊说话了吗?
把你的问题大声说出来。把它变成语言。有几年我很愉快地和一个很优秀的程序员一起工作,他几乎能解决任何问题。当我被什么问题堵住的时候,我总去请教他, 跟他解释我的问题。几乎每次都是这样的情况:我说不到第三句,就停下来,说:“噢我明白了,没问题了。”他每次也都是这样。
你可能需要做太多次这样的事情,所以我推荐拿一个长毛绒玩具做为你的Perl临床诊断家,这样你就不会惹怒你的同事了。我的桌子旁边就有一只小熊,我每次都把我的问题解释给他听。每次当我自言自语的时候,我女朋友跟本都不会注意,她习惯了。
你认真检查自己了吗?
如果到了这一步你还没有解决的话,这说不定是个心理问题。可能你对某段代码有特别的感情,所以不想改掉它。说不定你觉得只有你是对的,别人都错了。当你有这种感觉的时候,你没有认真考虑bug的最大来源——你自己。不要放过任何东西,保证它们全都是对的。
orginal link:http://bbs.chinaunix.net/viewthread.php?tid=300616&extra=page%3D3