写点什么

QCon讲师对对碰——洪小军采访梁宇鹏:就是爱Golang

2015 年 4 月 12 日

编者按: QCon 北京 2015 将于 4 月 23 日~25 日在北京国际会议中心召开。在大会开始之前,InfoQ 推出了讲师对对碰栏目,邀请一些技术专家相互采访,碰撞出思维的火花。在 QCon 上,美图架构平台部门负责人洪小军将分享《美拍后端技术演进》,环信首席架构师梁宇鹏将分享《指数级增长业务下的服务架构改造》。今天我们推出的是洪小军对梁宇鹏的采访。以下为正文:

洪小军:前段时间你在微博上发表的《自组织是不是团队管理的乌托邦》,反响很大。你们内部已经朝这方面做了么?能不能跟我们分享一下经验?

梁宇鹏:现在也只是摸索,经验还谈不上。主要是跟大家分享一下这个理念,加上我这几年在不同团队中的一些思考和总结。

我们很多时候都说,做程序员最大的乐趣,在于自己的代码有一天可以改变世界。或者说,它们每一天都在改变着这个世界。我相信并且觉得可以做到,我们的精力集中在这个地方,而不是扯皮和争执、懈怠和驱赶上。这些问题很多时候会以大公司病的方式暴露出来,但还是有很多更深层次的问题。我更倾向于认为,这是一个主动性和能动性的问题。自组织看起来是个不错的解决方案。

自组织的一些实践组织和注意事项,在那篇文章已有讨论,这里不再赘述。我想强调的一点是,实现自组织的基础,是我们觉得它可能实现,但只有方向是不够的,我们还要找到一条路。这条路上可能有很多实验,既然是实验,就要有失败的心理准备。这也是我写文章的主要目的。

比起成功的经验,我更担心不成功的实验会造成错误的经验。

洪小军:现在越来越多的团队正在进行或尝试远程协作的工作方式,看你春节假期也在泰国边享受生活边远程办公,你们准备实施这样的计划?

梁宇鹏:我们相信,有能力的人在哪里都可以工作好。进一步说,既然我们希望找到最好的人,那就不应该让地域成为限制。现在越来越多的公司有这样的理念,而且开源社区也一直是这样运行的。

当然不同的公司有不同的情况,而我们又不能做到像开源社区那样悠闲的节奏,至少现在不行。我们的业务正在快速增长,基本上是每月一翻的指数级增长速度,而我们的系统正处在从企业应用向云服务演进的过程,其中要做的事情纷繁复杂。顺便广告一下,这也是在我 QCon 北京上要讲的主题。

从组织角度看,一方面由于团队还在组建,人手紧张;另一方面,还有团队成员的能力适配问题。解决团队成员面对超常压力下的焦虑问题,都需要很多沟通。因为不管怎么组织,团队最终还要形成合力才可以。

正好我假期去泰国玩,就在岛上多待了一段时间,算是一个实验。其实我们平时就经常在家办公,IM 上聊天,紧急事项就电话。有一点必须承认,在 IM 上聊天是容易吵架的。因为文字聊天缺少语音语气,会造成很多沟通问题。在国内的时候还好有事打个电话,到了国外因为资费问题,就没那么容易了。

当然,团队协作的更大问题是工作的配合和交接,而限制是客观存在的。你如何才能把一项工作很好地跟其他人讲清楚,如何能够让其他人清楚你的进度,以便在合适的时候帮助和配合,这些都是问题。好在这方面已经有很多专业工具或服务,还有很多正在创业路上。前段时间一些团队已经在分享,我们也在尝试和整理自己的工具集。现在看来还是比较乐观,整理完了也会拿出来跟大家分享。

洪小军:近几年你一直在即时通讯领域深耕细做,能简要总结一下这几年的发展路线吗?未来的发展方向是什么样子的?

梁宇鹏:一说深耕细作,真是浓浓的老码农既视感。不过我确实一直工作在 IM 领域,摸过的 XMPP 的开源实现也从 Jabberd2(C)、Ejabberd(Erlang)做到 Openfire(Java)。次次还都是深度改造,从 10w、100w、1000w 来一遍,在高可用和伸缩性上投入了很大的精力。

不过在移动互联网下,网络的不稳定性带来了更多的挑战,也让我们不得不在协议层面做一些事情。最近 IM 云服务热起来,大家也都在说。我们最早在 2012 年就已经做过类似的事情,断断续续地也在思考和改进。最近要做的事情就是希望把这个协议通用化,做到在很多对可靠性有较高要求的系统中可以方便应用。

当然我们已经不止是承载能力的追求上了,由于客户分布在全球,我们后续会投入很多精力去改造系统,以支持全球多 IDC 部署和访问,这里面要做的事情还是很多。

洪小军:你一直说自己是多语言编程爱好者,用过 C/C++、Java、Erlang、Golang 等,据我所知现在 Erlang 是你们项目中主要的开发语言,你是怎么看待项目中语言选型的?从你个人角度看,什么样的语言会更符合你的口味?

梁宇鹏:语言问题真是口味问题。符合我口味的必须是 Golang,没有之一。从一开始 Golang 出来就喜欢,当然我是 Rob Pike 粉丝这事我是不会到处说的。除去语言级别并发这些令人愉悦的特性,Golang 让我喜欢的地方还在于语法设计的考究。做什么事情基本上有且只有一种好的方式,这种完美主义让人印象深刻。从工程角度上讲,它让很多事情变得简单,也因此不容易出错。

Erlang 也很好玩,也很不错,是我一直推荐的语言。作为一门典型的函数式语言,它代表了另一种世界观,这跟 C 一类的过程式语言完全不一样。你不一定要用,但值得试试,这是通往另一个世界的大门。

