二零一伍 · 结

时间荏苒,如白驹过隙。

总得来说感觉做了很多事情,而又没什么成果。一年之跬步,却不足千里,自觉十分不满意。心想,是时候总结一下了。

从三个大类来细说:开发、运维、管理。

开发

NodeJS

今年的绝大部分时间,都用在了开发公司产品上,从文档撰写,框架选型,项目构建,开发规范,开发以及修 BUG。按自己的想法,致力于构建一个可维护易修改,模块高内聚松耦合的项目。
累得发烧了两次。

比较了 express、koa、sails、hapi 等等大部分 NodeJS 主流框架,使用 hapi 和 express 开发了几个项目。感觉还行,各有优劣,不过实现功能都足够用了。

然而 nodejs 的 ORM 一直是心头之恨,sequelize 恐怕是目前 node 最好的 ORM 了,但还是踩了一个又一个坑。waterline 已拉黑。

上半年一直忙于开发新系统。后半年我开始重构提取当前的项目代码,将其更加模块化,从而复用到其他项目中去。
写好一个函数,能够利于其他模块复用。写好一个模块,能够利于其他系统复用。写好一个系统,能够利于构建应用。
因而整理出了这个 nodejs-project-snippets

对于代码的组织与错误处理,业务逻辑的组织。应该是今年考虑得最多的了,当然这方面收获的经验也是最多的。

函数式编程

今年最让我兴奋的技术除了 react 就是函数式编程了!一种新的编程范式,新的思想,让人的眼界立刻宽阔了许多。
目前仍在学习理论知识。以后必定是要写几篇文章总结的,在这就不多说了。

Docker

今年对 docker 一直保持关注,虽然 docker 的生态圈一直在高速发展,各种虚拟化工具应运而生。但是很多工具、框架功能上都有交集,而且各自都有显而易见的缺点。
参加了 dockone 的线下聚会,更是确定我的想法。
期待 kubernete 等工具发展得更强大,让我借着巨人的肩膀瞭望远方。静候明年的发展。

前端

因为 ES 2015 标准的确立,今年也开始用上了 ES6,各种语法糖,有点甜到发腻了。

从 Promise 黑转路人再转粉,踩了不少坑。

因为工作原因,接触了一下 react,flux 这些,感觉是未来发展趋势,不过正巧遇到了 react 0.14 的 breaking change,发誓不轻易在生产环境使用没到 1.0 版本的软件。(好像我现在用的还是 0.12 的 nodejs...)
还学习了 redux,这绝对是一大杀器,绝妙的设计,函数式编程的绝好应用。

还是因为工作原因,做了一些前端的工作,做微信页面、活动页面、管理后台等等。总之,五年之内不要找我做前端。只想把前端作为趣味,而非工作。

工具链

前端构建和后端构建基本已经成型。

写了不下三十个 gulp 任务,构建、打包、release,大部分 gulp 插件也都尝试过了,现在就等待 gulp 4.0 的发布,进一步完善。

数据库

通过实践,对数据库有了更深入的理解。但 Postgres 用得还是尚浅,很多特性其实没有用到。

Redis 倒是研究得比较深入,虽然没看过源码,只是探索了各种最佳实践。自己也写了一个辅助型类库。Redis 这类 NoSQL 数据库还是很灵活的。

其实无论是 SQL 和 NoSQL,重要的是它们提供了一种处理数据的模型。正有了这些数据模型,才有了各种各样的用法,应用于不一样的场景。
对于数据理解的深度,决定了代码组织的方式。
SQL 与 NoSQL 没有好与坏,全看用的人能否最大化发挥其特性。

架构

主要是服务化架构,自己看了一些文章和书籍,有了一些大致的想法。不过公司里已有既定的设置,我也不便去大改,也就不提了。

今年正火的所谓的“微服务”,个人却是十分不看好。因为如果没有一定的基础设施,部署、监控、警告、日志、容灾,搭建“微服务”实在是给自己添加麻烦。更不用说请求本身的开销,服务的定界,接口的制定,文档的维护,都是需要设计规划的。SOA 需要一定实践经验才能发挥其优势。

文档

除了代码,码文档的字数也不算少。然而随着项目规模的增大,文档越来越难以维护,API 就有上百个,居然全是手写 markdown 写出来的!现在想来真是不得了。

一直想实现“代码即文档”,可惜即使如 API Blueprint、Swagger 之类的工具,也并不符合我的理想。还是需要等待工具链的完善。

运维

莫名其妙就被推上了运维的道路。没有导师,全靠自学。摸爬滚打终于能稍微掌控一点了。遇到一个内核级的 linux 容器 BUG,立刻被秒成了渣。总之运维之路多崎岖。

不过身为开发,学习如何部署,数据库如何运作,网络如何配置,更贴近生产环境,对开发来说是好的。
开发者必须深入理解数据库,必须深入理解网络请求,才能写出高效的业务代码。

学习了使用 Ansible 部署环境,代码即设备的思想很好。
学习了一些 linux 运维用的命令。然而还是不会调试 linux 系统内核,DTrace 还不会用。

体会到运维和开发最大的不同是,凌晨突然来个电话要维护机器!
总之,不要找我做运维。我要早睡早起。

管理

后半年开始带新人,自己从一个经常向别人请求问题的,变成了被别人问问题的。这才发现以前的自己是多么愚蠢,未能理解上级的用心良苦。

与人沟通不易,但只要能做到坦诚相待,谦虚待人,我想就没什么大问题。
让团队的每个人成为自主积极坦率的一份子,为同一个目标而奋斗,其他问题自然引刃而解。

另外,分享心得,分享美好的东西,多交流,是一个团队是否积极活跃的标识。

其他

在这几年的学习中我得出一个结论:在学习的过程中,仅仅学习知识是不够的。
我们在积累知识的同时,还应该积累实绩,更要“建造自己的堡垒”。

知识只是内在精神,即使你的精神极为丰富强大,如果没有工具的协助,在这个高速发展的现代社会是举步维艰的。
我们需要建造自己的技术堡垒,用自己所读之书堆砖砌瓦,将自己所学运用到自己的成果上。通过自己搭建的堡垒,到达高处。

发展的过程中还需要积累实绩,总而言之就是帮助别人,帮助别人就是帮助自己。分享知识,翻译文档,建造工具,于人于己都是有益的。

于是从 15 年下半年起,我开始翻译了一些文章,给一些开源项目提了 issue 和 pr,根据自己的经验写了几个类库。
在 16 年,我将贯彻这一想法,做更多有意义的事情。

敏于行,慎于言,勤于思,乐于学。臻于至善。是新的一年我所追求的目标。