Stackoverflow说明书箱:essential-copying-and-pasting-from-stack-overflow
原文与翻译见 : 点击打开链接
提问的智慧
当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。 —— Eric S. Raymond
有时候,清晰描述一个问题,特别是技术问题没有想象的那么简单。提问从来就是一门学问,可惜很多人没有意识到这一点,或者没有给予足够的重视。或者,有的提问者根本不是抱着提问的态度来请求大家的帮助。
提问时最需要注意的几个问题:
  • 问搜索引擎没有满意答案(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,每一个问题答案或者评论中都可能会有一些好的工具,你总有机会发现那些遗落在字里行间的优秀工具。
下面列出我发现的一些不错的工具:
truss/strace:跟踪进程执行时的系统调用和所接收的信号,strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。(来自问题:Why is reading lines from stdin much slower in C++ than Python?)
vprof:一个可视化工具,可以分析 Python 程序的特点,比如运行时间,内存使用等。(来自问题:How can you profile a Python script?)
Regex 101:一款在线的正则表达式辅助工具,可以帮助理解正则表达式的含义,方便调试正则表达式以及做一些简单的尝试。(来自问题:Learning Regular Expressions)
下面为 Regex 101 的一个简单示例:
思考的过程
很多时候,遇到一个问题,我们根本无从下手,不知道朝哪个方向思考。但是通过 stackoverflow,我们可以轻易知道具体的解决方案,有时候甚至还能知道别人面对这个问题时候是怎么思考的。
假设你想利用装饰器来完成一个任务,即在下面say函数返回的字符串前后加上,你想想这样定义 say。
1
2
3
4
@makebold
@makeitalic
def say():
return "Hello"
每次调用 say 返回 Hello。但是要如何实现 makebold 和 makeitalic 呢,这是一个问题。在 stackoverflow 上,有大牛会直接告诉你答案,并扔给你一个装饰器的文档链接。但是还有大牛会把自己的思考过程,把自己对装饰器的理解详细地告诉你,让你深入去理解装饰器机制。
针对上面的这个问题,有一个答案获得了 3000 多赞,一步步告诉大家如何解决问题。首先告诉我们python中函数有什么特点:1)函数是对象2)函数可以被赋给一个变量3)函数可以被定义在另一个函数中4)一个函数可以返回另一个函数5)可以把函数作为参数传递
然后开始解释什么是装饰器:其实就是封装器,可以让我们在不修改原函数的基础上,在执行原函数的前后执行别的代码。接下来手工实现了一个简单的装饰器原型,紧接着引入 python 中的装饰器语法。最后还列出了一些装饰器的高级用法,包括给装饰器传递参数等。读完整个答案,一定能对装饰器有较深的理解,并且知道理解装饰器的思考过程。这样,沿着这条思考的路径,你自己就可以推导出装饰器的使用方法。
可能的盲区
没有问题要提问时也可以时常逛一逛 stackoverflow,浏览一些投票比较多的问题,看看别人的回答。在这个庞大的知识库中,你很可能会发现自己的一些认知盲区,发现一些自己从未关注过的内容。
我就发现了一些比较有意思的问题,比如:
  • Print in terminal with colors using Python?
  • What is a metaclass in Python?
  • What is your most productive shortcut with Vim?
我整理了一份 Python 的高质量问题清单,放在这里以供时常翻阅。
相见恨晚
那么怎么才能找到 stackoverflow 问题,两个建议:英语精确描述问题、用 Google 去搜索。
只要你不是第一个遇见某个技术问题的人,你基本就会在 stackoverflow 找到相同或者类似的问题。

Stackoverflow使用相关推荐

  1. stackoverflow上一个最会举例子的专家

    https://stackoverflow.com/ Premraj是stackoverflow上一个一个最会举例子的专家,我特意收集了他的一些有趣的举例: Java弱引用最精彩的解释 https:/ ...

  2. 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。

    by Angelos Chalaris 通过安吉洛斯·查拉利斯(Angelos Chalaris) 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要. (How to get ...

  3. Stackoverflow 高赞答案,为什么牛逼的程序员都不用 “ ! = null ' 做判空

    欢迎关注方志朋的博客,回复"666"获面试宝典 为了避免空指针调用,我们经常会看到这样的语句. ... if (someobject != null) {someobject.do ...

  4. StackOverflow上面 7个最好的Java答案

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 StackOverflow发展到目前,已经成为了全球开发者的金矿. ...

  5. Stackoverflow 高赞答案,为什么牛逼的程序员都不用 “ ! = null ' 做判空?

    来源:blog.csdn.net/lizeyang/article/details/40040817 为了避免空指针调用,我们经常会看到这样的语句. ... if (someobject != nul ...

  6. 为什么 StackOverflow 上的代码片段会摧毁你的项目?

    昨天公司里碰到一件令人哑然失笑的事情.帮朋友公司做的一个项目,做SIT测试的时候发现一些bug,仔细查了下原因,原来是因为当初觉得这个项目比较简单,交给了几个新入职的新丁,也算是给他们练练手,结果其中 ...

  7. StackOverflow热帖:Java整数相加溢出怎么办?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Aaron_涛 来源 | blog.csdn. ...

  8. StackOverflow 上面最流行的 7 个 Java 问题!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 原文:https://dwz.cn/Boy5tcHJ 译 ...

  9. IE Web 开发支持将迁移到 StackOverflow

    http://stackoverflow.com/questions/tagged/internet-explorer 转载于:https://www.cnblogs.com/Kazaf/p/4122 ...

  10. stackoverflow上Java相关回答整理翻译

    原文链接:https://github.com/giantray/stackoverflow-java-top-qa stackoverflow-Java-top-qa 对stackoverflow上 ...

最新文章

  1. 大数据目标检测推理管道部署
  2. PostgreSQL学习手册(五) 函数和操作符
  3. 分支-19. 阶梯电价
  4. arthas 查看哪个方法调用最耗时_Arthas实战
  5. vlc学习计划(5)--VLC程序宏及线程分析
  6. PHP设计模式——策略模式
  7. 《软件需求》学习笔记
  8. android view绘制速度,关于android ui的优化 view 的绘制速度
  9. 怎样增加Dave 英语学习小组
  10. 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结
  11. 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光等...
  12. cacti中个别流量图超过80M不显示解决办法
  13. char*转换为jstring
  14. cmd安装pip问题。
  15. 一文掌握汽车总线CAN帧报文
  16. 怎么把视频中的人声和背景伴奏分离?
  17. 计算机视觉传达论文库,计算机图形视觉传达论文
  18. win10更改用户账户控制设置方法
  19. 泰勒公式--泰勒多项展开以及应用
  20. 妞,你给爷听好了...

热门文章

  1. 乡巴佬GHOST WIN7 SP1 装机版旗舰版(32位)2013 06
  2. [DIY原创]万年历
  3. 【FPGA实例】基于FPGA的DDS信号发生器设计
  4. 粒子群优神经网络优化
  5. 通过OpenCV库实现基于FMM的图像修复概述
  6. 技术系统进化法则包括_技术系统进化法则_十六种典型创新方法
  7. FBI树——递归练习
  8. python 查看kafka发送的消息格式及消息内容
  9. java中Keytool生成证书
  10. 代驾小程序源码开发这3大功能不可少