17611538698
webmaster@21cto.com

StackOverflow:我们并不总是遵守编码最佳实践

资讯 0 1397 2021-03-11 08:33:26
<p><img alt="" src="https://www.21cto.com/uploads/images/ss-1.jpg" style="width: 1000px; height: 542px;" /></p> <p><strong>序</strong></p> <p>&nbsp;</p> <p>编程的人应该没有人不知道StackOverflow,如果是TA就不叫程序员。</p> <p>&nbsp;</p> <p>有人夸张的说,从知春路到后厂村,有多少是StackOverflow程序员,人们也离不这些技术社区和问答平台了。人们在写代码时,遇到不会的技术或困扰,就会到这些网站上面寻找最佳答案。</p> <p>&nbsp;</p> <p>StackOverflow创立于2008年初,创始人为Joel Spoly,之后Jeff Atwood的独立开发者、博客主也加入了进来,</p> <p>&nbsp;</p> <p>2008年4月,Jeff开发始编写第一版本的代码,后来又招聘了两个程序员:Geoff和Jarrod,这两个人也一直留在StackOverflow。</p> <p>&nbsp;</p> <p>2008年9月,StackOverflow.com 正式上线。</p> <p>&nbsp;</p> <p><img _width="427px" alt="" crossorigin="anonymous" data-fail="0" data-ratio="1.044496487119438" data-s="300,640" data-src="https://mmbiz.qpic.cn/mmbiz_png/X1wOHbVRDnzEPaSJluZx3rfAUvlA0WkQvXBLWLdpvZ8wmXKWibPwVf7VRgIm8Z7ltCOKiaaAuNoDLOUSFibXoTvpQ/640?wx_fmt=png" data-type="png" data-w="427" src="https://www.21cto.com/uploads/images/1615422738656.jpg" style="width: 427px; height: 446px;" /></p> <p>&nbsp;</p> <p>从此,程序员们开始有了StackOverflow的时代。</p> <p>&nbsp;</p> <p>起初创始人并没有考虑赢利,只是觉得互联网对开发互联网的程序员并不咋友好,需要让它变得好一些,后来的发展超过了人们的想象,目前的StackOverflow已经有300名员工,并且实现了全面赢利,而且让数千万人学习到了如何编程以及学习新的技能。</p> <p>StackOverflow的版本也在十余年中不断的优化迭代,其项目代码在不断膨胀。以下是其研发团队对其项目中有关&rdquo;编码最佳实践&ldquo;的观点。</p> <p>&nbsp;</p> <p><strong>&ldquo;我们并未完全遵循编码最佳实践,你也不必&rdquo;</strong></p> <p>&nbsp;</p> <p>软件开发最佳实践的发展已经有一段日子了。在软件工程中,它们被定义成让代码更容易维护,确保开发者不犯太大的错误。</p> <p>&nbsp;</p> <p>但是也不是非要坚持软件开发最佳实践,就像数据库设计中的第三范式和反第三范式一样。</p> <p>&nbsp;</p> <p>StackOverflow的工程师RobertaArcoverde和Ryan Donovan说,在构建和开发代码时,为了性能和速度并不总遵循最佳实践,他们解释了如何遵循既定规则,又能够保证项目的性能。</p> <p>&nbsp;</p> <p>两个人从2009年开始,就致力于解决StackOverflow的性能和可访问的问题,当时StackOverflow只有几台服务器,后来访问量越来越大,只有几个人的研发团队不得不寻求扩大服务器数量,以应对大流量需求,同时还要保证StackOverflow的性能快速与轻巧。</p> <p>&nbsp;</p> <p>&ldquo;我们使用了微软的技术栈(.NET,C#和Microsoft SQL Server),基于它的可靠性,我们的成本随着系统实例的增加而增加。每台服务器都需要有一个新的许可证。因此我们的策略是扩展而是增加&rdquo;。</p> <p>&nbsp;</p> <p>Arcoverde和Donovan在其博客上这样写道。</p> <p>&nbsp;</p> <p>在整个站点的发展历程中,保持Stack Overflow的快速与轻量仍然是团队的主要核心。开发团队必须优先考虑,如何利用内存和缓存技术来快确保快速访问数据的目标。</p> <p>&nbsp;</p> <p>对速度的需求,也是StackOverflow最开始选择编程语言的决策之一。</p> <p>&nbsp;</p> <p>Arvoverde和Donovan这样说道:&ldquo;高级语言可提供安全性,但运行时开销较大,速度会变慢。&rdquo;</p> <p>&nbsp;</p> <p>&quot;我们已经对速度进行了优化,我们在某些地方的代码使用了像C语言的地方,而且也使用和了很多C语言的相关模式,比如直接访问内存等,这样可以让速度更快&quot;。</p> <p>&nbsp;</p> <p>&ldquo;我们使用了很多静态方法和字段,希望能尽可能的减少内存分配。通过最小化分配内存空间,从而减少因垃圾收集而导致应用程序的变慢&rdquo;。</p> <p>&nbsp;</p> <p>对高性能代码的极度偏爱,会产生另一个权衡的考量,这将使测试和维护代码变得困难。这将使两个人避开编码最佳实践的地方,包括业内&ldquo;最没有争议&rdquo;的最佳实践之一:自动化测试。</p> <p>&nbsp;</p> <p>两个人这样的解释道:&ldquo;我们写的代码不多,代码也没有按标准的最佳实践实现解耦。虽然这样让团队的代码更容易维护,但在运行时增加了不少多余步骤,且分配了多余的内存。&rdquo;</p> <p>&nbsp;</p> <p>&quot;这对于特定的交易来讲,看起来不多,但是每秒数千计的增加,将是海量级的数字&quot;。</p> <p>&nbsp;</p> <p>Arvoverde和Donovan表示,StackOverflow也没有为每个新功能编写单元测试。他们这样解释说:&ldquo;阻碍我们进行单元测试与功能,怡怡是集中在静态结构上。静态方法和属性是全局的,而运行时很难替换,因此很难&#39;保存&#39;和&#39;模拟&#39;&rdquo;。</p> <p>&nbsp;</p> <p>&ldquo;举个例子,我们是不能模拟数据库连接的,没法编写无法访问数据库的测试用例。&rdquo;</p> <p>&nbsp;</p> <p>Arvoverde和Donovan也特别指出,他们并非建议完全放弃软件开发最佳实践。两个人也指出了一些想法,其开发团队正在努力让其代码更具备可测试性。</p> <p>&nbsp;</p> <p>该宗旨也更多的围绕着这样的思想:如果根据行业惯例制定指导,则开发者可以帮助从软件中获取所需要的结果,帮助其从繁琐的工作上解放大量时间精力以及工作任务。</p> <p>&nbsp;</p> <p>Arvoverde和Donovan后来还补充:&ldquo;将软件工程行业按照最佳实践的模式和行为是正确的,也是有大量理论支持,它们让软件开发更加容易,尤其是大型开发团队。但是这些最佳实践,并不是必须的。&rdquo;</p> <p>&nbsp;</p> <p>&rdquo;复杂和混乱的问题需要创新的解决方案。有时候,你可能需要打破这些标准和规则之一,才能获得软件所要达到的特定成果&ldquo;。</p> <p>&nbsp;</p> <blockquote data-author-name="" data-content-utf8-length="7" data-source-title="" data-type="2" data-url=""> <section> <section>编译:场长</section> </section> </blockquote> <p>&nbsp;</p>

评论