前言

对于弱基础或者零基础的新朋友,讲讲关于编程的经验之谈

注意:此文完全是基于我的经验以及一些主观的思想,或许会有点unfriendly,并非完全适用所有人,请根据实际情况具体采纳。


提问

对,你没看错,你可能会想提问这种事情为什么还要人教?实际上提问也是一种学问,学会如何高效率的提问,对于提问者和被提问者来说都是十分有益的。

引用于《提问的智慧》

你可能曾经试过向大牛提问,但是这些提问往往石沉大海。于是你就纳闷了:这些大牛们平时在网上看都性格好好和蔼可亲的样子,怎么一向他们提问变得那么冷漠了?反差实在是太大了。
其实,出现这样的情况,往往不是对方耍大牌,而是你提问的方式错了。这篇文章让大家了解几个原则,让你更好地提问,并获得高回复率。

原则一、向适当的人提问适当的问题。

大牛们喜欢艰巨的任务和激发思考的好问题。如果你提的问题在百度知道都可以找到答案,就莫怪他们鄙视你了,你也应该反省一下,你自己为什么那么懒?这些懒人们在高手眼中就像是蛀虫一样,本来大牛们的时间就不多,与其回答你的傻问题,不如花时间去回答其他更有意义的问题。
(这里我深有体会,之前在开源社区中,我发现这个项目无法使用git去commit,然后傻乎乎的在群里问,就被大佬反呛一句:STFW,你应该学习git相关内容。深入了解后才知道,.gitignore里面包含了一些文件,以及这个项目的Makefile规定了不能被随便push)

原则二、提问前先搜一搜。

将你的问题放进搜索引擎过滤一遍,这其实不是什么难事,事实证明,90%的问题都可以用搜索引擎解决了,Bing 不行,用 Google,Google 不行用知乎。当然,我们不建议使用百度或是 CSDN。

Q:什么?怎么搜索?!
A:这里刚好有一篇《十大高明的 Google 搜索技巧》,拿去用吧。
Q:什么?链接在哪里?!
A:看原则二!

原则三、提问前先试试自己解决。

如果你的问题在网络上找不到答案,你也需要自行思考试图解决,解决不了,再向大牛们提问。大牛们喜欢看勤于思考、喜欢自己动手的人,不要以为你可以随便地忽悠大牛,大牛们的经验比你丰富,一眼就可以看得出你对待问题的态度。所以,认真地思考,准备好你的问题。

原则四、准确地描述问题。

问题的描述应该包含以下内容:
清晰的细节;
问题发生的背景;
提问前做过的调查研究及对其的理解;
提问前为确定问题而采取的诊断步骤;
注意:千万不要用什么「跪求」,「在线等」,「紧急」等之类哗众取宠的词语来吸引大牛的注意,在大牛们看来,这些问题根本不值得去回答。

原则五、问题解决后向大牛汇报一下结果。

别的不说,别人帮你解决了问题,你得向别人说声谢谢吧,这是最基本的礼节。
如果你厚道的话,也可以将解决问题的过程写下来,让以后有问题的人不要重蹈覆辙。这个举动不仅是在总结经验,而且是在为自己攒人品,大牛们看到你的总结会欣赏你的作为,以后就更加喜欢回答你的问题,说不定你以后还有机会和大牛们吃吃饭呢。
好吧,就说到这里,感谢 Eric S. Raymond,感谢知乎,感谢搜索引擎们。如果你能按以上的五个原则提问,这个世界真的会少很多的噪音,也少了很多抱怨,算是为人类造福了。

大人,时代变了

如今AI已经能够帮助大家解决一些基本的问题,本人实际测试ChatGPT通义千问KimiAI等工具,其中ChatGPT是精确度最高的,但是并不完全免费。

大佬三连

