热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

警惕最优方案

1原文信息1.1标题TheDarkSideofBestPracticesPetriKainulainen:August8,20131.2地址http:www.petr

1 原文信息 


1.1 标题 

The Dark Side of Best Practices
Petri Kainulainen: August 8, 2013

1.2 地址 

http://www.petrikainulainen.net/software-development/processes/the-dark-side-of-best-practices/

2 警惕最优方案 


寻找最优解决方案是开发软件中的理念(或者别人经常这样告诉我们)。每一名开发者都有着他对于软件开发进度,架构和编程的独特观点。

这些方案是基于教育经历、个人经验以及同行影响形成的。

这些方案也被称作最优方案,几乎每一个软件公司都有着自认为为最优的解决方案。

那么,最优方案肯定是一种最优的解决方案吗?不完全是,我认为最优方案也有着容易被忽略到的、需要注意的地方。

2.1 警惕最优方案的另一面 


最优方案本身是不具危险性。他们之所以变得危险是因为他们被误解了或被错误地使用了。不幸的是,这种情况出现得相当普遍。

以我的经验来说,如下三种最容易造成错误使用最优方案:

2.1.1 把最优方案当作万能药 


当最优方案被当最终解决方案,并不允许提出任何质疑时。如果我们不能质疑这个的最优方案的话,那么,我们就没有机会知道为什么这种方案会比其他可用方案更好的原因了。

这意味着我们失去了学习和改善当前问题的机会。

如果我们生活在一个静态不变的世界中,这完全是个正确且有效的策略。当然,这是不可能的。我们都知道新技术正以非常快速度增长并改变着整个世界。

那么,我们会愿意落后于别人吗?(译注:不会,所以需要有对最优方案挑战的精神)。

2.1.2 最优方案被当做公司制度来执行 


在某些情况下,一个项目小组被强制使用某种最优方案来完成任务。通常这种情况,大多是由这两种原因引起的:

首先,最优方案用来确保高级开发者和架构师在公司的地位和著作权。整个项目组不得不使用高级开发者和架构师所熟悉的技术和编程语言。所有新的技术和编程语言都被以太新或不成熟等理由而被拒绝。

然后,最优方案被当做市场工具来使用。他们的目的是为组织创建一个可供参考的软件开发流程说明。他们唯一最关心的事情是有一个光彩的门面,因为:

这让客户觉得公司非常棒。
这让上层领导觉得中层管理阶层做得非常好。

然而,现实是没有谁会真正关心现在所使用的方案是否真的适合解决当前的问题呢。

好吧,上面所说的也不是全部。开发者也会对现在的方案进行考虑,不过所关心的地方通常是局限于他们“被问”到的地方,然后解决了被问到的问题,在团队中实现了一种新的解决方案。

将现有最优方案设定为公司制度,将使得那些勇于创新的员工变得不积极,因为他们得不到什么好处。这样,把最优方案定为公司制度,是否值得我们追求呢?

2.1.3 实现最优方案易于造成过度工程 


有些时候,最优方案概念容易造成一种过度工程的情形,会考虑到架构、设计模式和组件重利用等各种因素。这些程序(或组件)通过如下原则进行扩展,非常容易造成过度工程。可以想象,如果由一个全部由架构师组成的团队,设计软件该会达到多么令人惊讶的复杂啊!

这种情形是因不能懂得一个可重复利用组件(框架,库,或者服务)和应用程序之间的区别所引起的。其实,这些区别是非常明确的:

当我们正创建一个可重复使用的组件时,我们不得不考虑,将它设计得可以被重复使用。
当我们创建一个应用程序时,我们必须关注,当前应用程序需要达到哪些前提条件上才能实现。
过度工程很有可能产生永远也不会被使用的复杂代码,这显然是没有实际意义的。如果我们按照这个原则来设计软件:在任何情形下都使用同样的设计原则来设计软件,就很容易出现过度工程的情况。

