作者 | 拭心
责编 | 郭芮

一眨眼已到 2018 年底,我入职喜马也一年多了,这一年里成长了不少,但对外输出少了很多,主要原因还是太懒。今天趁懒癌没发作,跟着 Git 提交日志,回顾一下这一年多写的代码。

刚入职一个多月的提交

可以看到,我的提交日志还是比较清晰的,当次提交做了什么基本可以一目了然。

刚开始那一个月,主要是熟悉项目,然后做一些比较简单、关联性比较低的需求,比如直播首页、个人资料卡的修改。

新人对项目了解不够,最好不要一上来就分配业务状态比较复杂、涉及面比较广的需求,那样风险太大。

这个阶段我做的还算可以,变量、常量命名合理易懂,异常情况考虑的也还算周到,上线后基本没有什么 bug(其实是做的功能比较简单哈哈)。

入职两个多月的提交

十一月主要做的是创建直播,这个需求比较典型,是一个页面有多种状态,编辑、预览、修改等等。

开发这种页面样式、接口比较相似的需求,最好抽象出共同的基类或者接口,然后根据不同逻辑选择不同的实现,避免在其中通过 if-else 添加各种判断逻。这种模式就是常说的“策略模式”。

比如我这样:

private ILiveCreateOrEdit getImplByType(int type) {    switch (type) {        case TYPE_LIVE_PREVIEW:            return new LivePreviewInfoImpl();        case TYPE_PREVIEW_EDIT:            return new LivePreviewEditImpl();        default:        case TYPE_COMPOSE:            return new LiveCreateImpl();    }}

ILiveCreateOrEdit 里定义了创建直播、直播预告、编辑直播都要有的功能,比如初始化 UI、请求接口、点击固定按钮的逻辑。三个实现里完成对应状态的布局显示和接口请求,避免了使用 if-else 的杂乱。

不仅仅是页面相似的,逻辑相似的也可以使用这种模式。比如一些图标、徽章、挂件的下载、查询,都是一样的逻辑,我都把他们放到了一个管理器里,定义接口然后再具体实现。

我们新开发一个需求时,不要急着实现,可以先花点时间想想现有的哪些需求可能和这个类似,能否把他们的逻辑抽象出共同之处,这样后面有类似的需求可以基于这个共同的直接进行拓展开发,看似现在是多做了工作,其实是为以后节省时间。

继承优于拓展;

重复使用的布局、类,最好抽象出共同的基类或者接口,然后通过继承实现,避免在其中通过 if-else 添加各种判断逻辑;

以前总喜欢把一个类用到很多业务,结果导致在里面充斥了大量的判断代码,时间久了自己维护都费劲,实在是不好的风格。

入职三个多月的提交

从日志可以看到,这个月我主要在解决一些 bug。

其中一部分问题属于 UI 问题。我开发时遇到不太舒服的样式、交互会自行修改,然后拿着修改后的找产品、设计师沟通,有的时候他们会被我的机智所打动,同意修改。但更多时候,我的意见都被驳回,看来我的审美还是不够好 0.0。

还有一部分问题是“过度优化”导致的。有时候写业务,不由自主的想优化一下,比如复用、回收、预加载。本意是好的,但奈何我心太粗,只想着优化的好处,没有针对优化可能导致的问题做出处理。比如复用时的状态异常处理,对象池的额外开销,预加载选择的时机等等。

任何优化都是双刃剑,不仅要考虑益处,也要考虑代价。

再有就是对自己写的代码不熟悉导致的。比如对 View.post() 的实现不熟悉;对 LruCache 的 maxSize 和 sizeOf() 理解不到位;对 CopyOnWriteArrayList 的迭代器不熟悉;对项目组件生命周期不熟悉等等。

对项目、对运行在诸多用户上的代码要有敬畏心,对自己所写的要尽可能多的理解,确保没有问题。

最后就是那时候提交代码没有养成 review 的习惯,偶尔会提交了错误的代码,比如 refactor 影响到不相干的代码。后面纠正了这个问题,commit 前基本都会检查。

做的不好的是,在提交 log 里没有写清楚 bug 原因,对于一些可能再次犯的问题,应该在 log 上写清楚。

使用英文作为日志的提交

这个阶段我不知道吃了什么药,开始使用英文写提交日志,可能觉得很酷吧。

回过头再看,发现这种提交,根本不直观,因为一些细节不好用英文表达,提交日志就写的比较简单、模糊,在后面排查问题时,无疑增加了难度,不太建议这样。

上线一个大功能前的提交

五六月份开发了一个相对复杂的功能,这个功能涉及到的状态、异常情况比较多,出的 bug 就比较多,于是有了上面这样整齐的解决 bug 日志。

这个经历能学到哪些知识呢?