言归正传,我把语言看成食物,除去口味的不同,我更想说明的一点是,你不要总想着跟它过一辈子。对于跟我一样的做系统研发的人来讲,特别是应用服务,很多时候语言的区别并没有那么大。大多数你要考虑的问题,架构、集群、容错、分布式、伸缩性都远比语言更值得你去费心思。一个人不吃饭不行,但不管吃好吃坏,事情都是要做的。

回头看我有限的工作经历,基本上每次换工作都换语言。有时候是会比之前多一些努力,但其实也没什么大的困难。工作这种事情,更重要的是看挑战和发展。如果你天天工作千篇一律,都用一种语言有什么意义。如果挑战够大工作够有意思,经常换语言又如何。所以在个人角度看来,我坚定支持多语言编程,这样思路会更开阔,机会也会更多。

当然在团队层面,还是会涉及语言选型,这方面我觉得首先要看你能找到什么样的人组队。因为不是所有的人都喜欢多语言,对语言的熟悉程度也不一样。比如 Java 人就会多一些,Erlang 人就少一些,这些是客观事实。其次,看看现有项目工程是什么语言,这对创业团队很重要,因为你很少有时间从头来造一些轮子。最后,业务基本稳定之后,可以再看看新语言,慢慢玩。比如对 Golang 感兴趣,就可以找些小服务来做。这里我基本坚持一个原则,如果你要在线上服务使用新语言,一定要有两个人以上感兴趣而且会才行,主要还是为了防止业务单点。

洪小军:看你的业余生活很丰富,骑马、登山、游泳、跑步等等,但是在工作上的投入又收获满满。整体的节奏羡煞很多人,你是怎么去权衡好工作和生活关系的?

梁宇鹏:只能说自己爱玩的东西太多,忍不住啊,所以才会希望能够边玩边工作(呀,私心!)。我一直坚持一种理念,就是 Work Hard,Play Harder。工作再努力最终还是为了生活不是么?不过说起来,现在感觉还是没有平衡好,玩得太少了。:)

说起来,游泳、跑步应该算是运动。平时我们工作强度很大,需要经常加班甚至熬夜。线上服务 7x24 小时走着,出问题后压力也很大。这些对身体都有些损害的。而且我曾经一度头痛,去医院各种检查都没有用,甚至还尝试过中医(针灸、艾灸、喝各种中药……嗯,是污点)。后来开始跑步就全好了,从那之后就坚持运动了。

我们搞互联网服务或者云服务的,说天天累成狗真不为过。不多运动锻炼,身体是撑不了几年的,总不能只吃青春饭。行业里一直有个笑话,就是嫁人要嫁 IT 男,因为挣得多死得早。我每次用这个提醒自己,也用这个来鼓动同事运动。可以努力,也要生活。

这句话也再送给你,记得之前你在微博的时候,经常熬夜连轴转。以后要注意锻炼,注意休息,担子不能一个人挑呐。

感谢臧秀涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015 年 4 月 12 日 07:556776

评论

发布
暂无评论
发现更多内容

架构师训练营第一周学习总结

常江舟

极客大学架构师训练营

数据库周刊27丨6月最新国产数据库排行;OB成立新公司奥星贝斯;腾讯云发布图数据库TGDB;Oracle坏块修复;MySQL故障排查导图;经典SQL语句大全...

墨天轮

数据库

关于UML、4+1视图、系统架构的思考

吴建中

架构方法:架构师如何做架构

使用VSCode连接到IBM Cloud区块链网络

程序那些事

智能合约 hyperledger fabric ibm cloud

游戏夜读 | 如何成长为游戏人?

game1night

独立开发者为什么不需要运营也能月薪几万,甚至几十万?

非著名程序员

程序员 独立开发者 副业赚钱 程序人生 提升认知

极客大学架构师训练营 听课总结 - 架构视图,设计文档 -- 第二课

John(易筋)

极客时间 极客大学 架构设计 极客大学架构师训练营 架构文档

清华大佬马士兵告诉你阿里巴巴P5到P8级需要掌握哪些技术?

周老师

Java 程序员 架构 微服务 马士兵

架构师训练营--第1周总结感想

芥菜

玄姐公开课总结【构建基于ServiceMesh的普适业务中台架构】

魔曦

架构 Service Mesh

02-kubernetes自建CA及双向TLS认证

绿星雪碧

Kubernetes TLS CA证书

LocalDateTime和Date的比较与区别

彭阿三

时间格式化 LocalDateTime Date

架构第一课学习总结

师哥

小师妹学JavaIO之:NIO中Channel的妙用

程序那些事

io nio 小师妹 buffer channel

让独立思考成为习惯

Neco.W

学习 深度思考 思考

钟离昧的第一张架构设计图之旅

X中倪

钟离昧的一梭子架构师之旅

X中倪

【第一周】学习总结

黑莓

架构师训练营-Week1-作业2

车小勺的男神

量子技术到底有哪些突破值得重点关注?

蔡芳芳

系统/子系统/模块/组件/框架/架构

gen_jin

架构师训练营第一周学习总结

0x12FD16B

架构师训练营-Week1-作业1

车小勺的男神

SpringBoot分布式任务中间件开发 附视频讲解 (手把手教你开发和使用中间件)

小傅哥

小傅哥 中间件 springboot 分布式任务

你并不理解i++和++i

flyhero

Java 程序员 JVM i++

30岁,就被大厂抛弃了

J.Spring

求职

食堂就餐卡设计说明书

【第一周作业】食堂就餐卡系统设计

黑莓

Android 无埋点从入门到放弃:了解 Java 字节码

GrowingIO技术专栏

Intellij IDEA 右击没有run

程李文华

QCon讲师对对碰——洪小军采访梁宇鹏:就是爱Golang-InfoQ