阅读更多

7顶
0踩

行业应用

一个设计人员对于一个成熟的产品要花很长时间才能意识到这个应用程序的用户界面的各个部分并不是一致的稳定可靠。在应用程序不断改进的数年中,会有 一些极其重要但又异常脆弱的组件被开发出来,很多其它功能依赖它们。我把程序里这样的一个特征描述为恐怖地下室:黑暗,陈旧,神秘,性能不稳定但对整个程 序操作至关重要的代码之躯就躺在里面。恐怖地下室难以清理,不好维护——有些东西只有团队中最资深的、最中坚的工程师才能处理的了,其他人唯恐避之不及。

当我作为Microsoft Money项目的主要设计师时,必然的就发现了它的恐怖地下室:用于查看和修改账户交易的复杂的支票登记控制模块。登记控制模块最初是在1990年由传奇 的微软工程师Doug Klunder开发出来。为了在当时的PC机上获得最大的效能,我相信他或多或少的使登记系统直接的在磁盘上对交易数据进行了读写操作。在这种情况下,这 个特殊的UI控制系统整个的、独自的承担起了对整个交易数据进行校验的任务;在这里你看不出有表示层,业务逻辑层和磁盘存储层之分。

这给我们的工作带来了各种各样奇怪的限制。例如,对于任何一个用来创建账户交易的会话,你都要在后台的某个地方实例化一个隐藏的登记控制器。当用户在对话框里输入数据时,会话程序必须小心的把数据拷贝给登记控制器,告诉它保存数据,然后推测保存操作何时能完成。

 

每一次新的版本,登记控制器就会挂上一些新的功能(投资,在线银行,本地化),每一次都会增加程序的复杂度。四年后当我加入这个团队时,这个登记控制器已经变得不可思议的错综复杂了,整个团队里只有一、两个人能够和愿意碰它。



Money register control, circa Money 95: Be afraid… be very afraid.

 

恐怖地下室有个突出的特征,任何其上的工作都会花费不可预料的时间周期;任何的bug修改或功能改进都会导致不可计算的成本代价。就拿 Microsoft Money的登记控制器的例子来说,一个简单的改变交易数据列顺序的动作就可能需要一天,甚至数周的时间。你无法对这个事情进行预估。

 

当我第一次向人透露这个事实时,隔壁Microsoft Word项目组的的朋友向我分享了他们的应用程序里恐怖地下室的故事:一个叫FormatLine的程序的故事。在文档里给出一个点和一个列 宽,FormatLine可以设计出这个点的下一行上的文字的布局。据我听到的,这个程序已经发展出来好几个功能点,每个功能上都有数千行的代码。被指定 去深度了解FormatLine的开发人员抱着既尊敬又惶惶不安的心情,就像探险者深入危机重重的矿井进行勘探一样。

地下室的比喻并不只是用来描述人们对于一个程序蹑手蹑脚的胆怯特征——它同时也反映出这种情况的出现对于一个应用程序来说是与生俱来的。就像一个建 筑物的地基,在没有付出重大的技术代价的情况下,你是不可能把这些代码替换成更加稳固的东西的。大多数情况下,恐怖地下室会被留下来自行其事,直到应用程 序对于寄居的平台慢慢脱离关系,应用程序迁移到一个更新的、稳健的基础上。

 

为了防止你的UI的某个关键的稳固的部分逐渐演变成一个恐怖地下室,你需要在你开发的过程中重构你的代码,这会使得修改活动缓慢而不剧烈。在进行UI修改时,你需要评估一下这对程序基础部分的稳定的牵连有多深。

 

上周,一个在Cozi公司的开发人员来我这里给我出了一个难题。我最初的设计是对Cozi公司的这个家庭日历的UI做一项有趣的修改,这样能够帮助 优化这些陈旧的界面,对用户数据以及广告效果都有好处。不幸的是,在经过了几周的工作后,开发人员发现要想让新的UI在这个可以无限滚动的日历页面上正确 的现实是极度复杂的。这个无限滚动的特征本身十分精致,想要对其做任何修改都十分的复杂,因为它需要在各种浏览器里都能正确的工作。虽然我们可以花时间慢 慢的使这项新特征稳定下来,达到可以接受的质量水平,但我们的日历UI很有可能变得更加脆弱——下一次我们增加新特征时将会面临新的压力,事情也许会在无 法预知(和无法承受的开销)的情况下无法收拾。我们的日历UI将会变成一个恐怖地下室。

 

