鼎叔的编程慢习惯

这次谈谈纯技术,谈一些编程习惯的事情。

标题是「编程慢习惯」,为什么是「慢习惯」呢?

因为我今天分享的这些习惯在短期之内会增加时间开销,不能立即获得什么收获。但时间久了,至少对我自己是非常有帮助的,为我节省了不少的时间同时在编程能力上也获得了成长。

另外在啰嗦一下,本文并非针对高手的,如果您是高手,可以跳过后面的内容了,接着看下去会耽误到您宝贵的时间。

一、做自己的需求文档

我们在编程时,是否充分的了解了需求,关系到我们后续所开销在项目上的时间。做一个新功能通常不会让我厌倦,但是一次次的修改却会让我身心疲惫。特别是一些本身就时间紧任务重的项目,就意味着需要一整晚又一整晚的加班赶工了。

具体比如说,以下3点会大量增加我们的时间精力投入:

1.需求本身就存在问题,逻辑无法走通,但是这个时候已经写了不少或者和之前的代码冲突到了。

2.部分需求没有表达清楚,沟通后发现对时间的需求误判了,规定时间内完成变得困难

3.写到一半,发现自己思路不对不得不重头开始整理

解决这些的方法每个人都有每个人的选择,我的选择是做一份自己的需求文档。这份文档内容并非是产品经理或者技术主管、需求方所表述的,而是基于我的理解进行的二次整理。

需求文档当中大概有这么几部分的内容:

1.项目的基本概述

项目的简述,这个项目到底在做什么

完成的目标,最终使用人对于使用这个系统的实际需求

预计交期,DEMO演示的日期,交付测试的日期,上线的日期

2.项目的资料

服务器账号和环境

需求文档

开发、生产环境需求

参考的项目或代码

沟通会议记录

3.业务相关

业务核心逻辑,通常还会转换为初步的实现逻辑

执行流程

4.实现

需要做的功能拆解

数据规模

实现方式

对现有系统影响的改动点,如果是全新系统可以忽略

5.其他

测试单元规划

记录完这些内容会花掉不少时间,中间可能还要跟需求方、产品经理进行多次沟通。至于细节到底多细,没有一定的标准,视项目和个人情况而定。

最重要的是做到心中有数,对开发周期的心中有数、对模块大致划分的心中有数,对内部流程的心中有数。

花力气为自己做的需求文档。在完成后,不仅核心要点印象深刻,后期检索也会非常方便,最大限度在已知条件下降低走弯路的概率。从过往经验来说,等到开始开发以后再去查聊天记录,或者是找相关人员询问,就慢的多了。

二、用最笨的方法先去实现

需求文档做好了之后,我就会开始动手写代码,会把需求文档中最核心需要实现的业务逻辑独立分解出来,做一个Demo。按照输入、处理、输出,三个部分进行编写。

基本上不会去写太多的注释。也不会去想模组如何构建以及语法是否美观可读、效率是否是最优。能够得到正确的输出结果为第一位有优先。这样做可以随意修改,而且代码量少,如果实现过程出现问题,很容易就可以定位到原因。

把功能实现以后,先做压力业务逻辑测试,没有问题,再移植到项目中。移植的过程时,本身也是对代码逻辑的Review,思考实现的合理性与是否需要进行一些调整。

这里还有一个重点,通常稍大的项目是无论时间有多紧张,也不能不经思考直接的去把代码直接复制进去。给自己挖坑的事情越少做越好。

三、做压力测试调整结构设计

很多程序员习惯把代码先写完,交付前最后在做性能测试,如果前面的设计就没有考虑到性能问题,就很头大了,代码也没有时间可以重写,就这么将就着先用了。最后一直被性能问题所困扰着。

业务的需求和压力在哪里,产生瓶颈的核心点在哪里。如果你做为程序员也能懂这些,不仅有效避免后续的修改次数,自身价值也会更高。

所以我在DEMO实现后,就会习惯性考虑性能问题。模拟预想中会出现的高并发高流量,自己写一个压力测试模块。如果发现有问题,先修改DEMO中的核心代码及实现方式,调整到自我认为平衡为止。

