其实这次的 QCon 一共有三天, 但是我只去了半天。

前几个月 QCon 临近, 老大豪气干云地一挥: “今年我们买票去听 QCon!” 于是我们非常开心地到网站上一看, 一张票几千人民币… …… 预算不多的我们只能在力所能及的范围内买一些票, 然后把每张票拆成好几块, 让尽可能多的同学都去感受一下“全球软件开发大会”的氛围。 (QCon 的中文名真的是叫这个!)

这次我就去听了个早上, 在主会场彭蕾/臧秀涛致辞以后, 听了三场讲师的分享。

Java API Design Best Practices

第一场本来是个老外讲 Go 的, 但好像路上堵车没能来得及到会场, 所以临时换了个讲 Java 的老外。

这位老哥叫 Jonathan, 呆的公司一路是 Sun/Oracle/Microsoft, 介绍完自己以后, PPT 突然切到了 <Effective Java (3rd)>, 然后 Jonathan 吹了一波: “这可是写 Java 的程序员都必看的一本书!”

然后话题逐渐切入正轨,Jonathan 提出了好的 API 会有的几个特质:

  • 易懂的 (Understandable)
  • 稳定的 (Consistent)
  • 合适的 (Fit for purpose)
  • 文档好 (Well documented)
  • 节制的 (Restrained)
  • 可进化 (Evolvable)

然后 Jonathan 用具体的例子穿插着讲了一下他对这几个特质的理解。

我听下来感觉抛去具体的语法例子, 优秀的 API 特质都是共通的, 就像之前写的《优雅的 Python 接口设计》一样。

最后 Jonathon 又吹了一波 , 并且还极力宣传说:“你们这些只看过第二版的,记得买第三版看看啊…” 简直让人怀疑这本书给他分成了(x

腾讯微服务架构的过去、现在与未来

休息了一会儿,就到了腾讯讲师刘昕的回合了。

虽然话题是微服务框架, 但是感觉大部分时间刘昕都在宣传自家框架 Tars (github.com/TarsCloud)

不过整体讲的逻辑还是很清晰的:

  • 最早遇到了业务逻辑复杂、代码质量难控、运营管理混乱、监控体系缺失的问题。
  • 后来在“大系统小做”的指导思想下,逐步开始统一框架。
  • 框架是首先实现了服务调用+服务治理的基础功能。
  • 然后提升了性能+易用性。
  • 现在还引入了容器化+高拓展性(其实到这一步就可以开源推广了)

刘昕用的 PPT 里有两个很好玩的数据。 一个是 51% 都考虑往 Cloud Native 的架构转。 这个数据引出的话题是一个很不错的话题, 让 AWS 重度用户很想说些什么, 感觉下次可以专门码一篇文章。

还有一个是用 服务治理/多语言 的不严谨划分成的四象限:

MS

非常有趣。

最后刘昕还花了不少时间讲了一下 TARS 支持的多门语言。 听了以后我很佩服(然后选择了 service mesh…)

The Past, Present, and Future of GO 2

休息了一会儿后,本应第一个开讲的 David Chaney 终于来啦。 (@hulucc 问:他跟 Go 啥关系啊? @紫月酥 答:应该就像 @jkzing 跟 VueJS 的关系一样,是核心 Contributor。)

一开始 David 讲了很多历史, 比如 Go 诞生的初衷, Go 从小长大一路走过的路, 软工和编码的区别, Go 多个版本的更新, 现在用 Go 的公司/团队/项目之类的… 听得我感觉又是一个典型的布道师, 就当是给纯萌新科普 Go 了…

然后! David 突然又介绍了一波 gopher 这个萌物:

gopher

(感觉全场一下子就四老外兴奋.jpg起来了)

在漫长的铺垫以后, David 终于讲到了 Go 面临并且要解决的三个大的问题:

  • 依赖管理 (Dependency management)
  • 错误处理 (Error handling)
  • 泛型 (Generics)

听到这里,我一拍大腿: “对对对!我当时就是因为这个弃坑的!”

随之 David 不紧不慢地用各种小例子给出了目前的解决方案:

  • Go 1.11 里已经可以用 go modules 来管理依赖了。(初见的我有种 node_modules 的熟悉即视感)
  • Go 2 里会引入 check/handle 等语法糖来处理错误,本质上还是要第一时间让程序员自己处理错误的
  • Go 2 里会有泛型,目前可能会引入 contract。(但具体怎么搞,我感觉我这里没太听明白,之后得去深入看看)

generic

而后 David 还特别强调了一下, Go2 和 Go1 只是大版本不一样, “是不会像 Python3 或者 Perl6 那样滴…”

感想

主会场第一天上午到此就全部结束了。 整体下来,我感觉对眼界增长大于技术收获。 可以知道同僚都在朝着什么方向去深耕也是非常不错的收获。

2018年的最后一个季度肯定会再次把 Go 给捡起来认真玩一下… (不过没有参数默认值真的写起来很难受啊.jpg)

qcon

(完)