我们可不愿让这种事情发生。像Cozi这样专注于家用产品的公司,能够让他们的日历UI能得到持续的改进是至关重要的。为了给以后的产品改进提供一 个安全的道路,我们最终认定目前不是做这种修改的好时机。也许等到有一天跨浏览器兼容不再是个头疼的问题(也许是某天我们放弃对IE7、IE8的兼容支 持),我们再做行动。而目前,我们还是有个干净、光线较好的地下室的。

 

[英文出处]:Every app has a scary basement

  • 大小: 58.2 KB
来自: aqee
7
0
评论 共 2 条 请登录后发表评论
2 楼 l4borland 2010-09-21 22:59
在看见垃圾代码或者垃圾系统并准备开骂之前,可以先了解下它们存在的理由,设身处地的想一想,也许你就释然了,至少你可以获得一种知识:原来在XX情况下,XX做法可能会产生垃圾。。。
1 楼 conmind 2010-09-20 17:11
我还以为都是地下室开发出来的

发表评论

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

相关推荐

  • 使用Process Explorer/Process Hacker和Windbg初步定位软件高CPU占用问题

    ” 时任微软公司部门总裁吉姆·阿辛 (Jim Allchin)也表示:“我已经关注马克很久了,他和合作伙伴创造出了一套完善的系统恢复和数据保护软件,相信他的加盟将为 Windows操作系统的开发带来巨大的推动作用。...

  • Maven / Svn / Git 系列课程专题

    专题分为三个阶段: (一): maven的安装,eclipse maven插件的安装 ,创建一个Java项目,创建一个Web项目,创建一个SpringMVC+mybatis项目。 (二):svn服务器的安装,Eclipse中安装svn插件 ,上传project到SVN...

  • 在VScode中搭建C/C++编译环境

    以前一直使用VC6.0来编译C语言程序的,奈何win7、win10不兼容,各种闪退。...编辑器我喜欢用VScode,所以就想着在VScode上配置C/C++的编译环境,顺便写篇博客马克一下 假设你已经安装好了VScode,没有安...

  • 注册https://github.com/账号

    5.注册https://github.com/账号: 马克-to-win:注册账号:markgitisc 密码:见duhb文件 邮箱iscp9158_work@163.com,注册成功后,给出下图。 选择New repositrory,创建一个新的仓库test,其他都默认,见图: ...

  • mipi接口 1280(RGB)*720 LCD屏开发驱动笔记帖

    ps:创业开发产品,自学笔记,不一定适合教材性的阅读,零碎整理,自我总结用 材料:4.1寸lcd屏两块,屏自带触控,屏幕资料具备,rk3399和MK8788开发版上分别开发。 开发环境: 1】rk3399 ​​​​​​​ 开发板:...

  • gcc和makefile用法总结(建议收藏)

    -l(小写的 L)选项用于指明所需静态链接库的名称,注意这里的名称指的是 xxx 部分,且建议将 -l 和 xxx 直接连用(即 -lxxx),中间不需有空格。 由此,就生成了 a.out 可执行文件: [root@bogon demo]# ./a.out ...

  • 【万人千题】结对编程排位赛(第一期) 第一周 排名公布,这也太卷了

    奖品为 CSDN 定制马克杯。 2.2)排名11 - 15 名   这个排名段的人员,中奖概率为 80%,请以下中奖人员迅速联系作者:小虚竹、海拥、可口也可樂、,尽快提供 姓名、手机号、收货地址 给博主,未联系视为放弃,奖励...

  • 程序 = 数据结构 + 算法《禅与计算机程序设计艺术》 / 陈光剑

    程序 = 数据结构 + 算法 “数据结构和算法是过去 50 年来最重要的发明之一,它们是软件工程师需要了解的基础工具。” 《Think Data Structures: Algorithms and Information Retrieval in Java》(Allen B.Downey) ...

  • 计算简史:什么是计算机?《禅与计算机程序设计艺术》 / 陈光剑

    ”看到巴贝奇迷惑的眼神,她又笑着补充说:“您说我像野人见到了望远镜。”巴贝奇恍然大悟,想起已经十分遥远的往事。 原来这位女士是大名鼎鼎的英国诗人拜伦之独生女——阿达·奥古斯塔。 在大型差分机进军受挫的...

  • 概率统计极简入门:通俗理解微积分/期望方差/正态分布前世今生(23修订版)

    在17世纪下半叶,数学史上出现了无穷小的概念(单单无穷小、无穷大的概念就讨论了近200年),然就算牛顿和莱布尼茨提出了微积分,但微积分的概念尚模糊不清,在牛顿和莱布尼茨之后,后续经过一个多世纪的发展,诸多...

  • 图像去噪重要文献整理(二)BM3D / LSSC

    图像去噪重要文献整理(二)BM3D / LSSC 仍然是基于自相似性,BM3D是传统方法里的state of the art,下面介绍BM3D。 ...Image Denoising by Sparse 3-D Transform-Domain Collaborative ... —— 作家,马克吐温

  • メロディ / Melody

    目录 基本资料 面板值(无天冥加成) 天冥奖励 战斗宣言(VC) 技能 回到人物索引 基本资料 NS(4★) NS(5★) 卡池 (Ver 2.7.90) 卡池 (Ver 2.7.90) — リヴェットの書 (工業都市廃墟VH) 天冥 属性 武器 防具 属性...

  • 软件测试书单/书籍推荐(整理更新中)

    《数据结构与算法分析》 [美]马克·艾伦·维斯(Mark Allen Weiss) 《数据结构与算法之美》 王争 其他待补充 / / 22 面试相关 书名 作者 图片 《Python程序员面试算法宝典》 张波 楚秦 《剑指Offer:名企面试官精讲...

  • 天气/气象相关公开数据集

    数据展示 数据下载 DataCastle-数据科学创新与实践平台 Weather 马克斯普朗克天气数据集 背景描述 该数据集包含 14 个不同的特征,例如气温、大气压力和湿度。从 2003 年开始,每 10 分钟收集一次。为了提高效率,...

  • 构建 NodeJS 影院微服务并使用 docker 部署【01/4】

    如果你不这样做,我建议你按照我之前的文章如何使用Docker部署MongoDB副本集。 二、首先,什么是微服务? 微服务是一个独立的单元,它与许多其他单元一起构成了一个大型应用程序。通过将应用拆分为小单元,应用的每...

  • 为什么 VR/AR 越聚焦越远

    在整个 2015 年和 2016 年,马克扎克伯格重申了他的信念,即在十年内,“外观普通”的 AR 眼镜可能会成为日常生活的一部分,取代拿出智能手机接听电话、分享照片或浏览网页的需要。网络,而大屏幕电视将转变为 1 ...

  • 【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?

    1944年世界上第一台计算机马克1号诞生,之后在世界上第一位女程序员格蕾丝-霍普接手下,顺利改造成马克二号。 1946年的一天,霍普敲代码的时候发现计算机发生了故障,就在马克二号的继电器触点里,找到了一只被夹扁...

  • 毛概(毛中特)期末/考研复习笔记——导论

    导论 马克思主义中国化的历史进程与理论成果 一、马克思主义中国化的内涵 马克思主义中国化的内涵: 马克思主义中国化的必要性:

  • UI设计工具(马克鳗)

    不错的UI设计工具,如有问题请博客留言。

  • cvpr2019论文汇总(论文/代码/项目/论文阅读)

    来源:https://mp.weixin.qq.com/s/SmS-guwg6oUqPYwfeC6iiw 论文解读汇总:http://bbs.cvmart.net/topics/287/cvpr2019 论文分类照片汇总:...CVPR2019论文直播分享计划: cvpr2019接受论文列表:ht...

Global site tag (gtag.js) - Google Analytics