阅读更多

6顶
0踩

研发管理

转载新闻 你优化系统的目标是什么?

2013-05-23 13:43 by 副主编 WnouM 评论(5) 有12341人浏览
我先来给你们讲两个故事:

第一个故事

当我在大学的时候,我选了一门“高级”面向对象编程课程。以前从来没有接触过这种知识,这个课程使用SmallTalk这种语言教学,而且教学方式非常特别;第一天,教授给我们布置了一个将会贯穿整个4周课程的作业。

我们非常兴奋,因为这是要编写一个游戏,一个老式的文字输入式的冒险游戏,类似于Zork风格。我们分成3人一组,来到教授拥挤的小屋里。在那里,教授给了我们一页纸,上面写着一些说明。从那里返回时我们几乎是一路小跑。

而就在我们刚要出门时,教授把我们叫了回去(我相信他是特意选了这个最佳时机):

“哦,我差点忘了。两个星期后,我会对这个游戏内容做一些大的修改。你们要继续按修改后说明开发。”

我跟很多的软件开发团队(包括一些软件产品创始人)说过这个故事,他们的反应几乎都一样:

  • 你能在屋里听到笑声。至少是咯咯的笑。你还能听到一些“不会吧”等话
  • “哦,老兄,这也太没谱了吧!”
  • “这教授这么难为人吗——怎么可能有这样的任务”
问题就在于,教授并没有告诉他将会做什么样的修改。只是说会修改一些东西——而且是在两周后。

你认为我们该如何去完成这个任务?我们开发时处处设防。

  • “哦,不行——如果教授打算改动这个怎么办?”
  • “也许应该把这里做成接口——万一教授要求用不同的方式实现它呢?”
  • “不行——我们应该把这部分提取出来,这样,当我们修改这部分时就不需要改动模块X了”
这就是我们的做法。我最想说的是,这是一个非常好的作业任务,它让我在面向对象编程和Smalltalk方面学到了很多。感谢你,我们的Davidson教授!

最终,我们做成了一个非常模块化的系统,这使对它们的修改变得很容易。当那一天终于到来,当游戏设计被修改后,我们通过努力在一天内就按照要求修改了程序,使我们能顺利的接着开发界面和怪兽等很酷的部分。

我们为以后的改变而优化系统。因为Davidson教授告诉我们变化很快就会来到。

第二个故事

这是关于大概25年前开发的一个系统的故事。它是一个瑞典大公司的重要业务系统。我说这是一个重要业务系统,是因为它处理的业务是公司80%的收入来源。

自打一开始,他们就思考的面面俱到,保留极详细的文档。他们还制定了一套严格的需求变更规范。他们要求尽量避免这样的系统里的变更,因为风险很大,一旦出错会造成巨大的影响。

公司如此为这种事情担心,以至于他们编写了一系列的措施来预防系统出现问题;所有的代码要经非代码原作者的第二人用伪代码注释一遍。而且测试工作不能由代码的作者来执行。

同样,也制定了各种风险管理措施,来管控软件规格说明书的制定。写规格书的人被分成了几个等级,以此确保在递交给相关IT业务部门前经过层层检查。

