感恩节

其实刚开始实习的时候我是拒绝的,虽然现在也是早晨9点到晚上6点走很少加班,但是心态和实习刚开始的时候已经很不一样了。

说实话,刚开始实习的时候心里还是很不服的,其实很多组里的代码都没有看懂,也没有深入地去想为什么要这么写,虽然组里的代码不见得是顶尖的代码,但是也不是我现在这个能力能挑出毛病的,我能考虑到的问题实在是太浅太少了。

真的非常感谢我师傅,温总,园哥和组里的其他人,有一个这么懒又很善于机智地偷懒的实习生一定是一件令人苦恼的事情,但是学到的东西真的是很多,

代码结构真的非常重要,设计出一个好的代码结构真的是一件非常难的事情啊,之前看到说代码结构巴拉巴拉的东西都感觉是教科书一样无聊而且老生常谈的东西,说实话确实从来没有放在心上过。。

首先第一步,认真地想一下整个代码的流程是怎么样的,需要实现的功能有哪些,把所有的需求和业务的流程列出来。例如要实现一个分布式环境下访问redis读写数据的功能。肯定需要建立与redis的连接,需要管理与redis的连接,redis的连接要执行redis的命令,需要封装好跟业务相关的接口给别人,等等,这些说起来很简单,但是其实自己之前写代码的时候遇到这种自以为已经明白的需求的时候是没有仔细去想要怎么写的,心里想的就是,不就是一个redis连接池管理,提供一些对外的接口吗,其实是没有仔细想一想就开始动手写代码的,其实这种问题虽然通用,但是对每个业务场景其实都是有细节上的设计区别的,仔细地想过,才能写出最符合这个场景的代码。

第二步,想好内部的类应该怎样来设计,把功能剥离出来,把需求映射到具体的类上来负责,每个内部的类都是有自己明确的责任和要做的事情的,对每个类的函数都要仔细地想,为什么要提供这个函数,返回值类型,参数类型,出参还是返回值,这个函数这样实现是不是能够很好地符合我想用它做的事情,重复的代码能不能通过再提取函数或者模板之类的方法简化,整个类的设计能不能很好地扩展,整个类每一部分分工是不是明确的。都是值得认真考虑的问题,不能一拍脑袋觉得自己需要获取某个东西或者处理什么东西就加个函数,函数的形式也不认真想。另外,提供给外部的接口是什么样子的,也要和别人讨论好。

第三步,函数内部实现和各种异常的考虑,异常处理是非常非常重要而且要考虑很久的,每个地方可能会发生什么样的异常,处理异常经常会见到if else以及各种嵌套的if else结构,各个分支要处理的情况要想好。函数内部的实现逻辑要清楚,什么时候该做什么样的事情,多线程访问的地方锁的控制,异常的时候锁的处理,获取到的变量里面值究竟会有哪些情况,主要还是异常情况的考虑,这个真的是取决于对自己要写的东西的了解程度和经验了。

第四步,把代码整合起来的时候,好的代码结构整合起来就像汽车人变形一样,各个部分严丝合缝地组合在一起,然而不好的代码,比如我之前写的一些代码。。。就像整理一团很乱的电线一样,从这团里抽出一根,再从另一团里抽出一根,再接到一起,扭在一起也不知道谁是谁了。。。

写的代码还是太少了,代码经验对于写代码来说真的还是很重要的,有些事情如果没有有经验地人提醒的话,真的只有撞墙了才能感觉到。其实自己说的还是给人一种老生常谈的很傻的感觉,但是这方面的体会印象真的很深。真的非常感谢大家。