如何面对问题
WARNING
请仔细阅读本节,在你遇到问题时,这些内容可能会很有用。
本文改编自 MaxXing 编写的《编译原理》实践文档相关章节。
面对问题/完成大作业的态度
在完成大作业,乃至你日常编码的过程中,你可能会遇到很多问题,比如:
- 不清楚某个工具的用法;
- 不清楚某个功能实现的思路;
- 编译/链接代码时出现警告或报错;
- 运行程序时段错误;
- 程序输出的结果和你的预期相去甚远;
- 其他各种各样的问题……
与其说,遇到问题是一件很正常的事,不如说,没遇到问题才是一件不正常的事情。
我们希望你在完成课程实践时,不要:
- 抱着应付的态度,遇到问题时随便改改自己的代码,能过测试用例就万岁了;
- 发现随便改改也没用,于是直接找大佬/助教/老师求助,不加任何思考;
- 求助的时候问一些相当没价值的问题,比如: “我的程序出错了,怎么办”;
- 想象一下你的电脑小白朋友,三天两头来问你 “我电脑坏了,怎么办?”,同时完全不说到底发生甚摸事了,你还能否保持低血压的健康生活;
- 在某些国内网站上一通乱搜,找到了另一些国内网站上的低质量内容,大抄特抄;
然后丝毫没有意识到,自己在几天后遇到的某个问题就是因为抄了垃圾代码而导致的
- 拖到最后才开始做课程实践,发现自己做不完了,疯狂求助大佬/助教/老师;
你应该:
- 不放过任何一个问题,包括编译代码时的警告。
- 遇到问题时对背后的原因多加思考,找出它的深层原因;
- 独立解决问题,同时不要怕尝试,不要怕 debug,你会在这个过程中学到相当多的东西;
- 遇到自己解决不了的问题: STFW,RTFM,RTFSC。搜索引擎和文档/手册里通常能找到绝大部分问题的答案,如果没有,源码里一定会有;
- 学会摆脱对百度的依赖,在 Google/Bing 上用英文搜索问题。中文互联网什么样相信各位心中自有 B-tree。
TIP
如果你在解决问题的过程中实在坚持不下去了,听听尼尔叔叔的鼓励。
如何提问
助教,我的解释器崩溃了,怎么办?
助教听了这个问题,也崩溃了,怎么办?
请不要再这样提问了,这种问题没有任何价值。以及,有些问题在网络上稍微搜索一下就可以解决,或者哪怕同学们稍微亲手尝试一下也可以解决,比如: “C++ 的成员类型可以是引用吗?” 与其花时间问别人,你不如自己直接写份源代码,然后让编译器告诉你答案。
我们希望大家:
我的解释器在输入为 XXX 的时候出现了 YYY 问题 (附完整的报错信息或截图)。
我尝试 AAA,发现 BBB,我认为这代表 CCC。
我还尝试 DDD,发现 EEE,我认为这代表 FFF。
综上所述,我觉得问题可能出在 GGG,但之后我就没思路了,请问我的分析是否正确?问题的具体原因是什么呢?
问答墙
TIP
正在施工中
助教不会回答/会回答的提问
助教不会回答:
- 和课程无关的提问。
- 任何不加思考就提出的提问。
- 能在文档/问答墙里找到的提问。
- 可以通过你自己尝试/调试解决的提问。
助教会回答:
- 关于评测平台/实验框架存在的问题的提问。
- 关于反馈实验设计不合理的提问。
- 详细描述出错原因,附带解决问题的尝试,同时带有自己思考的提问。
为什么要设置这一节
为什么设置这一节,并把它放在开头?
- 都是血的教训。
- 以前的课不光折磨同学们,也折磨助教啊😭。