为何离不开 Stackoverflow

做为一名程序员,若是没有听过 Stackoverflow,那么你最好去面壁思过一下。程序员最须要阅读的一本编程书籍(其实编程书留下这本就够了!):html

那些尚未读过这本书的程序员,是时候买一本了。若是还在犹豫,那么先看下这篇文章,看看为何离不开 stackoverflow。java

提问的智慧

当你拋出一个技术问题时,最终是否能获得有用的回答,每每取决于你所提问和追问的方式。 --Eric S. Raymondpython

有时候,清晰描述一个问题,特别是技术问题没有想象的那么简单。提问历来就是一门学问,惋惜不少人没有意识到这一点,或者没有给予足够的重视。或者,有的提问者根本不是抱着提问的态度来请求你们的帮助。因此咱们会发现各类让人没法解答或者无意解答的问题:git

为了不上面的问题被关闭或者修改,放一张图片在这里,来体会下这种狗屎问题:express

去 segmentfault 的未回答题目中随便就能找到一堆这样的问题,因此不少人显然并无提问的智慧或者没有很好的态度。Raymond 和 Rick Moen 写了一份经典的文章 How To Ask Questions The Smart Way专门来描述如何提问,这篇文章被翻译成各国文字,留传很广,能够在这里找到中文版。Stackoverflow 和 Segmentfalut 也给出了关于提问的建议:编程

在 Stackoverflow 能够看到太多经典的问题,咱们能够从这些问题中学习如何去提问,如何和答题者沟通。当你看习惯了stackoverflow 上面的问题,提问时就会不自觉去模仿,从而避免问出无脑问题。下面是提问时最须要注意的几个问题:

  • 问搜索引擎没有满意答案(google 起码过四页)的问题

  • 问那些本身没法独立解决,已经作过不少尝试的问题

  • 尽可能清楚地描述问题:良好的排版,代码,错误提示,图片等

  • 让你的问题对别人有帮助

  • 问题要有肯定的答案,不要有太多的主观性

不一样的方案

不少时候咱们但愿可以找到一个解决办法,可是在 stackoverflow 上,常常会有意外的收获。你可能会看到对一个问题不一样的解决方案,甚至包括对这些解决方案的比较。

假设如今你想知道 python 中如何调用外部命令,好比 ls -l 来打印某个目录下面的文章。Google一下 python call system command,第一条就是stackoverflow 上面的一个相关问题:Calling an external command in Python. (google技术问题,基本都会显示 stackoverflow 相关问题)。

而后在这个问题下面,有人总结了调用外部命令的几种方法:

  • os.system()

  • os.popen()

  • subprocess.popen()

  • subprocess.call()

  • subprocess.run()

而且还对每一个方法作了介绍,你能够选择适合本身应用场景的方法。再好比这个问题 How to check whether a file exists using Python?,介绍了 python 中检查文件是否存在的不一样方法。

工具的使用

有许多强有力的工具能够帮咱们更好地研究问题,你可能知道gdb调试工具,可能知道python的timeit时间监控模块,可是你不知道那些本身不知道的工具。不少时候,当第一次知道某个工具时,咱们心中会产生相见恨晚的感受。然而,心仪的趁手工具老是那么可遇不可求。

在 stackoverflow,每个问题答案或者评论中均可能会有一些好的工具,你总有机会发现那些遗落在字里行间的优秀工具。

下面列出我发现的一些不错的工具:

下面为 Regex 101 的一个简单示例:

思考的过程

不少时候,遇到一个问题,咱们根本无从下手,不知道朝哪一个方向思考。可是经过 stackoverflow,咱们能够轻易知道具体的解决方案,有时候甚至还能知作别人面对这个问题时候是怎么思考的。

假设你想利用装饰器来完成一个任务,即在下面say函数返回的字符串先后加上<b><i>,你想一想这样定义 say。

@makebold
@makeitalic
def say():
   return "Hello"

每次调用 say 返回 <b><i>Hello</i></b>。可是要如何实现 makebold 和 makeitalic 呢,这是一个问题。在 stackoverflow 上,有大牛会直接告诉你答案,并扔给你一个装饰器的文档连接。可是还有大牛会把本身的思考过程,把本身对装饰器的理解详细地告诉你,让你深刻去理解装饰器机制。

针对上面的这个问题,有一个答案得到了 3000 多赞,一步步告诉你们如何解决问题。首先告诉咱们python中函数有什么特色:

  • 函数是对象

  • 函数能够被赋给一个变量

  • 函数能够被定义在另外一个函数中

  • 一个函数能够返回另外一个函数

  • 能够把函数做为参数传递

而后开始解释什么是装饰器:其实就是封装器,可让咱们在不修改原函数的基础上,在执行原函数的先后执行别的代码。接下来手工实现了一个简单的装饰器原型,紧接着引入 python 中的装饰器语法。最后还列出了一些装饰器的高级用法,包括给装饰器传递参数等。读完整个答案,必定能对装饰器有较深的理解,而且知道理解装饰器的思考过程。这样,沿着这条思考的路径,你本身就能够推导出装饰器的使用方法。

可能的盲区

没有问题要提问时也能够时常逛一逛 stackoverflow,浏览一些投票比较多的问题,看看别人的回答。在这个庞大的知识库中,你极可能会发现本身的一些认知盲区,发现一些本身从未关注过的内容。

我就发现了一些比较有意思的问题,好比:

我整理了一份 Python 的高质量问题清单,放在这里以供时常翻阅。

相见恨晚

那么怎么才能找到 stackoverflow 呢,两个建议:

  • 英语精确描述问题

  • 用 Google 去搜索

只要你不是第一个碰见某个技术问题的人,你基本就会在 stackoverflow 找到相同或者相似的问题。早日碰见,早日喜欢上 stackoverflow,你会发现生活是如此惬意。

博客地址

更多阅读

玩转 Stack Overflow 之提问篇
7 Strace Examples to Debug the Execution of a Program in Linux
How can I make a chain of function decorators in Python?

相关文章
相关标签/搜索