堆栈溢出的力量

2021-01-22 15:25:24

假设您是编码的新手。也许您正在大学里学习它,或者刚参加了为期五周的编码训练营,就从入门级职位开始。您正在用C或Python或Javascript或任何您喜欢的语言编写函数。由于某种原因,代码未编译,或者在第281行遇到了障碍,终端输出了一些奇怪的东西,例如“ AttributeError:'foo'对象没有属性'bar'。”

那你接下来要做什么?您可以仔细检查,看看是否错过了在行尾添加分号的可能性。您可以执行经典的隐秘编码仪式,即多次运行该脚本并希望它能正常运行。您可以完全放弃,倒一杯酒。

或者,也许您现在正在执行整个行业的标准故障排除方法:将错误消息粘贴到Google中并进行搜索,然后用手指交叉,希望结果中会出现一个名为“ Stack Overflow”的网站。

Stack Overflow是一个常见的计算错误(其中在计算机存储的一部分中称为“调用堆栈”的部分使用的内存超出了其分配的容量)的名称(无需感谢我的解释),它是一个问答网站,主要针对在编码器上。这意味着其大部分线程专用于某人说“我遇到某某某类错误”或“有人可以找出执行某某某类功能的最佳方法吗?”

“我在新手训练营时代就学会了编程,”开发人员训练营的课程负责人史蒂夫·哈姆斯(Steve Harms)告诉我,“而我的解决方法就是将其发布到这些可怕的PHP论坛……答案既不好,也不正确,也不友善地提出。”堆栈溢出表面上可以解决此问题,方法是将编码器建议转换为类似Reddit的线程,并带有上投票,下票和有用的摘要。没有明确的获胜者,再也没有冗长的争论;多亏了Stack Overflow,对给定问题的“最佳”解决方案是-或应该-票选为最高。

谷歌搜索任何专有名词都会像在前几个链接之一一样显示其Wikipedia页面,或者搜索产品会立即显示Amazon,搜索代码会使您进入Stack Overflow。考虑到当前正在产生的代码量(更不用说它的库具有日常生活的基本功能和非必要功能),Stack Overflow安静地是地球上最重要的网站之一。更不用说最受欢迎的网站之一:该网站于2008年启动,现在Alexa的流量排名为52,使其成为网络排名前100的网站之一。

这意味着在半协作技术行业中,每个人都直接或间接地基于彼此的思想和创新而发展起来,Google将大量的编码人员驱向相同的少数资源,以解决他们遇到的任何问题试图破解。在回答了该网站有关站点使用情况的年度调查问题的36,932个开发人员中,不到百分之一的人表示他们从未听说过或使用Stack Overflow作为资源(总共有超过64,000人参加了该调查)。此外,有90%的开发人员“每个月多次在这里找到解决其编码问题的解决方案,其中有一半的人发现了可以直接整合到自己的工作中的代码片段。”换句话说,堆栈溢出为程序提供了动力……其他所有功能。

但是,由于大多数代码都存在于用户从未见过的后端,因此您可能不会意识到使用的应用或网站是基于Stack Overflow生成的代码的可能性。除非开发人员放任自流:去年,用于iOS的NissanConnect EV移动应用程序在其设置菜单中显示了此描述文本:“堆栈溢出的精神是编码人员帮助编码人员。”无论开发者是谁,都忘记更改他们从Stack Overflow中获取的占位符文本。

从Stack Overflow复制和粘贴代码片段不仅已成为公开的秘密,而且已成为开发人员进行故障排除的首要方法。这就提出了一些有趣的哲学(如果不是法律的话)问题:代码是受版权法和专利法保护的知识产权,因此,复制和粘贴可能会使编码人员处于棘手的道德基础上。但这也是达到目的的一种手段,一种处理一些数据并获得所需最终结果的方法。通过这种说法,拒绝复制代码就像创建一种完全不同的工具,只是敲钉子。为了获得相同的结果,是否真的有必要以不同的方式构造代码?

