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