栈溢出 栈内存溢出
This article is part of a web development series from Microsoft. Thank you for supporting the partners who make SitePoint possible.
本文是Microsoft的Web开发系列的一部分。 感谢您支持使SitePoint成为可能的合作伙伴。
In a few talks and interviews I lamented about a phenomenon in our market that’s always been around, but seems to be rampant by now: the one of the Full Stack Overflow developer. Prompted by Stephen Hay on Twitter, I shall now talk a bit about what this means.
在一些谈话和访谈中,我为我们市场上一直存在但现在似乎很猖ramp的一种现象感叹: Full Stack Overflow开发人员之一 。 由斯蒂芬·海伊(Stephen Hay)在Twitter上提出的建议 ,我现在要谈一谈这意味着什么。
Full Stack Overflow developers work almost entirely by copying and pasting code from Stack Overflow instead of understanding what they are doing. Instead of researching a topic, they go there first to ask a question hoping people will just give them the result.
完整的Stack Overflow开发人员几乎完全通过复制和粘贴来自Stack Overflow的代码来工作,而不是了解他们在做什么。 他们没有去研究主题,而是去那里提出一个问题,希望人们能给他们结果。
In many cases, this works out. It is amazing what you can achieve by pasting things you don’t understand, that people who know what they are doing put out there.
在许多情况下,这是可行的。 通过将不了解的内容粘贴到知道自己在做什么的人那里,您可以实现惊人的结果。
I am not having a go at Stack Overflow here. It is an incredible resource and it is hard to create a community like this and not drown in spam and mediocrity (trust me, I am an admin on several technical Facebook groups).
我在这里没有Stack Overflow的机会。 这是一种令人难以置信的资源,很难创建这样的社区,并且不会淹没在垃圾邮件和平庸的环境中(相信我,我是Facebook几个技术组的管理员)。
We had that problem for a long time. I challenge anyone learning PHP to not simply copy the code examples in the notes. For years, code reference sites have given us answers we wanted, but didn’t need. Heck, even Matt’s Script Archive is probably the source for many a spam mailer as people used formmail.pl without knowing what it does.
我们有这个问题很久了 。 我挑战学习PHP的任何人,而不是简单地复制注释中的代码示例。 多年以来,代码参考站点已经为我们提供了我们想要但不是必需的答案。 哎呀,甚至Matt的脚本档案馆也可能是许多垃圾邮件发件人的来源,因为人们在使用formmail.pl时却不知道它的作用。
I am, however, worried about how rampant this behaviour is today. Of course, it is understandable:
但是,我担心今天这种行为猖ramp。 当然,这是可以理解的:
Creating something is more fun than reading up on how to create something. 创建内容比阅读如何创建内容更有趣。 Using something that works immediately, even if you don’t know how it does it, feels better than encountering the frustration of not being able to fix something. 即使您不知道如何使用立即可用的东西,也比无法修复某些东西感到沮丧。 You feel like you cheated the system – shortcuts are fun, and makes you feel like you’re cleverer than all those chumps who spend all this time learning. 您会觉得自己欺骗了系统-快捷键很有趣,并且使您觉得自己比花所有这些时间学习的家伙更聪明。 Our job is mainstream and there is a massive need for developers. The speed of how we are asked to deliver has massively increased. People want results quicker, rather than cleaner. 我们的工作是主流,对开发人员的需求很大。 我们被要求交付的速度已经大大提高。 人们想要更快的结果,而不是更干净的结果。We, as a community, are partly to blame for breeding this kind of developer:
我们作为一个社区,部分地应归咎于培育此类开发人员:
When we answer questions, we tend to give the solution instead of analysing what the person really needs. This is much more work, so we tend to avoid it. 当我们回答问题时,我们倾向于给出解决方案,而不是分析该人的真正需求。 这是更多的工作,因此我们倾向于避免它。 Posting the “one true solution” and winning a thread on Stack Overflow feels great – even if we have no plan whatsoever to come back to it later if it turns out not to be such a good idea any longer as the environment changed. 发布“一个真正的解决方案”并在Stack Overflow上赢得线程感觉很棒–即使我们没有计划再后来再提出来,但是随着环境的变化,事实证明这不再是一个好主意。 Getting recognition, Karma and upvotes for giving the solution is much easier than getting it for being the person who asks the right questions to get to the source of the problem. 获得认可,因果报应和给予解决方案的支持比成为提出正确问题的人要容易得多。 It is easy to lose patience with getting the same questions over and over again and a “just use jQuery” is easy to paste. 一遍又一遍地回答相同的问题很容易失去耐心,并且“粘贴jQuery”很容易粘贴。Of course, you can call me a grumpy old so-and-so now and tell me that the concept of learning the basics in software is an outdated concept. The complexity of today’s products makes it almost impossible to know everything and in other, highly successful environments using lots of packages and libraries is par for the course. Fine, although we seem to be understanding that software as a whole might be more broken than we care to admit, and this might be one of the causes.
当然,您现在可以这样称呼我为脾气暴躁,并且告诉我,学习软件基础知识的概念已经过时了。 当今产品的复杂性使得几乎不可能一无所知,而在其他非常成功的环境中,使用许多软件包和库则是本课程不可或缺的部分。 很好,尽管我们似乎了解到 软件整体可能比我们所承认的更坏 ,这可能是原因之一。
There are several problems with Full Stack Overflow development:
Full Stack Overflow开发存在几个问题:
It assumes the simplest answer with the most technical detail is the best. This is dangerous and can result in many a copied and pasted example which has a lot of issues surviving for years and years on the web. 它假定具有最详细技术细节的最简单答案是最好的。 这很危险,可能会导致复制和粘贴许多示例,从而使许多问题在网络上生存了很多年。 The most copy-able answer being used, upvoted and linked to means that better solutions that fix its issues are much less likely to succeed in replacing them. There is no “digging deeper”, so even important fixes will fall under the radar. 使用,赞成和链接的最易于复制的答案意味着,解决问题的更好解决方案很难取代它们。 没有“更深入的研究”,因此即使重要的修复也将落在雷达之下。 Any expert community is most likely to have a lot of assumptions as to what makes up a “professional environment”. That means that answers giving in those communities are very likely to work in a great, new and complex developer setup but are not necessarily useful for our end users out there. It is very easy to add yet another library or npm package or bootstrap solution to a project, but it adds to the already full-to-the-brim landfill of outdated code on the web. 任何专家社区最有可能对构成“专业环境”的情况有很多假设。 这意味着在这些社区中给出的答案很可能适用于出色的,新的和复杂的开发人员设置,但不一定对我们的最终用户有用。 向项目中添加另一个库或npm软件包或引导解决方案非常容易,但它会增加Web上已经过时的过时代码的填充范围。It perpetuates the fondness we have for terseness over writing understandable code. The smallest solution – however unreadable – is always the one that wins the thread. As people copy and paste them without understanding, that’s fine by them. For debugging and maintenance, however, it is the worst solution. A great example for this is the use of || for default parameters. Short isn’t better, it is just less work.
它使我们对编写简洁易懂的代码的简洁性情有独钟。 最小的解决方案(尽管难以理解)始终是赢得线程的解决方案。 当人们在不了解的情况下复制和粘贴它们时,这很好。 但是,对于调试和维护,这是最糟糕的解决方案。 一个很好的例子是使用||。 用于默认参数 。 短不是更好,只是更少的工作。
It cheapens our craft. If we, as the people delivering the work, don’t have any respect for it and simply put things together and hope they work, then we shouldn’t be surprised if our managers and peers don’t see us as professionals. 它使我们的Craft.io便宜。 如果我们作为交付工作的人没有任何尊重,只是把事情放在一起并希望他们能工作,那么如果我们的经理和同事们不认为我们是专业人士,我们就不会感到惊讶。The biggest problem, however, is that it is bad for the developers themselves.
但是,最大的问题是对开发人员本身不利。
Going on the web, finding a solution and copying and pasting it is easy – too easy. There is no effort in it, and it is not your work – it is someone else’s. Instead of being proud of what you achieved, you are more likely to stress out as you don’t want to be found out as a phoney who uses other people’s work and sells it as your own.
上网查找解决方案并将其复制和粘贴很容易-太容易了。 无需付出任何努力,这不是您的工作,而是别人的工作。 与其为自己所取得的成就感到骄傲,不如说自己不想被别人当作别人使用自己的作品并出售给他人而成为别人的话,那么您更有可能感到压力。
Repetition is anathema to a lot of developers. Don’t repeat yourself (DRY) is a good concept in code, but for learning and working it is a terribly idea. We need repetition, to build up muscle memory. The more you repeat a task, the easier it gets and your body does it without you having to think about it.
对于许多开发人员而言,重复是令人厌恶的。 不要重复自己(DRY)在代码中是一个好概念,但是对于学习和工作来说,这是一个非常糟糕的想法。 我们需要重复,以建立肌肉记忆。 重复执行的任务越多,任务就越容易完成,而您的身体无需考虑即可。
When you started driving a car, you probably sat down on the seat and got utterly overwhelmed by all the gears, levers, pedals and things to pay attention to. After a while, you don’t even think about what you are doing any longer, and even switching from right- to left-hand drive is not an issue. Failing and learning from it is something we retain much better than simply using something. We put more effort in, it feels more worthy.
当您开始开车时,您可能坐在座位上,完全被所有齿轮,杠杆,踏板和要注意的东西所淹没。 过了一会儿,您甚至不再考虑自己在做什么,甚至从右驱动切换到左驱动也不成问题。 失败和从中学习是我们保留的东西,远比单纯使用它要好得多。 我们付出了更多的努力,感觉更值得。
Dan Ariely’s TED Talk “What makes us feel good about our work” has some incredibly good points about that topic:
丹·阿里利(Dan Ariely)的TED演讲“什么使我们对工作感到满意”对这个话题有一些难以置信的好处:
Recognition is what we crave as humans. And we can’t get recognition if we don’t own what we do. You can totally get by copying and pasting and using solution after solution and abstraction upon abstraction. But, sooner or later, you will feel that you are not achieving or creating anything. Many developers who worked like that burned out quickly and stopped developing, stopped caring. And that is a big loss as you might be the person to come up with the next great idea that changes things for a lot of us. That’s an option you shouldn’t rob yourself of. Don’t be a Full Stack Overflow developer. You deserve to be better.
认可是我们作为人类所渴望的。 如果我们不拥有自己的工作,就无法获得认可。 通过在解决方案和抽象后的抽象之间进行复制,粘贴和使用解决方案,您将完全可以得到。 但是,迟早您会感到自己没有实现或创造任何东西。 许多这样工作的开发人员很快就精疲力尽,停止开发,停止关心。 这是一个巨大的损失,因为您可能是想出一个改变我们很多人的好主意的人。 这是您不应该抢夺自己的选择。 不要成为全栈溢出开发人员。 你应该变得更好。
This article is part of the web development series from Microsoft tech evangelists on practical JavaScript learning, open source projects, and interoperability best practices including Microsoft Edge browser and the new EdgeHTML rendering engine.
本文是Microsoft技术传播者开发的Web开发系列文章的一部分,内容涉及实用JavaScript学习,开源项目以及互操作性最佳实践,包括Microsoft Edge浏览器和新的EdgeHTML呈现引擎 。
We encourage you to test across browsers and devices including Microsoft Edge – the default browser for Windows 10 – with free tools on dev.modern.IE:
我们鼓励您使用dev.modern.IE上的免费工具跨浏览器和设备进行测试,包括Microsoft Edge(Windows 10的默认浏览器):
Scan your site for out-of-date libraries, layout issues, and accessibility
扫描您的站点以查找过期的库,布局问题和可访问性
Use virtual machines for Mac, Linux, and Windows
在Mac,Linux和Windows上使用虚拟机
Remotely test for Microsoft Edge on your own device
在您自己的设备上远程测试Microsoft Edge
Coding Lab on GitHub: Cross-browser testing and best practices
GitHub上的编码实验室:跨浏览器测试和最佳实践
In-depth tech learning on Microsoft Edge and the Web Platform from our engineers and evangelists:
我们的工程师和宣传人员在Microsoft Edge和Web平台上进行了深入的技术学习:
Microsoft Edge Web Summit 2015 (what to expect with the new browser, new supported web platform standards, and guest speakers from the JavaScript community)
Microsoft Edge Web Summit 2015 (新浏览器,新支持的网络平台标准以及来自JavaScript社区的嘉宾演讲者会期待什么)
Woah, I can test Edge & IE on a Mac & Linux! (from Rey Bango)
哇,我可以在Mac和Linux上测试Edge和IE! (来自Rey Bango)
Advancing JavaScript without Breaking the Web (from Christian Heilmann)
在不中断网络的情况下推进JavaScript (来自Christian Heilmann)
The Edge Rendering Engine that makes the Web just work (from Jacob Rossi)
使Web正常工作的Edge渲染引擎 (来自Jacob Rossi)
http://dev.modern.ie/tools/vms/windows/?utm_source=SitePoint&utm_medium=article50&utm_campaign=SitePoint
http://dev.modern.ie/tools/vms/windows/?utm_source=SitePoint&utm_medium=article50&utm_campaign=SitePoint
Unleash 3D rendering with WebGL (from David Catuhe including the vorlon.JS and babylonJS projects)
使用WebGL释放3D渲染 (来自David Catuhe,包括vorlon.JS和babylonJS项目)
Hosted web apps and web platform innovations (from Kevin Hill and Kiril Seksenov including the manifold.JS project)
托管的Web应用程序和Web平台创新 (来自Kevin Hill和Kiril Seksenov,包括歧管 .JS项目)
More free cross-platform tools & resources for the Web Platform:
Web平台的更多免费跨平台工具和资源:
Visual Studio Code for Linux, MacOS, and Windows
适用于Linux,MacOS和Windows的Visual Studio代码
Code with node.JS and free trial on Azure
使用node.JS进行代码和Azure上的免费试用
翻译自: https://www.sitepoint.com/full-stack-overflow-developer/
栈溢出 栈内存溢出