又好久没写blog啦。诶最近好懒啊。正好过年在家里有点空,写完我那些lib的patch之后还有一点时间写一下2016年的总结吧。
之前两年的总结有点流水账,我还是写得随意一点好了,也没必要凑字数。
关于创业失败
2016年最大的一个事件应该算是创业失败吧,所以从之前的公司退出了。这两年的努力和经历让人感触良多,虽然是失败了,也不算是一无所得吧。接触到了如果呆在腾讯,永远也不可能接触到的东西。
也算是创业失败了,才体会到腾讯里的一些体系到底有多么的NB。之前作为纯腾讯员工的时候,更多的关注在对一些现象和制度上的不满上。比如项目频繁被砍,某些团队和个人对其他的团队或个人存在的偏见等问题上。但是进过这两年的折腾,我也深深感受到虽然在腾讯的体系中确实有一些问题,但是大方向上做到现在这个地步有多么的不易。比如,现在市场程序员的平均素质是在我的预估之下不少的,很多工程师并没有学习的动力,对编程也没什么激情。而我们面试的程序员中,几乎没有出现过对编程有热情而且基础还不错的,都不用说再加上经验了。大多数人都是很被动的接触了一些东西,然后浅尝辄止,所谓的经验完全是碰到的东西多了接触到一些,没有多少人有深入挖掘的兴趣和动力。甚至还有些人会觉得烦,不愿意。
然而腾讯做到了整体上推动员工之间主动互相分享和学习进步,虽然多少会出现几个“养老”的人,但是我接触的至少80%会去追求高技术和新兴技术的。当时我在腾讯的时候,升值时因为考评内容里有对分享和课程的要求,导致我看到有些人会很应付得对待(内容水分太多),但是现在回头想想,这小部分人的时间浪费远远比整体上驱动大家互相交流带来的好处,简直不值一提。
其实这也只是冰山一角,还有很多个地方让人现在想想觉得很不容易的,比如沟通方式和效率和活跃的氛围等等。
另外一点创业这段时间也算接触到了更多的想法各异的人。外面的人的思维和喜好差异更大一些,比如有个程序员最近给我们推荐的书叫《摩托车维修技术与禅》,虽然我对这个不感兴趣,但是这些看到一些奇怪的兴趣也是挺有意思的。
同时不可避免的会接触一些市场啊、竞品啊、运维系统啊、推广啊方方面面的东西。这些因为在大公司里分工比较明确,基本上对写业务的人是透明的。就连人员管理大公司里都是按照公司的大方向的模板里去执行,而不是去创造,所以很多细节的地方容易被遗漏掉。这也是这两年的收获吧。
当然,作为一名程序猿,软件设计和软件工程上的建树也会有一些。
作为程序猿
重大事件
2016年比较重要的程序和系统设计方面的重要事件并不是很多,但是比较杂。
- 第一当然是很多客户端的编码让我能看到很多客户端引擎的实现,和外界开源项目(特别是前端工具类项目)的代码质量简直惨不忍
- 第二是学习了下Raft算法,确实是个比Pasox容易得多的分布式一致性去中心化的算法
- 第三是boost.context的设计模型变化,所以在merge的时候libcopp对新的模型的应用。这理论上能微弱地加快性能。之所以说是微弱的是因为比起那一点切换和透传开销而言,分配栈空间和逻辑的消耗要高得多。
- 第四也是最重要的是我自己的游戏服务器框架atsf4g-co正式完成了并且开始投入使用。当然过程中避免不了会碰到一些细节问题,但是修复以后这就是一个经过项目验证并且可维护性和性能都高于腾讯TSF4G的解决方案。当然TSF4G的人力和比较元老导致其周边设施高的多。另外单独抽离了asf4g-co的网关层的客户端库,接入了Unity,支持加密和断线重连,预留了数据压缩,相当Nice。
反正都记在blog文章里了就懒得枚举了。
不那么很重要的事件
这些个不是特别重要的事件中有一部分是对重要事件的补充。比如atsf4g-co里面,分析并实现了小数据包合包优化,导致TCP通道QPS上升了几乎两个数量级;再比如解决了以前发现的Android和IOS的C++运行时不支持TLS的问题,并在这些环境里使用pthread代替C++ Run Time的TLS。然后重要的就是libcopp和libatbus的一些细节流程的BUG修复。过年这两天在家修复和优化的也是libatbus和libatapp的一些细节流程,这些都是在实际使用中发现的一些不致命问题。
还有一些是和那些重要事件无关的,比如试用了下gitbook,这货可以监视github,然后把仓库里的markdown文件编撰成电子书。还是很强大很有意思的。当时看《Effective Modern C++》的时候还想在上面建个仓库写点翻译。后来像太费时间了而且有版权问题就作罢了。但是我把blog里的markdown都导入到了里面,挺有意思的。
再就是研究了下let’s encrypted,然后我的域名的重要子站都用上了免费的SSL证书,全面开启了HTTPS,然后中和了实用性和安全性,配置了nginx的HTTPS配置,让安全评级到了A+。一开始我开启了HSTS,后来发现一旦写错配置,只能清空浏览器缓存才能再次打开网站,得不偿失,所以后来关闭了。
然后研究了下tmux,这玩意可以复用终端做做终端管理,感觉用起来相当棒。就是现在还不是特别稳定所以有些接口一直在变。前途还是很远大的。
很多配置和安装脚本2016年都重写了,主要是迁移环境的时候方便一键化。比较复杂的应该算是llvm+clang+libc++abi+libc++的那一套。
另外也是为了接触下现在前端很火的Reactor(虽然我不是前端,接触一下并没什么坏处)。使用Typescript+Node.js+Angular2写了个内网软件源同步的工具,并且同步了CentOS 6和CentOS 7,Ubuntu 16.04和14.04,MSYS2的仓库,比较适合给公司内部用。目前还没开源出来,反正写得也不是很严谨。后面有空可以开源出来。有了这个以后公司内网就很方便很快了,毕竟atsf4g-co同时支持Windows+Linux+Ubuntu On Windows,然后sample solution支持Linux+Ubuntu On Windows,然后为了方便所有人可以用自己熟悉的环境(Windows里用MSYS2+Clion或者Visual Studio)写代码,这些软件仓库都是为了方便大家各自按自己的喜好来的时候可以不浪费时间在网络上。
今年我很喜欢VSCode,所以贡献了一个用clang-format来格式化代码的插件,给添加很多功能,比如支持protocol buffer,增加更多的选项和BUG修复等等。然后看到ES6里的promise/thenable异步模型十分有意思。对比看了下C++里也出现了promise/future,感觉这个方案虽然不如协程直观,但是确实比协程坑少并且严谨,是个挺有意思的思路。目前没想到C++里怎么用它编程模式比较好。等到这套东东更完善了而且我想到了怎么用比较好,说不定atsf4g-co的sample solution会换一种RPC的设计模式,不再用协程。
还有一些小东西也不是很记得了,先这样吧。
写在最后
这一年的变化还是很大的,现在帮同学搞游戏服务端,我的另一个私心就是正式上线自己的游戏框架。所以,2017年加油!!!