其实这次的 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

(完)