stackoverflow重要性

2023-10-08 23:59
文章标签 重要性 stackoverflow

本文主要是介绍stackoverflow重要性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  

  (主页君强势插入,上图是一张恶搞图,之前有网友没看懂这张,特别说一下)

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

  提问的智慧

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

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

  java正则表达式问题?

  sla响应时间是指什么?

  ATL类与一般的类继承有什么区别

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

  

  去 segmentfault 的未回答题目中随便就能找到一堆这样的问题,所以很多人显然并没有提问的智慧或者没有很好的态度。Raymond 和 Rick Moen 写了一份经典的文章 How To Ask Questions The Smart Way (http://www.catb.org/~esr/faqs/smart-questions.html#translations)专门来描述如何提问,这篇文章被翻译成各国文字,留传很广,可以在这里找到中文版。Stackoverflow 和 Segmentfalut 也给出了关于提问的建议:

  Help Center > Asking

  How to Ask

  How do I ask a good question?

  什么样的问题才是受欢迎的

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

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

  问那些自己无法独立解决,已经做过很多尝试的问题

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

  让你的问题对别人有帮助

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

  不同的方案

  很多时候我们希望能够找到一个解决办法,但是在 stackoverflow 上,经常会有意外的收获。你可能会看到对一个问题不同的解决方案,甚至包括对这些解决方案的比较。

  假设现在你想知道 python 中如何调用外部命令,比如 ls -l 来打印某个目录下面的文章。Google一下 python call system command,第一条就是stackoverflow 上面的一个相关问题:Calling an external command in Python. (http://stackoverflow.com/questions/89228/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?(http://stackoverflow.com/questions/82831/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 ?)

  Regex 101:一款在线的正则表达式辅助工具,可以帮助理解正则表达式的含义,方便调试正则表达式以及做一些简单的尝试。(来自问题:Learning Regular Expressions)

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

  

  思考的过程

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

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

  @makebold

  @makeitalic

  def say():

  return"Hello"

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

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

  函数是对象

  函数可以被赋给一个变量

  函数可以被定义在另一个函数中

  一个函数可以返回另一个函数

  可以把函数作为参数传递

  然后开始解释什么是装饰器:其实就是封装器,可以让我们在不修改原函数的基础上,在执行原函数的前后执行别的代码。接下来手工实现了一个简单的装饰器原型,紧接着引入 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,你会发现生活是如此惬意。

  专栏作者简介( 点击 → 加入专栏作者 )

  selfboot:热爱计算机技术的学生...书中寻求心灵的平静...selfboot,自启动,只有自己能启动自己所以不要寄希望于别人,自我蜕变展翅飞翔吧!

  打赏支持作者写出更多好文章,谢谢!

  【今日微信公号推荐↓】

  更多推荐请看 值得关注的技术和设计公众号

  其中推荐了包括 技术设计极客 IT相亲相关的热门公众号。技术涵盖:Python、Web前端、Java、安卓、iOS、PHP、C/C++、.NET、Linux、数据库、运维、大数据、算法、IT职场等。点击《值得关注的技术和设计公众号》,发现精彩!

这篇关于stackoverflow重要性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/168882

相关文章

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

DTO类实现Serializable接口的重要性

所谓序列化,简单一点理解,就是将对象转换成字节数组,反序列化是将字节数组恢复为对象。凡是要在网络上传输的对象、要写入文件的对象、要保存到数据库中的对象都要进行序列化。Java对象是无法直接保存到文件中,或是存入数据库中的。如果要保存到文件中,或是存入数据库中,就要将对象序列化,即转换为字节数组才能保存到文件中或是数据库中。文件或者数据库中的字节数组拿出来之后要转换为对象才能被我们识别,即反序列化。

HDU2523(论scanf的重要性)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2523 解题思路: 先把a数组排个序,然后把| xi - xj |的所有组合值求出来,把b数组在排个序。这时候要考虑出现1、1、1、2、2、3这种相邻两个一样的情况,开一个vis标记数组把相邻的数进行合并,这样就可以顺利取到第k大的值。 特别说明,论scanf和printf的重要性,用cin

论互联网安全的重要性

论互联网安全的重要性 当今,计算机领域什么最火?当属人工智能了,纵观各大IT巨头google,facebook,apple,Baidu都有自己的人工智能实验室,google有谷歌大脑,其主要计划是研究当今最顶级的技术,比如无人驾驶汽车,google眼镜,百度成立IDL深度研究院等等。这是不是代表,未来我们的生活将因人工智能的发展而发生巨大变化?我想是的。人工智能要基于海量数据处理,这些数据包含大

高精度治具加工的重要性和创新性

在现代制造业中,高精度治具加工扮演着至关重要的角色。它不仅是生产过程中的关键环节,更是推动行业不断创新和发展的重要力量。时利和将解析高精度治具加工的重要性和创新性。   一、高精度治具加工的重要性   1.确保产品质量   高精度治具能够为生产过程提供准确的定位、夹紧和导向功能,从而确保产品的尺寸精度、形状精度和表面质量。例如,在电子制造领域,高精度的治具可以保证芯片的精确安装,提高电子

软件兼容性测试重要性,第三方软件测试服务公司的测试流程

在当今的软件开发及使用环境中,软件兼容性测试作为一个关键的环节,越来越受到重视。随着各种操作系统、硬件与软件环境的多样化,如何确保软件的兼容性,成为我们需要深入探讨的重要话题。卓码软件测评,作为专业的第三方软件测试服务公司,深知其中的重要性,并在这一领域提供了全面的解决方案。 一、什么是软件兼容性测试?   软件兼容性测试是指在不同的操作系统、浏览器、设备和网络环境中,对软件进行测试,确保其能够

数据库中的“加速器”:深度解析索引的重要性及最佳实践

文章目录 **为什么要使用索引?****索引的作用:** **索引的分类****1. 按索引字段的个数分类****2. 按照索引值的唯一性分类** **如何定义索引?****1. 创建索引****语句中的关键要素:****创建索引的示例:** **2. 删除索引** **创建索引的最佳实践****创建索引的原则:** **总结** 在数据库系统中,索引就像书中的目录一样,是提升查

语言质量评估对欧洲游戏推广的重要性

语言质量评估在欧洲推广游戏中的重要性怎么强调都不为过。欧洲是一个文化和语言多样化的市场,整个大陆有200多种语言。因此,要提供一款与不同地区玩家产生共鸣的本地化游戏,不仅需要准确的翻译,还需要细致的语言质量评估。这一过程对于确保游戏吸引当地观众、保持其初衷并提供无缝和身临其境的体验至关重要。 语言质量评估包括评估翻译内容的准确性、流畅性和文化相关性。对于瞄准欧洲市场的游戏开发商和发行商来说,

产品需求过程管理重要性

产品需求过程管理重要性 背景     以下都是真实事项经历回顾,在产品开发过程中,产品经理与研发团队之间的沟通至关重要。然而,沟通不畅或信息缺失常常导致需求无法准确传达,最终影响产品的成功。以下是一些常见的问题:    1.需求逻辑与需求规则遗忘     产品经理在与研发工程师确认某个需求逻辑后,未能有效文字书面记录背景信息与详细逻辑规则。在后续开发中,产品经理可能无法回忆起当初的