没什么技术含量的Remove Before Flight
航空业有很多值得我们借鉴和学习的工作方式,将来有时间我会给大家引荐更多实例。
仔细观察每架停泊着的飞机,会发现机身很多地方都挂着细长的红布条,上面写着“REMOVE BEFORE FLIGHT”,中文翻译成“飞行前拆除”。这种布条没什么技术含量,但是非常重要!
比如,为了避免杂物或者昆虫进入皮托管,一般会给皮托管戴上套子,但是起飞前必须取下套子,否则飞行员就无法获得空速数据,从而导致事故。还有起落架安全插销,预防飞机在地面时起落架意外收起,但是忘记拔掉的话,起飞后就会因为无法收起起落架而被迫返航,虽然不至于坠毁,但是燃油损耗(包括可能需要进行空中放油)、折旧(比如轮胎、刹车的磨损)等,成本咂舌。
在这些不起眼但又不能跟随飞机上天的部件上挂一根红布条,便是为了机务人员做航前检查时避免疏漏。
触类旁通,这根小小的布条,对于程序员朋友们也很有实用价值。挂在冲锋衣上?挂在双肩包上?Stop,说正事儿!
我们在调试代码的时候,常常会写死一些变量的值,比如GPS坐标、数据库查询条件、轮询时间间隔、版本号等等,这些定值方便了调试工作,但是就像皮托管套和起落架销子一样,是绝对不能随着软件更新发布出去的——严格地讲,甚至都禁止合并到主干代码。
不幸的是,人是不可靠的。很多时候我们都会因为忘了将这些定值移除结果导致程序无法正常工作。其实都是些低级错误。
分享一下我的做法,没啥技术含量,希望能给你带来些许启发。当然,也欢迎更好的建议!
假设有一个定时刷新数据的功能,实际业务要求每2小时检查一次,时间间隔定义如下:
private static final long INTEVAL_DATA_RELOAD = 2 * 3600 * 1000;
调试的时候,为了缩短等待时间,我们可以设为5秒一次。
private static final long INTEVAL_DATA_RELOAD = 5_000;
于是这里就存在一个隐患,2小时被缩短为5秒钟,代码本身没有问题,所以别人在审核这段代码的时候,除非对业务需求很了解,否则不大可能注意到5秒只是调试代码,不能提交到服务器更不能打包发布。
我的惯用做法就是,同时保留两段代码:
private static final long INTEVAL_DATA_RELOAD = 5_000; // TODO: Remove before flight!
// private static final long INTEVAL_DATA_RELOAD = 2 * 3600 * 1000;
我会告诉我的同事,code review的时候,任何带有“Remove before flight!”标记的代码,除非是注释掉的,否则都不能提交。并且我也鼓励他们使用同样的标记来标注代码。
上面代码有个好处,使用快捷键,删一行、取消注释一行,两步操作迅速恢复原貌。
所以我在提交代码前,会全文搜索“Remove before flight!”,然后逐一删除或注释掉。当然也可以从TODO框里直接定位,不过如果项目里还有很多其它TODO标记,那还是全文搜索比较保险。
为了方便添加这个标记,我会使用代码模板功能,以Android Studio为例,在Live Templates里添加模板:
这样就只需在要添加这个标记的位置输入“rbf”,然后一Tab就出来了。
还有一种情况也会产生大量冗余代码。当我们在调试一个调用关系很深,尤其是存在大量回调的bug时,常常不得不靠输出很多日志来观察代码的实际运行情况。一方面,这些Log的输出可能是实际开发不需要的;另一方面,因为项目本身也存在很多日志,比较容易混在在一起。如下是我的习惯:
public static final String TAG_BUG_9321 = "BUG9321"; // TODO: Remove before flight!
private void validate(String content) {
Log.d(TAG_BUG_9321, String.format("Validate content: %s", content));
doValidate(content, new ValidateCallback() {
@Override
public void onValidated(String result) {
Log.d(TAG_BUG_9321, String.format("Validated result: %s", result));
}
});
}
因为TAG是公开级别,所以在其它类、包里面,只要是这个bug牵扯到的地方,都可以使用同一个TAG,然后在Logcat里设置filter为“BUG9321”,就可以非常清楚地了解代码的实际执行情况,提高修复问题的效率。搞定了bug之后,删除标有RBF标识的代码,所有临时的日志输出调用立马显形,逐一删除,确保代码能够成功编译,就可以着手提交了。
没什么技术含量的Remove Before Flight的更多相关文章
- 谈“技术含量”的问题
最近又从离职同事那里听到这样的抱怨(原因),说做的事没有技术含量.想一想,从事车载软件开发这个行业快8年了,这个话题似乎从来没有停过.我自己曾经也为自己做的事是否有技术含量而苦恼过,今天就专门花点时间 ...
- CURD系统怎么做出技术含量惊艳面试官
在<CURD系统怎么做出技术含量--怎样引导面试>有朋友开玩笑说都用上了领域驱动了,就不叫CURD系统了吧.这里我解释一下,怕大家对DDD领域驱动设计有什么误解. DDD是为解决软件复杂性 ...
- CURD系统怎么做出技术含量--怎样引导面试
引子 很多朋友可能会因为自己做的工作不是特别核心或者业务简单而引起面试中没有自信.但是很多公司面试的时候是可以接受面试者之前岗位的并发量.交易量低一些的.比如我们要招聘和我们交易量同等级或者以上的出来 ...
- angular.js ng-class-even ng-class-odd ng-cloak(没啥技术含量)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- php 二维数组(没啥技术含量)
<?php $cars = array( array('benchi',20,18), array('baoma',30,21), array('aodi',23,9) ); echo $car ...
- 不要迷恋那些没技术含量的Linux发行版
昨天悲剧了,重装系统,一个手贱点了替换原系统,分区全给删了,将近三天的工作成果没有了.
- Bugku-CTF之网站被黑(这个题没技术含量但是实战中经常遇到)
Day11 网站被黑 http://123.206.87.240:8002/webshell/
- 如何做好Code Review
Code Review(代码审查)很多团队都会做,效果如何不好说.如果你能轻易地从一堆出自正经团队之手的代码里找出几个低级错误,往往意味着团队管理者长期忽视了Code Review的重要性. 根据经验 ...
- 基于ajax与msmq技术的消息推送功能实现
周末在家捣鼓了一下消息推送的简单例子,其实也没什么技术含量,欢迎大伙拍砖.我设计的这个推送demo是基于ajax长轮询+msmq消息队列来实现的,具体交互过程如下图: 先说说这个ajax长轮询,多长时 ...
随机推荐
- JavaScript中涉及得运算符以及运算符的优先级
在js中主要有三种运算符:算术运算符,逻辑与比较运算符,位运算符.在着三种运算符中,最常见的应该是算术与比较运算符,位运算符比较少见一些 *说到了运算符,就不得不说运算符的优先级.下面我来列一下这些运 ...
- eclipse的maven项目中找不到Maven Dependencies
菜菜的我又来了,笨鸟不一定要先飞,但一定要坚持 今天记录一个初级错误 比如我们在eclipse创建maven项目来运行我们的web项目 搭建完工程后发现javax-servlet包全部报错 到这里我还 ...
- Phalcon调试大杀器之phalcon-debugbar安装
Phalcon 是一款非常火的高性能C扩展php开发框架.特点是高性能低耦合,但遗憾的是长期缺少一款得力的调试辅助工具. 目前版本主要以Laravel debugbar的具有功能为蓝本开发,并针对ph ...
- Nginx 静态资源缓存设置
在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置.在常用的缓存设置里面有两种方式,都是使 ...
- PS图片去色
快捷键:Ctrl+Shift+U 或者:图像-调整-去色
- Vijos 1404 遭遇战
Vijos 1404 遭遇战 背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区 ...
- 原创!!jquery简单tips和dialog
<!------------------html代码-----------------------> <!DOCTYPE html><html><head&g ...
- ci框架基础知识点
一.路由 1.index.php/test/hello->控制器test的hello方法 2. 也可以手动配置路由 app/config/routes.php中 I:$route[' ...
- CentOs 7 中安装tomcat8
1,下载tomcat8.0 进入tomcat的下载地址:http://tomcat.apache.org/download-80.cgi 2,上传到linux服务器 cd /usr/local/jav ...
- MySQL双主一致性架构优化
一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点. 在一个MySQL数据库集群中可以设置两个主库,并设置双向 ...