上班三个月

半个月前上版本,从下午六点开始一直折腾到凌晨两点多三点钟。今天本来又是上线日,结果到了下午才临时通知说推迟到明天。凑巧今天还是月底,于是早点回家,坐到电脑前写这个月的工作月报。

先说点题外话。虽然已经很久没有在意过公众号关注数这件事了,本就打算像这样一直写下来,有那么几十个读者看文章就行,但是最近听到有小伙伴跟我说他们是朋友、同学推荐来的,还是让我相当高兴和振奋。最近工作忙、家事多,希望自己能尽快缓过来,抽出更多的时间和精力写文章,更多地跟读者们交流。

代码是一种语言

程序员的工作就是写代码,但并不是所有的程序员都用同一种编程语言。编程语言有很多,例如C、C++、java、python、php等等。每一种编程语言都有各自的特点,除了少数大牛之外,一个程序员在职业生涯早期最多只能熟悉、精通一门语言。

抛开编程语言的分类不说,我们很容易想起程序的共同特点,例如鲁棒性、可扩展性等等,但是很少有人会真的把这些编程语言跟我们平时说话交流的人类语言放在一起比较。

如果把变量和保留字看作单词,把一行代码当做一句话,这样会促进什么样的理解呢?如果把一个类看作一个段落,一个包当做一篇文章,这样会引发什么样的思考呢?如果把一个工程看作一本书,一个整套服务当做一个知识架构,这样诞生有什么样的感悟呢?我平时看闲书比较多,看专业书比较少,如果能把看闲书时积累到的经验和思考迁移到看专业书上,相信一定会有意想不到的收获。

我们常常会用“写得丑”来形容那些写得不太好的代码,用《重构》这本书里的话说就是有“坏味道”。我最近专门花了时间重看了《重构》这本书,其中印象最深刻,也应用最频繁的就是拆分函数。书里有一个说法我非常喜欢:“人们有时会问我,一个函数多长才算合适?在我看来,长度不是问题,关键在于函数名称和函数本体之间的语义距离。”

按照作者的建议,我在我的代码里不断寻找那些感觉需要写注释的地方,然后想方设法将其中几行代码提炼成一个更小的函数,并且绞尽脑汁想出一个一看就知道这个函数有什么作用的函数名。做的次数多了之后,我越来越轻车驾熟,并且渐渐感受到了这样做的好处:一、代码的可读性强多了,即便过了一段时间再来定位找问题变得比以前要简单得多;二、代码复用变得简单,重复代码大大减少。

代码是一种语言,而我大概还停留在词句和段落文章的阶段,甚至还是这个阶段里的半桶水。希望在不久的将来,我能写出更好的“段落”和更好的“文章”,能读懂写出好的“书”,甚至构建出令自己满意的“知识架构”。

上月总结

对自己在七月份的努力还算满意,已经渐渐适应新公司的工作环境、工作内容和工作节奏了。在上篇工作月报里,我给自己定了三个目标,基本上都达成了。

首先是对于系统设计的学习。虽然没有像定目标时说的那样要翻阅四五本相关书籍,但是也找到一两本值得花时间研究学习的好书。暂时还没有太多时间投入,就目前的情况来看,几年来积累的、尤其是这三个月积累的工作经验已经足够让我具备看懂这些书的可能性。看系统设计,在目前看来还算是知识储备阶段,是值得投入去做的一件事。

然后,重构这本书已经读完,并且有所实践,还在这篇月报里写了一小节内容。由于积累的经验和思考还不够,不足以支撑我写出一篇比较有深度和内容的文章,所以只能写这么多。希望在未来几个月,我能就这个主题写出一篇让自己满意的总结性文章。

最后,是设计出更好适应“996”的生活节奏。经过考量和参考过往三个月的经历,我列出了以下几点:

  • 早上早点到,趁着无人打扰和精神状态好,尽可能完成一些开发任务;中午前一个小时到一个半小时可以慢下来,做一些例如跟第三方沟通的工作。

  • 周末加班如果没有任务,可以在公司做思考总结。

  • 六点钟准时跑步,如果工作上有需要,就跑完之后回公司加班。

  • 跑完步后如果没有工作任务,可以早点回家洗澡,利用晚上的时间看书写文章。

  • 建立以工作为重的良好心态。

  • 在闲的时候尽量做那些重要不紧急的任务。

本月目标

鉴于这个月还有整整一个月的时间,我打算给自己定三个有挑战性的、有明确检验标准的目标。

第一个目标,找三个同事聊他们所负责的业务。之前一直提到要熟悉业务,到现在还没有付诸行动,实在有点觉得羞愧。在吃饭的时候,在晚上比较有空的时候,在周末加班的时候,找同事聊聊天,了解他们所负责的业务,从而熟悉整一套服务的构成。这个想法比较容易实现,而且有明显可见的好处。检验标准:写成一篇文章,讲述如何跟这三个同事聊工作熟悉业务。

第二个目标,投入30个小时看技术书籍。由于种种原因,这段时间的阅读时间有所下降,有那么一两个星期的番茄数简直惨不忍睹。这个月不能给自己任何借口了,希望自己能平均每天都抽出一个小时来看技术方面的书。检验标准:番茄土豆软件的统计数据,要不少于60个番茄,即用时30小时以上。

第三个目标,开始看单元测试类的书籍并且尝试在开发中多写单元测试。之前在看书的时候,了解到“测试驱动开发”这个概念,一直很想实践。担心自己一下子把目标定得太高完不成,所以这第三个目标应该算是三个目标里难度最小的了。检验标准:至少写出10个单元测试。