拿到需求,先不考虑如何实现,而要考虑这么做是为了什么,知道目标后,哪怕当前需求因为技术无法实现或者实现成本太大,也可以尝试提出替代方案,而不至于直接推掉。

拿到业务,先分层,界面 -> 数据 -> 消息,虽然代码不是 MVP 模式,但思考可以像 MVP 一样先定义各层接口,然后确定依赖,不同类之间尽量不要直接依赖类,而要依赖一个接口。

避免直接依赖;

类 B 中调用类 A 很多方法的话,就让类 A 实现接口 X,然后 B 持有 X 的引用,那样将来类 A 修改继承自谁,也不会影响这些旧代码;

也不要直接调用其他类的成员,通过 getter 方法调用,那样在值异常时做一些处理可以直接在方法内部完成,而不需要修改所有调用的地方。

还得重视异常情况的处理。比如弱网、飞行模式、App 奔溃、强杀应用,这种状态恢复到正常状态后,如何恢复现场呢?客户端样式状态最好以服务端为准,一些比较敏感、常变的可以使用轮询。

以服务端数据为准,但客户端要做好兜底,直接影响状态的数据要做兜底,数据异常时提供默认状态好过显示异常。

优化相关的提交

可以看到,我的优化日志也不够详细,没写清楚都做了什么优化。以后得把优化的内容也写明白。

静态代码检测帮助我发现了很多细节问题,比如:

  • StringBuilder 要拼接的字符串大于 16 时,构造需要声明初始容量,不然会频繁扩容;

  • 在使用 StringBuilder.append() 方法连接字符时,避免使用 string 类型,用 char 类型连接字符;

  • 不要 new 包装类,使用 valueOf() 方法代替;

  • Integer.parseInt() 和 Integer.valueOf() 的正确选择;

  • DateFormat 的多线程不安全问题;

  • …...

还有一些业务逻辑的优化,比如数据对比、局部刷新、动画效率、内存泄漏等等,都是比较常见的。业务需求比较多,在性能方面做的还不够,这一点比较惭愧。

和领导沟通,说到,除了敬畏心、责任心,开发还需要具备追求完美的心态,对自己写的项目要多玩、多用,主动发现不足之前并优化。后面我得更加关心性能和体验。

总结

在没有养成写周报、正确对待提交日志的习惯之前,我在回忆工作内容时,常常会很迷茫,记不起自己究竟做了什么,学到了什么,产生了什么价值。

过去的这一年多,我的提交日志还算有些价值,跟着日志简单回顾了一下这一年多做的事,发现可以改进的地方很多,后面还得继续努力才行啊!

改进意见:

  • log 信息前面使用 tag 标明分类,[feature] [fix] [perf];

  • 提交粒度要够细,以备不时之需,完成独立的功能就提交;

  • 日志信息要写清楚,做了什么功能,解决了什么问题(原因是什么),优化了什么(有什么改进);

  • 需要经常回顾工作内容,提出改进意见。

作者:张拭心,长期在 CSDN 上写作,CSDN 博客专家,公众号“zsx跃迁路”维护者。热爱读书写作,目标是写出有趣的技术书,目前研究方向为前端和移动端。本文来源于个人博客:https://blog.csdn.net/u011240877/article/details/84001196。

声明:本文为作者投稿,版权归其个人所有。

 热 文 推 荐 

☞燃爆了!胡歌秒变最帅产品经理发布荣耀V20!

☞BAT 缩招,AI 跻身 2019 年最赚钱职业榜首!(附薪酬表)

☞支付宝辟谣交易 5 万受监控;App Store 宕机;谷歌抛弃 AI | 极客头条

☞雷军:执掌金山纯属意外

☞关于5G接入网,看这一篇就够啦!

☞别说创业维艰,16岁开发者从辍学歧视死亡威胁, 到开发出爆款应用, 她的人生远非成人想象

☞AI in 美团:吃喝玩乐背后的黑科技

☞老程序员肺腑忠告:千万别一辈子靠技术生存!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

喜欢就点击“好看”吧!

