我记得我是一六年七月份正式入职,从一个大学狗正式变为互联网搬砖工。现在是一七年一月,半年过去了,季度自评都写过了两次(鄙视自评制度,完全是逼着自己表扬自己)。现在想写点东西记录一下自己此阶段的思考。想到什么就写什么。想不起来的就不写了。

关于4个月后的自己

记得九月份,工作满两个月的时候我也写过一篇文章记录了当时的生活状态,反省了入职两个月里遇到的问题,并定了下个阶段的小目标。当时定下的目标有三:1,每周写博客,沉淀工作中的思考或者技术上的积累;2,提高自己的工作效率;3,看书,保证学习的时间。那么4个月过后,有哪些改变呢?

结合这四个月里自己的表现,我对每一个目标的实现情况进行打分,满分十分。

工作和技术的沉淀

四个月里我有每周写博客么?没有。一个字都没有。

第一个目标我给自己打0分。自己做的非常不好。我一直坚信,例如读书的收获、工作的反思这类抽象的知识,只有文档化了才是有意义的,否则就是过眼烟云。人的大脑好似内存,断电之后信息就不见了,只有硬盘才是最靠谱的。在这四个月里,我没有通过写博客的方式记录自己的思考,感觉又浪费了四个月的光阴。我自我批评一下。

提高工作效率

在工作效率的提升上,我给自己打8分。

人人都知道工作效率重要,但并不是每个人都会主动去想办法提高工作效率。为什么这么说呢?当然是因为这样说可以间接的夸自己好厉害好有思考力:)。给自己打8分,是因为自己确实提高了工作效率,没有打10分,是因为还有提(wo)升(hen)空(qian)间(xu)。

讲讲自己对提高工作效率的一些思考吧,从动机开始讲起。工作的半年里发生的三件事,让我开始关注”工作效率”这个东西。

第一件事情是工作初期,我每天会花费大概50%甚至以上的时间做属于工作范畴以内,但是没有意义的事情,导致工作效率低下。

目前我的工作内容是退款业务,工作内容包括:1,填前人留下的老bug;2,写新的bug;3,以及处理客服同学提交的退款CASE(即需要技术同学处理的退款问题)。退款CASE就是我所说的,没有意义的事情。因为”前人代码的bug” + “项目各个部分代码质量参差不齐” + “流程设计上有些地方不合理”,会有许多退款异常的情况,客服人员无法处理,只有发邮件让技术同学处理,因为处理有时间限制,必须在限定时间内完成,如果技术人员迟迟没有处理,客服同学就会通过IM软件或者电话催促,导致技术同学没有时间修bug。如此恶性循环,无法从根源上解决问题。入职初期,CASE量巨大,严重影响了我的工作效率。我需要想办法提高我的工作效率,让我能更高效的coding以及更高效的处理CASE。

第二件事情是有一段时间,同时有三个大的需求要实现,并且优先级相同,经常会有这样的情况出现:我在实现需求A的过程中,某同学找我聊需求B,另一个同学找我聊需求C,聊到一半,需要看代码确认一下细节,我又切换代码的分支,看看某个需求的细节。同时,我我也经常在纠结先做哪个需求比较好。这些时间的浪费其实是可以避免的。

第三件事情是,我在淘宝上花十几块钱买了omni四件套的正版授权,其中一款OmniFocus被誉为最好的GTD软件,于是为了这个软件我又花时间搜索了一下GTD的相关资料,觉得GTD的相关理论十分有道理。我需要将GTD的一些理论运用到生活中。

我是如何提高自己工作效率的呢?

  1. 定目标

    上班前,我会在地铁上思考今天有哪些任务,哪些优先级是最高的等等,最终确定当天需要完成的工作。

  2. 学会拒绝

    在我打代码正嗨的时候,总会有客服同学给我发消息甚至打电话,让我处理问题,但是大部分时候,处理的并不是非常紧急的事情。这种情况会严重影响工作效率。所以我的策略是,如果不是紧急的问题,就标记下来,暂时不处理。同时手机开震动放在餐巾纸上,打代码的时候基本察觉不到电话。

  3. TODO List

    通过纸质的便签或者软件来记录近期任务,时时提醒自己。高玩可以使用奇妙清单或者OmniFocus,我使用的是mac自带的便签应用。琐碎的事情不多,可以不用耗费大的精力实践完整的GTD。

  4. 文字记录需求的上下文

    同时做好几个需求是码农工作的常态,如果时间浪费在思考需求的上下文上就太可惜了。在这种场景我会通过文字的形式记录每个需求的上下文,包括:这个需求目的是什么,需要有哪些改动,有那些细节需要和谁确定,等等,每个方面用几句话简单的记录一下,通过读这些信息,我可以很快的切换思维,大大提升沟通效率。

  5. 三思,再动手

    真正动手实现需求前,多花时间整理思维,往往能节约时间。在实现一些改动略大的需求的时候,我会通过画流程图或者写文档的方式帮助整理思维。在这个过程中,我会思考技术实现的细节,甚至会思考代码放在哪里更合适。然后根据画好的图或者写好的文档,一点一点实现,不容易出现思维短路的情况。

其实这些都是前人总结了很多遍的东西,都是些大道理,但是知道了大道理并不能过好这一生,因为知道是不够的,需要笃行。

持续学习

在这四个月的时间里,我读了大半本《Maven实战》,读了一半《重构》,读了一点点《Git版本控制管理》。勉勉强强给自己打5分,不及格。

