近期工作

最近所做的事情包括给 skynet 源码写注释、接入新的支付渠道、带新人. 近期真正写代码和读书的时间确实变少了, 以至于自己有一点不安, 毕竟没有新的知识来填充大脑, 同时写作的欲望也降低了.

在给 skynet 注释源码时遇到了不少问题, 进度十分慢. 首先是自己对 C 语言的用法和标准库并不十分了解, 加上对 Linux 环境下的系统 API 更是少之又少. 最近查了不少资料, 收藏了不少链接, 包括 glibc 、freeBSD 、Mac OS X 的源码和手册网页. 这跟 Java JDK 的手册的统一很不一样, 非常之混乱, 三个平台各有各自自定义的宏、函数. 源码的位置大多不一样, 查找起来十分不易. 从侧面看出了自己对 C 编程了解之少. 在整个过程中, <Unix 高级环境编程> 这本书带来了很大的帮助, 去年过年时带回家过年看了, 不过由于当时未带电脑回去无法切实编程, 亦无网络可用, 对其中的内容理解十分不易, 以致后来便放弃了. 这段时间遇到不少 API 不甚了解, 遂翻阅并了解到了 Unix 下编程知识. Unix 的 API 相当紧凑, 正确的调用基本上都会返回 0, 错误的调用返回非 0 值并且设置适当的 errno 值. 像互斥锁、读写锁、条件变量、特定线程数据这些个 API 都有初始化、使用、反初始化的生命周期功能, 简洁统一. 相比于 Java 中大量面向接口编程, 而实现类又难以查找来说, 可能使得 C 所写的程序更加易读都说不定.

在 C 中也有不少混乱的地方, 仅仅是获取时间这个问题就不一致. 在 Linux 和 BSD 中可以获取单调时间, 在 OS X 下无法获得, 必须做出某种妥协以达到获取的目的. 然后是 epoll 和 kqueue 两种多路 I/O 复用的 API, 以及 32 位系统和 64 位系统中类型的大小不一致, 这些都是在编程中需要考虑的问题. 以上所有这些都是对使用 3 年 Java 进行实际项目开发来说的一种挑战和考验.

刚刚在捕鱼游戏手机版本中接入一个平台登录支付系统, 由于之前接口设计不够灵活导致许多代码无法复用, 比如简单的唯一标识生成规则, 由于之前是硬编码在函数中, 并没有考虑到之后会有不同规则的情况, 现在改起来工作量还是挺大的. 那么现在的问题就是该如何去做, 从而能够写出灵活且复用性高的低层接口呢? 从阅读 skynet 源码的情况来看, C 确实做的很好. C 以自下而上的方式编程, 先产生大量简单正交的接口, 然后依据功能再对其进行组合. 而 Java 中更多是自上而下编程, 从功能出发. 不过说到底还是自己思维上的局限, 用 Java 编程也可以开发出像 C 里边那样简单的接口.

带新人的过程也学到不少东西, 由于认识掌握项目需要一段时间, 并且编程经验也不是一蹰而就的, 所以更加多了一些耐心, 觉得学习过程更重要的还是态度要端正, 如果坚持认真去学的话, 学会肯定不是难事. 对比之前对同事写的难以理解代码那种不满, 现在确实好点了. 另外一点是对人方面, 之前对人更多是按照自己的喜好, 喜欢就更加亲近一些, 不喜欢就不与之说话. 但是对待新人却不能这样子, 毕竟需要去教导他并传递部门的氛围, 责任也变大了, 做事更多的要依乎情理适当而为, 而不是靠喜好为之.