2.2 接下来我们应该怎么做呢 


首先,我们应该做好我们的工作。如果最优方案是正确的方案,然而我们却没有按照它的要求来做的话,那就不太好了。这可能听起来有一点激进,但是我们应该懂得:新想法是为了找到最好的可能实现的方式来开发软件。同时,这也说明了,如果按照一个对实现我们目标没有帮助的“最优方案”也是没有任何意义的。

我们必须懂得永远是没有“银弹”的(译注:一种完美的解决办法)。这意味着没有一个可以考虑到所有情况并解决所有问题的简单办法。我们中大部分人都多多少少懂得一点这个道理,但当我们听到最佳解决方案这个词时,经常忘记了这样一个简单的道理。

相对于把最优解决方案当做银弹,我们应该明白:一个最优解决方案中的方法是在某些特定条件下才是正确的。如果我们明白了这一点,那么,很显然:

我们必须不断地为我们现在的问题来寻找最好的解决方案。我们每天都会学习到新的事情。我们可能觉得今天这个最优解决方案非常的完美,但下一周后又可能觉得实现得非常愚蠢。我们必须记住没有任何东西可以永久地持续下去。当然也包括最优解决方案。我们必须在当前最优解决方案不起作用时勇敢地去挑战它。当然,很有可能我们是错误的。但是如果我们不去挑战最优解决方案的权威性,我们将永远都不知道真相。难道我们要一直活在这种不明不白之中吗?

我们不会使用一个解释得不详细的最优解决方案。相反,我们有一种要求详细说明的需求。如果什么都没有给出,我们就该忽略它。也只有傻子才会使用一个他自己都不懂得的方式。

最后,最佳解决方案仅仅只是一个观点而已。一些最佳方案确实比其他方案更好,也有些最优方案被证明是错误的。我想这是我们的责任来推翻这错误的“最优方案”,尽我们最好通过做多的练习来找到更好的解决办法。

为什么?

它帮助我们找到更好的办法来完成手中的工作 。

3 关键字 


Best practice 最佳实践,最优解决方案,涉及开发进度、架构和代码编程

A method or technique that has consistently shown results superior to those achieved with other means, and that is used as a benchmark.

一种证明比其他更好、更优的方法或技术解决方案,并且被定义为一种权威标准。

facade 假的
entirely 完整的,彻底的
bend over 弯下腰
demotivate 失去动力的
inability 无能力的
radical 激进
overthrow 打倒、推翻

4 译者感悟 


花费大量的时间在立即“Best practice”,从百科、Google等上搜索这些信息,推测“Best Practice”应该是代表解决某个问题时的最优解决方案。
"几乎每一个软件公司都知道这个观点",我做软件开发者三年了,居然现在才知道这个观点,都怪之前努力得不够呀,这些东西都没有接触过。通过翻译这篇文章,又让我学习到了新的知识。

初步阅读这篇文章时,觉得文章比较短小,翻译起来应该会很简单的。初读一遍,大体意思都好像都清晰了,而真正翻译时,才发现原来文中的很多概念很抽象,理解起来比较困难。

作为一个软件开发程序员的我,很多时候会有这样一种感觉,觉得自己编写的代码是最完美的,就是最优解决方案,但实际上是这样的吗?大多数情况下都不是,挑战最优解决方案,是前进的动力,也是提高技术的最好办法。

“我们必须懂得任何时候都是没有银弹的”,名言呀,不管遇到什么事情,保持好随时准备接受变化的心态。

最近感冒了,工作效率没有那么高了,但心态反而平静了很多,只把时间用在最必须的地方;另一方面,因为知道效率不高,反而完成任务时就不那么着急了。就像翻译这篇文章的时候,不仅仅是要完成一个任务,而是享受这篇文章带给我思维的碰撞,美美的感觉。

推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
author-avatar
ys2011一号_139
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有