四、尽可能的砍掉代码冗余

同样的实现,通常有多个方案可以去实现,我在一开始做的时候,用的可能是当时想到的快速实现方案。

当想到更好替代方案时,不太会犹豫,保证安全和性能的前提之下会砍掉原有的代码。用更简单的逻辑的写法替换到冗余的代码。

五、多留日志

就算测试的再完美,上线之后也难免会出问题。这之中,既有可能是本身服务器运维方面的问题,也有可能是BUG。如果能再现的故障还算好查,最怕一些偶然发生,但又无法复现的问题。负责运维和开发的工程师两边都会非常头疼,难以快速解决,还会相互扯皮。

所以我会在代码里尽可能的多留一些日志,并且把这些日志自动进行一些采集。这样,如果有发生问题,第一时间就会有大量的数据可以去查询,对定位问题非常有帮助,不必再一点点的去调试,一个个模块去排除。

同时如果对业务数据的准确性非常敏感的系统,除了一些常规的日志外,我还专门针做一些对业务逻辑校验的日志,定时通过一些自动化的程序去检核这些数字。通过结果反推是否存在一些没有预料到的问题。

六、忘记编代码的过程,以其他人阅读角度进行修改

虽然程序是给计算机去执行,但是无论是业务的扩展还是BUG的修复、性能提升、算法优化,都需要通过人来进行。写好一组代码之后,并不100%保证自己或其他工程师以后完全不会去做维护。

基于这个考虑,在完成基本的程序编写之后,我还会习惯先强迫自己忘记之前写的代码,以第三者的视角再来审视一遍程序:

1、程序逻辑是否清晰易懂

2、代码命名是否规范

3、有没有留下足够的注释线索

4、一个模块中是否过于复杂

5、是否留有进一步改进的余地

是选择前人挖坑后人埋,或是选择前人种树后人乘凉,都看写的人自己的一念之差。但本着负责任的态度,任何情况下都少挖坑为妙。挖了坑,是出来混的,最后总是要还的。

七、记录错误

这一点和项目没有关系,但是和个人成长会有直接关系。就像我们中学时做的错题本一样,从错误中学习是最快的方法。通过错误的记录,发现我们究竟是哪一部分有待提高,是语法不熟悉,是思考不够全面,还是一开始就用错了。有了记录我们就会有可以去发现问题的线索。

依靠这些线索进行思考,主动意识到我们经常出错的部分之后。总可以有针对性的去解决。解决后接下来不定期的去反思,通过反思,将学到的能力内化形成战斗力。

最后总结一下,我今天分享的七个慢习惯:

1、做自己的需求文档,让自己对将要做的内容心中有数,尽量避免理解不到位所付出的成本。

2、用最笨的方法先去实现输入、处理和输出。核心逻辑优先。不去过多考虑其他问题。

3、整合项目前,做压力测试达到一开始的性能需求。而不是全部做完之后再去做性能优化。

4、如果觉得代码不合理,尽量多砍掉不合理的代码进行重构。

5、多留日志让不可预期的问题容易定位、分析、解决。

6、让代码具有可读性,别给自己与别人挖坑。

7、记录经常犯的错误,及时反思总结。

以上是我的心得,欢迎各位同学与我交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,064评论 25 707
  • 先说项目开发过程中团队人员的分工协作。 一 人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时...
    SnowflakeCloud阅读 10,764评论 3 59
  • 素描纸和普通纸有什么区别: 素描纸要比一般的纸更厚,用手摸上去会有细密粗糙的纹路,看也能看出来,画素描时很容易出效...
    教画画的猫叔阅读 5,415评论 0 5
  • 你的微信朋友圈,微博,或者各种其他社交软件的动态会发些有关怎样的内容呢?你的生活有哪一面是希望展示给别人或者你希望...
    wowowowowowrouw阅读 218评论 0 1
  • “阿尔文号”是世界上第一个深潜器。大家应该知道深潜器是什么吧?他和潜水艇很像,但又不是潜水艇。它们的区别来了...
    逍遥派Jack阅读 1,245评论 0 2