左耳鼠标:Go语言、Docker与新技术,回顾了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:为什么要学Go?)第三,Go语言的lib库小而全。Go语言的lib库中基本上有最常用的库。虽然有些库不是很好,但我觉得不是问题,因为相信在以后的发展中这些问题都会得到解决。四、C语言的概念和Python的态度。C语言的哲学是相信程序员,保持语言紧凑,不屏蔽底层,对底层友好,注重语言的执行效率和性能。Python的态度是用尽可能少的代码完成尽可能多的事情。所以我能感觉到Go语言想要统一C和Python,这是一件很棒的事情。(图片来自Medium:WhyshouldyoulearnGo?)因此,尽管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等。是否有一家或多家科技巨头做后盾。比如:IBM、Java背后的Sun、Linux……他们解决了软件开发的痛点了吗?例如:Java解决了C和C++的内存管理问题。用这些尺度来衡量Go语言,我们可以清楚地看到:Go语言易于使用;Go语言解决并发编程痛点和底层应用开发效率;Go语言背后有全球最大的科技公司谷歌;Go语言的杀手级应用是Docker,Docker的生态在近几年呈爆发式增长。因此,Go语言的未来不可限量。当然,我个人认为Go可能会吞掉很多C、C++、Java的项目。不过被Go语言吞噬的主要项目应该是中层项目,既不是很底层也不是业务层。也就是说,Go语言不会将底层吞噬到C、C++,也不会吞噬Java业务层等高层项目。Go语言能吞的肯定是PaaS上的项目,比如一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志采集等,没有复杂的业务场景,也达不到特殊的底层(如操作系统)中间平台层的软件项或工具。C、C++会被推到最底层,Java会被推到上层业务。这是我的判断。好吧,下面我们用上面的尺度来衡量一下Go语言的杀手级应用Docker,你会发现基本是一样的。Docker入门很容易。Docker解决了运维中的环境问题和服务调度的痛点。Docker生态系统背后有大公司。像谷歌。Docker产生了行业标准OCI。Docker的社区和生态系统已经看到了与Java和Linux相同的动态。……所以,早在三四年前,我就觉得Docker绝对是未来的技术。虽然当时还有很多坑,但是比起这些大的因素,那些小坑都不是问题。只是需要一些时间,这些小洞可以在未来5-10年内完全填补。同样,我们可以看到Kubernetes作为服务和容器调度的关键技术,肯定会是绝对的赢家。我在去年年初就可以明显地感受到这一点。关于Docker我想多说几句。这是PaaS在云计算中的关键技术。虽然,在Docker出现在这个世界之前,几乎所有想玩公共PaaS的公司和产品都玩不了,比如:谷歌的GAE,国内各种XAE,比如淘宝的TAE,新浪的SAE等等。但是我还是想说PaaS是一个被世界或业界严重低估的平台。PaaS层是连接过去和未来的关键技术。任何不重视PaaS的公司,其技术架构都无法成长为大公司。因为PaaS层的技术主要可以解决以下几个问题。软件生产线的问题。持续集成和持续发布,DevOps中的技术必须经过PaaS。分布式服务的问题。分布式面向服务的服务高可用、服务编排、服务调度、服务发现、服务路由、分布式面向服务的支撑技术都是PaaS的菜。改进服务可用性SLA。提高服务可用性SLA所需的分布式、高可用的技术架构和运维工具也由PaaS层提供。重用软件功能。软件工程的核心是软件能力的复用,最能体现在PaaS平台的技术上。老实说,这些问题非常关键,以至于可以判断一家科技公司的研发能力是否可靠。没有这些技术,依靠技术拓展业务的企业几乎不可能发展到规模。后面我会写其他几篇文章,详细讲解分布式服务和PaaS平台的重要性。***,我也想说说为什么我们要早点进入这些新技术,而不是等这些技术成熟了再进入。有几个原因。技术开发过程非常重要。我现在进入Go和Docker的技术还不算太早,但也不晚。从2012年学习Go到2013年学习Docker到今天,我清楚地看到了这两种技术的生态发展过程。让我收获最大的不是这些技术本身,而是一次技术变革和行业的发展。从中,我看到了非常具体的趋势和想法,比Go和Docker更有价值。因为这不仅让我重新思考自己掌握的技术,如何更好的解决现有的问题,也让我看到了未来。我不仅拥有技术优势,而且这些知识也为我的技术职业开辟了很多可能性。这些关键的新技术可以让你在技术上占得先机。这些对于需要技术领导力的个人或公司来说非常重要。一个能够在技术上处于领先地位的公司或个人,其影响力将比其他公司或个人更大。未来的行业需求一旦被引爆,企业或个人的影响力就会形成比较大的护城河,能够快速产生经济效益。最近在和中国移动、中国电信以及一些股份制银行交流的过程中,看到通信行业和金融行业对PaaS平台的了解比互联网公司更多,我过去对这些技术的研究三年让我也从中受益良多。因此,未来Go语言和Docker作为PaaS平台的关键技术是最好的。我很庆幸赶上了这个浪潮,也很庆幸我在3年前就看到了这个趋势,现在我也在利用这些技术开发相关的技术产品,帮助提供这些关键技术来快速成长公司。