RTFM 是 Read The Fucking Manual 的意思,STFW 是 Search The Fucking Web 的意思。这两个字面意思看完其实就理解了,但会被缩成短语即说明其使用的频率之高。也说明了现代人类大部分人经常会问 Stupid 的问题,而不是先尝试过一些想法后再提问。
RTFM 与 STFW 包含着这样的意思:在寻求帮助之前,先尽自己最大的努力自行解决。因此,你可以在下面这两种场景时使用它:
RTFM 与 STFW 的思想不仅仅适用于 unix 和 linux 文化,它适用于任何方面,尤其是 IT 和互联网圈子。在寻求他人帮助之前先自行解决,不要把他人当成“活字典”使用,这应该成为最基本的礼貌。
未经过 RTFM 就寻求到的帮助往往也比较流于表面,难以获取真正有价值的内容。反过来,如果你 RTFM 后再寻求帮助,别人也更愿意解答你的问题,因为解答这样的问题可以引发更深入的思考、增长知识和见识,还可以帮助他人,何乐不为呢!

一个我们不愿意回答的提问如下:

Q: 我的程序段错误了, 怎么办?
A: 机器永远是对的.

如果你确实需要一些调试相关的帮助, 那怎么办? 你需要展示你为了解决问题而付出过的努力, 当我们看到了你的努力, 也会认可你受到的训练. 例如:

Q: 我的程序在xxx的情况下段错误了, 我进行了以下尝试

  • 首先我做了aaa, 现象是AAA, 我得到的结论是XXX
  • 然后我做了bbb, 现象是BBB, 我得到的结论是YYY
  • 我还做了ccc, 现象是CCC, 我得到的结论是ZZZ
    综上, 我觉得问题可能出在yyy, 但我接下来没有思路了, 我的分析和理解是否正确? 或者我忽略了什么吗?

关于编程语言

无论你用C/C++还是JAVA,Python等等,其实在思想上,都不会有太大的区别,只不过有些语言有着更好的特性,比如Python在数据处理方面十分强大,Kotlin用于安卓开发,以及neovim的配置文件用Lua编写,或者是说你需要使用的某些功能必须使用某一语言,比如使用虚幻五游戏制作只能用C++,但核心思想是差不多的。
如果你是一个编程小白,博主建议可以从Python开始入门。
原因如下:

  1. Python的语法简单,容易上手,并且更接近自然语言
  2. Python的社区非常活跃,学习成本低,学习资料丰富,社区活跃,可以快速找到答案
  3. Python的第三方库丰富,可以快速实现很多功能,如数据处理、机器学习、Web开发、图像处理等。

当你掌握了一门编程语言后,并且掌握了一些基础的编程概念和思想,上手其他语言速度就很快了。

关于学习

资源哪里找,

这是很多人问过我的问题,答案只有一个,STFW

  1. 视频课:Bilibili上有很多博主提供的免费课程比如:黑马程序员,尚硅谷等等,也有一些国外课程的翻译版本
  2. 文档:无论是看教程文档还是官方文档都一定比上课快,菜鸟教程,W3Cshool以及一些其他博主的教程,当然请注重官方文档,毕竟这是精确度最高的一手资料。
  3. 电子书,Github上可以找到很多高清的电子书PDF(非图片)也有制作精良图文并茂的书籍比如Hello算法
    当然论学习效率,官方文档>文档>电子书>视频课,论枯燥程度则是相反,适当取舍。

这里有一个开源文档归纳了相关资源CS自学指南

我需要干什么

  1. 基本的电脑使用,学会安装开发环境。
  2. 编程语言,上文提及,不再赘述。
  3. 一些基本的工具,或者需要用到的工具,比如IDE(集成开发环境),git(版本控制)。
  4. 操作系统,除了Windows还可以花时间学习Shell命令,无论用Linux,FreeBSD还是MacOS都适用。推荐计算机教育中缺失的一课
  5. 关于记录笔记:建议学习Markdown语法。
  6. 尝试去阅读英语文章,目前互联网仍然英语网页数量占大头,很多优秀的资源,课程都是用的英语。阅读英语文档刚开始一定会很痛苦,如果你坚持两个星期,坚持一个月,就会好很多了,不要用机翻!