2018 终了,是时候秀出我的 Git 进化日志了!相关推荐

  1. DayDayUp:吴晓波—2018.12.30年终秀——《预见2019:国运70》演讲重点概览【文字+视频】

    DayDayUp:吴晓波-2018.12.30年终秀--<预见2019:国运70>演讲重点概览[文字+视频] 目录 一.回顾2018 回看2017年终秀的8个预言 五大悬念 二.展望201 ...

  2. 北方计算机专修学院“展示自我 秀出风采” 网页创意设计大赛成功举办

    为丰富学生校园生活,使学生更好地利用DW网页设计技术,提高创新创业实践能力,2018年10月28日晚7:00北方计算机专修学院首届"展示自我.秀出风采"学生网页创意设计大赛,在我校 ...

  3. C#精髓【月儿原创】第二讲 WMI完美秀出CPU编号厂商主频百分比等全部信息

    说明:准备出一个系列,所谓精髓讲C#语言要点.这个系列没有先后顺序,不过尽量做到精.可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注. C#精髓 第二讲 WMI完美秀出CPU编号厂商主频电 ...

  4. python彩票分析_数字化场景应用平台加持,开课吧学员Python挑战赛秀出代码精彩...

    来源标题:数字化场景应用平台加持,开课吧学员Python挑战赛秀出代码精彩 企业在数字化转型过程中,如何应对数字化人才短缺成为了最大挑战.同时,很多企业还意识到在外部人才争夺战日益激烈的大背景下,仅仅 ...

  5. oppo 手机侧滑快捷菜单_OPPO刚秀出卷轴屏手机,就被打了一记响亮的“耳光”

    在刚刚过去的未来科技大会上,我国国产手机厂商 oppo可谓是出尽了风头,因为他们推出一款名叫"OPPO X 2021"的卷轴屏概念手机,并且展出了可操作的概念机实物,着实让所有人都 ...

  6. 新版经营级秀出打赏系统源码+带支付模块/视频教程

    正文: 下方是程序完整标题: 最新经营级秀出/视频打赏系统源码+带支付/教程,源码仅用于学习研究,请勿用于其它用途,否则后果自负,源码演示图放到压缩包了,有兴趣自己去看. 程序: wwtus.lanz ...

  7. 长沙理工计算机竞赛黑马,2018年五大学科成绩出炉,长沙杀出一匹黑马!

    2018年五大学科成绩出炉,长沙杀出一匹黑马! 导读:随着第32届中学生化学奥林匹克竞赛决赛的落幕,2018年全国中学生五大学科竞赛已经全部结束,湖南长沙也在这场竞赛上杀出了一匹黑马.为方便大家了解湖 ...

  8. 浠水一中2021年高考成绩查询,浠水一中今年高考怎么样?2018湖北高考录取分数线出炉!文科一本561分,理科一本512分...

    原标题:浠水一中今年高考怎么样?2018湖北高考录取分数线出炉!文科一本561分,理科一本512分 就在今天! 6月23日 湖北高考成绩发布了! 最牵动人心的一刻终于到来!! 网上爆料:据不完全统计, ...

  9. 最新经营级秀出打赏系统源码+带支付/视频教程

    正文: 下方是程序完整标题: 最新经营级秀出/视频打赏系统源码+带支付/教程,源码仅用于学习研究,请勿用于其它用途,否则后果自负,源码演示图放到压缩包了,有兴趣自己去看. 程序: wwurg.lanz ...

最新文章

  1. 由c#的值类型与引用类型说开去
  2. poker java idea_JavaBasic学习笔记
  3. 怎样在线把别人web前端代码抓下_自学web前端8个月,我是怎样拿下7K薪资的?
  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述
  5. 1009 Product of Polynomials (25 分)【难度: 简单 / 知识点: 模拟】
  6. QT的QStackedWidget类的使用
  7. python观察日志(part15)--命名元祖namedtuple
  8. 1.3 Linux存储技术
  9. 夏普电视出现android不动了,夏普电视常见故障问题分析与处理,电视机故障判断检修...
  10. 射频电路PCB设计技巧
  11. IMX6UL 飞凌 LINUX 学习记录(1)
  12. 前端小白初识CMD(dos窗口命令)
  13. Android热更新,android组件化通信
  14. Dashed hopes 破灭的希望,新兴国家的出路在何方?经济学人精读
  15. [转]山寨手机初用者攻略
  16. Java中集合相关案例(泛型通配符、Collections工具类、TreeSet、TreeMap、HashMap、HashSet和集合嵌套案例)
  17. 小工具:用C++读取TGA并输出数据到文本
  18. CMSIS-RTOS2 入门教程 [2]——RTX_Config.h配置
  19. 马云布局大阿里蓝图:美好但需跋涉
  20. centos7 linux ffmpeg 视频 顺时针 旋转 90度 shell 懒人系-16

热门文章

  1. leetcode python3 简单题70. Climbing Stairs
  2. Ubuntu16.04LTS安装XMind8并创建运行图标
  3. 自定义Flutter控件
  4. 中国水银矿石行业市场供需与战略研究报告
  5. 显示墙 显示服务器地址,云墙怎么看服务器地址
  6. php选择nginx还是apache,浅谈apache和nginx的rewrite的区别
  7. 陪跑 Android 十年,这家操作系统创业公司终于实现盈利!
  8. 马斯克亲口承认:自动驾驶的开发难度超乎想象;小米再发1.2亿股权激励;Firefox Lite 已死|极客头条...
  9. 快手技术嘉年华喊你来参加啦!
  10. Google 和腾讯为什么都采用主干开发模式?