实际上,如果只要遇到问题就可以复制并粘贴在Stack Overflow上找到的内容,那么您将如何学习编码? “在Dev Bootcamp,我们非常关注如何改变一个人的就业状况,如何使他们获得所需的工作,” Harms解释说。毫无疑问,该工具包的一部分将利用答案站点。毫无疑问。”

对该网站的统治地位的批评者并不难找到。在2015年的博客文章中,Christian Heileman概述了Stack Overflow论坛的吸引力,并提出了批评意见。这是专家相互讨论解决方案的好工具,但不一定是学习编码的正确位置。您偶尔听到的笑话是,您不是全栈开发人员,而是成为全栈溢出开发人员。

他通过电话解释说,该站点非常适合专家互相交谈,但是类似Reddit的游戏化存在危害。他解释说:“当您尝试学习一些东西时,这些是您首先发现的结果,您会得到两种印象。首先,有一种方法可以做到这一点。您甚至都无需考虑它,只需复制并粘贴并放上它。”用户获得的第二个印象仅仅是不友善之一。 “‘如果您这样做,您就不是专业的开发人员’,这是一个很常见的答案。对于刚开始的人来说,这可能非常令人沮丧。”

但是,依靠互联网为您完成工作也存在明显的弊端,即使互联网自愿提供并提供了欢乐的解决方案。 Heileman已经在Yahoo,Mozilla和现在的Microsoft等公司工作了数十年,他认为对于新手开发人员而言,偷工减料从长远来看会伤害他们。重要的是,他们必须了解高级编写的代码,而不是仅仅依靠多合一的解决方案和程序包来完成繁重的工作。这是开发人员社区中正在进行的讨论,最近一次是在去年的一个事件之后,当时开发人员从名为npm的系统中删除了一个简单的11行功能,从而破坏了所有依赖它的解决方案。

“我认为,如今我们拥有这些资源真是太好了,”海勒曼说,“但是,存在这样的危险:学生可能会复制和粘贴内容,以使作业完全摆脱而不是理解它。”

开发课程讲师的理念非常一致,我刚才所说的一切都同意该站点是有用的,但也有可能成为拐杖。 “如果只复制并粘贴您看到的第一件事,通常是无济于事的,” General Assembly的Android开发讲师Charlie Drews说。 “这可能会使您的程序变得更糟,并且肯定不会教给您任何东西。”较新的编码站点,例如CodePen,Glitch和repl.it,都依靠这种协作的迭代精神来帮助消除纠结。

而且,尽管复制代码与抄袭并不直接相似,但是经验丰富的开发人员也很容易发现它们。另一位通用航空讲师Drew Mahrt说:“您可以看到[代码中]有着明显的不同,突然之间他们有了这些很长的描述性变量名,或者他们正在使用的东西已经超出了他们原来的水平。先前。”

同样危险的是,代码更改非常快。以Android开发实践为例,在过去几年中发生了巨大变化,但是流行的Stack Overflow解决方案仍要追溯到2013年,这意味着新兴的开发人员可能会通过过时的解决方案来学习。

哈姆斯在我们开始讨论时指出:“您要问的问题是自古希腊时代以来教育工作者就一直在努力解决的问题。”在《法书集》中,柏拉图以苏格拉底的名字写作,抱怨学生使用书面词:“他们对写作的信任,是由外在的角色产生的,而这些外在的角色本身并不是他们的一部分,这会阻止他们对自己内在记忆的利用。您发明了一种长生不老药,不是为了记忆,而是为了提醒。而是给学生提供智慧的表象,而不是真正的智慧。”柏拉图(Plato)向您解释了电力,计算机,互联网,编码和现代经济后,就不会喜欢Stack Overflow,它加入了长期存在的危险的新创新,从写作开始,然后是Google和维基百科。对于编码人员而言,该站点是实现目标的最佳方式,而不是全面的解决方案。但是,当您在最后期限内购买主要产品时,只是无法使代码正常工作,就没有更好的方法来结束。