很快25年过去,如今这些编写文档和管控风险的部门仍然在忙碌。这套措施很少出问题,但却效率很低。一个修改从列入计划到提交到产品中大概要30周的时间。一个想法到正式被写入规格说明书要经过20多个不同级别人的审批。拿着这种说明书的程序员都称自己为“施工人员”,因为他们实际的工作是把伪代码翻译成COBOL语言。(相关阅读:开发流程那些事:6天时间修改1行代码

所有围绕这个系统做的事情都是为了掌控风险和需求变更,把稳定放在第一位。他们认为只要修改就会产生意外。但不幸的是,对于一个业务来说,唯一可能发生的事情就是:改变。而且改变的频率会越来越高。

他们为稳定而优化系统。我想强调一点,第二个故事里的这种想法的人在生活中不占少数。他们是很优秀的人,但他们却被安排去开发以稳定为第一位的系统。这才是真正的风险。

结论

这两个故事让我思考很多:

  • 如今我在写代码时是以何目的而优化?
  • 变化随时都会到来。我从开始就知道。“在这个系统运行的25年里我将会不断的修改它的规格说明书”。我该如何去应对这种事情?
  • 我是如何看待变化,把它当成风险?还是当成一种驱动?能够快速的应对改变是一种商业优势,是一种管控风险的良方。我如何让我的代码更容易改变?
  • 在一个将要进行大量修改的系统里,什么样的文档才能满足我?
你优化系统的目标是什么?

英文原文:Are you coding for change or for stability? / 译文:外刊IT评论
来自: 外刊IT评论
6
0
评论 共 5 条 请登录后发表评论
5 楼 0dragon 2013-05-27 13:22
dohkoos 写道
没有目标,优化毫无意义
如切如磋,如琢如磨。不要想着能做出让白痴也能明白的成果,这是不可能的,因为这是复杂适应系统
把易变的代码封装起来
把代码变成自文档的

+1
4 楼 linyuliang 2013-05-25 10:00
在实际项目过程中,我们经常会遇到没有设计,就要求短期上线的需求,更遑论优化。领导会说把设计和优化留在后面,先上线了再说。虽然不情愿,一再跟老板说这样会导致后期的工作量更大。磨刀不误砍柴工的道理很浅显,但是跑不过市场变化,老板会说,这个时间点无法变更,推后一点点,那这个需求就不是你的,先上线再说。最后的结果就是加班加点,吃力不讨好,但是市场弄下来了,名声搞坏了。可惜在中国,现在大多数情况下,名声完全不值钱。。。
3 楼 ykssky 2013-05-24 00:27
1 楼 white_crucifix 的回答是很多人宣称 code optimization 的真实目的... 笑破肚皮了. 
2 楼 dohkoos 2013-05-23 18:25
没有目标,优化毫无意义
如切如磋,如琢如磨。不要想着能做出让白痴也能明白的成果,这是不可能的,因为这是复杂适应系统
把易变的代码封装起来
把代码变成自文档的
1 楼 white_crucifix 2013-05-23 14:35
很多人优化代码的目的是为了让自己更爽,不仅优化自己的,还要优化别人的,呵呵

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 海量(网络)信息检索的核心技术与最新技术有哪些?

    目前网络信息检索技术的核心技术主要有资源定位检索技术、超链接搜索技术、搜索引擎技术等,而智能检索技术、知识检索技术、基于内容的多媒体检索技术、新一代搜索引擎技术和交叉语言检索技术是网络信息检索技术发展的最新技术.

  • 这就是搜索引擎:核心技术详解

    这就是搜索引擎:核心技术详解 张俊林著 ISBN978-7-121-14865-1 2012年1月出版 定价:45.00 元 16开 320页 宣传语:改变全世界人们生活方式的“信息之门” 内 容 简 介 搜索引擎作为互联网发展中至关重要的一种应用,已经成为互联网各个领域的制高点,其重要性不言而喻。搜索引擎领域也是互联网应用中不多见的以核心技术作为其命脉的领域,搜索引擎各个子...

  • 全文检索技术的深层剖析

    全文检索技术的深层剖析 肖诗斌   将文章中所有的文字序列都作为检索对象,找出包含有欲检索词汇的文章 这就是全文检索。全文检索技术根据使用领域分为两类:互联网搜索引擎和企业内容检索系统。两者使用的核心技术都是全文检索 但侧重点有所不同。  全文检索技术的两大类别  互联网搜索引擎面向的是Internet上大量的杂乱无章的网页 主要目的是找到一些有用的参考信息和屏蔽一些有害信息,尽量把有用的网

  • 从“关键词搜索”到“全息路径搜索”

     搜索的本质,比较通俗的一种说法就是,帮助搜索者沿着程序化的路径快速、便捷地到达目标,而且将路径隐藏于搜索行为的背后。在这里,路径起着最关键性的作用,但传统搜索模式的路径对用户却并不开放,这导致了一种路径忽略和路径定势,甚至影响到了“路径搜索”的发展。    以Google、百度为代表的传统搜索属于一种“目标搜索”,主要以“关键词”粗线条地描述用户诉求,相应的搜索输出主要是大量由关键词模糊组织

  • 全文检索的核心技术是将源文档中所有的基本元素的出现信息记录到索引库中

    全文检索是一种基于文本数据的信息检索技术,它通过对文本数据进行分词、索引和匹配等处理,实现对文本数据的快速、准确检索。全文检索的核心技术是将源文档中所有的基本元素的出现信息记录到索引库中,这些基本元素可以是单词、短语、句子等。 在全文检索中,首先需要对源文档进行预处理,包括分词、去停用词、词干化等操作,以便将文本数据转化为能够被检索的索引项。然后,使用倒排索引等算法,将每个基本元素的出现信息记录到索引库中。在检索过程中,用户输入查询语句后,系统会将其进行分词等处理,然后在索引库中查找匹配的索引项,并返回匹配

  • 计算机信息检索系统的核心,(文献检索课件)计算机检索基础.ppt

    文档介绍:文献信息资源是知识的宝库文献检索是开启知识宝库的钥匙美国《化学文摘》封面上醒目的印着:Key To The World’s Chemical Literature自称是“打开世界化学文献的钥匙”形象地说明文献检索的“钥匙”作用医学文献检索与利用郑州大学图书馆第四讲:计算机信息检索基础一、概念计算机信息检索,即利用计算机存贮和检索信息的过程。信息存贮是将文献、数值、事实等按一定的格式输入到...

  • 检索技术核心 笔记

    https://time.geekbang.org/column/intro/298 01 | 线性结构检索:从数组和链表的原理初窥检索本质 数组和链表分别代表了连续空间和不连续空间的最基础的存储方式,它们是线性表(Linear List)的典型代表。其他所有的数据结构,比如栈、队列、二叉树、B+ 树等,都不外乎是这两者的结合和变化。以栈为例,它本质就是一个限制了读写位置的数组,特点是只允...

  • 信息检索导论要点整理

    这是在准备期末考试的时候根据王斌博士翻译的《信息检索导论》(人民邮电出版社出版)和山东大学信息检索实验室的陈竹敏老师的授课课件进行整理的。 、归一化计算笔记繁琐。 前言 1、     IR的两种模式:pull(ad hoc)或者push(filtering) Pull:用户是主动的发起请求,在一个相对稳定的数据集合上进行查询。 push:用户事先定义自己的兴趣,系统在不断到来的流动数

  • 这就是搜索引擎-核心技术详解-清晰完整版

    这就是搜索引擎:核心技术详解,一分钱一分货。清晰、完整。难得一见!

  • 信息检索技术

    扩展:信息检索技术 概念介绍 全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法。全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。 全文检索主要对非结构化数据的数据检索。 结构化数据和非结构化数据 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档,网页等。 当然有的地方还...

  • 五分钟读懂SIGIR 2017前沿技术研究成果

    点击查看全文 SIGIR是展示信息检索领域新技术和新成果的顶级国际会议。 SIGIR 2017 今天开幕,今年阿里巴巴共有两篇文章被大会收录。 以下内容为被收录文章精华内容简述。 一、基于概率隐层模型的购物搭配推送 论文链接:https://arxiv.org/pdf/1707.08113.pdf 这篇文章中,我们对电商领域营销推送场景进行点击率的优化。 SIG

  • 文本挖掘

    一、文本挖掘·概念 文本挖掘是抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识,并且利用这些知识更好地组织信息的过程,是从文本数据中获取有价值的信息和知识,它是数据挖掘中的一种方法。文本挖掘中最重要最基本的应用是实现文本的分类和聚类,前者是有监督的挖掘算法,后者是无监督的挖掘算法。 文本挖掘是信息挖掘的一个研究分支,用于基于文本信息的知识发现。文本挖掘利用智能算法,如神经...

  • 搜索引擎技术核心揭密(PHP)

    编者按:这是一篇精彩的编程教学文章,不但详细地剖析了搜索引擎的原理,也提供了笔者自己对使用PHP编制搜索引擎的一些思路。整篇文章深入浅出,相信无论是高手还是菜鸟,都能从中得到不少的启发。   谈到网页搜索引擎时,大多数人都会想到雅虎。的确,雅虎开创了一个互联网络的搜索时代。然而,雅虎目前用于搜索网页的技术却并非该公司原先自己开发的。2000年8月,雅虎采用了Google(www.google.co

  • 如何高效快捷检索得到核心文献?

    转载于:https://www.cnblogs.com/yymn/p/4556948.html

  • 计算机信息检索系统的核心,《信息检索系统》PPT课件.ppt

    《《信息检索系统》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《信息检索系统》PPT课件.ppt(8页珍藏版)》请在装配图网上搜索。1、第4章 信息检索系统,4.1 信息检索系统的类型 信息检索系统是由一定的设备和信息集合构成,面向一定的用户,具有信息采集、组织、存储、选择和传播等功能的信息服务设施。 书本式检索系统 卡片式检索系统 穿孔卡片检索系统 缩微式检索系统 计算机信息检索系统 ...

  • PostgreSQL 做实时高效 搜索引擎 - 全文检索核心功能

    搜索语法 1.1 tsquery为搜索输入,支持与,或,反,距离语法,如下 & (AND), | (OR), ! (NOT), and <-> (FOLLOWED BY) and <?> (距离多少?), 例子如下: c有两个位置,在匹配距离时,两个都可以。 postgres=# select to_tsvector('a b c c'); to...

  • 搜索引擎技术原理

    1.概述 搜索引擎(search engine)是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,为用户提供检索服务的系统。 2.搜索引擎分类 按照信息搜集方法和服务提供方式的不同,搜索引擎系统可以分为三大类:全文搜索引擎(Full Text Search Engine)、目录索引类搜索引擎(Search Index/Directory)和元搜索引擎(Me...

  • 自然语言处理讲义

      1.综述.1.1. 绪论.1.1.1. 背景,目标.1.1.1.1. 研究自然语言的动力1. 语言是思维的裁体,是人际交流的重要工具。在人类历史上以语言文字形式记载和流传的知识占到知识总量的80%以上。就计算机的应用而言,据统计用于数学计算的仅占10%,用于过程控制的不到5%,其余85%左右都是用于语言文字的信息处理。在这样的社会需求下,自然语言理解作为语言信息处理技术的一个高层次的重要方向,

Global site tag (gtag.js) - Google Analytics