前段时间看到国外开发者平台HackerRank发布了一份开发者技能报告,其中关于《2019年你想学的编程语言是哪个》的调查结果如下:2019ProgrammersTop3最想学习的编程语言是Go、Kotlin和Python,其中Go以37.2%排名第一。近年来,Go语言的发展确实比较迅速。从2009年底Go语言开源至今,才十年。关于Go语言为何如此火爆,引用一段“左耳鼠”对Go语言的评价:1.语言简单易学。2.并行和异步编程几乎是无痛的。3、Go语言的lib库小而全。4、C语言的概念和Python的态度。图片来源中:为什么要学围棋?其实一个技术能不能发展起来取决于三点:1.有没有更好的社区。C、C++、Java、Python、JavaScript等生态系统非常丰富,也很受欢迎,尤其是有很多商业组织参与的社区,显然很受欢迎,比如Linux社区。2.有没有行业标准?有像C、C++、Java这样的标准化组织,尤其是Java,在架构上也制定了像J2EE这样的企业级标准。3.是否有一个或多个杀手级应用?C、C++、Java的杀手级应用不用多说,就连PHP这种还算不上优秀的编程语言,因为是Linux时代第一杀手级解决方案LAMP中的关键技术,所以也相应发展起来。以上三点非常关键。新技术只需要占到其中一两个就很好了,而Java占据了这三个点,所以现在发展的这么好。除了以上三点外,还有一些其他因素:?学习曲线是否低,上手速度是否快。这一点很重要,C++在这一点上越来越差了。?是否有良好的开发框架来提高开发效率。如:Java的Spring框架,C++的STL等。?是否有一家或多家科技巨头做后盾。如:Java、Linux背后的IBM、Sun……?是否解决了软件开发的痛点?例如:Java解决了C和C++的内存管理问题。用这些尺子来衡量Go语言,我们会发现:Go语言不仅简单易用,而且解决了并发编程和底层应用开发效率的痛点;背后是世界一流的科技公司谷歌;它的杀手级应用是Docker,Docker生态在最近几年彻底爆发。其实和大家一样,我也对一个程序员是否有必要掌握多门语言感到困惑。记得Google的研究总监PeterNorvig表达了一个观点:一个优秀的程序员应该至少掌握6种编程语言。其中包括支持类抽象的那些,例如Java和C++;支持功能抽象的那些,例如Lisp或ML;支持语义抽象的,例如Lisp;支持声明性规范的那些,例如Prolog或C++模板;有一种是支持协程的,比如Icon或者Scheme,还有一种是支持并发的,比如Sisal。其实,精通一种编程语言和掌握多种编程语言并不冲突。我建议所有的开发者都精通一门或两门母语,精通主语,并能掌握一些其他的语言。正如PeterNorvig所说,最好的办法是掌握每种语言中的一种。因此,对于Java开发者来说,学习和掌握Go语言是一个非常好的选择。目前,Go语言已经被大规模使用。据我所知,Go主要用在这些系统中:1.服务器编程。非常适合用Go来做以前用C或C++做的事情,比如处理日志记录、数据打包、虚拟机处理、文件系统等等。2、分布式系统、数据库代理等,如Etcd。3、网络编程,目前使用最广泛的,包括Web应用、API应用、下载应用,Go中内置的net/http包基本实现了我们平时使用的所有网络功能。4.数据库,Google前段时间开发的Groupcache,部分Couchbase,Tidb,Cockroachdb,Influxdb等5.云平台。目前国外很多云平台都是用Go开发的,搭建了CloudFoundy的一部分,前VMare的技术总监出来搭建了Apcera云平台。
