文档章节

雷观(十三):功能优先,开发与重构并举,性能殿后

FansUnion
 FansUnion
发布于 2015/05/03 01:25
字数 1176
阅读 7
收藏 0
      根据自己2年多的实际开发经验,我认为:在项目开发过程中,功能是最优先的,开发与重构同样重要, 性能放后面考虑

    我们工作的最基本目标是,保证工作单位的项目能够如期交付,至少要保证自己的进度。一份薪水,一份责任。
此外,作为技术工作者,我们也有自己的技术追求,提高写程序的能力,写有含金量的代码,保证自己的能力能够与时俱进。

    功能优先,进度就是最直接的要求。对于有可视化界面的项目来说,功能能跑通更是最基本的。Boss看不到界面和功能可以正常运行,是不能清楚地知道你的进度了。客户看不到界面,就等于未完成,人最怕没有进度条,只能焦急地等待。下游环节,比如功能测试等,不到完成的功能交付,真正的测试工作就无法开始(测试用例可以提前编写)。

   重构与开发并举, 项目开发过程中,重构很重要。前期的设计再详细,不到实际动手编码,很多问题的细节,你是考虑不到的。因此,代码功能虽然完成了,但是经常存在思路不清楚、代码重复等小问题。所以,开发完一个小功能,重构一下,比如提取清除不必要的临时变量、取个更准确的方法名称、提取公共的逻辑为工具方法等。而在后期,大的重构则要慎重。主要是这个时候,重构与项目质量与项目进度可能冲突。尤其是对项目负关键责任的经理等人,不希望在交付前期,出现差池。

性能殿后,不是说性能不重要,而是说性能不好衡量,在项目前期和运营前期,性能不好向客户等角色阐述它的价值。此外,很多项目前期对性能的要求根本不会太高,只要不乱写代码,性能应付前期一般是可以的。
  很多项目,比如针对普通消费者(to-c) 的项目,前期可能就对性能有明确要求。针对这种情况,我觉得:项目的架构设计、代码组织、数据库设计,只要保证结构清晰和业务清晰,后期优化是很容易的,基本不会对代码的整体结构有大的改变。比如增加缓存,不会对核心业务有改动。

  以上是大道理,下面以我最近的项目开发经历, 再谈谈一点体会。

  项目,后端是个管理系统,从后台读取数据,然后显示当前用户可以操作的菜单。

   功能优先,我们有3个开发,同时进行编码。菜单是项目最基本的,没有菜单,开发测试非常不方便,所以非常迅速简洁地把权限和菜单做了出来。
   
   开发与重构并举,最近主要功能完成了,我想对菜单这块进行重构。以前为了优先保证整体进度,菜单相关表存储了一些额外的数据,感觉比较多余,而且要完成新的功能,又需要编辑这张表的数据。手动维护冗余字段,给新功能带来了额外的工作量。所以,我觉得先重构,再完成新功能。

   但在重构中,我范了“编码之大忌”,这是一个反面典型案例。

  我一边完成正常功能、一边为了保证程序的性能,写了不少功能之外的代码。大概是这样,把List集合转换成Map格式的Tree树,写的是递归算法。本来递归,对思考逻辑就要清楚,为了性能,多写了判断“提前返回” 的优化代码。结果很惨,优化代码写得不准确,导致最后的菜单数据,不出来、数据不完整(提前返回导致的)。

  事后反思,我觉得写代码的时候,尽量先专注一件事, 逐个击破比较好。把功能正确实现,在写的过程中,如果有疑问,比如数据校验、性能之类,可以先写个"TODO:需要优化",等功能测试通过,再搞下一个。One by one, it is good.


雷观:小雷FansUnion的个人观点,欢迎互动交流
2014年12月15日
湖北-武汉-循礼门

© 著作权归作者所有

FansUnion
粉丝 60
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问
对技术负债,技术和业务权衡和重构,重写,升级的一些看法

技术负债 在技术圈,有一个债务术语叫【技术负债】或者【技术债务】。【技术负载】带来的显性和隐性成本是非常高的。 显性的是技术不给力, 运营/产品/商业团队都很难受,而这种难受实际带来...

祝威廉
03/25
0
0
西安葡萄城招聘啦:Web、UI

UI/UE工程师 职位描述 负责新产品Web端的用户界面(UI)设计工作 负责新产品Web端的用户体验(UE)设计工作 全面负责产品的用户界面配色,图标,布局以及用户行为的设计 协助产品经理在用户体...

葡萄城技术团队
2015/02/06
1K
11
JeecgBoot版本4月份新版即将发布,抢先体验。。。

JeecgBoot版本4月份新版即将发布,抢先体验。。 即将发布版本-更新日志: 1.代码生成器GUI工具 2.支持一对多代码生成器 3.支持按钮权限 4.支持数据权限 5.Excel导入导出工具集成(支持单表,...

Jeecg
04/02
138
0
【社招/校招】字节跳动深圳-Android/iOS开发工程师

简历投递邮箱:chenshaoming.ing@bytedance.com 【公司介绍】 字节跳动成立于2012年3月,目前公司的产品和服务已覆盖全球150个国家和地区、75个语种,曾在40多个国家和地区排在应用商店总榜前...

11/14
0
0
java分词工具hanlp介绍

前几天(6月28日),在第23届中国国际软件博览会上,hanlp这款自然语言处理工具荣获了“2019年第二十三届中国国际软件博览会优秀产品”。 HanLP是由一系列模型预算法组成的工具包,结合深度神...

左手的倒影
07/03
27
0

没有更多内容

加载失败,请刷新页面

加载更多

线程池总结

1、主要参数说明 corepoolsize核心线程数、maxpoolsize最大线程数、keepalivetime闲置线程收回时间设置、workQueue工作队列(synchronizeQueue、LinkedBlockingQueue、ArrayListBlockingQueu...

青菜番茄h
3分钟前
2
0
Linux 下防火墙开启端口

1. 查看系统防火墙状态(running 表示开启运行状态) firewall-cmd --state 开启防火墙:systemctl start firewalld.service 关闭防火墙:systemctl stop firewalld.service 2. 开启端口外网访...

newdengs
6分钟前
2
0
一文看懂 K8s 日志系统设计和实践

上一篇中我们介绍了为什么需要一个日志系统、为什么云原生下的日志系统如此重要以及云原生下日志系统的建设难点,相信DevOps、SRE、运维等同学看了是深有体会的。本篇文章单刀直入,会直接跟...

阿里巴巴云原生
7分钟前
1
0
2019上海会议还有哪些召开,11月及12月的互联网技术类等大会?

2019年还剩下40多天的时候,上海有还有哪些会议召开呢?让我们跟随活动家官网的展示,看看今年还剩下哪些会议可以去参加! 上海2019年11月至12月会议列表清单 技术/互联网/通信/区块链 类 20...

活动家峰会
9分钟前
1
0
2019最新数据分析软件PASS&NVIVO视频教程合集

还在为数据繁杂而困扰吗? 还在为不知道怎么提炼有价值的数据而焦躁吗? 别担心,解决的办法来了!本文就为大家介绍两款数据分析的实用软件。当然介绍软件的同时,更有两款软件最全的视频教程...

yuyuyuyo
10分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部