初学者说“开发好难”,“完全无法理解”,其实不是因为他遇到的问题很难,而是他没有掌握一个良好的搜索答案和提问的方式。
今天讲的搜索和提问的问题,我个人认为是开发过程中最最最重要的问题,因为它是打开其他所有内容的钥匙。掌握了钥匙,世界的大门就会向你敞开。
搜索引擎 && 搜索关键词
我们在之前的教程中提到过多次,第一个问题,搜索引擎
!选择什么!谷歌或者必应
,国外谷歌,国内必应,不要用百度不要用百度不要用百度!记住这个,你就成功了一半了,剩下的一半就是搜索关键词
。
我们现在遇到的问题搜索都很直白,往往一两次搜索就可以得到答案,比如“Git 版本回退”、“C# 读写txt文档”,即“使用工具 使用内容”这样的关键词。
但有时也会遇到一些比较复杂、比较详细的问题,需要我们经过认真的思考和阅读才能得到答案,在这里我举几个典型的例子。
概念性的问题
比如“CDN”、“死锁”、“事务”。概念性问题最重要的就是理解其本质,1.为什么需要这样做,2.它是如何实现,3.可以根据原理自己写一个简单的实现。至于有哪些工具(框架)可以完成它,可以关注一两个,但不必深入学习,记住概念,需要用的时候再去学习即可。
概念的学习,可以读百度百科的第一句话,但不要指望通过百度百科看明白。毕竟“百科”,就是科普向的,我们应该看更专业的文章。
看一篇文章看不懂,就放弃它、关掉,看下一篇。有些作者可能讲得比较晦涩,找到一篇自己可以理解的即可。
有时候可能会需要结合几篇文章的内容才能看懂。
有时候一个概念可能会引申出更多的概念,需要有耐心,一个个去搞清楚,同时搞清楚它们之间的关系。
只知道实现结果的问题
比如“实现XXX数据的统计与导出”、“绘制XXX数据的曲线图”,这部分问题需要耐心的拆解成不同的问题。
以“绘制XXX数据的曲线图”为例,将其拆解为:
1.根据查询条件,查询XXX数据;
2.在某种平台(桌面端/移动端/Web端)下绘制曲线图。
其中1是需要提供至少1个接口,根据业务编写接口。
2则需要根据平台和采用技术的不同,搜索不同的关键词,如:“WPF 曲线图(折线图)”、“ASP .NET 曲线图”等等。根据搜索结果,找到符合要求的绘制图形的框架。“符合条件”包括,可以1.满足业务需求,2.支持当前我们所使用的开发语言和框架,3.确认框架是否付费,如果付费价格是否可接受,4.框架可以满足后续业务的修改与更新需求,5.框架的更新速度与维护情况佳,最好项目开发活跃、社区活跃等等。
然后阅读该框架的“快速入门”篇一边开发一边学习。
细节问题
比如,运行报错、发布报错。这些问题没必要去记忆,遇到了顺着问题解决即可。如果觉得应该是个常见错误,而且比较难解,可以写篇博客记录一下,下次再遇见可以直接查博客来操作。
1.有时候有错误日志,复制粘贴去查,根据搜索结果,有时需要修复环境问题,有时需要修改代码。
2.有时候可能没有错误日志,或者错误日志的错误提示非常简短、奇怪、无法理解,比如下面这种情况:
这是ASP .NET Core在发布站点后,运行失败的报错内容,报错内容几乎没有意义,此时我们需要先找到更详细的错误内容
,才能对症下药。
我们可以:
(1)设置IIS日志,并通过IIS日志分析器查看日志;
(2)设置站点返回报错信息(默认发布状态不会显示报错信息),查看错误并解决;
(3)远程调试。
遇到这个问题的人很少的问题
这种情况比较少,但确实有。
有时候是中文资料匮乏,则必须去查英文资料。
有时候是英文资料都比较少。比如Xamarin的一些技术点,可能就需要曲线求国,去看看android原生的写法,再结合C#进行改写。
有时候搜索不到答案,可以:
1.在官网
、Stack Overflow
、CSDN
这些网站上提问;
2.根据官方公布的技术支持邮箱,写邮件提问;
3.在相关的开发群中问问有没有人遇到类似的问题;
4.如果是开源的项目,可以阅读源代码,自己调试。
再比如,某些硬件的SDK,也可能存在这种问题。这种时候,考虑联系厂商、技术支持,最好可以联系到一线开发。把问题完整的表述出来,记录好错误日志,便于沟通。如果在这方面反馈进展不好,可能就需要反编译SDK来看看了。
一些技巧
1.有时第一次的关键词不能直接得到答案,需要根据关键词搜索的答案,不断修改关键词,找到最终的答案。
2.看博客注意看日期
,越新的越好,超过5年以上的选择性看(观念、技术可能已过时),超过10年的可以关掉了。
提问
“提问”这个问题,看起来很简单,但是往往会出现问题。
“提问”可以参考我们写作文,语文老师怎么教的?时间地点人物做什么,你得描、述、清、楚、啊!
错误的姿势:
谁会 谁懂 XXX
大神是怎么做的(对方向你伸手要代码)
这个代码怎么改(对方向你扔出了一片错误代码)
XXX怎么理解(某个语言、框架或者其他大范围的概念)
......
首先,如图所示:
你要相信日常开发中的大部分问题,一定有人踩过,一定可以搜索到解决方案或者替代解决方案。
再来,真的要问问题就好好问,现阶段不知道怎么问问题,我们就先去借鉴、参考一下呗————————github部分大型开源项目的issue是有issue的模板的。
比如vscode的Bug反馈模板:
<!-- Please read our Rules of Conduct: https://opensource.microsoft.com/codeofconduct/ -->
<!-- Please search existing issues to avoid creating duplicates. -->
<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed: https://code.visualstudio.com/insiders/ -->
<!-- Use Help > Report Issue to prefill these. -->
- VSCode Version:
- OS Version:
Steps to Reproduce:
1.
2.
<!-- Launch with `code --disable-extensions` to check. -->
Does this issue occur when all extensions are disabled?: Yes/No
ABP框架的Issues模板:
### Documentation
Please check the official documentation before asking questions: https://aspnetboilerplate.com/Pages/Documents
### GitHub Issues
GitHub issues are for bug reports, feature requests and other discussions about the framework.
If you're creating a bug/problem report, please include followings:
* Your Abp package version.
* Your base framework: .Net Framework or .Net Core.
* Exception message and stack trace if available.
* Steps needed to reproduce the problem.
Please write in English.
### Stack Overflow
Please use Stack Overflow for your questions about using the framework, templates and samples:
https://stackoverflow.com/questions/tagged/aspnetboilerplate
Use aspnetboilerplate tag in your questions.
上面都是标准的关于bug的提问姿势,是不是瞬间觉得思路清晰了?总结一下,问问题要酱紫:
1.详细的出错、报错的问题
系统环境是_____,使用的框架、产品是_____,其版本是_____。
你的需求是_____,报错代码是:
//贴出你的代码
//一小段,关键的出错代码+功能代码
代码贴多少,经常看stackover flow就可以很清晰,比如:onServiceConnected not called after enable my AccessibilityService 。
报错的内容是_____。(报错内容可能很长,可以全部展示,做好markdown)。
(可选)如果你有尝试搜索、修复这个问题,可以贴上进展:
我检索了_____(关键词),查阅了文章A(链接)、文章B(链接),把代码修改为_____,依然出现问题_____。
这样做的目的是让看的人明白你已经尝试了哪些内容,在帮助你的时候可以划掉这个选项。
2.详细的功能、性能问题
基本信息:我使用_____开发语言_____框架,开发环境是_____。
大体内容:我在完成_____功能,在写_____的时候出现了问题(问题详细内容或者问题截图)。
详细问题:我尝试了_____Plan A,出现了_____问题(截图、详细问题内容)。尝试_____Plan B,出现了_____问题(截图、详细问题内容)。
寻求解决:Plan A或者Plan B的问题应当怎么解决?或者是否存在Plan C?
3.概念性问题
我不太能理解_____大概念中的_____小概念,我的理解思路是_____。不知道这样理解有没有问题?
如果是新概念,处于完全不了解的情况,应该自己找博客学习,或者问人,也应该请对方扔链接,看了有不懂的地方再问。