欢迎光临散文网 会员登陆 & 注册

写代码时遇到问题该怎么办?

2023-08-14 02:18 作者:石皮幼鸟  | 我要投稿

平常还是有不少朋友写代码遇到问题了过来找我寻求帮助,我本身手上就有好几个项目,这下更是弄得主播我有点忙上加忙。

这里并不是说不欢迎大家过来问,但毕竟你手上的代码不是我本人写的,倘若我亲自来给你找问题,就得从头读一遍你的代码,极端复杂的情况下我怕是得花上一两个小时把你写的项目都给摸干净了。有一次,主播我帮一位同学解决代码bug,他用jsp写的工程实践项目,前后端不分离,代码里边一点注释都没有,硬生生让我花了八个小时才解决了他的问题,双方的时间都被浪费掉了,得不偿失。

有些时候,你拿一些我不会或者不熟的东西过来硬让我看,比如我万年没碰的Python啥的,或者让我现场硬给你写的c++ qt项目看点毛病出来,确实有点为难我。主播还是比较友好,大多情况下尽可能给你现场读代码憋点东西出来,最怕的就是主播自己花上几个小时也没解决掉你的问题,那就很恐怖了。

所以呢,既然代码是你自己写的,你应该对项目最熟悉,问题更多时候应该由你自己解决才对。主播没时间做视频教代码萌新们如何上手查错,就只好用写文章的方式分享点个人经验了。

第一步 阅读错误信息

一般情况下,咱们遇到的问题都是程序跑不起来,控制台各种报错。然而,这些报错信息大多情况下都是英文,很多朋友面对这一大串英文,那是一个字都看不进去,假装阅读一遍自我感动一番,终究是无从下手,光速把自己的项目打包,最后打开QQ微信把压缩包发给班上的大佬同学看两眼。

但是,即便你的英语能力实在是差到没边了,就必须得跟写代码说再见么?这就大错特错了。

咱们先来看看这张报错截图:

一大坨英文糊你脸上,确实很有冲击力。但是倘若此时我们仔细观察,正如图中我勾画的那样,就会看到几个我们比较熟悉的单词。

这就是今天我要教的第一个技巧——关键词提取法。我们可以只寻找我们认识的词组,特别是那些和我们所需要掌握的技术栈有关的常见词语。像这里我们就可以大体猜出,也许是MySQL的数据库连接出问题了。

这里又涉及到第二个技巧,迅速定位问题发生点。我们先在大脑中快速思考,项目的开发过程中究竟在哪些地方涉及到了MySQL。稍加思索,看来我们需要去看看配置文件当中的数据库相关信息是否正确,是不是用户名和密码输错了,还是说数据库路径写错了。

仔细一看,原来是端口号里少打了个数字,3306变成了306,这下豁然开朗了。

实际上我们日常开发遇到的问题会比上面这个要复杂许多,因此定位问题发生点也会变得相对复杂。这个时候就需要我们脚踏实地学习基础知识,积累开发经验,写代码多加注释,多犯错多查错,这样才能便于我们快速定位问题发生点。

 

第二步 搜索解决方案

有些时候难免会遇到报错信息真的一点都看不懂的情况,还有些时候其实报错信息里边讲的确实比较笼统。比如你前端用户token过期了,过不掉后端权限验证机制,控制台会直接朝你丢一句NETWORK ERROR 401之类的错误信息让你不知所措。这个时候就要尝试把错误信息往搜索栏里边丢了,绝大部分的问题其他人都遇到过,前辈们早就为你铺好路了,你大可放心走。

这里就不多做详细阐述了,如果你连怎样利用搜索引擎都不会,我相信这篇文章不是很适合你。更不要说什么网上大神提供的教程你一点都看不懂,你当前遇到的问题肯定是和你的开发水平相符合的,你只是想找个机会摆烂而已。

这边再推荐一个AI问答工具,由GitHub提供的Copilot Chat。如果你是大学生,这款工具是可以免费申请使用的。目前它只能在vscode 测试版里面使用,网上申请这个工具的教程比较多,这里也不细讲了。

貌似它还是GPT-3.5模型,有点傻傻的,不过想要解决平时的开发问题是足够的。不过遇到问题不要第一时间去问他,尽可能自己解决,不然你的能力根本不可能得到提升。我周围已经有一部分人太过于依赖这东西,把这玩意丢掉怕是连个Java的HelloWorld都写不出来。

 

第三步 善用查错工具

既然要远离AI,自己动手找错,那就得多多利用查错工具。

相信很多同学在刚刚接触编程语言的时候,老师就教过各位,要善用断点测试工具。

对某一行代码添加断点,可以在程序运行到这一步的时候停住,此时我们可以一行一行代码分步执行,或是进入更底层的代码分步执行,一探究竟。

Jetbrains系列开发集成工具使用断点测试需要点击右上角的小虫,而不是类似于播放图标的运行按钮

但要注意,如果你已经开始编写多线程的程序,这套查错方法就不是很管用了。

这个时候,老师又会教我们,要善用控制台输出语句。

控制台输出语句一般用两种用处,一是检查程序能不能执行输出语句之前的所有代码,二是通过输出语句看看某个变量的值是什么,为什么不能达成我们的目标。

这种方法很低级,却很有效。

当然,如果你写的是Java,有些时候你会发现,自己在测试代码时println不起作用了。

这是因为在springboot这种复杂系统下,println输出的位置是不定的。我们可以使用springboot封装好的日志Logger对象进行输出:

private static final Logger LOG = LoggerFactory.getLogger(当前的Java类名.class);

这里就不细说了,网上一堆教程。

 

第四步 请教他人

你可能会觉得我的行为很好笑。我一边说着希望你们不要来找我问问题,一边在告诉你们,请教他人也是想要解决问题时的一种不错的方法。

不过相信很多人应该看得出来,我在这里其实是想表达另一种观点——请在自己尝试解决问题且无路可走之后再来寻求他人的帮助,并且你要学会问问题。

什么叫学会问问题?直接打包项目文件发给别人看,直接把git库链接发出来,这叫会问问题吗?还是我之前说的那句话,这只是你为了摆烂寻找的借口罢了。

如果你真的遇到了问题,并且自己无法解决,必须寻求他人的帮助,你应该尝试定位问题发生点,把相关代码和报错截图发给想要询问的人,而不是一个几百MB超大压缩包糊人家脸上,你这么做只是在浪费他人的时间而已。

 

第五步 推翻重做

如果还是解决不了问题,也许确实是你的思路方法不正确。不管做什么事,写项目也好,做其他的事情也好,一定要有勇于承认自己是错的勇气,要有勇于把一切推翻重做的勇气。但这里并不是说要你无脑全部推翻重做,你还是得把握一下分寸。至于这个度该怎么掌控,还是得看你积累了多少经验,这不是光看我这一篇文章就能明白的事情。

综上,遇到问题别直接来问我,要问就问点有价值有意义的问题,我真的不想回答诸如“docker容器是什么?”“前后端跨域是啥?”之类的愚蠢问题了。

写代码时遇到问题该怎么办?的评论 (共 条)

分享到微博请遵守国家法律