BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

左耳朵耗子:谈谈Go语言、Docker和新技术

| 作者 陈皓 关注 24 他的粉丝 发布于 2018年1月5日. 估计阅读时间: 7 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

上个月,作为Go语言的三位创始人之一,Unix老牌黑客罗勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顾了一下Go语言的发展过程。其中提到,Go语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言。还提到了,中国程序员对Go语言的热爱完全超出了他们的想象,甚至他们都不敢相信是真的。

这让我想起,我在2015年5月份拜访Docker公司在湾区的总部时,Docker负责人也和我表达了相似的感叹:他们完全没有想到居然中国有那么多人喜欢Docker,而且还有这么多人在为Docker做贡献,这让他们感到非常意外。此外,还跟我说,中国是除了美国本土之外的另外一个如此喜欢Docker技术的国家,在其它国家都没有看到。

的确如他们所说,Go语言和Docker这两种技术已经成为新一代的云计算技术,而且可以看到其发展态势非常迅猛。而中国也成为了像美国一样在强力推动这两种技术的国家。这的确是一件让人感到非常高兴的事,因为中国在跟随时代潮流这件事上已经做得非常不错了。

然而,从2014-2015年我在阿里推动Docker和Go语言的痛苦和失败过程中,以及这许多年来,有很多很多人问我是否要学Go语言,是否要学Docker,Go和Docker是否能用在生产线上,这些问题看来,对于Go语言和Docker这两种技术,在国内的技术圈中有相当大的一部分人和群体还在执观望或是不信任的态度。

所以,我想写这篇文章,从两个方面来论述一下我的观点和看法。

  • 一个方面,为什么Go语言和Docker会是新一代的云计算技术。

  • 另一个方面,作为技术人员,我们如何识别什么样的新技术会是未来的趋势。

这两个问题是相辅相成的,所以我会把这两个问题揉在一起谈。

虽然Go语言是在2009年底开源的,但我是从2012年才开始接触和学习Go语言的。我只花了一个周末两天的时间就学完了,而且在这两天,我还很快地写出了一个能工作很好的网页爬虫程序,以及一个简单的高并发文件处理服务,用于提取前面抓取的网页的关键内容。这两个程序都很简单,总共才写了不到500行代码。

我当时对Go语言有几点体会。

第一,语言简单,上手快。Go语言的语法特性简直是太简单了,简单到你几乎玩不出什么花招,直来直去的,学习曲线很低,上手非常快。

第二,并行和异步编程几乎无痛点。Go语言的Goroutine和Channel这两个神器简直就是并发和异步编程的巨大福音。像C、C++、Java、Python和JavaScript这些语言的并发和异步方式太控制就比较复杂了,而且容易出错,而Go解决这个问题非常地优雅和流畅。这对于编程多年受尽并发和异步折磨的我来说,完全就是让我眼前一亮的感觉。


(图片来自Medium:Why should you learn Go?)

第三,Go语言的lib库麻雀虽小五脏俱全。Go语言的lib库中基本上有绝大多数常用的库,虽然有些库还不是很好,但我觉得不是问题,因为我相信在未来的发展中会把这些问题解决掉。

第四,C语言的理念和Python的姿态。C语言的理念是信任程序员,保持语言的小巧,不屏蔽底层且底层友好,关注语言的执行效率和性能。而Python的姿态是用尽量少的代码完成尽量多的事。于是我能够感觉到,Go语言想要把C和Python统一起来,这是多棒的一件事啊。


(图片来自Medium:Why should you learn Go?)

所以,即便Go语言存在诸多的问题,比如垃圾回收、异常处理、泛型编程等,但相较于上面这几个优势,我认为这些问题都是些小问题。于是就毫不犹豫地入坑了。

当然,一个技术能不能发展起来,关键还要看三点。

  • 有没有一个比较好的社区。像C、C++、Java、Python和JavaScript的生态圈都是非常丰富和火爆的。尤其是有很多商业机构参与的社区那就更为人气爆棚了,比如Linux的社区。

  • 有没有一个工业化的标准。像C、C++、Java都是有标准化组织的。尤其是Java,其在架构上还搞出了像J2EE这样的企业级标准。

  • 有没有一个或多个杀手级应用。C、C++和Java的杀手级应用不用多说了,就算是对于PHP这样还不能算是一个好的编程语言来说,因为是Linux时代的第一个杀手级解决方案LAMP中的关键技术,所以,也发展起来了。

上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如Java,是三点全占到了,所以,Java的发展是如此好。当然,除了上面这三点重要的,还有一些其它的影响因素,比如:

  • 学习曲线是否低,上手是否快。这点非常重要,C++在这点上越做越不好了。
  • 有没有一个不错的提高开发效率的开发框架。如:Java的Spring框架,C++的STL等。
  • 是否有一个或多个巨型的技术公司作为后盾。如:Java和Linux后面的IBM、Sun……
  • 有没有解决软件开发中的痛点。如:Java解决了C和C++的内存管理问题。

用这些标尺来量一下Go语言,我们可以清楚地看到:

  • Go语言容易上手;
  • Go语言解决了并发编程和写底层应用开发效率的痛点;
  • Go语言有Google这个世界一流的技术公司在后面;
  • Go语言的杀手级应用是Docker,而Docker的生态圈在这几年完全爆棚了。

所以,Go语言的未来是不可限量的。当然,我个人觉得,Go可能会吞食很多C、C++、Java的项目。不过,Go语言所吞食主要的项目应该是中间层的项目,既不是非常底层也不会是业务层。

也就是说,Go语言不会吞食底层到C和C++那个级别的,也不会吞食到高层如Java业务层的项目。Go语言能吞食的一定是PaaS上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,没有复杂的业务场景,也到不了特别底层(如操作系统)的中间平台层的软件项目或工具。而C和C++会被打到更底层,Java会被打到更上层的业务层。这是我的一个判断。

好了,我们再用上面的标尺来量一下Go语言的杀手级应用Docker,你会发现基本是一样的。

注:以上仅为文章的一部分,欲阅读全文,还请点击链接下载InfoQ极客时间手机客户端。打开『左耳听风』专栏的试读文章模块,继续阅读。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

coolshell 好久没更新了啊 by Max Max

coolshell 好久没更新了啊

Re: coolshell 好久没更新了啊 by Guo Gary

关注极客时间的专栏吧。

基本认同。 by 孙 奇辉

多数认同。不认同的是:Java 8/9并发库相当不错了,至少跟C#同层次。Clojure我觉得由于immutalbe与STM,core.async等,至少与GO同层次。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT