65.9K
CodeProject 正在变化。 阅读更多。
Home

全栈 Stack Overflow 开发者

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2015 年 10 月 9 日

CPOL

7分钟阅读

viewsIcon

15035

全栈堆栈溢出开发者几乎完全通过从堆栈溢出复制代码来工作,而不是理解自己在做什么。了解这种做法对核心开发技能的影响。

在几次演讲和采访中,我曾抱怨过我们市场中一个一直存在但现在似乎泛滥成灾的现象:全栈堆栈溢出开发者由 Stephen Hay 在 Twitter 上引发,我现在将详细谈谈这意味着什么。

全栈堆栈溢出开发者几乎完全通过从堆栈溢出复制代码来工作,而不是理解自己在做什么。他们不去研究一个主题,而是先去那里问一个问题,希望人们能直接给他们答案。

在许多情况下,这样做是有效的。通过粘贴自己不理解但由那些懂行的人写出的东西,你可以取得令人惊叹的成就。

我在这里并不是要攻击堆栈溢出。它是一个了不起的资源,而且很难在不被垃圾信息和庸俗淹没的情况下创建一个这样的社区(相信我,我是几个技术 Facebook 群组的管理员)。

我们长期以来一直面临这个问题。我敢挑战任何学习 PHP 的人,不要仅仅复制笔记中的代码示例。多年来,代码参考网站给了我们想要的答案,但我们并不需要。甚至 Matt’s Script Archive 可能也是许多垃圾邮件发送者的来源,因为人们在使用 formmail.pl 而不知道它实际上是做什么的。

然而,我担心这种行为在今天有多么普遍。当然,这是可以理解的。

  • 创造东西比阅读如何创造东西更有趣。
  • 使用即时奏效的东西,即使你不知道它是如何实现的,也比遇到无法修复东西的挫败感感觉更好。
  • 你感觉自己欺骗了系统——捷径很有趣,让你觉得自己比那些花大量时间学习的笨蛋更聪明。
  • 我们的工作已成为主流,并且对开发人员的需求巨大。我们被要求交付的速度大大加快。人们更希望快速看到结果,而不是更整洁的结果。

我们社区在培养这类开发者方面负有部分责任。

  • 当我们回答问题时,我们倾向于直接给出解决方案,而不是分析对方真正需要什么。这需要更多的工作,所以我们倾向于避免。
  • 发布“唯一正确的解决方案”并在堆栈溢出上赢得一个话题感觉很棒——即使我们完全没有计划在环境发生变化后,当它不再那么好的时候回来处理它。
  • 通过提供解决方案更容易获得认可、Karma 和点赞,而不是通过提出正确问题以找到问题根源的人获得。
  • 对于一遍又一遍地回答相同的问题,很容易失去耐心,“直接使用 jQuery”很容易粘贴。

那又怎样?如果人们能更快、更有效地发布产品,那有什么问题?

当然,你现在可以称我为老顽固,告诉我学习软件基础知识的概念已经过时了。当今产品的复杂性使得几乎不可能了解一切,而在其他高度成功的环境中,使用大量包和库是常态。好吧,尽管我们 似乎正在理解 整个软件可能比我们愿意承认的更糟糕,而这可能是原因之一。

全栈堆栈溢出开发存在几个问题。

  • 它假设最简单、技术细节最多的答案是最好的。这是危险的,可能导致许多复制粘贴的示例,其中许多问题会存在很多年。
  • 最易复制的答案被使用、点赞和链接,意味着那些修复了其问题的更好解决方案不太可能成功取代它们。没有“深入挖掘”,所以即使是重要的修复也会被忽略。
  • 任何专家社区很可能对“专业环境”的构成都有很多假设。这意味着在这些社区中提供的答案很可能在一个伟大、新颖且复杂的开发人员设置中有效,但并不一定对我们的最终用户有用。很容易为项目添加另一个库、npm 包或引导解决方案,但它只会增加网络上已经堆积如山的过时代码。
  • 它延续了我们对简洁而非编写可理解代码的偏爱。最小的解决方案——无论多么难以阅读——总是赢得讨论的。由于人们在不理解的情况下复制粘贴,所以对他们来说没问题。然而,对于调试和维护来说,这是最糟糕的解决方案。一个很好的例子是 使用 || 作为默认参数。短小精悍并不一定更好,只是省事。
  • 它贬低了我们的手艺。如果我们这些交付工作的人不尊重它,只是把东西拼凑起来并希望它们能起作用,那么我们就不应该惊讶于我们的经理和同事不把我们视为专业人士。

然而,最大的问题是,这对开发者自身不利。

在工作中找到成就感是最大的回报

在网上搜索解决方案并复制粘贴很容易——太容易了。这毫不费力,而且这不是你的工作——而是别人的。与其为你取得的成就感到自豪,不如你更有可能感到压力,因为你不希望被发现是一个使用别人作品并将其当作自己作品的骗子。

许多开发者对“不要重复自己”(DRY)感到厌恶。DRY 是代码中的一个好概念,但对于学习和工作来说,这是一个可怕的想法。我们需要重复,以建立肌肉记忆。你重复一个任务的次数越多,它就越容易,你的身体就会在你不思考的情况下完成它。

当你开始开车时,你可能坐在座位上,被所有的档位、操纵杆、踏板和需要注意的事情压得喘不过气来。过了一会儿,你甚至不再思考自己在做什么,即使从英国的车换到其他国家的车也不是问题。从错误中吸取教训,比仅仅使用东西更能让我们牢记。我们投入了更多的努力,感觉更值得。

Dan Ariely 的 TED 演讲“什么让我们对自己的工作感到满意” 有一些关于这个话题的非常好的观点。

认可,是我们人类所渴望的。如果我们不拥有我们所做的事情,我们就无法获得认可。你可以通过复制粘贴,使用一个又一个解决方案和抽象来实现一切。但是,迟早,你会觉得你没有取得任何成就或创造任何东西。许多像这样工作的开发者很快就筋疲力尽,停止了开发,停止了关心。这是一个巨大的损失,因为你可能是那个提出下一个改变我们很多人生活的伟大想法的人。这是你不应该剥夺自己的机会。不要成为一个全栈堆栈溢出开发者。你值得做得更好。

更多关于 JavaScript 的实践

本文是微软技术布道师关于实用 JavaScript 学习、开源项目和互操作性最佳实践的网络开发系列文章的一部分,包括 Microsoft Edge 浏览器和新的 EdgeHTML 渲染引擎

我们鼓励您使用 dev.modern.IE 上的免费工具,在包括 Windows 10 默认浏览器 Microsoft Edge 在内的各种浏览器和设备上进行测试。

来自我们工程师和布道者的 Microsoft Edge 和 Web 平台深度技术学习

更多免费的跨平台工具和网络平台资源

© . All rights reserved.