前言

毕业一年了,三百多天的时间就这么快过去了,看看去年写下的博客,似乎每个人从学校到工作的心理过渡阶段大概都是差不多的。成长靠努力是没办法获取到的,只有拿出勇气和耐心面对变化,还有不断解决问题,才有概率学习到东西。直到很久前,我还是处于变化的恐慌中,直到最近终于变麻木了一点,能够把工作和生活区分开来。

独处

这一年是我独处时间最长的阶段,心血来潮的时候就开始回顾做过的事情,规划、尝试新事物,而后觉得这种行为其实和打发时间的娱乐活动没有差别,都是用自己可以接受的方式来渡过无聊的时间,只是在别人的眼中有所不同,而这种经常让我心力交瘁的思考活动,某种程度上还是可以认识到一些新的事物。

工作

大多数人都喜欢有产出的工作,在第一家公司时,工作不饱和,或者说产出不够,让人一度处于停滞的状态,那个时候做了很多的尝试,只是这种技术上的尝新是近乎娱乐的行为,最后还是在荒废时间。进入现在的公司后,一直忙碌到现在,兼顾客户端、后台开发和部分运维工作,现在发现工作的内容依旧十分单调,产品出原型,设计出UI,后台开发填业务的漏洞,前端开发填交互和UI上的漏洞。开发人员是被动的,一般在开发到一定程度时,才会发现一些产品漏洞,这时没做好沟通和同步到话,就会留下巨坑,UI上的改动最恐怖,口头描述的动效和页面修改都是相当麻烦的问题,一些被认为是简单的修改,实际上需要很多的代码量。

开始loraWAN项目后,迭代客户端的同时一边了解协议,一边做服务端优化,深深感觉到后台开发和前端开发之间的鸿沟,需要熟练使用大量服务端工具,自行设计和实现服务,然后做优化,这次的服务还需要做到毫秒级的稳定并发,是一个巨大的挑战,幸好面对的用户都是网关和节点,不需要去和产品,UI沟通。小公司没有太多的顾忌和历史包袱,以开源软件优先,能够完成目标的代码就是好代码,唯一的忧虑就是稳定性,现在还在努力深入Go语言当中。

前一段时间工作量有所缓和,因为那个时候的重心转移到了运营上,期间帮朋友做了一个App,是那种需要一小时就可以完成全部工作的App,却没想到断断续续拖了两个月时间,开发任务本身很简单,而工作内容却相当麻烦,主要的时间都花在了沟通上,解决一些奇葩的需求和Bug,为不熟悉技术的老板解释为什么这么做,然后和某种意义上不懂技术的其他开发解释为什么客户端不能这么搞,Apple的审核策略是什么,以及写了很多文档~我还是第一次给其他开发人员写如此详细,而又烦人的文档。

技能

一开始的计划是奔着全栈的方向去的,后来发现要学的东西太多了,索性需要什么就学什么

iOS

进入了另一个阶段,尝试设计自己的代码风格,找出一个可以持续迭代,稳定开发的套路,业务和功能摆在了首要位置;

UI和交互上已经死心了,开发者不是UI设计师,也不是产品经理和交互设计;

从Objective-C过渡到了Swift,但假如要开发一些小应用的话,我可能还会选择Objective-C,Swift的坑在Apple把运行时内置进iOS前,都不会有所改善。

运维

虽然公司全面使用k8s来部署服务,但这并不是我的主要工作,docker和k8s的学习也是断断续续,接下来会加强;

杂务方面,如域名解析,备案,证书配置,VPN,硬件升级……等倒是越来越熟练了;

Linux技能爬上了一个台阶,同样也是由繁杂的动手经验加强;

对负载和性能的理解还缺少实际的感受,多少请求可以压垮服务器,什么样的配置可以满足需求,也许只有做过后台开发才能有切身的感受。

后台

一开始用了Python开发后台,写压测脚本,没有深入,有需要的时候还要依靠文档;

学了Java,浅尝辄止,目前后台代码充当着前端开发的文档,多学几门语言的好处就是即使不深入,看懂代码和理解业务也是没问题的;

学了Go,把三套开源项目的代码反复读了几遍,做了许多修改并部署到线上环境,也写了一套消息推送服务,代码很low,但效果很好;

Instagram使用Django来服务10亿以上的用户,所以用什么语言没有关系,选择最熟悉的,可以提供稳定服务的就行,所以大家统统选择了Java,而实际情况是同样规模的服务,坑货需要两万个连接数来保证服务不挂,而大牛只要几百个连接数就够了。

未来

从没想过自己要做出什么样的产品,不过一直在规划要使用什么样的技术。一人全栈,兼顾产品设计和UI的时代已经过去了,现在的情况是需要很多人来协作才能发布一个产品,但并不意味着独立开发毫无希望,只是规模上的问题。全栈语言、容器化已经带来了一些可能性,要说梦想的话就是希望自己参与的产品,可以覆盖到海量的用户。