如何科学使用Stack Overflow

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

那些还没有读过这本书的程序员,是时候买一本了。如果还在犹豫,那么先看下这篇文章,看看为什么离不开 stackoverflow。

提问的智慧

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

有时候,清晰描述一个问题,特别是技术问题没有想象的那么简单。提问从来就是一门学问,可惜很多人没有意识到这一点,或者没有给予足够的重视。或者,有的提问者根本不是抱着提问的态度来请求大家的帮助。所以我们会发现各种让人无法解答或者无心解答的问题:

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

去 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函数返回的字符串前后加上,你想想这样定义 say。

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

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

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

  • 函数是对象
  • 函数可以被赋给一个变量
  • 函数可以被定义在另一个函数中
  • 一个函数可以返回另一个函数
  • 可以把函数作为参数传递

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

可能的盲区

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

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

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

相见恨晚

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

  • 英语精确描述问题
  • 用 Google 去搜索

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

转自http://blog.jobbole.com/102810/

侵删.

  • 124
    点赞
  • 726
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
计算机科学类图书打包,mobi格式。 Apress Beginning 3D Game Development with Unity.mobi Apress Beginning BlackBerry 7 Development.mobi NoStarch IDA Pro Book 2nd.mobi OReilly PDF Explained.mobi OReilly Programming Scala.mobi Social Engineering.mobi Wrox Beginning Lua Programming.mobi Android\Android Programming Tutorials.mobi Android\Apress Android Recipes.mobi Android\Apress Pro Android Python with SL4A.mobi Android\OReilly Application Security for the Android Platform.mobi Android\Oreilly Learning Android.mobi Android\The Busy Coders Guide to Advanced Android Development.mobi Android\The Busy Coders Guide to Android Development.mobi Android\Wiley App Inventor for Android.mobi Apple\101024Apple Pro Training Aperture 3.mobi Apple\101102Apple Pro Training Series AppleScript 1-2-3.mobi Apple\Apple Pro Training Aperture 3 - Organize Perfect and Showcase Your Photos.mobi Apple\Apple Pro Training Series AppleScript 1-2-3.mobi Database\Apress Access 2010 Development.mobi Database\Apress Expert Oracle Exadata.mobi Database\Apress Expert Oracle GoldenGate.mobi Database\Apress Expert PL SQL Practices for Oracle Developers and DBAs.mobi Database\Apress Oracle PLSQL Recipes - A Problem-Solution Approach.mobi Database\Apress Pro Oracle Database 11g Administration.mobi Database\Apress Troubleshooting Oracle Performance.mobi Database\Oracle Internals - Tips Tricks and Techniques for DBAs.mobi Database\OReilly High Performance MySQL.mobi Database\OReilly SQL and Relational Theory 2nd.mobi Database\OReilly SQL Cookbook.mobi Database\OReilly SQL Pocket Guide 3rd.mobi Database\Pragmatic SQL Antipatterns Avoiding the Pitfalls of Database Programming.mobi Flash\FriendsofED AdvancED ActionScript 3.0 Design Patterns.mobi Flash\OReilly Automating ActionScript Projects with Eclipse and Ant.mobi Flash\OReilly Quick Guide to Flash Catalyst.mobi iOS_Mac\Addison Learning Cocos2D.mobi iOS_Mac\Addison Programming in Objective-C 3rd.mobi iOS_Mac\Apple Pro Training Aperture 3 - Organize Perfect and Showcase Your Photos.mobi iOS_Mac\Apple Pro Training Series AppleScript 1-2-3.mobi iOS_Mac\Apress Beginning OSX Lion Apps Development.mobi iOS_Mac\Apress Learn cocos2d Game Development with iOS 5.mobi iOS_Mac\Apress Migrating to iPhone and iPad for dotNET Developers.mobi iOS_Mac\Apress Pro iOS Apps Performance Optimization.mobi iOS_Mac\iPhone Programming The Big Nerd Ranch Guide.mobi iOS_Mac\OReilly Basic Sensors in iOS.mobi iOS_Mac\OReilly Developing Enterprise iOS Applications.mobi iOS_Mac\OReilly iOS 4 Programming Cookbook.mobi iOS_Mac\OReilly Mac OS X for Unix Geeks Leopard 4th.mobi iOS_Mac\Pragmatic iOS Recipes.mobi iOS_Mac\Pragmatic Mac Kung Fu.mobi iOS_Mac\Wrox Beginning iOS Game Development.mobi iOS_Mac\Wrox Building Applications for Mac App Store.mobi Lisp\NoStarch Land of Lisp - Learn to Program One Game at a Time.mobi Perl\OReilly Learning Perl 6th.mobi Perl\OReilly Perl Pocket Reference.5th.mobi PHP\OReilly Building on SugarCRM.mobi PHP\OReilly Web Database Applications with PHP and MySQL 2nd.mobi PHP\Packt WordPress 3 Plugin Development Essentials.mobi Python\Addison Python Standard Library by Example, the Developers Library.mobi Python\Addison Python Web Development with Django.mobi Python\Apress The Definitive Guide to Django - Web Development Done Right.mobi Python\OReilly Learning Python 4th.mobi Python\OReilly MongoDB and Python.mobi Python\OReilly Programming Python 3rd.mobi Python\OReilly Python and AWS Cookbook.mobi Python\OReilly Python for Unix and Linux System Administration.mobi Python\OReilly Social Network Analysis for Startups.mobi Python\Packt Django 1.1 Testing and Debugging.mobi R\NoStarch The Art of R Programming.mobi R\OReilly Data Mashups in R.mobi R\OReilly Machine Learning for Email.mobi R\OReilly Parallel R.mobi SAP\McGraw SAP Project System Handbook.mobi SAP\OReilly Microsoft .NET and SAP (Pro-Developer).mobi SAP\Sams Teach Yourself SAP in 24 Hours 4th.mobi StackOverflowE-Books\stack_overflow_ajax.mobi StackOverflowE-Books\stack_overflow_android.mobi StackOverflowE-Books\stack_overflow_asp.net.mobi StackOverflowE-Books\stack_overflow_c.mobi StackOverflowE-Books\stack_overflow_clojure.mobi StackOverflowE-Books\stack_overflow_cocoa.mobi StackOverflowE-Books\stack_overflow_css.mobi StackOverflowE-Books\stack_overflow_database.mobi StackOverflowE-Books\stack_overflow_delphi.mobi StackOverflowE-Books\stack_overflow_django.mobi StackOverflowE-Books\stack_overflow_drupal.mobi StackOverflowE-Books\stack_overflow_erlang.mobi StackOverflowE-Books\stack_overflow_f#.mobi StackOverflowE-Books\stack_overflow_flash.mobi StackOverflowE-Books\stack_overflow_flex.mobi StackOverflowE-Books\stack_overflow_git.mobi StackOverflowE-Books\stack_overflow_haskell.mobi StackOverflowE-Books\stack_overflow_html.mobi StackOverflowE-Books\stack_overflow_html5.mobi StackOverflowE-Books\stack_overflow_iphone.mobi StackOverflowE-Books\stack_overflow_jquery.mobi StackOverflowE-Books\stack_overflow_linq.mobi StackOverflowE-Books\stack_overflow_linux.mobi 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值