按我预想的进度,四个月的时间看完三本书才是比较合理的进度。反省了一下自己,觉得一下因素导致自己学习进度慢:

  1. 没有养成读书的习惯,很多可以用来读书的时间被浪费。
  2. 忘记之前读的内容,于是又从该章节的开头读起,导致反复读相同的内容。
  3. 阴阳师 + B站 = Time Killer

怎么解决以上问题呢?很简单,逼自己学呀!

关于技能树

打代码打了好几年了,但是仔细想想,自己会的技能好像也就那么一点点:Java基础以及一点框架的使用,iOS连基础都不熟悉,只是能搬砖而已。我这哪里是技能树,明明是技能草!心头涌上一股不安,感觉自己随时都会被竞争掉,以后只能另谋他生。

这段时间我经常会思考一个问题:一个优秀的后端工程师,需要掌握哪些技能?(后文并没有给出答案)

大学期间利用课余时间学的Web开发现在看来是真的太浅显太基础了。大概就这几个步骤:1,学语言基础;2,学框架使用;3,业务逻辑+CURD;4,跑在服务器上。其特点是学习效率低(因为大部分时间都是自己捣鼓),单线程(多线程场景真的少之又少),单服务器(只考虑在一个服务器上运行服务),复杂度不高(业务复杂度,数据库结构复杂度不高),性能要求低(基本不要求性能,不涉及JVM调优,SQL优化,数据库调优)。

到了成熟的互联网公司,就像乡下人进城一样,啥东西我都觉得好洋气。RPC框架,让你能调用其他服务器上的方法;MQ,如其名,消息队列,可以用来分发消息,还有其他的使用场景;数据库访问中间件,有分库分表、读写分离、监控等功能……这些新东西让我即兴奋又焦虑,兴奋是因为这些新东西开拓了我的眼界,焦虑是因为这些新东西我都不会使用,更别提了解其原理了。

现在工作了半年,使用了公司内部的RPC框架,MQ,也使用了一些基础服务,过程中发现了一些平时没有怎么关注但是确实很有用的技能:

  • 设计模式

    超级重要超级重要,无论你是设计一个新需求,还是修改一个老的功能,设计模式都是非常重要的技能,它不仅能代码逻辑能清晰,还能帮助你快速定位bug,也能让其他人快速理解你的代码意图。一个好的设计模式能少走很多弯路,少填很多坑。

  • Git

    多花一个小时看看怎么使用Git,能够节约好几个小时的时间,避免遇到“卧槽代码冲突了怎么办”这种问题。

  • Maven

    同Git,在这类型的工具上投入学习时间是回报最大的。

  • 重构能力

    重构能力让你拥有代码的嗅觉,能够判断出哪些代码是结构合理的,哪些写的像屎。有了重构能力,你能科学的组织代码结构,方便debug,配合设计模式效果更佳。

但是这离“优秀的后端工程师”还有非常大的距离。我依旧在思考这个问题。

关于Hackthon

一六年十二月我和小伙伴Robbie参加了美团点评的黑客马拉松。我们做的是一个点评版的Pokemon Go,抓的不是神奇宝贝,是抵用券。最后的结果是重(xi)在(wen)参(le)与(jian)。

这次黑客马拉松题目自定,想做啥做啥,编程时间是24小时,分上海和北京两个赛场,两个赛场赛制相同,参赛队伍数量不同,零食饮料水果供应不断。上海侧是24个小时编程时间结束后,18个队按抽签顺序展示成功,然后选出4个作品进入复赛,4个作品进行PK,最后选出1个得大奖。

Sadly,我参加Hackthon的感受是,痛苦。不希望24个小时之后拿不出作品出来,所以身上是有比较大压力的。其次是要熬夜,又是大冬天,暖气吹得人要醉,一直想睡觉,生理上很痛苦。最后是其他小组的题目都特别高大上,有的是室内导航,有的是机器学习,还有的软硬结合,感觉完全比不上别人。

虽然过程比较痛苦,但是经历了一次24小时从零到一的开发过程,对项目的把控有了些理解。

  1. 做项目之前需要对项目进行分解,分成一个个的小任务,规定每个任务预计完成需要的时间并整理出任务的依赖关系。
  2. 从优先度最高的任务开始做起,每完成一个任务都要进行简单的测试,记录完成的时间。
  3. 项目如果delay较多,可以考虑删去非核心的功能点。
  4. 做项目设计的时候,对核心的任务需要考虑PlanB。你永远不知道你会在哪里踩到坑。

我对这次Hackthon的赛制也有一些思考。美团点评Hackthon这种题目自定的马拉松,其实并不需要”24小时通宵完成”这种设定。按我的理解,公司开展这种活动,除了为公司添加Geek气息,满足码农的自豪感和自我认同感,更多的是希望通过这种方法发现新的创意,提高公司内部工作效率或者创造商业价值。如果是这种目的,完全不需要24小时通宵完成。倒不如放宽时间,比如提供一个周末的时间,周末结束提交作品,时间宽松,不用通宵,皆大欢喜,毕竟真正24小时从零做出来的东西,不会是那种界面好看,交互人性化,功能齐全,有技术难点,还没啥bug的作品,那不是马拉松,那是百米冲刺。

这次Hackthon也给我敲响了警钟。再不学点机器学习的知识真的就要被淘汰了,现在是人工智能的时代了。

关于2017

2017年,计划如下:

  • 每个月看完一本技术相关的书。书上关键地方做批注,重要知识点整理在有道云笔记里。
  • 写周报。以此记录每周干了啥。
  • 每半个月产出一篇技术博客。
  • 每周至少锻炼一次身体。
  • 学个乐器,每周保证有3个小时的练习时间。

妈的我自己看了这个计划都觉得不可能实现。